openhim-core
Version:
The OpenHIM core application that provides logging and routing of http requests
114 lines (96 loc) • 3.51 kB
text/coffeescript
should = require "should"
sinon = require "sinon"
moment = require "moment"
mongoose = require 'mongoose'
reports = require "../../lib/reports"
testUtils = require "../testUtils"
config = require "../../lib/config/config"
Channel = require("../../lib/model/channels").Channel
User = require("../../lib/model/users").User
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
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 ->
channel1.save (err) ->
channel2.save (err) ->
testUtils.setupMetricsTransactions ->
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) ->
from = moment('2014-07-15').startOf('day').toDate()
to = moment('2014-07-15').endOf('day').toDate()
reports.fetchChannelReport channel2, testUser1, 'dailyReport', from, to, (err, item) ->
item.data[0].should.have.property 'total', 1
item.data[0].should.have.property 'avgResp', 100
item.data[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()