UNPKG

@arisan/data-api

Version:

The Universal Database API Gateway for CLIO's Modules

164 lines (144 loc) 6.38 kB
'use strict'; var _chai = require('chai'); var _powMongodbFixtures = require('pow-mongodb-fixtures'); var _mongodbUri = require('mongodb-uri'); var _mongodbUri2 = _interopRequireDefault(_mongodbUri); var _DataAPI = require('../DataAPI'); var _DataAPI2 = _interopRequireDefault(_DataAPI); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const request = require('supertest'); //endregion //region 2. Project Libraries /* eslint-disable import/newline-after-import, import/first */ //region 1. Platform Libraries //endregion describe('Route .../event-info', () => { const mongo = _mongodbUri2.default.parse(process.env.CLIO_MONGO_URL); const fixtures = (0, _powMongodbFixtures.connect)(mongo.database, { host: mongo.hosts[0].host, port: mongo.hosts[0].port, user: mongo.username, pass: mongo.password }); const dataAPI = new _DataAPI2.default(); const camera = { _id: (0, _powMongodbFixtures.createObjectId)('123456789a123456789b1231'), public_address: '123.123.123.123', web_port: 80, username: 'onvif', password: 'onvif', trigger_cooldown_duration: 180, prealarm_duration: 10, event_video_duration: 20, active_stream_index: 1, streams: [{}, { rtsp_url: 'rtsp://url', frame_rate_limit: 15, gov_length: 15 }] }; const cameraWithoutRTSP = { _id: (0, _powMongodbFixtures.createObjectId)('123456789a123456789b1232'), public_address: '123.123.123.124', web_port: 80, username: 'onvif', password: 'onvif', trigger_cooldown_duration: 180, prealarm_duration: 10, event_video_duration: 20, active_stream_index: 1, streams: [{}, { frame_rate_limit: 15, gov_length: 15 }] }; const cameraWithoutHost = { _id: (0, _powMongodbFixtures.createObjectId)('123456789a123456789b1233'), username: 'onvif', password: 'onvif', trigger_cooldown_duration: 180, prealarm_duration: 10, event_video_duration: 20, active_stream_index: 1, streams: [{}, { rtsp_url: 'rtsp://url', frame_rate_limit: 15, gov_length: 15 }] }; const cameraWithoutUser = { _id: (0, _powMongodbFixtures.createObjectId)('123456789a123456789b1234'), public_address: '123.123.123.123', web_port: 80, trigger_cooldown_duration: 180, prealarm_duration: 10, event_video_duration: 20, active_stream_index: 1, streams: [{}, { rtsp_url: 'rtsp://url', frame_rate_limit: 15, gov_length: 15 }] }; const invalidId = '123456789a123456789b1235'; const invalidIndex = 2; before(function before(done) { this.timeout(5000); fixtures.clearAndLoad({ cameras: [camera, cameraWithoutRTSP, cameraWithoutHost, cameraWithoutUser] }, err => { if (err) { throw new Error(err.message); } dataAPI.initialize({ environment: 'unit-test', heartbeatInterval: 10, logLevel: 'DEBUG', mongoUrl: process.env.CLIO_MONGO_URL, port: 15925 }); dataAPI.start(done); }); }); it('GET existing stream should succeed', done => { const host = camera.public_address; const port = camera.web_port; const expectedResult = { rtspUrl: camera.streams[camera.active_stream_index].rtsp_url, httpUrl: `http://${camera.username}:${camera.password}@${host}:${port}`, idleTime: camera.trigger_cooldown_duration * 1000, preAlarmSec: camera.prealarm_duration, videoDurationSec: camera.event_video_duration, frameRateRef: camera.streams[camera.active_stream_index].frame_rate_limit, gopSizeRef: camera.streams[camera.active_stream_index].gov_length }; request(dataAPI.expressApp).get(`/cameras/${camera._id}/streams/${camera.active_stream_index}/event-info`).expect(200).expect(res => _chai.assert.deepEqual(expectedResult, res.body)).end( /** @type function */done); }); it('GET no user camera should succeed', done => { const activeIndex = cameraWithoutUser.active_stream_index; const expectedResult = { rtspUrl: cameraWithoutUser.streams[cameraWithoutUser.active_stream_index].rtsp_url, httpUrl: `http://${cameraWithoutUser.public_address}:${cameraWithoutUser.web_port}`, idleTime: cameraWithoutUser.trigger_cooldown_duration * 1000, preAlarmSec: cameraWithoutUser.prealarm_duration, videoDurationSec: cameraWithoutUser.event_video_duration, frameRateRef: cameraWithoutUser.streams[activeIndex].frame_rate_limit, gopSizeRef: cameraWithoutUser.streams[activeIndex].gov_length }; request(dataAPI.expressApp).get(`/cameras/${cameraWithoutUser._id.toHexString()}/streams/${activeIndex}/event-info`).expect(200).expect(res => _chai.assert.deepEqual(expectedResult, res.body)).end( /** @type function */done); }); it('GET nonexistent camera should fail', done => { request(dataAPI.expressApp).get(`/cameras/${invalidId}/streams/0/event-info`).expect(500).end( /** @type function */done); }); it('GET nonexistent stream should fail', done => { request(dataAPI.expressApp).get(`/cameras/${camera._id.toHexString()}/streams/${invalidIndex}/event-info`).expect(500).end( /** @type function */done); }); it('GET should fail if no RTSP URL', done => { request(dataAPI.expressApp).get(`/cameras/${cameraWithoutRTSP._id.toHexString()}/streams/${cameraWithoutRTSP.active_stream_index}/event-info`).expect(500).end( /** @type function */done); }); it('GET should fail if no host', done => { request(dataAPI.expressApp).get(`/cameras/${cameraWithoutHost._id.toHexString()}/streams/${cameraWithoutHost.active_stream_index}/event-info`).expect(500).end( /** @type function */done); }); after(done => dataAPI.stop(done)); }); //# sourceMappingURL=mountEventInfo.spec.js.map