Skip to content

Instantly share code, notes, and snippets.

@tinesubic
Created January 14, 2017 12:25
Show Gist options
  • Save tinesubic/11e45acd85016af625cb49716baca19b to your computer and use it in GitHub Desktop.
Save tinesubic/11e45acd85016af625cb49716baca19b to your computer and use it in GitHub Desktop.
'use strict';
var assert = require('assert');
var request = require('supertest');
var server = require('../server.js');
var userToken = "testuser";
var testGroupId = 0;
// test if NODE_ENV is set to "test"
describe('Testing NODE_ENV', function () {
it('should be set to "test"', function () {
assert.equal(process.env.NODE_ENV, "test")
});
});
// test routes
describe('Server API tests', function () {
// #index.html tests
describe('#index.html', function () {
it('GET should return status 200', function () {
request(server)
.get("/")
.expect(200)
});
});
//#pushLocTests
describe('#pushLocTests', function () {
it('POST should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.post("/pushLoc")
.send({locations: []})
.set('Accept', 'application/json')
.expect(401, done)
});
it('POST should return Preconditions failed (status 412), if location data was not present', function (done) {
request(server)
.post("/pushLoc")
.set({token: userToken})
.send({locations: []})
.set('Accept', 'application/json')
.expect(412, done)
.expect({message: "Locations not provided"});
});
it('POST should return 200 - success if data was sent correctly', function (done) {
request(server)
.post("/pushLoc")
.set({token: userToken})
.send({
"locations": [
{
"latitude": 46.2677119,
"longitude": 14.6038464,
"time": 1451469916865
}
]
})
.set('Accept', 'application/json')
.expect(200, done)
});
});
// #getUser tests
describe('#getUser', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/getUser")
.set('Accept', 'application/json')
.expect(401, done)
});
it('POST should return status 404 - Not found', function (done) {
request(server)
.post("/getUser")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('GET should return status 200, if token was sent in headers', function (done) {
request(server)
.get("/getUser")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
});
// #getStaypoints tests
describe('#getStaypoints', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/getStaypoints")
.set('Accept', 'application/json')
.expect(401, done)
});
it('POST should return status 404 - Not found', function (done) {
request(server)
.post("/getStaypoints")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('GET sholud return status 200, if token was sent in headers', function (done) {
request(server)
.get("/getStaypoints")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
});
// #getActivities tests
describe('#getActivities', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/getActivities")
.set('Accept', 'application/json')
.expect(401, done)
});
it('POST should return status 404 - Not foud', function (done) {
request(server)
.post("/getActivities")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('GET should return status 200, if token was sent in headers', function (done) {
request(server)
.get("/getActivities")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
});
// #getActivity tests
describe('#getActivity', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/getActivity")
.set('Accept', 'application/json')
.expect(401, done)
});
it('POST should return status 404 - Not found', function (done) {
request(server)
.post("/getActivity")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('GET should return status 404, if "activity_id" was not sent as parameter', function (done) {
request(server)
.get("/getActivity")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('GET should return status 400, if "activity_id" is defined but is invalid', function (done) {
request(server)
.get("/getActivity/1")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(400, done)
});
it('GET should return status 500, if "activity_id" is string', function (done) {
request(server)
.get("/getActivity/dsa")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(500, done)
});
});
// #getTravelTime tests
describe('#getTravelTime', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/group/getTravelTime")
.set('Accept', 'application/json')
.expect(401, done)
});
it('POST should return status 404 - Not found', function (done) {
request(server)
.post("/group/getTravelTime")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('GET should return status 200,', function (done) {
request(server)
.get("/group/getTravelTime")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
it('GET should return status 200, also if parameter collectMidnightData is defined', function (done) {
request(server)
.get("/group/getTravelTime?collectMidnightData=true")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
});
// #getTimeOnDuty tests
describe('#getTimeOnDuty', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/group/getTimeOnDuty")
.set('Accept', 'application/json')
.expect(401, done)
});
it('POST should return status 404 - Not found', function (done) {
request(server)
.post("/group/getTimeOnDuty")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('GET should return status 200,', function (done) {
request(server)
.get("/group/getTimeOnDuty")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
});
// #getGroupWorkdayRuleCompliance tests
describe('#getGroupWorkdayRuleCompliance', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/group/getGroupWorkdayRuleCompliance/TT")
.set('Accept', 'application/json')
.expect(401, done)
});
it('POST should return status 404 - Not found', function (done) {
request(server)
.post("/group/getGroupWorkdayRuleCompliance/TT")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('GET should return status 200,', function (done) {
request(server)
.get("/group/getGroupWorkdayRuleCompliance/TT")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
});
// #getGroupDrivingRuleCompliance tests
describe('#getGroupDrivingRuleCompliance', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/group/getGroupDrivingRuleCompliance/TT")
.set('Accept', 'application/json')
.expect(401, done)
});
it('POST should return status 404 - Not found', function (done) {
request(server)
.post("/group/getGroupDrivingRuleCompliance/TT")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('GET should return status 200,', function (done) {
request(server)
.get("/group/getGroupDrivingRuleCompliance/TT")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
});
// #getTimes tests
describe('#getTimes', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/group/getTimes")
.set('Accept', 'application/json')
.expect(401, done)
});
it('POST should return status 404 - Not found', function (done) {
request(server)
.post("/group/getTimes")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('GET should return status 200,', function (done) {
request(server)
.get("/group/getTimes")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
});
// #getTravelTimeSum tests
describe('#getTravelTimeSum', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/group/getTravelTimeSum/TT")
.set('Accept', 'application/json')
.expect(401, done)
});
it('POST should return status 404 - Not found', function (done) {
request(server)
.post("/group/getTravelTimeSum/TT")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('GET should return status 200,', function (done) {
request(server)
.get("/group/getTravelTimeSum/TT")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
});
// #getStaypointTimeSum tests
describe('#getStaypointTimeSum', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/group/getStaypointTimeSum/TT")
.set('Accept', 'application/json')
.expect(401, done)
});
it('POST should return status 404 - Not found', function (done) {
request(server)
.post("/group/getStaypointTimeSum/TT")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('GET should return status 200,', function (done) {
request(server)
.get("/group/getStaypointTimeSum/TT")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
});
//#deleteGroupDataTests
describe('#deleteGroupDataTests', function () {
it('DELETE should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.delete("/group/deleteGroupData")
.set('Accept', 'application/json')
.expect(401, done)
.expect({message: "Unauthorized"})
});
it('GET should return status 404 - Not found', function (done) {
request(server)
.get("/group/deleteGroupData")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('POST should return status 404 - Not found', function (done) {
request(server)
.post("/group/deleteGroupData")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('DELETE should return 200 - success if token was sent in header', function (done) {
request(server)
.delete("/group/deleteGroupData/" + testGroupId)
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
.expect({message: "Data for group " + testGroupId + " deleted"})
});
});
//#deleteGroupTests
describe('#deleteGroupTests', function () {
it('DELETE should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.delete("/group/deleteGroup")
.set('Accept', 'application/json')
.expect(401, done)
.expect({message: "Unauthorized"})
});
it('GET should return status 404 - Not found', function (done) {
request(server)
.get("/group/deleteGroup")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('POST should return status 404 - Not found', function (done) {
request(server)
.post("/group/deleteGroup")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('DELETE should return 200 - success if token was sent in header', function (done) {
request(server)
.delete("/group/deleteGroup/" + testGroupId)
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
.expect({message: "Group " + testGroupId + " deleted"})
});
});
// #getPrediction tests
describe('#getPrediction', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/getPrediction/222")
.set('Accept', 'application/json')
.expect(401, done)
});
it('POST should return status 404 - Not found', function (done) {
request(server)
.post("/getPrediction/222")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('GET should return status 200, if "location_id" is defined', function (done) {
request(server)
.get("/getPrediction/222")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
it('GET prediction should be empty, if "from" and "to" parameters are the same', function (done) {
request(server)
.get("/getPrediction/222?from=1453898957301&to=1453898957301")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
.expect({"timeToJump": 0, "prediction": []});
});
});
// #getEvaluation tests
describe('#getEvaluation', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/getEvaluation")
.set('Accept', 'application/json')
.expect(401, done)
});
it('POST should return status 404 - Not found', function (done) {
request(server)
.post("/getEvaluation")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('GET should return status 200', function (done) {
request(server)
.get("/getEvaluation")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
it('GET evaluation should be empty, if "from" and "to" parameters are the same', function (done) {
request(server)
.get("/getEvaluation?from=1453898957301&to=1453898957301")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
.expect({"accuracy": null, "allLocations": 0, "correctLocations": 0})
});
});
// #getFrequent tests
describe('#getFrequent', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/getFrequent")
.set('Accept', 'application/json')
.expect(401, done)
});
it('GET should return status 200', function (done) {
request(server)
.get("/getFrequent")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
it('GET should be empty, if "from" and "to" parameters are the same', function (done) {
request(server)
.get("/getFrequent?from=1453898957301&to=1453898957301")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
.expect([])
});
});
// #getLocationSuggestions tests
describe('#getLocationSuggestions', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/getLocationSuggestions?lat=46.044549&lng=14.486679")
.set('Accept', 'application/json')
.expect(401, done)
});
it('GET should return status 200', function (done) {
request(server)
.get("/getLocationSuggestions?lat=46.044549&lng=14.486679")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
});
// #getFreqLocSugg tests
describe('#getFreqLocSugg', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/getFreqLocSugg?id=57544&lat=53.406455&lng=-2.54709&visits=1&avg_stay=600&last_visit=1457757515000")
.set('Accept', 'application/json')
.expect(401, done)
});
it('GET should return status 200', function (done) {
request(server)
.get("/getFreqLocSugg?id=57544&lat=53.406455&lng=-2.54709&visits=1&avg_stay=600&last_visit=1457757515000")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
});
// #editFrequent tests
describe('#editFrequent', function () {
it('POST should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.post("/editFrequent")
.set('Accept', 'application/json')
.expect(401, done)
});
it('POST should return status 200', function (done) {
request(server)
.post("/editFrequent")
.set({token: userToken})
.send({
"location_id": 23615, "name": "test", "category": "Building", "fs_id": "4565676878967",
"personalized_location": "work", "validated": true
})
.set('Accept', 'application/json')
.expect(200, done)
});
it('POST without parameters should return status 500', function (done) {
request(server)
.post("/editFrequent")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(500, done)
});
});
// #getHistogram tests
describe('#visitsByHoursOfDay', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/analytics")
.set('Accept', 'application/json')
.expect(401, done)
});
it('GET without :location_id should return status 404', function (done) {
request(server)
.get("/analytics/visitsByHoursOfDay")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('GET should return status 200', function (done) {
request(server)
.get("/analytics/visitsByHoursOfDay/1")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
it('GET with optional query parameters "from" and "to" should return status 200', function (done) {
request(server)
.get("/analytics/visitsByHoursOfDay/1?from=1453898957301&to=1453898957301")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
});
// #getHistogram tests
describe('#visitsByDayOfWeek', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/analytics")
.set('Accept', 'application/json')
.expect(401, done)
});
it('GET without :location_id should return status 404', function (done) {
request(server)
.get("/analytics/visitsByDayOfWeek")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('GET should return status 200', function (done) {
request(server)
.get("/analytics/visitsByDayOfWeek/1")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
it('GET should return status 200', function (done) {
request(server)
.get("/analytics/visitsByDayOfWeek/1?considerEndTime=false")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
it('GET with optional query parameters "from" and "to" should return status 200', function (done) {
request(server)
.get("/analytics/visitsByDayOfWeek/1?from=1453898957301&to=1453898957301")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
});
// #getHistogram tests
describe('#visitsByHoursOfWeek', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/analytics")
.set('Accept', 'application/json')
.expect(401, done)
});
it('GET withourt :location_id should return status 404', function (done) {
request(server)
.get("/analytics/visitsByHoursOfWeek")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('GET should return status 200', function (done) {
request(server)
.get("/analytics/visitsByHoursOfWeek/1")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
it('GET with optional query parameters "from" and "to" should return status 200', function (done) {
request(server)
.get("/analytics/visitsByHoursOfWeek/1?from=1453898957301&to=1453898957301")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
});
// #getPOIS tests
describe('#getPOIs', function () {
it('GET should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.get("/getPOIs")
.set('Accept', 'application/json')
.expect(401, done)
});
it('GET should return status 200', function (done) {
request(server)
.get("/getPOIs/")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
it('GET with optional query parameters should return status 200', function (done) {
request(server)
.get("/getPOIs?latUL=56.0&lonUL=-6.3&latBR=48.8&lonBR=14.7")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
});
});
//#deleteUserDataTests
describe('#deleteUserDataTests', function () {
it('DELETE should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.delete("/deleteUserData")
.set('Accept', 'application/json')
.expect(401, done)
.expect({message: "Unauthorized"})
});
it('GET should return status 404 - Not found', function (done) {
request(server)
.get("/deleteUserData")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('POST should return status 404 - Not found', function (done) {
request(server)
.post("/deleteUserData")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('DELETE should return 200 - success if token was sent in header', function (done) {
request(server)
.delete("/deleteUserData")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
.expect({message: "Data for user '" + userToken + "' deleted"})
});
it('DELETE should return 200 - success if user token was sent in URL parameter', function (done) {
request(server)
.delete("/deleteUserData/?user=" + userToken)
.set('Accept', 'application/json')
.expect(200, done)
.expect({message: "Data for user '" + userToken + "' deleted"})
});
});
//#deleteUserTests
describe('#deleteUserTests', function () {
it('DELETE should return unauthorised error (status 401), if token was not sent in headers', function (done) {
request(server)
.delete("/deleteUser")
.set('Accept', 'application/json')
.expect(401, done)
.expect({message: "Unauthorized"})
});
it('GET should return status 404 - Not found', function (done) {
request(server)
.get("/deleteUser")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('POST should return status 404 - Not found', function (done) {
request(server)
.post("/deleteUser")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(404, done)
});
it('DELETE should return 200 - success if token was sent in header', function (done) {
request(server)
.delete("/deleteUser")
.set({token: userToken})
.set('Accept', 'application/json')
.expect(200, done)
.expect({message: "User '" + userToken + "' deleted"})
});
//resend data to create the user again (so that next test can pass)
it('POST should return 200 - success if data was sent correctly', function (done) {
request(server)
.post("/pushLoc")
.set({token: userToken})
.send({
"locations": [
{
"latitude": 46.2677119,
"longitude": 14.6038464,
"time": 1451469916865
}
]
})
.set('Accept', 'application/json')
.expect(200, done)
});
it('DELETE should return 200 - success if user token was sent in URL parameter', function (done) {
request(server)
.delete("/deleteUser/?user=" + userToken)
.set('Accept', 'application/json')
.expect(200, done)
.expect({message: "User '" + userToken + "' deleted"})
});
});
});
// Nice tutorials:
// http://importjake.io/testing-express-routes-with-mocha-supertest-and-mock-goose/
// https://glebbahmutov.com/blog/how-to-correctly-unit-test-express-server/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment