openhim-core
Version:
The OpenHIM core application that provides logging and routing of http requests
203 lines (178 loc) • 8 kB
text/coffeescript
should = require "should"
request = require "supertest"
rerunUpdateTransactionTask = require '../../lib/middleware/rerunUpdateTransactionTask'
Transaction = require("../../lib/model/transactions").Transaction
Task = require("../../lib/model/tasks").Task
ObjectId = require('mongoose').Types.ObjectId
ctx =
parentID: "53e096fea0af3105689acd6a"
transactionId: "53e34b955d0180cf6eef2d03"
taskID: "53e34b915d0180cf6eef2d01"
transactionStatus: "Successfull"
ctx2 =
parentID: "53e096fea0af3105689acd6b"
transactionId: "53e34b955d0180cf6eef2d03"
taskID: "53e34b915d0180cf6eef2d01"
transactionStatus: "Successfull"
ctx3 =
parentID: "53e096fea0af310568333333"
ctx4 =
parentID: "53e096fea0af310568444444"
transaction1 = new Transaction
_id: "53e096fea0af3105689acd6a"
channelID: "53bbe25485e66d8e5daad4a2"
clientID: "42bbe25485e77d8e5daad4b4"
request: {
path: "/sample/api",
headers: { authorization: "Basic dGVzdDp0ZXN0", "user-agent": "curl/7.35.0", host: "localhost:5001" },
querystring: "param=hello",
body: "",
method: "GET",
timestamp: "2014-07-15T08:10:45.109Z"
}
status: "Completed"
transaction2 = new Transaction
_id: "53e096fea0af3105689acd6b"
channelID: "53bbe25485e66d8e5daad4a2"
clientID: "42bbe25485e77d8e5daad4b4"
request: {
path: "/sample/api",
headers: { authorization: "Basic dGVzdDp0ZXN0", "user-agent": "curl/7.35.0", host: "localhost:5001" },
querystring: "param=hello",
body: "",
method: "GET",
timestamp: "2014-07-15T08:10:45.109Z"
},
orchestrations: [
name: 'Orchestrator Mediator'
response:
status: 400
body: "Some error"
timestamp: new Date()
]
status: "Completed"
transaction3 = new Transaction
_id: "53e096fea0af310568333333"
channelID: "53bbe25485e66d8e5daad4a2"
clientID: "42bbe25485e77d8e5daad4b4"
request: {
path: "/sample/api",
headers: { authorization: "Basic dGVzdDp0ZXN0", "user-agent": "curl/7.35.0", host: "localhost:5001" },
querystring: "param=hello",
body: "",
method: "GET",
timestamp: "2014-07-15T08:10:45.109Z"
}
status: "Completed"
autoRetry: true
transaction4 = new Transaction
_id: "53e096fea0af310568444444"
channelID: "53bbe25485e66d8e5daad4a2"
clientID: "42bbe25485e77d8e5daad4b4"
request: {
path: "/sample/api",
headers: { authorization: "Basic dGVzdDp0ZXN0", "user-agent": "curl/7.35.0", host: "localhost:5001" },
querystring: "param=hello",
body: "",
method: "GET",
timestamp: "2014-07-15T08:10:45.109Z"
}
status: "Completed"
autoRetry: true
autoRetryAttempt: 5
task1 = new Task
_id: "53e34b915d0180cf6eef2d01"
created: "2014-07-15T07:49:26.238Z"
remainingTransactions: 2
totalTransactions: 3
status: "Processing"
transactions: [ {tid: "53e096fea0af3105689acd6a", tstatus: "Completed"},
{tid: "53bfbcd06a2b417f6cd14872", tstatus: "Queued"},
{tid: "aaaaaaaaaabbbbbbbbbbcccc", tstatus: "Queued"} ]
user: "root@openhim.org"
describe "rerunUpdateTransactionTask middleware", ->
before (done) ->
transaction1.save ->
transaction2.save (err) ->
transaction3.save (err) ->
transaction4.save (err) ->
task1.save ->
done()
after (done) ->
Transaction.remove {}, ->
Task.remove {}, ->
done()
describe "updateOriginalTransaction", ->
it "should update the original transaction with the child ID", (done) ->
# check data before function execution
transactionID = "53e096fea0af3105689acd6a"
Transaction.findOne {_id: transactionID }, (err, transaction) ->
transaction.should.have.property "_id", ObjectId("53e096fea0af3105689acd6a")
transaction.should.have.property "channelID", ObjectId("53bbe25485e66d8e5daad4a2")
transaction.should.have.property "clientID", ObjectId("42bbe25485e77d8e5daad4b4")
transaction.should.have.property "status", "Completed"
transaction.childIDs.length.should.be.eql 0
rerunUpdateTransactionTask.updateOriginalTransaction ctx, (err, transaction) ->
transaction.should.have.property "_id", ObjectId("53e096fea0af3105689acd6a")
transaction.should.have.property "channelID", ObjectId("53bbe25485e66d8e5daad4a2")
transaction.should.have.property "clientID", ObjectId("42bbe25485e77d8e5daad4b4")
transaction.should.have.property "status", "Completed"
transaction.childIDs.length.should.be.eql 1
transaction.childIDs[0].should.be.eql ObjectId("53e34b955d0180cf6eef2d03")
done()
it "should update the original transaction with the child ID even when there are orchestrations without a request property", (done) ->
# check data before function execution
transactionID = "53e096fea0af3105689acd6b"
Transaction.findOne {_id: transactionID }, (err, transaction) ->
transaction.should.have.property "_id", ObjectId("53e096fea0af3105689acd6b")
transaction.should.have.property "channelID", ObjectId("53bbe25485e66d8e5daad4a2")
transaction.should.have.property "clientID", ObjectId("42bbe25485e77d8e5daad4b4")
transaction.should.have.property "status", "Completed"
transaction.childIDs.length.should.be.eql 0
rerunUpdateTransactionTask.updateOriginalTransaction ctx2, (err, transaction) ->
done err if err
transaction.should.have.property "_id", ObjectId("53e096fea0af3105689acd6b")
transaction.should.have.property "channelID", ObjectId("53bbe25485e66d8e5daad4a2")
transaction.should.have.property "clientID", ObjectId("42bbe25485e77d8e5daad4b4")
transaction.should.have.property "status", "Completed"
transaction.childIDs.length.should.be.eql 1
transaction.childIDs[0].should.be.eql ObjectId("53e34b955d0180cf6eef2d03")
done()
describe "updateTask()", ->
it "should update the task with the rerun ID and status", (done) ->
# check data before function execution
taskID = "53e34b915d0180cf6eef2d01"
Task.findOne {_id: taskID }, (err, task) ->
task.should.have.property "_id", ObjectId("53e34b915d0180cf6eef2d01")
task.should.have.property "remainingTransactions", 2
task.transactions[0].tid.should.be.eql "53e096fea0af3105689acd6a"
task.transactions[1].tid.should.be.eql "53bfbcd06a2b417f6cd14872"
task.transactions[2].tid.should.be.eql "aaaaaaaaaabbbbbbbbbbcccc"
should.not.exist (task.transactions[0].rerunID)
should.not.exist (task.transactions[1].rerunID)
should.not.exist (task.transactions[2].rerunID)
rerunUpdateTransactionTask.updateTask ctx, (err, task) ->
task.should.have.property "_id", ObjectId("53e34b915d0180cf6eef2d01")
task.should.have.property "remainingTransactions", 2
task.transactions[0].tid.should.be.eql "53e096fea0af3105689acd6a"
task.transactions[0].rerunID.should.be.eql "53e34b955d0180cf6eef2d03"
task.transactions[0].rerunStatus.should.be.eql "Successfull"
done()
describe "setAttemptNumber", ->
it "should not set the attempt number if the parent transaction was not an autoretry", (done) ->
delete ctx.currentAttempt
rerunUpdateTransactionTask.setAttemptNumber ctx, (err) ->
ctx.should.not.have.property 'currentAttempt'
done()
it "should add an initial attempt number to the ctx", (done) ->
delete ctx3.currentAttempt
rerunUpdateTransactionTask.setAttemptNumber ctx3, (err) ->
ctx3.should.have.property 'currentAttempt'
ctx3.currentAttempt.should.be.exactly 1
done()
it "should increment the attempt number if it exists on the parent transaction", (done) ->
delete ctx4.currentAttempt
rerunUpdateTransactionTask.setAttemptNumber ctx4, (err) ->
ctx4.should.have.property 'currentAttempt'
ctx4.currentAttempt.should.be.exactly 6
done()