openhim-core
Version:
The OpenHIM core application that provides logging and routing of http requests
366 lines (332 loc) • 14.5 kB
text/coffeescript
should = require "should"
request = require "supertest"
ContactGroup = require("../../lib/model/contactGroups").ContactGroup
Channel = require("../../lib/model/channels").Channel
server = require "../../lib/server"
testUtils = require "../testUtils"
auth = require("../testUtils").auth
describe "API Integration Tests", ->
describe "Contact Groups REST Api Testing", ->
contactGroupData =
group: "Group 1"
users: [{user: 'User 1', method: 'sms', maxAlerts: 'no max'},
{user: 'User 2', method: 'email', maxAlerts: '1 per hour'},
{user: 'User 3', method: 'sms', maxAlerts: '1 per day'},
{user: 'User 4', method: 'email', maxAlerts: 'no max'},
{user: 'User 5', method: 'sms', maxAlerts: '1 per hour'},
{user: 'User 6', method: 'email', maxAlerts: '1 per day'}]
authDetails = {}
before (done) ->
auth.setupTestUsers (err) ->
server.start apiPort: 8080, ->
done()
after (done) ->
auth.cleanupTestUsers (err) ->
server.stop ->
done()
beforeEach ->
authDetails = auth.getAuthDetails()
afterEach (done) ->
ContactGroup.remove ->
done()
describe "*addContactGroup", ->
it "should add contact group to db and return status 201 - group created", (done) ->
request("https://localhost:8080")
.post("/groups")
.set("auth-username", testUtils.rootUser.email)
.set("auth-ts", authDetails.authTS)
.set("auth-salt", authDetails.authSalt)
.set("auth-token", authDetails.authToken)
.send(contactGroupData)
.expect(201)
.end (err, res) ->
if err
done err
else
ContactGroup.findOne { group: "Group 1" }, (err, contactGroup) ->
contactGroup.group.should.equal "Group 1"
contactGroup.users.length.should.equal 6
contactGroup.users[0].user.should.equal "User 1"
done()
it "should only allow an admin user to add a contacGroup", (done) ->
request("https://localhost:8080")
.post("/groups")
.set("auth-username", testUtils.nonRootUser.email)
.set("auth-ts", authDetails.authTS)
.set("auth-salt", authDetails.authSalt)
.set("auth-token", authDetails.authToken)
.send(contactGroupData)
.expect(403)
.end (err, res) ->
if err
done err
else
done()
describe "*getContactGroup(_id)", ->
contactGroupData =
group: "Group 1"
users: [{user: 'User 1', method: 'sms', maxAlerts: 'no max'},
{user: 'User 2', method: 'email', maxAlerts: '1 per hour'},
{user: 'User 3', method: 'sms', maxAlerts: '1 per day'},
{user: 'User 4', method: 'email', maxAlerts: 'no max'},
{user: 'User 5', method: 'sms', maxAlerts: '1 per hour'},
{user: 'User 6', method: 'email', maxAlerts: '1 per day'}]
contactGroupId = null
beforeEach (done) ->
contactGroup = new ContactGroup contactGroupData
contactGroup.save (err, contactGroup) ->
contactGroupId = contactGroup._id
done err if err
done()
it "should get contactGroup by contactGroupId and return status 200", (done) ->
request("https://localhost:8080")
.get("/groups/" + contactGroupId)
.set("auth-username", testUtils.rootUser.email)
.set("auth-ts", authDetails.authTS)
.set("auth-salt", authDetails.authSalt)
.set("auth-token", authDetails.authToken)
.expect(200)
.end (err, res) ->
if err
done err
else
res.body.group.should.equal "Group 1"
res.body.users.length.should.equal 6
res.body.users[0].user.should.equal "User 1"
res.body.users[1].user.should.equal "User 2"
res.body.users[2].user.should.equal "User 3"
res.body.users[3].user.should.equal "User 4"
done()
it "should return status 404 if not found", (done) ->
request("https://localhost:8080")
.get("/groups/000000000000000000000000")
.set("auth-username", testUtils.rootUser.email)
.set("auth-ts", authDetails.authTS)
.set("auth-salt", authDetails.authSalt)
.set("auth-token", authDetails.authToken)
.expect(404)
.end (err, res) ->
if err
done err
else
done()
it "should not allow a non admin user to fetch a contactGroups", (done) ->
request("https://localhost:8080")
.get("/groups/" + contactGroupId)
.set("auth-username", testUtils.nonRootUser.email)
.set("auth-ts", authDetails.authTS)
.set("auth-salt", authDetails.authSalt)
.set("auth-token", authDetails.authToken)
.expect(403)
.end (err, res) ->
if err
done err
else
done()
describe "*getContactGroups()", ->
contactGroupData1 =
group: "Group 1"
users: [{user: 'User 1', method: 'sms', maxAlerts: 'no max'},
{user: 'User 2', method: 'email', maxAlerts: '1 per hour'},
{user: 'User 3', method: 'sms', maxAlerts: '1 per day'},
{user: 'User 4', method: 'email', maxAlerts: 'no max'},
{user: 'User 5', method: 'sms', maxAlerts: '1 per hour'},
{user: 'User 6', method: 'email', maxAlerts: '1 per day'}]
contactGroupData2 =
group: "Group 2222"
users: [{user: 'User 2', method: 'email', maxAlerts: '1 per hour'},
{user: 'User 2', method: 'email', maxAlerts: '1 per hour'}]
contactGroupData3 =
group: "Group 33333333"
users: [{user: 'User 4', method: 'sms', maxAlerts: 'no max'},
{user: 'User 2', method: 'sms', maxAlerts: '1 per day'}]
contactGroupData4 =
group: "Group 444444444444"
users: [{user: 'User 3', method: 'sms', maxAlerts: '1 per day'},
{user: 'User 2', method: 'email', maxAlerts: '1 per hour'}]
it "should return all contactGroups ", (done) ->
group1 = new ContactGroup contactGroupData1
group1.save (error, group) ->
should.not.exist (error)
group2 = new ContactGroup contactGroupData2
group2.save (error, group) ->
should.not.exist (error)
group3 = new ContactGroup contactGroupData3
group3.save (error, group) ->
should.not.exist (error)
group4 = new ContactGroup contactGroupData4
group4.save (error, group) ->
should.not.exist (error)
request("https://localhost:8080")
.get("/groups")
.set("auth-username", testUtils.rootUser.email)
.set("auth-ts", authDetails.authTS)
.set("auth-salt", authDetails.authSalt)
.set("auth-token", authDetails.authToken)
.expect(200)
.end (err, res) ->
if err
done err
else
res.body.length.should.equal 4
done()
it "should not allow a non admin user to fetch all contact groups", (done) ->
request("https://localhost:8080")
.get("/groups")
.set("auth-username", testUtils.nonRootUser.email)
.set("auth-ts", authDetails.authTS)
.set("auth-salt", authDetails.authSalt)
.set("auth-token", authDetails.authToken)
.expect(403)
.end (err, res) ->
if err
done err
else
done()
describe "*updateContactGroup", ->
contactGroupData =
group: "Group 1"
users: [{user: 'User 1', method: 'sms', maxAlerts: 'no max'},
{user: 'User 2', method: 'email', maxAlerts: '1 per hour'},
{user: 'User 3', method: 'sms', maxAlerts: '1 per day'},
{user: 'User 4', method: 'email', maxAlerts: 'no max'},
{user: 'User 5', method: 'sms', maxAlerts: '1 per hour'},
{user: 'User 6', method: 'email', maxAlerts: '1 per day'}]
it "should update the specified contactGroup ", (done) ->
contactGroup = new ContactGroup contactGroupData
contactGroup.save (error, contactGroup) ->
should.not.exist (error)
updates =
group: "Group New Name"
users: [{user: 'User 11111', method: 'sms', maxAlerts: 'no max'},
{user: 'User 222222', method: 'email', maxAlerts: '1 per hour'}]
request("https://localhost:8080")
.put("/groups/" + contactGroup._id)
.set("auth-username", testUtils.rootUser.email)
.set("auth-ts", authDetails.authTS)
.set("auth-salt", authDetails.authSalt)
.set("auth-token", authDetails.authToken)
.send(updates)
.expect(200)
.end (err, res) ->
if err
done err
else
ContactGroup.findById contactGroup._id, (error, contactGroup) ->
contactGroup.group.should.equal "Group New Name"
contactGroup.users.length.should.equal 2
contactGroup.users[0].user.should.equal "User 11111"
contactGroup.users[0].method.should.equal "sms"
contactGroup.users[1].user.should.equal "User 222222"
contactGroup.users[1].method.should.equal "email"
done()
it "should not allow a non admin user to update a contactGroup", (done) ->
updates = {}
request("https://localhost:8080")
.put("/groups/000000000000000000000000")
.set("auth-username", testUtils.nonRootUser.email)
.set("auth-ts", authDetails.authTS)
.set("auth-salt", authDetails.authSalt)
.set("auth-token", authDetails.authToken)
.send(updates)
.expect(403)
.end (err, res) ->
if err
done err
else
done()
describe "*removeContactGroup", ->
it "should remove an contactGroup with specified contactGroupID", (done) ->
contactGroupData =
group: "Group 1"
users: [{user: 'User 1', method: 'sms', maxAlerts: 'no max'},
{user: 'User 2', method: 'email', maxAlerts: '1 per hour'},
{user: 'User 3', method: 'sms', maxAlerts: '1 per day'},
{user: 'User 4', method: 'email', maxAlerts: 'no max'},
{user: 'User 5', method: 'sms', maxAlerts: '1 per hour'},
{user: 'User 6', method: 'email', maxAlerts: '1 per day'}]
contactGroup = new ContactGroup contactGroupData
contactGroup.save (error, group) ->
should.not.exist(error)
ContactGroup.count (err, countBefore) ->
request("https://localhost:8080")
.del("/groups/" + contactGroup._id)
.set("auth-username", testUtils.rootUser.email)
.set("auth-ts", authDetails.authTS)
.set("auth-salt", authDetails.authSalt)
.set("auth-token", authDetails.authToken)
.expect(200)
.end (err, res) ->
if err
done err
else
ContactGroup.count (err, countAfter) ->
ContactGroup.findOne { group: "Group 1" }, (error, notFoundDoc) ->
(notFoundDoc == null).should.be.true
(countBefore - 1).should.equal countAfter
done()
it "should not remove an contactGroup with an associated channel", (done) ->
contactGroupData =
group: "Group 2"
users: [{user: 'User 1', method: 'sms', maxAlerts: 'no max'},
{user: 'User 2', method: 'email', maxAlerts: '1 per hour'},
{user: 'User 3', method: 'sms', maxAlerts: '1 per day'},
{user: 'User 4', method: 'email', maxAlerts: 'no max'},
{user: 'User 5', method: 'sms', maxAlerts: '1 per hour'},
{user: 'User 6', method: 'email', maxAlerts: '1 per day'}]
contactGroup = new ContactGroup contactGroupData
contactGroup.save (error, group) ->
channel1 = {
name: "TestChannel1XXX"
urlPattern: "test/sample"
allow: [ "PoC", "Test1", "Test2" ]
routes: [
name: "test route"
host: "localhost"
port: 9876
primary: true
]
txViewAcl: "aGroup"
alerts: [
{
"status" : "300"
"failureRate" : 13
"users" : []
"groups" : [
contactGroup._id
]
}
]
}
(new Channel channel1).save (err, ch1) ->
should.not.exist(error)
ContactGroup.count (err, countBefore) ->
request("https://localhost:8080")
.del("/groups/" + contactGroup._id)
.set("auth-username", testUtils.rootUser.email)
.set("auth-ts", authDetails.authTS)
.set("auth-salt", authDetails.authSalt)
.set("auth-token", authDetails.authToken)
.expect(409)
.end (err, res) ->
if err
done err
else
ContactGroup.count (err, countAfter) ->
ContactGroup.findOne { group: "Group 2" }, (error, notFoundDoc) ->
countBefore.should.equal countAfter
done()
it "should not allow a non admin user to remove a contactGroup", (done) ->
contactGroupData = {}
request("https://localhost:8080")
.del("/groups/000000000000000000000000")
.set("auth-username", testUtils.nonRootUser.email)
.set("auth-ts", authDetails.authTS)
.set("auth-salt", authDetails.authSalt)
.set("auth-token", authDetails.authToken)
.expect(403)
.end (err, res) ->
if err
done err
else
done()