Merge pull request #38 in ~VLE2FE/definma-api from develop to master
* commit 'efbf73032de6b1ad9993304a97ec2b18538a1e73': unwind fix no. 2
This commit is contained in:
		@@ -257,7 +257,7 @@ describe('/sample', () => {
 | 
				
			|||||||
    it('unwinds only once when filtering for spectrum measurements and including the dpt field', done => {
 | 
					    it('unwinds only once when filtering for spectrum measurements and including the dpt field', done => {
 | 
				
			||||||
      TestHelper.request(server, done, {
 | 
					      TestHelper.request(server, done, {
 | 
				
			||||||
        method: 'get',
 | 
					        method: 'get',
 | 
				
			||||||
        url: '/samples?status[]=new&status[]=validated&fields[]=number&fields[]=measurements.spectrum.device&fields=measurements.spectrum.dpt&filters[]=%7B%22mode%22%3A%22eq%22%2C%22field%22%3A%22measurements.spectrum.device%22%2C%22values%22%3A%5B%22Alpha%20II%22%5D%7D',
 | 
					        url: '/samples?status[]=new&status[]=validated&fields[]=number&fields[]=measurements.spectrum.device&fields[]=measurements.spectrum.filename&fields=measurements.spectrum.dpt&filters[]=%7B%22mode%22%3A%22eq%22%2C%22field%22%3A%22measurements.spectrum.device%22%2C%22values%22%3A%5B%22Alpha%20II%22%5D%7D',
 | 
				
			||||||
        auth: {basic: 'admin'},
 | 
					        auth: {basic: 'admin'},
 | 
				
			||||||
        httpStatus: 200
 | 
					        httpStatus: 200
 | 
				
			||||||
      }).end((err, res) => {
 | 
					      }).end((err, res) => {
 | 
				
			||||||
@@ -266,7 +266,7 @@ describe('/sample', () => {
 | 
				
			|||||||
        should(res.body).have.lengthOf(json.collections.measurements.filter(e => e.values.device === 'Alpha II' && e.status !== 'deleted').length);
 | 
					        should(res.body).have.lengthOf(json.collections.measurements.filter(e => e.values.device === 'Alpha II' && e.status !== 'deleted').length);
 | 
				
			||||||
        should(res.body).matchEach(sample => {
 | 
					        should(res.body).matchEach(sample => {
 | 
				
			||||||
          should(sample).have.only.keys('number', 'spectrum');
 | 
					          should(sample).have.only.keys('number', 'spectrum');
 | 
				
			||||||
          should(sample.spectrum).have.only.keys('device', 'dpt');
 | 
					          should(sample.spectrum).have.only.keys('device', 'dpt', 'filename');
 | 
				
			||||||
          should(sample.spectrum).have.property('device', 'Alpha II');
 | 
					          should(sample.spectrum).have.property('device', 'Alpha II');
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
        done();
 | 
					        done();
 | 
				
			||||||
@@ -800,7 +800,7 @@ describe('/sample', () => {
 | 
				
			|||||||
        url: '/sample/400000000000000000000001',
 | 
					        url: '/sample/400000000000000000000001',
 | 
				
			||||||
        auth: {basic: 'janedoe'},
 | 
					        auth: {basic: 'janedoe'},
 | 
				
			||||||
        httpStatus: 200,
 | 
					        httpStatus: 200,
 | 
				
			||||||
        res: {_id: '400000000000000000000001', number: '1', type: 'as-delivered/raw', color: 'black', batch: '', condition: {material: 'copper', weeks: 3, condition_template: '200000000000000000000001'}, material: {numbers: ['5513933405'], _id: '100000000000000000000004', name: 'Schulamid 66 GF 25 H', properties: {material_template: '130000000000000000000003', mineral: 0, glass_fiber: 25, carbon_fiber: 0}, group: 'PA66', supplier: 'Schulmann'}, user: 'janedoe', notes: {}, measurements: [{_id: '800000000000000000000001', sample_id: '400000000000000000000001', values: {device: 'Alpha I'}, measurement_template: '300000000000000000000001'}, {_id: '800000000000000000000007', sample_id: '400000000000000000000001', values: {device: 'Alpha II'}, measurement_template: '300000000000000000000001'}, {_id: '800000000000000000000009', sample_id: '400000000000000000000001', values: {device: 'Alpha II'}, measurement_template: '300000000000000000000001'}], status: 'validated'}
 | 
					        res: {_id: '400000000000000000000001', number: '1', type: 'as-delivered/raw', color: 'black', batch: '', condition: {material: 'copper', weeks: 3, condition_template: '200000000000000000000001'}, material: {numbers: ['5513933405'], _id: '100000000000000000000004', name: 'Schulamid 66 GF 25 H', properties: {material_template: '130000000000000000000003', mineral: 0, glass_fiber: 25, carbon_fiber: 0}, group: 'PA66', supplier: 'Schulmann'}, user: 'janedoe', notes: {}, measurements: [{_id: '800000000000000000000001', sample_id: '400000000000000000000001', values: {device: 'Alpha I', filename: '1_0.DPT'}, measurement_template: '300000000000000000000001'}, {_id: '800000000000000000000007', sample_id: '400000000000000000000001', values: {device: 'Alpha II', filename: '1_1.DPT'}, measurement_template: '300000000000000000000001'}, {_id: '800000000000000000000009', sample_id: '400000000000000000000001', values: {device: 'Alpha II', filename: '1_2.DPT'}, measurement_template: '300000000000000000000001'}], status: 'validated'}
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    it ('returns spectral data for an admin user', done => {
 | 
					    it ('returns spectral data for an admin user', done => {
 | 
				
			||||||
@@ -809,7 +809,7 @@ describe('/sample', () => {
 | 
				
			|||||||
        url: '/sample/400000000000000000000001',
 | 
					        url: '/sample/400000000000000000000001',
 | 
				
			||||||
        auth: {basic: 'admin'},
 | 
					        auth: {basic: 'admin'},
 | 
				
			||||||
        httpStatus: 200,
 | 
					        httpStatus: 200,
 | 
				
			||||||
        res: {_id: '400000000000000000000001', number: '1', type: 'as-delivered/raw', color: 'black', batch: '', condition: {material: 'copper', weeks: 3, condition_template: '200000000000000000000001'}, material: {numbers: ['5513933405'], _id: '100000000000000000000004', name: 'Schulamid 66 GF 25 H', properties: {material_template: '130000000000000000000003', mineral: 0, glass_fiber: 25, carbon_fiber: 0}, group: 'PA66', supplier: 'Schulmann'}, user: 'janedoe', notes: {}, measurements: [{_id: '800000000000000000000001', sample_id: '400000000000000000000001', values: {dpt: [[ 3997.12558, 98.00555 ], [ 3995.08519, 98.03253 ], [ 3993.0448, 98.02657 ]],device: 'Alpha I'}, measurement_template: '300000000000000000000001'}, {_id: '800000000000000000000007', sample_id: '400000000000000000000001', values: {dpt: [[ 3996.12558, 98.00555 ], [ 3995.08519, 98.03253 ], [ 3993.0448, 98.02657 ]], device: 'Alpha II'}, measurement_template: '300000000000000000000001'}, {_id: '800000000000000000000009', sample_id: '400000000000000000000001', values: {dpt: [[ 3996.12558, 98.00555 ], [ 3995.08519, 98.03253 ], [ 3993.0448, 98.02657 ]], device: 'Alpha II'}, measurement_template: '300000000000000000000001'}], status: 'validated'}
 | 
					        res: {_id: '400000000000000000000001', number: '1', type: 'as-delivered/raw', color: 'black', batch: '', condition: {material: 'copper', weeks: 3, condition_template: '200000000000000000000001'}, material: {numbers: ['5513933405'], _id: '100000000000000000000004', name: 'Schulamid 66 GF 25 H', properties: {material_template: '130000000000000000000003', mineral: 0, glass_fiber: 25, carbon_fiber: 0}, group: 'PA66', supplier: 'Schulmann'}, user: 'janedoe', notes: {}, measurements: [{_id: '800000000000000000000001', sample_id: '400000000000000000000001', values: {dpt: [[ 3997.12558, 98.00555 ], [ 3995.08519, 98.03253 ], [ 3993.0448, 98.02657 ]],device: 'Alpha I', filename: '1_0.DPT'}, measurement_template: '300000000000000000000001'}, {_id: '800000000000000000000007', sample_id: '400000000000000000000001', values: {dpt: [[ 3996.12558, 98.00555 ], [ 3995.08519, 98.03253 ], [ 3993.0448, 98.02657 ]], device: 'Alpha II', filename: '1_1.DPT'}, measurement_template: '300000000000000000000001'}, {_id: '800000000000000000000009', sample_id: '400000000000000000000001', values: {dpt: [[ 3996.12558, 98.00555 ], [ 3995.08519, 98.03253 ], [ 3993.0448, 98.02657 ]], device: 'Alpha II', filename: '1_2.DPT'}, measurement_template: '300000000000000000000001'}], status: 'validated'}
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    it('returns a deleted sample for a dev/admin user', done => {
 | 
					    it('returns a deleted sample for a dev/admin user', done => {
 | 
				
			||||||
@@ -1540,7 +1540,7 @@ describe('/sample', () => {
 | 
				
			|||||||
        url: '/sample/number/1',
 | 
					        url: '/sample/number/1',
 | 
				
			||||||
        auth: {basic: 'janedoe'},
 | 
					        auth: {basic: 'janedoe'},
 | 
				
			||||||
        httpStatus: 200,
 | 
					        httpStatus: 200,
 | 
				
			||||||
        res: {_id: '400000000000000000000001', number: '1', type: 'as-delivered/raw', color: 'black', batch: '', condition: {material: 'copper', weeks: 3, condition_template: '200000000000000000000001'}, material: {numbers: ['5513933405'], _id: '100000000000000000000004', name: 'Schulamid 66 GF 25 H', properties: {material_template: '130000000000000000000003', mineral: 0, glass_fiber: 25, carbon_fiber: 0}, group: 'PA66', supplier: 'Schulmann'}, user: 'janedoe', notes: {}, measurements: [{_id: '800000000000000000000001', sample_id: '400000000000000000000001', values: {device: 'Alpha I'}, measurement_template: '300000000000000000000001'}, {_id: '800000000000000000000007', sample_id: '400000000000000000000001', values: {device: 'Alpha II'}, measurement_template: '300000000000000000000001'}, {_id: '800000000000000000000009', sample_id: '400000000000000000000001', values: {device: 'Alpha II'}, measurement_template: '300000000000000000000001'}], status: 'validated'}
 | 
					        res: {_id: '400000000000000000000001', number: '1', type: 'as-delivered/raw', color: 'black', batch: '', condition: {material: 'copper', weeks: 3, condition_template: '200000000000000000000001'}, material: {numbers: ['5513933405'], _id: '100000000000000000000004', name: 'Schulamid 66 GF 25 H', properties: {material_template: '130000000000000000000003', mineral: 0, glass_fiber: 25, carbon_fiber: 0}, group: 'PA66', supplier: 'Schulmann'}, user: 'janedoe', notes: {}, measurements: [{_id: '800000000000000000000001', sample_id: '400000000000000000000001', values: {device: 'Alpha I', filename: '1_0.DPT'}, measurement_template: '300000000000000000000001'}, {_id: '800000000000000000000007', sample_id: '400000000000000000000001', values: {device: 'Alpha II', filename: '1_1.DPT'}, measurement_template: '300000000000000000000001'}, {_id: '800000000000000000000009', sample_id: '400000000000000000000001', values: {device: 'Alpha II', filename: '1_2.DPT'}, measurement_template: '300000000000000000000001'}], status: 'validated'}
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    it ('returns spectral data for an admin user', done => {
 | 
					    it ('returns spectral data for an admin user', done => {
 | 
				
			||||||
@@ -1549,7 +1549,7 @@ describe('/sample', () => {
 | 
				
			|||||||
        url: '/sample/number/1',
 | 
					        url: '/sample/number/1',
 | 
				
			||||||
        auth: {basic: 'admin'},
 | 
					        auth: {basic: 'admin'},
 | 
				
			||||||
        httpStatus: 200,
 | 
					        httpStatus: 200,
 | 
				
			||||||
        res: {_id: '400000000000000000000001', number: '1', type: 'as-delivered/raw', color: 'black', batch: '', condition: {material: 'copper', weeks: 3, condition_template: '200000000000000000000001'}, material: {numbers: ['5513933405'], _id: '100000000000000000000004', name: 'Schulamid 66 GF 25 H', properties: {material_template: '130000000000000000000003', mineral: 0, glass_fiber: 25, carbon_fiber: 0}, group: 'PA66', supplier: 'Schulmann'}, user: 'janedoe', notes: {}, measurements: [{_id: '800000000000000000000001', sample_id: '400000000000000000000001', values: {dpt: [[ 3997.12558, 98.00555 ], [ 3995.08519, 98.03253 ], [ 3993.0448, 98.02657 ]],device: 'Alpha I'}, measurement_template: '300000000000000000000001'}, {_id: '800000000000000000000007', sample_id: '400000000000000000000001', values: {dpt: [[ 3996.12558, 98.00555 ], [ 3995.08519, 98.03253 ], [ 3993.0448, 98.02657 ]], device: 'Alpha II'}, measurement_template: '300000000000000000000001'}, {_id: '800000000000000000000009', sample_id: '400000000000000000000001', values: {dpt: [[ 3996.12558, 98.00555 ], [ 3995.08519, 98.03253 ], [ 3993.0448, 98.02657 ]], device: 'Alpha II'}, measurement_template: '300000000000000000000001'}], status: 'validated'}
 | 
					        res: {_id: '400000000000000000000001', number: '1', type: 'as-delivered/raw', color: 'black', batch: '', condition: {material: 'copper', weeks: 3, condition_template: '200000000000000000000001'}, material: {numbers: ['5513933405'], _id: '100000000000000000000004', name: 'Schulamid 66 GF 25 H', properties: {material_template: '130000000000000000000003', mineral: 0, glass_fiber: 25, carbon_fiber: 0}, group: 'PA66', supplier: 'Schulmann'}, user: 'janedoe', notes: {}, measurements: [{_id: '800000000000000000000001', sample_id: '400000000000000000000001', values: {dpt: [[ 3997.12558, 98.00555 ], [ 3995.08519, 98.03253 ], [ 3993.0448, 98.02657 ]],device: 'Alpha I', filename: '1_0.DPT'}, measurement_template: '300000000000000000000001'}, {_id: '800000000000000000000007', sample_id: '400000000000000000000001', values: {dpt: [[ 3996.12558, 98.00555 ], [ 3995.08519, 98.03253 ], [ 3993.0448, 98.02657 ]], device: 'Alpha II', filename: '1_1.DPT'}, measurement_template: '300000000000000000000001'}, {_id: '800000000000000000000009', sample_id: '400000000000000000000001', values: {dpt: [[ 3996.12558, 98.00555 ], [ 3995.08519, 98.03253 ], [ 3993.0448, 98.02657 ]], device: 'Alpha II', filename: '1_2.DPT'}, measurement_template: '300000000000000000000001'}], status: 'validated'}
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    it('returns 403 for a write user when requesting a deleted sample', done => {
 | 
					    it('returns 403 for a write user when requesting a deleted sample', done => {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -329,7 +329,7 @@ router.get('/samples', async (req, res, next) => {
 | 
				
			|||||||
      return res.status(400).json({status: 'Invalid body format', details: 'Measurement key not found'});
 | 
					      return res.status(400).json({status: 'Invalid body format', details: 'Measurement key not found'});
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // use different lookup methods with and without dpt for the best performance
 | 
					    // use different lookup methods with and without dpt for the best performance
 | 
				
			||||||
    if (fieldsToAdd.find(e => e.indexOf(globals.spectrum.spectrum + '.' + globals.spectrum.dpt) >= 0)) {  // with dpt
 | 
					    if (fieldsToAdd.find(e => new RegExp('measurements\\.' + globals.spectrum.spectrum).test(e))) {  // with dpt
 | 
				
			||||||
      // spectrum was already used for filters
 | 
					      // spectrum was already used for filters
 | 
				
			||||||
      if (sortFilterKeys.find(e => new RegExp('measurements\\.' + globals.spectrum.spectrum).test(e))) {
 | 
					      if (sortFilterKeys.find(e => new RegExp('measurements\\.' + globals.spectrum.spectrum).test(e))) {
 | 
				
			||||||
        queryPtr.push(
 | 
					        queryPtr.push(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -404,7 +404,8 @@
 | 
				
			|||||||
            [3995.08519,98.03253],
 | 
					            [3995.08519,98.03253],
 | 
				
			||||||
            [3993.04480,98.02657]
 | 
					            [3993.04480,98.02657]
 | 
				
			||||||
          ],
 | 
					          ],
 | 
				
			||||||
          "device": "Alpha I"
 | 
					          "device": "Alpha I",
 | 
				
			||||||
 | 
					          "filename": "1_0.DPT"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "status": "validated",
 | 
					        "status": "validated",
 | 
				
			||||||
        "measurement_template": {"$oid":"300000000000000000000001"},
 | 
					        "measurement_template": {"$oid":"300000000000000000000001"},
 | 
				
			||||||
@@ -472,7 +473,8 @@
 | 
				
			|||||||
            [3995.08519,98.03253],
 | 
					            [3995.08519,98.03253],
 | 
				
			||||||
            [3993.04480,98.02657]
 | 
					            [3993.04480,98.02657]
 | 
				
			||||||
          ],
 | 
					          ],
 | 
				
			||||||
          "device": "Alpha II"
 | 
					          "device": "Alpha II",
 | 
				
			||||||
 | 
					          "filename": "1_1.DPT"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "status": "validated",
 | 
					        "status": "validated",
 | 
				
			||||||
        "measurement_template": {"$oid":"300000000000000000000001"},
 | 
					        "measurement_template": {"$oid":"300000000000000000000001"},
 | 
				
			||||||
@@ -487,7 +489,8 @@
 | 
				
			|||||||
            [3995.08519,98.03253],
 | 
					            [3995.08519,98.03253],
 | 
				
			||||||
            [3993.04480,98.02657]
 | 
					            [3993.04480,98.02657]
 | 
				
			||||||
          ],
 | 
					          ],
 | 
				
			||||||
          "device": "Alpha II"
 | 
					          "device": "Alpha II",
 | 
				
			||||||
 | 
					          "filename": "5_0.DPT"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "status": "deleted",
 | 
					        "status": "deleted",
 | 
				
			||||||
        "measurement_template": {"$oid":"300000000000000000000001"},
 | 
					        "measurement_template": {"$oid":"300000000000000000000001"},
 | 
				
			||||||
@@ -502,7 +505,8 @@
 | 
				
			|||||||
            [3995.08519,98.03253],
 | 
					            [3995.08519,98.03253],
 | 
				
			||||||
            [3993.04480,98.02657]
 | 
					            [3993.04480,98.02657]
 | 
				
			||||||
          ],
 | 
					          ],
 | 
				
			||||||
          "device": "Alpha II"
 | 
					          "device": "Alpha II",
 | 
				
			||||||
 | 
					          "filename": "1_2.DPT"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "status": "validated",
 | 
					        "status": "validated",
 | 
				
			||||||
        "measurement_template": {"$oid":"300000000000000000000001"},
 | 
					        "measurement_template": {"$oid":"300000000000000000000001"},
 | 
				
			||||||
@@ -590,6 +594,10 @@
 | 
				
			|||||||
          {
 | 
					          {
 | 
				
			||||||
            "name": "device",
 | 
					            "name": "device",
 | 
				
			||||||
            "range": {}
 | 
					            "range": {}
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "name": "filename",
 | 
				
			||||||
 | 
					            "range": {}
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        ],
 | 
					        ],
 | 
				
			||||||
        "__v": 0
 | 
					        "__v": 0
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user