UNPKG

9.2 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: null,
126 version: 0,
127 packageCreationId: 0,
128 packageDeletionId: 0
129 }
130
131 const callbackMap: CallbackMap = {}
132
133 // Act
134 const defaultActionChangeResult = upgrade.getDefaultChangeResult(action)
135 const actionChangeResult = upgrade.getActionChangeResult(action, callbackMap)
136
137 // Assert
138 expect(actionChangeResult).toEqual(defaultActionChangeResult)
139 })
140
141 test('given an old action return it with list of change descriptions', () => {
142 // Arrange
143 const action: models.ActionBase = {
144 actionId: 'fakeActionId',
145 actionType: models.ActionTypes.API_LOCAL,
146 createdDateTime: new Date().toJSON(),
147 isTerminal: false,
148 negativeEntities: [],
149 negativeConditions: [],
150 payload: JSON.stringify({
151 payload: "myCallback",
152 arguments: [
153 {
154 parameter: "logicArg",
155 value: {
156 json: {}
157 }
158 },
159 {
160 parameter: "renderArg",
161 value: {
162 json: {}
163 }
164 }
165 ]
166 } as models.ActionPayloadSingleArguments),
167 requiredEntities: [],
168 requiredConditions: [],
169 requiredEntitiesFromPayload: [],
170 suggestedEntity: null,
171 version: 0,
172 packageCreationId: 0,
173 packageDeletionId: 0
174 }
175
176 const callbackMap: CallbackMap = {}
177
178 // Act
179 const actionChangeResult = upgrade.getActionChangeResult(action, callbackMap)
180
181 // Assert
182 expect(actionChangeResult.isChanged).toBe(true)
183 expect(actionChangeResult.changes.length).toBeGreaterThan(0)
184 })
185 })
186
187 describe('getAppDefinitionChange', () => {
188 test('given app definition without changes return object as is without changes', () => {
189 // Arrange
190 const appDefinition: models.AppDefinition = {
191 actions: [],
192 entities: [],
193 trainDialogs: []
194 }
195
196 // Act
197 const appChange = upgrade.default(appDefinition, {})
198
199 // Assert
200 expect(appChange.isChanged).toBe(false)
201 expect(appChange.currentAppDefinition).toEqual(appDefinition)
202 })
203
204 test('given app definition without changes return object as is without changes', () => {
205 // Arrange
206 const action: models.ActionBase = {
207 actionId: 'fakeActionId',
208 actionType: models.ActionTypes.API_LOCAL,
209 createdDateTime: new Date().toJSON(),
210 isTerminal: false,
211 negativeEntities: [],
212 negativeConditions: [],
213 payload: JSON.stringify({
214 payload: "myCallback",
215 arguments: [
216 {
217 parameter: "logicArg",
218 value: {
219 json: {}
220 }
221 },
222 {
223 parameter: "renderArg",
224 value: {
225 json: {}
226 }
227 }
228 ]
229 } as models.ActionPayloadSingleArguments),
230 requiredEntities: [],
231 requiredConditions: [],
232 requiredEntitiesFromPayload: [],
233 suggestedEntity: null,
234 version: 0,
235 packageCreationId: 0,
236 packageDeletionId: 0
237 }
238
239 const appDefinition: models.AppDefinition = {
240 actions: [
241 action
242 ],
243 entities: [],
244 trainDialogs: []
245 }
246
247 // Act
248 const appChange = upgrade.default(appDefinition, {})
249
250 // Assert
251 expect(appChange.isChanged).toBe(true)
252 expect(appChange.currentAppDefinition).toEqual(appDefinition)
253 })
254 })
255})
\No newline at end of file