UNPKG

8.92 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3/**
4 * Copyright (c) Microsoft Corporation. All rights reserved.
5 * Licensed under the MIT License.
6 */
7const upgrade = require("./upgrade");
8const models = require("@conversationlearner/models");
9describe('upgrade', () => {
10 describe('getActionPayload', () => {
11 test('given single arguments payload callback with argument moved to either logic or render function return a new payload with argument in respective arguments list', () => {
12 // Arrange
13 const legacyActionPayload = {
14 payload: 'payload',
15 arguments: [
16 {
17 parameter: "logicArg",
18 value: {
19 json: {}
20 }
21 },
22 {
23 parameter: "renderArg",
24 value: {
25 json: {}
26 }
27 },
28 {
29 parameter: "sharedArg",
30 value: {
31 json: {}
32 }
33 }
34 ]
35 };
36 const callback = {
37 name: "myCallback",
38 logicArguments: [
39 "logicArg",
40 "sharedArg"
41 ],
42 isLogicFunctionProvided: true,
43 renderArguments: [
44 "renderArg",
45 "sharedArg"
46 ],
47 isRenderFunctionProvided: true
48 };
49 // Act
50 const actionPayload = upgrade.getActionPayload(legacyActionPayload, callback);
51 // Assert
52 expect(actionPayload.payload).toEqual(legacyActionPayload.payload);
53 expect(actionPayload.logicArguments.some(la => la.parameter === legacyActionPayload.arguments[0].parameter)).toBeTruthy();
54 });
55 test('given single arguments payload callback with arguments not found in either logic or render it will be dropped', () => {
56 // Arrange
57 const legacyActionPayload = {
58 payload: 'payload',
59 arguments: [
60 {
61 parameter: "arg1",
62 value: {
63 json: {}
64 }
65 }
66 ]
67 };
68 const callback = {
69 name: "myCallback",
70 logicArguments: [],
71 isLogicFunctionProvided: true,
72 renderArguments: [],
73 isRenderFunctionProvided: true,
74 };
75 // Act
76 const actionPayload = upgrade.getActionPayload(legacyActionPayload, callback);
77 // Assert
78 expect(actionPayload.payload).toEqual(legacyActionPayload.payload);
79 expect(actionPayload.logicArguments.some(la => la.parameter === legacyActionPayload.arguments[0].parameter)).toBeFalsy();
80 expect(actionPayload.renderArguments.some(la => la.parameter === legacyActionPayload.arguments[0].parameter)).toBeFalsy();
81 });
82 });
83 describe('getActionChangeResult', () => {
84 test('given a action without need to be changed, return it unmodified with no changes', () => {
85 // Arrange
86 const action = {
87 actionId: 'fakeActionId',
88 actionType: models.ActionTypes.API_LOCAL,
89 createdDateTime: new Date().toJSON(),
90 isTerminal: false,
91 negativeEntities: [],
92 negativeConditions: [],
93 payload: JSON.stringify({
94 payload: "myCallback",
95 logicArguments: [
96 {
97 parameter: "someArg",
98 value: {
99 json: {}
100 }
101 }
102 ],
103 renderArguments: [
104 {
105 parameter: "otherArg",
106 value: {
107 json: {}
108 }
109 }
110 ]
111 }),
112 requiredEntities: [],
113 requiredConditions: [],
114 requiredEntitiesFromPayload: [],
115 suggestedEntity: null,
116 version: 0,
117 packageCreationId: 0,
118 packageDeletionId: 0
119 };
120 const callbackMap = {};
121 // Act
122 const defaultActionChangeResult = upgrade.getDefaultChangeResult(action);
123 const actionChangeResult = upgrade.getActionChangeResult(action, callbackMap);
124 // Assert
125 expect(actionChangeResult).toEqual(defaultActionChangeResult);
126 });
127 test('given an old action return it with list of change descriptions', () => {
128 // Arrange
129 const action = {
130 actionId: 'fakeActionId',
131 actionType: models.ActionTypes.API_LOCAL,
132 createdDateTime: new Date().toJSON(),
133 isTerminal: false,
134 negativeEntities: [],
135 negativeConditions: [],
136 payload: JSON.stringify({
137 payload: "myCallback",
138 arguments: [
139 {
140 parameter: "logicArg",
141 value: {
142 json: {}
143 }
144 },
145 {
146 parameter: "renderArg",
147 value: {
148 json: {}
149 }
150 }
151 ]
152 }),
153 requiredEntities: [],
154 requiredConditions: [],
155 requiredEntitiesFromPayload: [],
156 suggestedEntity: null,
157 version: 0,
158 packageCreationId: 0,
159 packageDeletionId: 0
160 };
161 const callbackMap = {};
162 // Act
163 const actionChangeResult = upgrade.getActionChangeResult(action, callbackMap);
164 // Assert
165 expect(actionChangeResult.isChanged).toBe(true);
166 expect(actionChangeResult.changes.length).toBeGreaterThan(0);
167 });
168 });
169 describe('getAppDefinitionChange', () => {
170 test('given app definition without changes return object as is without changes', () => {
171 // Arrange
172 const appDefinition = {
173 actions: [],
174 entities: [],
175 trainDialogs: []
176 };
177 // Act
178 const appChange = upgrade.default(appDefinition, {});
179 // Assert
180 expect(appChange.isChanged).toBe(false);
181 expect(appChange.currentAppDefinition).toEqual(appDefinition);
182 });
183 test('given app definition without changes return object as is without changes', () => {
184 // Arrange
185 const action = {
186 actionId: 'fakeActionId',
187 actionType: models.ActionTypes.API_LOCAL,
188 createdDateTime: new Date().toJSON(),
189 isTerminal: false,
190 negativeEntities: [],
191 negativeConditions: [],
192 payload: JSON.stringify({
193 payload: "myCallback",
194 arguments: [
195 {
196 parameter: "logicArg",
197 value: {
198 json: {}
199 }
200 },
201 {
202 parameter: "renderArg",
203 value: {
204 json: {}
205 }
206 }
207 ]
208 }),
209 requiredEntities: [],
210 requiredConditions: [],
211 requiredEntitiesFromPayload: [],
212 suggestedEntity: null,
213 version: 0,
214 packageCreationId: 0,
215 packageDeletionId: 0
216 };
217 const appDefinition = {
218 actions: [
219 action
220 ],
221 entities: [],
222 trainDialogs: []
223 };
224 // Act
225 const appChange = upgrade.default(appDefinition, {});
226 // Assert
227 expect(appChange.isChanged).toBe(true);
228 expect(appChange.currentAppDefinition).toEqual(appDefinition);
229 });
230 });
231});
232//# sourceMappingURL=upgrade.test.js.map
\No newline at end of file