UNPKG

openhim-core

Version:

The OpenHIM core application that provides logging and routing of http requests

231 lines (200 loc) 8.23 kB
should = require "should" sinon = require "sinon" http = require "http" moment = require "moment" reports = require "../../lib/reports" metrics = require "../../lib/metrics" testUtils = require "../testUtils" config = require "../../lib/config/config" #config.reports = config.get('reports') Channel = require("../../lib/model/channels").Channel User = require("../../lib/model/users").User Transaction = require("../../lib/model/transactions").Transaction contact = require "../../lib/contact" mongoose = require 'mongoose' testUser1 = new User firstname: 'User' surname: 'One' email: 'one@openhim.org' passwordAlgorithm: 'sha512' passwordHash: '3cc90918-7044-4e55-b61d-92ae73cb261e' passwordSalt: '22a61686-66f6-483c-a524-185aac251fb0' groups: [ 'admin', 'PoC' ] weeklyReport: true testUser2 = new User firstname: 'User' surname: 'Two' email: 'two@openhim.org' msisdn: '27721234567' passwordAlgorithm: 'sha512' passwordHash: '3cc90918-7044-4e55-b61d-92ae73cb261e' passwordSalt: '22a61686-66f6-483c-a524-185aac251fb0' groups: [ 'admin', 'PoC' ] dailyReport: true transaction1 = new Transaction _id: "111111111111111111111111" channelID: "111111111111111111111111" clientID: "42bbe25485e77d8e5daad4b4" request: { path: "/sample/api", method: "GET", timestamp: "2014-07-15T08:10:45.109Z" } response: { status: "200", timestamp: "2014-07-15T08:10:45.109Z" } routes: { name: "dummy-route" } orchestrations: { name: "dummy-orchestration" } status: "Completed" transaction2 = new Transaction _id: "222222222222222222222222" channelID: "111111111111111111111111" clientID: "42bbe25485e77d8e5daad4b4" request: { path: "/sample/api", method: "GET", timestamp: "2014-07-15T14:30:45.109Z" } response: { status: "200", timestamp: "2014-07-15T14:30:45.285Z" } routes: { name: "dummy-route" } orchestrations: { name: "dummy-orchestration" } status: "Completed" transaction3 = new Transaction _id: "333333333333333333333333" channelID: "222222222222222222222222" clientID: "42bbe25485e77d8e5daad4b4" request: { path: "/sample/api", method: "GET", timestamp: "2014-07-15T19:46:45.229Z" } response: { status: "200", timestamp: "2014-07-15T19:46:45.306Z" } routes: { name: "dummy-route" } orchestrations: { name: "dummy-orchestration" } status: "Completed" transaction4 = new Transaction _id: "444444444444444444444444" channelID: "111111111111111111111111" clientID: "42bbe25485e77d8e5daad4b4" request: { path: "/sample/api", method: "GET", timestamp: "2014-07-16T09:15:45.109Z" } response: { status: "404", timestamp: "2014-07-16T09:15:45.600Z" } routes: { name: "dummy-route" } orchestrations: { name: "dummy-orchestration" } status: "Failed" transaction5 = new Transaction _id: "555555555555555555555555" channelID: "222222222222222222222222" clientID: "42bbe25485e77d8e5daad4b4" request: { path: "/sample/api", method: "GET", timestamp: "2014-07-16T13:30:45.650Z" } response: { status: "200", timestamp: "2014-07-16T13:30:46.109Z" } routes: { name: "dummy-route" } orchestrations: { name: "dummy-orchestration" } status: "Completed" transaction6 = new Transaction _id: "666666666666666666666666" channelID: "222222222222222222222222" clientID: "42bbe25485e77d8e5daad4b4" request: { path: "/sample/api", method: "GET", timestamp: "2014-07-16T16:10:39.850Z" } response: { status: "200", timestamp: "2014-07-16T16:10:40.109Z" } routes: { name: "dummy-route" } orchestrations: { name: "dummy-orchestration" } status: "Completed" transaction7 = new Transaction _id: "777777777777777777777777" channelID: "111111111111111111111111" clientID: "42bbe25485e77d8e5daad4b4" request: { path: "/sample/api", method: "GET", timestamp: "2014-07-17T14:45:20.109Z" } response: { status: "200", timestamp: "2014-07-17T14:45:20.385Z" } routes: { name: "dummy-route" } orchestrations: { name: "dummy-orchestration" } status: "Completed" transaction8 = new Transaction _id: "888888888888888888888888" channelID: "222222222222222222222222" clientID: "42bbe25485e77d8e5daad4b4" request: { path: "/sample/api", method: "GET", timestamp: "2014-07-17T19:21:45.129Z" } response: { status: "200", timestamp: "2014-07-17T19:21:45.306Z" } routes: { name: "dummy-route" } orchestrations: { name: "dummy-orchestration" } status: "Completed" transaction9 = new Transaction _id: "999999999999999999999999" channelID: "111111111111111111111111" clientID: "42bbe25485e77d8e5daad4b4" request: { path: "/sample/api", method: "GET", timestamp: "2014-10-01T11:17:45.909Z" } response: { status: "404", timestamp: "2014-10-01T11:17:46.200Z" } routes: { name: "dummy-route" } orchestrations: { name: "dummy-orchestration" } status: "Failed" transaction10 = new Transaction _id: "101010101010101010101010" channelID: "222222222222222222222222" clientID: "42bbe25485e77d8e5daad4b4" request: { path: "/sample/api", method: "GET", timestamp: moment().subtract(1, 'days').utc().format() } response: { status: "200", timestamp: moment().subtract(1, 'days').add(1, 'seconds').utc().format() } routes: { name: "dummy-route" } orchestrations: { name: "dummy-orchestration" } status: "Completed" channel1 = new Channel name: "Test Channel 11111" urlPattern: "test/sample" allow: [ "PoC", "Test1", "Test2" ] routes: [ { name: "test route", host: "localhost", port: 9876 } ] channel2 = new Channel _id: mongoose.Types.ObjectId("222222222222222222222222") name: "Test Channel 22222" urlPattern: "test/sample" allow: [ "PoC", "Test1", "Test2" ] routes: [ { name: "test route", host: "localhost", port: 9876 } ] dateFrom = new Date() dateFrom.setHours 0, 0, 0, 0 describe "Transaction Reports", -> before (done) -> testUser1.save -> testUser2.save -> # Channel.remove {}, -> # Transaction.remove {}, -> channel1.save (err) -> channel2.save (err) -> transaction1.save (err) -> transaction2.save (err) -> transaction3.save (err) -> transaction4.save (err) -> transaction5.save (err) -> transaction6.save (err) -> transaction7.save (err) -> transaction8.save (err) -> transaction9.save (err) -> transaction10.save (err) -> done() after (done) -> User.remove {}, -> Channel.remove {}, -> done() describe "config", -> it "default config should contain reporting config fields", (done) -> config.reports.should.exist config.reports.enableReports.should.exist done() describe "Subscribers", -> it "should fetch weekly subscribers", (done) -> reports.fetchWeeklySubscribers (err, results) -> results.length.should.be.exactly 1 results[0].email.should.eql(testUser1.email) done() it "should fetch daily subscribers", (done) -> reports.fetchDailySubscribers (err, results) -> results.length.should.be.exactly 1 results[0].email.should.eql(testUser2.email) done() describe "Reports", -> it "should return a channel Report", (done) -> reports.fetchChannelReport channel2, testUser1, 'dailyReport', (item) -> item.data[0].should.have.property 'load', 1 item.data[0].should.have.property 'avgResp', 1000 item.statusData[0].should.have.property 'completed', 1 done() it "should send a weekly channel report", (done) -> sinon.spy(reports, 'fetchWeeklySubscribers'); reports.sendReports {}, 'weeklyReport', () -> reports.fetchWeeklySubscribers.should.be.called reports.fetchChannelReport.should.be.called reports.sendUserEmail.should.be.called done() it "should send a daily channel report", (done) -> sinon.spy(reports, 'fetchDailySubscribers'); reports.sendReports {}, 'weeklyReport', () -> reports.fetchDailySubscribers.should.be.called reports.fetchChannelReport.should.be.called reports.sendUserEmail.should.be.called done()