1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | "use strict";
|
15 |
|
16 | var fluid = require("infusion"),
|
17 | kettle = require("../../kettle.js"),
|
18 | jqUnit = fluid.require("node-jqunit", require, "jqUnit"),
|
19 | fs = require("fs");
|
20 |
|
21 | kettle.loadTestingSupport();
|
22 |
|
23 | fluid.registerNamespace("kettle.tests.dataSource");
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 | kettle.tests.dataSource.ensureDirectoryEmpty = function (directoryPath) {
|
30 | var directory = fluid.module.resolvePath(directoryPath);
|
31 | kettle.test.deleteFolderRecursive(directory);
|
32 | fs.mkdirSync(directory);
|
33 | };
|
34 |
|
35 |
|
36 |
|
37 | fluid.defaults("kettle.tests.dataSource.onErrorLink", {
|
38 | distributeOptions: {
|
39 | onError: {
|
40 | record: {
|
41 | namespace: "testEnvironment",
|
42 | func: "{testEnvironment}.events.onError.fire",
|
43 | args: "{arguments}.0"
|
44 | },
|
45 | target: "{that dataSource}.options.listeners.onError"
|
46 | }
|
47 | }
|
48 | });
|
49 |
|
50 |
|
51 |
|
52 |
|
53 | fluid.defaults("kettle.tests.dataSourceTestCaseHolder", {
|
54 | gradeNames: ["fluid.test.testCaseHolder"],
|
55 | moduleSource: {
|
56 | funcName: "kettle.tests.simpleDSModuleSource",
|
57 | args: "{testEnvironment}.options"
|
58 | }
|
59 | });
|
60 |
|
61 | kettle.tests.dataSource.defaultResponseFunc = function (shouldError, data) {
|
62 | fluid.fail(shouldError ? "Got response rather than error from dataSource: " :
|
63 | "Error in test configuration - should have overridden response function: ", data);
|
64 | };
|
65 |
|
66 | kettle.tests.dataSource.defaultErrorFunc = function (shouldError, data) {
|
67 | fluid.fail(shouldError ? "Error in test configuration - should have overridden error function: " :
|
68 | "Got error rather than response from dataSource: ", data);
|
69 | };
|
70 |
|
71 |
|
72 | fluid.defaults("kettle.tests.simpleDataSourceTest", {
|
73 | gradeNames: ["fluid.test.testEnvironment", "kettle.tests.dataSource.onErrorLink"],
|
74 | mergePolicy: {
|
75 | initSequence: "noexpand"
|
76 | },
|
77 | shouldError: false,
|
78 | events: {
|
79 | onResponse: null,
|
80 | onError: null
|
81 | },
|
82 | components: {
|
83 |
|
84 | testCaseHolder: {
|
85 | type: "kettle.tests.dataSourceTestCaseHolder"
|
86 | },
|
87 | dataSource: {
|
88 | type: "kettle.dataSource"
|
89 | }
|
90 | },
|
91 | invokers: {
|
92 | responseFunc: {
|
93 | funcName: "kettle.tests.dataSource.defaultResponseFunc",
|
94 | args: ["{that}.options.shouldError", "{arguments}.0"]
|
95 | },
|
96 | errorFunc: {
|
97 | funcName: "kettle.tests.dataSource.defaultErrorFunc",
|
98 | args: ["{that}.options.shouldError", "{arguments}.0"]
|
99 | }
|
100 | },
|
101 | listeners: {
|
102 | onResponse: "{that}.responseFunc",
|
103 | onError: "{that}.errorFunc"
|
104 | }
|
105 | });
|
106 |
|
107 |
|
108 | kettle.tests.dataSource.invokePromiseProducer = function (producerFunc, args, testEnvironment) {
|
109 | var promise = producerFunc.apply(null, args);
|
110 | promise.then(function (response) {
|
111 | testEnvironment.events.onResponse.fire(response);
|
112 | });
|
113 | };
|
114 |
|
115 | fluid.defaults("kettle.tests.promiseDataSourceTest", {
|
116 | gradeNames: ["fluid.component"],
|
117 | testPromiseAPI: true,
|
118 | invokers: {
|
119 | invokePromiseProducer: {
|
120 | funcName: "kettle.tests.dataSource.invokePromiseProducer",
|
121 | args: ["{arguments}.0", "{arguments}.1", "{testEnvironment}"]
|
122 | }
|
123 | }
|
124 | });
|
125 |
|
126 |
|
127 |
|
128 |
|
129 | kettle.tests.simpleDSModuleSource = function (options) {
|
130 | var dataSourceMethod = options.dataSourceMethod || "get";
|
131 | var dataSourceArgs = [options.directModel];
|
132 | if (dataSourceMethod === "set") {
|
133 | dataSourceArgs.push(options.dataSourceModel);
|
134 | }
|
135 | if (options.testPromiseAPI) {
|
136 | var onErrorRecord = {
|
137 | onError: "{testEnvironment}.events.onError.fire"
|
138 | };
|
139 | dataSourceArgs.push(onErrorRecord);
|
140 | } else {
|
141 | dataSourceArgs.push("{testEnvironment}.events.onResponse.fire");
|
142 | }
|
143 |
|
144 | var dataSourceFunc = "{testEnvironment}.dataSource." + dataSourceMethod;
|
145 | var sequence = fluid.makeArray(options.initSequence);
|
146 | if (options.testPromiseAPI) {
|
147 | sequence.push({
|
148 | func: "{testEnvironment}.invokePromiseProducer",
|
149 | args: [dataSourceFunc, dataSourceArgs]
|
150 | });
|
151 | } else {
|
152 | sequence.push({
|
153 | func: dataSourceFunc,
|
154 | args: dataSourceArgs
|
155 | });
|
156 | }
|
157 |
|
158 | sequence.push({
|
159 | event: "{testEnvironment}.events." + (options.shouldError ? "onError" : "onResponse"),
|
160 | listener: "fluid.identity",
|
161 | priority: "last"
|
162 | });
|
163 | sequence.push.apply(sequence, fluid.makeArray(options.finalSequence));
|
164 | var modules = [{
|
165 | name: options.name + (options.testPromiseAPI ? " - via promise API" : ""),
|
166 | tests: [{
|
167 | expect: 1 + (options.expect || 0),
|
168 | name: "Simple " + dataSourceMethod + " test",
|
169 | sequence: sequence
|
170 | }]
|
171 | }];
|
172 | return modules;
|
173 | };
|
174 |
|
175 |
|
176 | kettle.tests.dataSource.testEmptyResponse = function (data) {
|
177 | jqUnit.assertEquals("Data response should be undefined", undefined, data);
|
178 | };
|
179 |
|
180 | kettle.tests.dataSource.testResponse = function (expected, data) {
|
181 | jqUnit.assertDeepEq("Data response should hold correct value", expected, data);
|
182 | };
|
183 |
|
184 | kettle.tests.dataSource.testErrorResponse = function (expected, data) {
|
185 | var cloned = kettle.cloneError(data);
|
186 | jqUnit.assertDeepEq("Error response should hold correct value", expected, cloned);
|
187 | };
|
188 |
|
189 | kettle.tests.expectJSONDiagnostic = function (error) {
|
190 | fluid.log("Received JSON diagnostic error " + JSON.stringify(error, null, 2));
|
191 | jqUnit.assertTrue("Got message mentioning filename ", error.message.indexOf("invalidJSONFile") !== -1);
|
192 | jqUnit.assertTrue("Got message mentioning line number of error ", error.message.indexOf("59") !== -1);
|
193 | };
|
194 |
|
195 | kettle.tests.expectJSON5Diagnostic = function (error) {
|
196 | fluid.log("Received JSON5 diagnostic error " + JSON.stringify(error, null, 2));
|
197 | jqUnit.assertTrue("Got message mentioning filename ", error.message.indexOf("invalidJSON5File") !== -1);
|
198 | jqUnit.assertTrue("Got message mentioning line number of error ", error.message.indexOf("49") !== -1);
|
199 | };
|