UNPKG

9.45 kBPlain TextView Raw
1/**
2 * Copyright (c) Microsoft Corporation. All rights reserved.
3 * Licensed under the MIT License.
4 */
5import * as upgrade from './upgrade'
6import * as models from '@conversationlearner/models'
7import { CallbackMap } from './CLRunner';
8
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: models.ActionPayloadSingleArguments = {
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
37 const callback: models.Callback = {
38 name: "myCallback",
39 logicArguments: [
40 "logicArg",
41 "sharedArg"
42 ],
43 isLogicFunctionProvided: true,
44 renderArguments: [
45 "renderArg",
46 "sharedArg"
47 ],
48 isRenderFunctionProvided: true
49 }
50
51 // Act
52 const actionPayload = upgrade.getActionPayload(legacyActionPayload, callback)
53
54 // Assert
55 expect(actionPayload.payload).toEqual(legacyActionPayload.payload)
56 expect(actionPayload.logicArguments.some(la => la.parameter === legacyActionPayload.arguments[0].parameter)).toBeTruthy()
57 })
58
59 test('given single arguments payload callback with arguments not found in either logic or render it will be dropped', () => {
60 // Arrange
61 const legacyActionPayload: models.ActionPayloadSingleArguments = {
62 payload: 'payload',
63 arguments: [
64 {
65 parameter: "arg1",
66 value: {
67 json: {}
68 }
69 }
70 ]
71 }
72
73 const callback: models.Callback = {
74 name: "myCallback",
75 logicArguments: [
76 ],
77 isLogicFunctionProvided: true,
78 renderArguments: [
79 ],
80 isRenderFunctionProvided: true,
81 }
82
83 // Act
84 const actionPayload = upgrade.getActionPayload(legacyActionPayload, callback)
85
86 // Assert
87 expect(actionPayload.payload).toEqual(legacyActionPayload.payload)
88 expect(actionPayload.logicArguments.some(la => la.parameter === legacyActionPayload.arguments[0].parameter)).toBeFalsy()
89 expect(actionPayload.renderArguments.some(la => la.parameter === legacyActionPayload.arguments[0].parameter)).toBeFalsy()
90 })
91 })
92
93 describe('getActionChangeResult', () => {
94 test('given a action without need to be changed, return it unmodified with no changes', () => {
95 // Arrange
96 const action: models.ActionBase = {
97 actionId: 'fakeActionId',
98 actionType: models.ActionTypes.API_LOCAL,
99 createdDateTime: new Date().toJSON(),
100 isTerminal: false,
101 negativeEntities: [],
102 negativeConditions: [],
103 payload: JSON.stringify({
104 payload: "myCallback",
105 logicArguments: [
106 {
107 parameter: "someArg",
108 value: {
109 json: {}
110 }
111 }
112 ],
113 renderArguments: [
114 {
115 parameter: "otherArg",
116 value: {
117 json: {}
118 }
119 }
120 ]
121 } as models.ActionPayload),
122 requiredEntities: [],
123 requiredConditions: [],
124 requiredEntitiesFromPayload: [],
125 suggestedEntity: undefined,
126 version: 0,
127 packageCreationId: 0,
128 packageDeletionId: 0,
129 entityId: undefined,
130 enumValueId: undefined,
131 }
132
133 const callbackMap: CallbackMap = {}
134
135 // Act
136 const defaultActionChangeResult = upgrade.getDefaultChangeResult(action)
137 const actionChangeResult = upgrade.getActionChangeResult(action, callbackMap)
138
139 // Assert
140 expect(actionChangeResult).toEqual(defaultActionChangeResult)
141 })
142
143 test('given an old action return it with list of change descriptions', () => {
144 // Arrange
145 const action: models.ActionBase = {
146 actionId: 'fakeActionId',
147 actionType: models.ActionTypes.API_LOCAL,
148 createdDateTime: new Date().toJSON(),
149 isTerminal: false,
150 negativeEntities: [],
151 negativeConditions: [],
152 payload: JSON.stringify({
153 payload: "myCallback",
154 arguments: [
155 {
156 parameter: "logicArg",
157 value: {
158 json: {}
159 }
160 },
161 {
162 parameter: "renderArg",
163 value: {
164 json: {}
165 }
166 }
167 ]
168 } as models.ActionPayloadSingleArguments),
169 requiredEntities: [],
170 requiredConditions: [],
171 requiredEntitiesFromPayload: [],
172 suggestedEntity: undefined,
173 version: 0,
174 packageCreationId: 0,
175 packageDeletionId: 0,
176 entityId: undefined,
177 enumValueId: undefined,
178 }
179
180 const callbackMap: CallbackMap = {}
181
182 // Act
183 const actionChangeResult = upgrade.getActionChangeResult(action, callbackMap)
184
185 // Assert
186 expect(actionChangeResult.isChanged).toBe(true)
187 expect(actionChangeResult.changes.length).toBeGreaterThan(0)
188 })
189 })
190
191 describe('getAppDefinitionChange', () => {
192 test('given app definition without changes return object as is without changes', () => {
193 // Arrange
194 const appDefinition: models.AppDefinition = {
195 actions: [],
196 entities: [],
197 trainDialogs: []
198 }
199
200 // Act
201 const appChange = upgrade.default(appDefinition, {})
202
203 // Assert
204 expect(appChange.isChanged).toBe(false)
205 expect(appChange.currentAppDefinition).toEqual(appDefinition)
206 })
207
208 test('given app definition without changes return object as is without changes', () => {
209 // Arrange
210 const action: models.ActionBase = {
211 actionId: 'fakeActionId',
212 actionType: models.ActionTypes.API_LOCAL,
213 createdDateTime: new Date().toJSON(),
214 isTerminal: false,
215 negativeEntities: [],
216 negativeConditions: [],
217 payload: JSON.stringify({
218 payload: "myCallback",
219 arguments: [
220 {
221 parameter: "logicArg",
222 value: {
223 json: {}
224 }
225 },
226 {
227 parameter: "renderArg",
228 value: {
229 json: {}
230 }
231 }
232 ]
233 } as models.ActionPayloadSingleArguments),
234 requiredEntities: [],
235 requiredConditions: [],
236 requiredEntitiesFromPayload: [],
237 suggestedEntity: undefined,
238 version: 0,
239 packageCreationId: 0,
240 packageDeletionId: 0,
241 entityId: undefined,
242 enumValueId: undefined,
243 }
244
245 const appDefinition: models.AppDefinition = {
246 actions: [
247 action
248 ],
249 entities: [],
250 trainDialogs: []
251 }
252
253 // Act
254 const appChange = upgrade.default(appDefinition, {})
255
256 // Assert
257 expect(appChange.isChanged).toBe(true)
258 expect(appChange.currentAppDefinition).toEqual(appDefinition)
259 })
260 })
261})
\No newline at end of file