aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/clients/refresh.js6
-rw-r--r--package.json10
-rw-r--r--tests/active911.js145
-rw-r--r--tests/replies/alert.json45
-rw-r--r--tests/replies/alerts.json15
-rw-r--r--tests/replies/location.json22
-rw-r--r--tests/replies/locations.json11
-rw-r--r--tests/replies/resource.json22
8 files changed, 247 insertions, 29 deletions
diff --git a/lib/clients/refresh.js b/lib/clients/refresh.js
index b4a3930..7b9fde7 100644
--- a/lib/clients/refresh.js
+++ b/lib/clients/refresh.js
@@ -1,4 +1,6 @@
var request = require('request');
+var Timestamp = require('unix-timestamp');
+Timestamp.round = true;
var RefreshClient = function(refreshString) {
if (typeof refreshString !== 'string') {
@@ -6,7 +8,7 @@ var RefreshClient = function(refreshString) {
}
this._refreshToken = refreshString;
this._accessToken = '';
- this._accessTokenExpiration = Math.floor( new Date()/1000 );
+ this._accessTokenExpiration = Timestamp.now(-1);
};
RefreshClient.prototype._doRequest = function(url) {
@@ -47,7 +49,7 @@ RefreshClient.prototype._doRequest = function(url) {
RefreshClient.prototype._getAccessToken = function() {
var self = this;
return new Promise(function(fulfill, reject) {
- var currentTime = Math.floor( new Date()/1000 );
+ var currentTime = Timestamp.now();
if (self._accessTokenExpiration - currentTime <= 10) {
fulfill(self._refreshAccessToken());
} else {
diff --git a/package.json b/package.json
index 6473beb..17af6b9 100644
--- a/package.json
+++ b/package.json
@@ -25,14 +25,16 @@
},
"homepage": "https://github.com/benburwell/active911#readme",
"dependencies": {
- "request": "^2.67.0"
+ "request": "^2.67.0",
+ "unix-timestamp": "^0.2.0"
},
"engines": {
- "node": ">=4.0.0"
+ "node": ">=0.12.0"
},
"devDependencies": {
+ "chai": "^3.4.1",
+ "chai-as-promised": "^5.1.0",
"mocha": "^2.3.4",
- "nock": "^3.4.0",
- "should": "^8.0.1"
+ "nock": "^3.4.0"
}
}
diff --git a/tests/active911.js b/tests/active911.js
index c0a9e1b..0aa9ffa 100644
--- a/tests/active911.js
+++ b/tests/active911.js
@@ -1,39 +1,138 @@
-var should = require('should');
+var chai = require('chai');
+var should = chai.should();
+var chaiAsPromised = require('chai-as-promised');
+chai.use(chaiAsPromised);
var nock = require('nock');
+var Timestamp = require('unix-timestamp');
var Active911 = require('../lib/active911.js');
-var a911;
-var testDeviceResponse = require('./replies/device.json');
-var testAgencyResponse = require('./replies/agency.json');
-var testErrorResponse = require('./replies/error.json');
+var client;
+var deviceResponse = require('./replies/device.json');
+var agencyResponse = require('./replies/agency.json');
+var alertsResponse = require('./replies/alerts.json');
+var alertResponse = require('./replies/alert.json');
+var locationsResponse = require('./replies/locations.json');
+var locationResponse = require('./replies/location.json');
+var resourceResponse = require('./replies/resource.json');
+var errorResponse = require('./replies/error.json');
+
+var nockPath = function(path, response) {
+ nock('https://access.active911.com')
+ .get('/interface/open_api/api' + path)
+ .reply(200, response);
+};
+
+var nockError = function(path) {
+ nock('https://access.active911.com')
+ .get('/interface/open_api/api' + path)
+ .reply(400, errorResponse);
+};
describe('Active911 API', function() {
beforeEach(function(done) {
- a911 = new Active911.RefreshClient('CLIENT');
+ client = new Active911.RefreshClient('CLIENT');
+ nock('https://www.active911.com')
+ .post('/interface/dev/api_access.php')
+ .reply(200, {
+ access_token: 'DUMMY',
+ expiration: Timestamp.now(100)
+ });
done();
});
describe('#getAgency', function() {
- it('Should return correct agency data', function() {
- nock('https://access.active911.com')
- .get('/interface/open_api/api/')
- .replyWithFile(200, __dirname + 'replies/agency.json');
- a911.getAgency().then(function(agency) {
- agency.should.equal(testAgencyResponse.message.agency);
- }).catch(function(err) {
- should.fail();
- });
+ it('Should return correct data', function() {
+ nockPath('/', agencyResponse);
+ return client.getAgency().should.eventually.deep.equal(agencyResponse.message.agency);
});
it('Should give an error if the API gives an error', function() {
- nock('https://access.active911.com')
- .get('/interface/open_api/api/')
- .replyWithFile(400, __dirname + 'replies/error.json');
- a911.getAgency().then(function(err, agency) {
- should.fail();
- }).catch(function(err) {
- err.should.equal(testErrorResponse.message);
- });
+ nockError('/');
+ return client.getAgency().should.be.rejectedWith(errorResponse.message);
+ });
+ });
+
+ describe('#getDevice', function() {
+ it('Should return correct data', function() {
+ nockPath('/devices/1', deviceResponse);
+ return client.getDevice(1).should.eventually.deep.equal(deviceResponse.message.device);
+ });
+
+ it('Should give an error if the API gives an error', function() {
+ nockError('/devices/1');
+ return client.getDevice(1).should.be.rejectedWith(errorResponse.message);
+ });
+ });
+
+ describe('#getAlerts', function() {
+ it('Should return correct data', function() {
+ nockPath('/alerts', alertsResponse);
+ return client.getAlerts().should.eventually.deep.equal(alertsResponse.message.alerts);
+ });
+
+ it('Should give an error if the API gives an error', function() {
+ nockError('/alerts');
+ return client.getAlerts().should.be.rejectedWith(errorResponse.message);
+ });
+ });
+
+ describe('#getDeviceAlerts', function() {
+ it('Should return correct data', function() {
+ nockPath('/devices/1/alerts', alertsResponse);
+ return client.getDeviceAlerts(1).should.eventually.deep.equal(alertsResponse.message.alerts);
+ });
+
+ it('Should give an error if the API gives an error', function() {
+ nockError('/devices/1/alerts');
+ return client.getDeviceAlerts(1).should.be.rejectedWith(errorResponse.message);
+ });
+ });
+
+ describe('#getAlert', function() {
+ it('Should return correct data', function() {
+ nockPath('/alerts/1', alertResponse);
+ return client.getAlert(1).should.eventually.deep.equal(alertResponse.message.alert);
+ });
+
+ it('Should give an error if the API gives an error', function() {
+ nockError('/alerts/1');
+ return client.getAlert(1).should.be.rejectedWith(errorResponse.message);
+ });
+ });
+
+ describe('#getLocations', function() {
+ it('Should return correct data', function() {
+ nockPath('/locations', locationsResponse);
+ return client.getLocations().should.eventually.deep.equal(locationsResponse.message.locations);
+ });
+
+ it('Should give an error if the API gives an error', function() {
+ nockError('/locations');
+ return client.getLocations().should.be.rejectedWith(errorResponse.message);
+ });
+ });
+
+ describe('#getLocation', function() {
+ it('Should return correct data', function() {
+ nockPath('/locations/1', locationResponse);
+ return client.getLocation(1).should.eventually.deep.equal(locationResponse.message.location);
+ });
+
+ it('Should give an error if the API gives an error', function() {
+ nockError('/locations/1');
+ return client.getLocation(1).should.be.rejectedWith(errorResponse.message);
+ });
+ });
+
+ describe('#getResource', function() {
+ it('Should return correct data', function() {
+ nockPath('/resources/1', resourceResponse);
+ return client.getResource(1).should.eventually.deep.equal(resourceResponse.message.resource);
+ });
+
+ it('Should give an error if the API gives an error', function() {
+ nockError('/resources/1');
+ return client.getResource(1).should.be.rejectedWith(errorResponse.message);
});
});
});
diff --git a/tests/replies/alert.json b/tests/replies/alert.json
new file mode 100644
index 0000000..f069ae9
--- /dev/null
+++ b/tests/replies/alert.json
@@ -0,0 +1,45 @@
+{
+ "result": "success",
+ "message": {
+ "alert": {
+ "id": "1",
+ "agency": {
+ "id": "1",
+ "uri": "https://access.active911.com/interface/open_api/api/"
+ },
+ "place": "My Place",
+ "address": "123 Main Street",
+ "unit": "",
+ "city": "Allentown",
+ "state": "PA",
+ "latitude": 40,
+ "longitude": -70,
+ "source": "Source",
+ "units": "My Units",
+ "cad_code": "29A1",
+ "priority": "Priority 3",
+ "details": "Medical emergency",
+ "sent": "timestamp",
+ "description": "My description",
+ "pagegroups": [
+ {
+ "title": "Group 1",
+ "prefix": "My Prefix"
+ }
+ ],
+ "map_code": "None",
+ "received": "Received",
+ "cross_street": "Cross Street",
+ "responses": [
+ {
+ "device": {
+ "id": "1",
+ "uri": "https://access.active911.com/interface/open_api/api/devices/1"
+ },
+ "timestamp": "123",
+ "response": "Responding"
+ }
+ ]
+ }
+ }
+}
diff --git a/tests/replies/alerts.json b/tests/replies/alerts.json
new file mode 100644
index 0000000..0fa10e5
--- /dev/null
+++ b/tests/replies/alerts.json
@@ -0,0 +1,15 @@
+{
+ "result": "success",
+ "message": {
+ "alerts": [
+ {
+ "id": 1,
+ "uri": "https://access.active911.com/interface/open_api/api/alerts/1"
+ },
+ {
+ "id": 2,
+ "uri": "https://access.active911.com/interface/open_api/api/alerts/2"
+ }
+ ]
+ }
+}
diff --git a/tests/replies/location.json b/tests/replies/location.json
new file mode 100644
index 0000000..114307e
--- /dev/null
+++ b/tests/replies/location.json
@@ -0,0 +1,22 @@
+{
+ "result": "success",
+ "message": {
+ "location": {
+ "id": "1",
+ "name": "My Resource",
+ "description": "My Description",
+ "icon_id": "1",
+ "icon_color": "blue",
+ "latitude": 40,
+ "longitude": -70,
+ "location_type": "Hydrant",
+ "resources": [
+ {
+ "id": "1",
+ "uri": "https://access.active911.com/interface/open_api/api/resources/1"
+ }
+ ]
+ }
+ }
+}
+
diff --git a/tests/replies/locations.json b/tests/replies/locations.json
new file mode 100644
index 0000000..ec12c28
--- /dev/null
+++ b/tests/replies/locations.json
@@ -0,0 +1,11 @@
+{
+ "result": "success",
+ "message": {
+ "locations": [
+ {
+ "id": "1",
+ "uri": "https://access.active911.com/interface/open_api/api/locations/1"
+ }
+ ]
+ }
+}
diff --git a/tests/replies/resource.json b/tests/replies/resource.json
new file mode 100644
index 0000000..19762db
--- /dev/null
+++ b/tests/replies/resource.json
@@ -0,0 +1,22 @@
+{
+ "result": "success",
+ "message": {
+ "resource": {
+ "id": "1",
+ "title": "My Resource",
+ "filename": "resource.pdf",
+ "extension": "pdf",
+ "size": 0,
+ "details": "My resource details",
+ "agency": {
+ "id": "1",
+ "uri": "https://access.active911.com/interface/open_api/api/"
+ },
+ "location": {
+ "id": "1",
+ "uri": "https://access.active911.com/interface/open_api/api/locations/1"
+ }
+ }
+ }
+}
+