added /measurement/sample/{id} route
This commit is contained in:
		@@ -404,6 +404,60 @@ describe('/measurement', () => {
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  describe('GET /measurement/sample/{id}', () => {
 | 
			
		||||
    it('returns the right measurements', done => {
 | 
			
		||||
      TestHelper.request(server, done, {
 | 
			
		||||
        method: 'get',
 | 
			
		||||
        url: '/measurement/sample/400000000000000000000003',
 | 
			
		||||
        auth: {basic: 'admin'},
 | 
			
		||||
        httpStatus: 200,
 | 
			
		||||
        res: [
 | 
			
		||||
          {_id: '800000000000000000000003', sample_id: '400000000000000000000003', values: {val1: 1}, measurement_template: '300000000000000000000003', status: 'new'},
 | 
			
		||||
          {_id: '800000000000000000000004', sample_id: '400000000000000000000003', values: {val1: 1}, measurement_template: '300000000000000000000003', status: 'deleted'}
 | 
			
		||||
        ]
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
    it('rejects an API key', done => {
 | 
			
		||||
      TestHelper.request(server, done, {
 | 
			
		||||
        method: 'get',
 | 
			
		||||
        url: '/measurement/sample/400000000000000000000003',
 | 
			
		||||
        auth: {key: 'admin'},
 | 
			
		||||
        httpStatus: 401
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
    it('rejects a write user', done => {
 | 
			
		||||
      TestHelper.request(server, done, {
 | 
			
		||||
        method: 'get',
 | 
			
		||||
        url: '/measurement/sample/400000000000000000000003',
 | 
			
		||||
        auth: {basic: 'janedoe'},
 | 
			
		||||
        httpStatus: 403
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
    it('rejects an invalid id', done => {
 | 
			
		||||
      TestHelper.request(server, done, {
 | 
			
		||||
        method: 'get',
 | 
			
		||||
        url: '/measurement/sample/4000000000h0000000000003',
 | 
			
		||||
        auth: {basic: 'admin'},
 | 
			
		||||
        httpStatus: 404
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
    it('rejects an unknown id', done => {
 | 
			
		||||
      TestHelper.request(server, done, {
 | 
			
		||||
        method: 'get',
 | 
			
		||||
        url: '/measurement/sample/000000000000000000000003',
 | 
			
		||||
        auth: {basic: 'admin'},
 | 
			
		||||
        httpStatus: 404
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
    it('rejects unauthorized requests', done => {
 | 
			
		||||
      TestHelper.request(server, done, {
 | 
			
		||||
        method: 'get',
 | 
			
		||||
        url: '/measurement/sample/400000000000000000000003',
 | 
			
		||||
        httpStatus: 401
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  describe('PUT /measurement/restore/{id}', () => {
 | 
			
		||||
    it('sets the status', done => {
 | 
			
		||||
      TestHelper.request(server, done, {
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@ import res400 from './validate/res400';
 | 
			
		||||
import ParametersValidate from './validate/parameters';
 | 
			
		||||
import db from '../db';
 | 
			
		||||
import globals from '../globals';
 | 
			
		||||
import mongoose from "mongoose";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const router = express.Router();
 | 
			
		||||
@@ -82,6 +83,19 @@ router.delete('/measurement/' + IdValidate.parameter(), (req, res, next) => {
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
router.get('/measurement/sample/' + IdValidate.parameter(), (req, res, next) => {
 | 
			
		||||
  if (!req.auth(res, ['dev', 'admin'], 'basic')) return;
 | 
			
		||||
 | 
			
		||||
  MeasurementModel.find({sample_id: mongoose.Types.ObjectId(req.params.id)}).lean().exec((err, data: any) => {
 | 
			
		||||
    if (err) return next(err);
 | 
			
		||||
    if (!data.length) {
 | 
			
		||||
      return res.status(404).json({status: 'Not found'});
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    res.json(_.compact(data.map(e => MeasurementValidate.output(e, req, true))));
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
router.put('/measurement/restore/' + IdValidate.parameter(), (req, res, next) => {
 | 
			
		||||
  if (!req.auth(res, ['dev', 'admin'], 'basic')) return;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -35,18 +35,23 @@ export default class MeasurementValidate {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static output (data, req) {  // validate output and strip unwanted properties, returns null if not valid
 | 
			
		||||
  // validate output and strip unwanted properties, returns null if not valid
 | 
			
		||||
  static output (data, req, status = false) {
 | 
			
		||||
    data = IdValidate.stringify(data);
 | 
			
		||||
    // spectral data not allowed for read/write users
 | 
			
		||||
    if (['dev', 'admin'].indexOf(req.authDetails.level) < 0 && data.values[globals.spectrum.dpt]) {
 | 
			
		||||
      delete data.values[globals.spectrum.dpt];
 | 
			
		||||
    }
 | 
			
		||||
    const {value, error} = Joi.object({
 | 
			
		||||
    const validation: any = {
 | 
			
		||||
      _id: IdValidate.get(),
 | 
			
		||||
      sample_id: IdValidate.get(),
 | 
			
		||||
      values: this.measurement.values,
 | 
			
		||||
      measurement_template: IdValidate.get()
 | 
			
		||||
    }).validate(data, {stripUnknown: true});
 | 
			
		||||
    };
 | 
			
		||||
    if (status) {
 | 
			
		||||
      validation.status = Joi.string().valid(...Object.values(globals.status));
 | 
			
		||||
    }
 | 
			
		||||
    const {value, error} = Joi.object(validation).validate(data, {stripUnknown: true});
 | 
			
		||||
    return error !== undefined? null : value;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user