-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmessageCheckr.js
More file actions
executable file
·81 lines (67 loc) · 3.17 KB
/
Copy pathmessageCheckr.js
File metadata and controls
executable file
·81 lines (67 loc) · 3.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
var convertToXmlDocumentType = require('./libs/convertToXmlDocumentType'),
validateMandatoryParams = require('./libs/validateMandatoryParams.js'),
cleanRawSoapMessage = require('./libs/cleanRawSoapMessage'),
cleanRawXmlMessage = require('./libs/cleanRawXmlMessage'),
verificationResults = require('./libs/verificationResults'),
assertions = require('./libs/assertions'),
store = require('./libs/store'),
messageComponent = require('./libs/messageComponent'),
messageComponentType = require('./libs/messageComponentType');
var messageCheckr = function messageCheckr(params) {
var type, actualMsg, expectedMsg, expectedRootElement, cleansedMessage, xmlDocument, results;
validateMandatoryParams(params);
results = verificationResults.initialise();
store.initialise();
type = params.type;
actualMsg = params.actualMsg;
expectedMsg = params.expectedMsg;
expectedRootElement = params.expectedRootElement;
if (type === 'soap') {
cleansedMessage = cleanRawSoapMessage(actualMsg);
xmlDocument = convertToXmlDocumentType(cleansedMessage);
assertions.checkRootElement(results, xmlDocument, 'SOAP-ENV:Envelope');
checkAllMessageComponents('xml', xmlDocument, expectedMsg, results);
} else if (type === 'jms') {
cleansedMessage = cleanRawXmlMessage(actualMsg);
xmlDocument = convertToXmlDocumentType(cleansedMessage);
assertions.checkRootElement(results, xmlDocument, expectedRootElement);
checkAllMessageComponents('xml', xmlDocument, expectedMsg, results);
} else if (type === 'position') {
if (!_.isString(actualMsg)) throw new Error('actualMsg should be a string when type is "position"');
checkAllMessageComponents('position', actualMsg, expectedMsg, results)
} else {
throw new Error('type "' + type + '" is not handled');
}
return ({ allChecksPassed: results.getOverallResult(), checks: results.getAllChecks(params.verbose) });
};
function checkAllMessageComponents(messageType, actualMsg, expectedMsg, results) {
expectedMsg.forEach(function (expectedMsgComponent) {
var msgComponent = messageComponent(messageType, expectedMsgComponent, actualMsg);
if (msgComponent.getType() != messageComponentType.XML_REPEATING_GROUP_HAS_ELEMENTS) {
assertions.verifyMessageComponent(results, msgComponent);
} else {
var tempVerificationResults;
for (var group of msgComponent.groupsWithAllElementsPresent) {
tempVerificationResults = verificationResults.initialise();
for (var component in group) {
assertions.verifyMessageComponent(tempVerificationResults, group[component]);
}
if (tempVerificationResults.allChecksPassed) {
break;
}
}
var result = {
target: msgComponent.getPrintablePath(),
description: 'Check for repeating group containing all specified elements and their corresponding values.'
};
if (msgComponent.groupsWithAllElementsPresent.length > 0 && tempVerificationResults.allChecksPassed) {
result.pass = true;
} else {
result.pass = false;
result.expected = 'No repeating groups match the expected.';
}
results.add(result);
}
});
}
module.exports = messageCheckr;