blob: 23eeb825f29b8d167638cbe11a97316121033da5 [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2000-2019 Ericsson Telecom AB Telecom AB //
// //
// All rights reserved. This program and the accompanying materials //
// are made available under the terms of the Eclipse Public License v2.0 //
// which accompanies this distribution, and is available at //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
///////////////////////////////////////////////////////////////////////////////
var WebApplications = WebApplications || [];
WebApplications.push({"application": new MockTest_Application()});
var responses = {};
var requests = {};
var descriptions = {};
function MockTest_Application() {
"use strict";
var v_appBase = new WebAppBase();
var jsfiles = [
"WebApplications/MockTest/DsRestAPITestConfig.js",
"WebApplications/MockTest/TestConfigModelFiller.js",
"WebApplications/MockTest/AjvSelfTest.js",
"Utils/DsRestAPI/DsRestAPI.js",
"Utils/DsRestAPI/MockedServer/DSHelp.js",
"Utils/DsRestAPI/MockedServer/DataGenerator.js",
"Utils/DsRestAPI/MockedServer/Model.js",
"Utils/DsRestAPI/MockedServer/DsRestAPIComm_Mock.js",
// The test requests
"WebApplications/MockTest/Testcases/all.request",
"WebApplications/MockTest/Testcases/test1.request",
"WebApplications/MockTest/Testcases/test2.request",
"WebApplications/MockTest/Testcases/test3.request",
"WebApplications/MockTest/Testcases/test4.request",
"WebApplications/MockTest/Testcases/test5.request",
"WebApplications/MockTest/Testcases/test6.request",
"WebApplications/MockTest/Testcases/test7.request",
"WebApplications/MockTest/Testcases/test8.request",
"WebApplications/MockTest/Testcases/test9.request",
"WebApplications/MockTest/Testcases/test10.request",
"WebApplications/MockTest/Testcases/test11.request",
"WebApplications/MockTest/Testcases/test12.request",
"WebApplications/MockTest/Testcases/test13.request",
"WebApplications/MockTest/Testcases/test14.request",
"WebApplications/MockTest/Testcases/test15.request",
"WebApplications/MockTest/Testcases/test16.request",
"WebApplications/MockTest/Testcases/test17.request",
"WebApplications/MockTest/Testcases/test18.request",
"WebApplications/MockTest/Testcases/test19.request",
// The responses
"WebApplications/MockTest/Testcases/all.response",
"WebApplications/MockTest/Testcases/test1.response",
"WebApplications/MockTest/Testcases/test2.response",
"WebApplications/MockTest/Testcases/test3.response",
"WebApplications/MockTest/Testcases/test4.response",
"WebApplications/MockTest/Testcases/test5.response",
"WebApplications/MockTest/Testcases/test6.response",
"WebApplications/MockTest/Testcases/test7.response",
"WebApplications/MockTest/Testcases/test8.response",
"WebApplications/MockTest/Testcases/test9.response",
"WebApplications/MockTest/Testcases/test10.response",
"WebApplications/MockTest/Testcases/test11.response",
"WebApplications/MockTest/Testcases/test12.response",
"WebApplications/MockTest/Testcases/test13.response",
"WebApplications/MockTest/Testcases/test14.response",
"WebApplications/MockTest/Testcases/test15.response",
"WebApplications/MockTest/Testcases/test16.response",
"WebApplications/MockTest/Testcases/test17.response",
"WebApplications/MockTest/Testcases/test18.response",
"WebApplications/MockTest/Testcases/test19.response"
];
this.info = function () {
return {
defaultIcon : "WebApplications/RequestConsole/main_icon.png",
defaultName : "Mock Test"
};
};
this.load = function (p_webAppModel) {
v_appBase.load(jsfiles, [], start, p_webAppModel.getFileHandler());
};
this.unload = function(webappUnloaded) {
webappUnloaded(true);
};
function start(p_callback) {
var model = new Model(new DataGenerator());
var testConfigModelFiller = new TestConfigModelFiller(model);
testConfigModelFiller.fillModel(DsRestAPITestConfig);
var mock = new CDsRestAPIComm(true, model);
runTests(mock);
p_callback();
}
function Comparator(p_key, p_response) {
var response = p_response;
this.successful = false;
var v_this = this;
this.compare = function (answer) {
var expected = JSON.stringify(response);
var actualObj = answer;
var actual = JSON.stringify(actualObj);
var isErrorExpected = response.contentList &&
response.contentList.length > 0 && response.contentList[0] && (
(response.contentList[0].list &&
typeof response.contentList[0].list[0].node.val === 'string' &&
response.contentList[0].list[0].node.val.toLowerCase().indexOf("error") > -1) ||
(response.contentList[0].node &&
typeof response.contentList[0].node.val === 'string' &&
response.contentList[0].node.val.toLowerCase().indexOf("error") > -1));
var isErrorReceived = actualObj.contentList &&
actualObj.contentList.length > 0 && actualObj.contentList[0] && (
(actualObj.contentList[0].list &&
typeof actualObj.contentList[0].list[0].node.val === 'string' &&
actualObj.contentList[0].list[0].node.val.match(/(error|cannot|invalid)/i)) ||
(actualObj.contentList[0].node &&
typeof actualObj.contentList[0].node.val === 'string' &&
actualObj.contentList[0].node.val.match(/(error|cannot|invalid)/i)));
v_this.successful = (isErrorExpected && isErrorReceived) || (actual == expected);
if (!v_this.successful)
console.log("-----------------\ntestcase: " + p_key + "\nexpected: " + expected + "\nreceived: " + actual + "\n-----------------");
};
}
function runTests(p_mock) {
var mock = p_mock;
var successful = true;
var selftest = new AjvSelfTest();
if (!selftest.validate(mock.getSchema())) {
console.error("Schema validator selftest failed!");
} else {
console.log("Schema validator selftest passed.");
}
var requestmap = [];
var keymap = [];
for (var key in requests)
if (requests.hasOwnProperty(key)) {
requestmap.push(requests[key]);
keymap.push(key);
}
var errors = requestmap.reduce(function(prev, current, index, context) {
console.log("Commencing test #" + keymap[index]);
var comparator = new Comparator(index, responses[keymap[index]]);
var err = "";
var isHexstring = false;
if (current.requests && current.requests[0])
isHexstring = (current.requests[0].listOfGetData ? false : (current.requests[0].getData ? current.requests[0].getData.element === "help" : current.requests[0].setData.element === "help"));
mock.ajaxCall(current, function ajaxCallCallback(answer) {
answer = {"contentList": answer};
if (isHexstring) {
// response to an "element: help" request --> node.val is a hexstring
var answerObj = answer;
for(var i = 0; i < answerObj.contentList.length; i++)
if (!answerObj.contentList[i].node.val.startsWith("Error")) // Errors are not in hexstring.
answerObj.contentList[i].node.val = hex2a(answerObj.contentList[i].node.val);
answer = answerObj;
}
comparator.compare(answer);
});
if (!comparator.successful) {
err = "Wrong response for " + keymap[index];
if (descriptions[keymap[index]])
err += " -- Description of the test step: " + descriptions[keymap[index]];
}
return prev.concat(err);
}, []);
var errormsg = errors.reduce(function(prev, current, index, context) {return current.length?prev + current + "\n":prev;}, "");
successful = errors.reduce(function(prev, current, index, context) {
return (prev && !current.length);
}, true);
if (successful) {
alert("Test result: pass");
} else {
alert("Test result: fail\n" + errormsg);
}
}
function hex2a(hex)
{
var str = '';
for (var i = 0; i < hex.length; i += 2)
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
return str;
}
}