@capillarytech/creatives-library 8.0.125-alpha.6 → 8.0.126
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/app.js +6 -0
- package/containers/App/constants.js +0 -1
- package/containers/Email/index.js +5 -5
- package/containers/WeChat/RichmediaTemplates/Create/index.js +1 -1
- package/initialReducer.js +2 -0
- package/package.json +1 -1
- package/services/api.js +94 -1
- package/services/tests/api.test.js +191 -0
- package/tests/integration/TemplateCreation/TemplateCreation.integration.test.js +3 -8
- package/tests/integration/TemplateCreation/api-response.js +0 -5
- package/tests/integration/TemplateCreation/msw-handler.js +63 -42
- package/utils/common.js +0 -7
- package/utils/commonUtils.js +6 -2
- package/v2Components/CapImageUpload/index.js +45 -51
- package/v2Components/CapInAppCTA/index.js +0 -1
- package/v2Components/CapTagList/index.js +120 -177
- package/v2Components/CapVideoUpload/constants.js +0 -3
- package/v2Components/CapVideoUpload/index.js +110 -167
- package/v2Components/CapVideoUpload/messages.js +0 -16
- package/v2Components/Carousel/index.js +13 -15
- package/v2Components/CustomerSearchSection/_customerSearch.scss +309 -0
- package/v2Components/CustomerSearchSection/constants.js +5 -0
- package/v2Components/CustomerSearchSection/index.js +362 -0
- package/v2Components/CustomerSearchSection/messages.js +20 -0
- package/v2Components/CustomerSearchSection/tests/utils.test.js +334 -0
- package/v2Components/CustomerSearchSection/utils.js +49 -0
- package/v2Components/ErrorInfoNote/style.scss +0 -1
- package/v2Components/MobilePushPreviewV2/index.js +5 -37
- package/v2Components/TemplatePreview/_templatePreview.scss +72 -114
- package/v2Components/TemplatePreview/index.js +50 -178
- package/v2Components/TemplatePreview/messages.js +0 -4
- package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +543 -0
- package/v2Components/TestAndPreviewSlidebox/actions.js +67 -0
- package/v2Components/TestAndPreviewSlidebox/constants.js +67 -0
- package/v2Components/TestAndPreviewSlidebox/index.js +771 -0
- package/v2Components/TestAndPreviewSlidebox/messages.js +147 -0
- package/v2Components/TestAndPreviewSlidebox/reducer.js +233 -0
- package/v2Components/TestAndPreviewSlidebox/sagas.js +258 -0
- package/v2Components/TestAndPreviewSlidebox/selectors.js +142 -0
- package/v2Components/TestAndPreviewSlidebox/tests/actions.test.js +80 -0
- package/v2Components/TestAndPreviewSlidebox/tests/reducer.test.js +367 -0
- package/v2Components/TestAndPreviewSlidebox/tests/saga.rtl.test.js +192 -0
- package/v2Components/TestAndPreviewSlidebox/tests/saga.test.js +652 -0
- package/v2Components/TestAndPreviewSlidebox/tests/selector.test.js +182 -0
- package/v2Containers/CreativesContainer/SlideBoxContent.js +21 -9
- package/v2Containers/CreativesContainer/SlideBoxFooter.js +23 -2
- package/v2Containers/CreativesContainer/index.js +160 -195
- package/v2Containers/CreativesContainer/messages.js +4 -0
- package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +21 -0
- package/v2Containers/Email/index.js +18 -6
- package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +10 -0
- package/v2Containers/EmailWrapper/index.js +6 -0
- package/v2Containers/InApp/constants.js +0 -1
- package/v2Containers/InApp/index.js +13 -13
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +3 -0
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +2 -0
- package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +2 -0
- package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +9 -0
- package/v2Containers/MobilePush/Create/index.js +0 -1
- package/v2Containers/MobilePush/commonMethods.js +14 -7
- package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +23 -5
- package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +4 -0
- package/v2Containers/TagList/index.js +10 -56
- package/v2Containers/Templates/_templates.scss +1 -101
- package/v2Containers/Templates/index.js +35 -147
- package/v2Containers/Templates/messages.js +0 -8
- package/v2Containers/Templates/sagas.js +0 -2
- package/v2Containers/WeChat/RichmediaTemplates/Create/index.js +1 -1
- package/v2Containers/Whatsapp/constants.js +0 -1
- package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +35 -0
- package/utils/createPayload.js +0 -270
- package/utils/tests/createPayload.test.js +0 -761
- package/v2Components/CapMpushCTA/constants.js +0 -25
- package/v2Components/CapMpushCTA/index.js +0 -332
- package/v2Components/CapMpushCTA/index.scss +0 -95
- package/v2Components/CapMpushCTA/messages.js +0 -89
- package/v2Components/TemplatePreview/assets/images/Android _ With date and time.svg +0 -29
- package/v2Components/TemplatePreview/assets/images/android.svg +0 -9
- package/v2Components/TemplatePreview/assets/images/iOS _ With date and time.svg +0 -26
- package/v2Components/TemplatePreview/assets/images/ios.svg +0 -9
- package/v2Containers/Email/tests/index.test.js +0 -35
- package/v2Containers/MobilePushNew/actions.js +0 -116
- package/v2Containers/MobilePushNew/components/CtaButtons.js +0 -170
- package/v2Containers/MobilePushNew/components/MediaUploaders.js +0 -686
- package/v2Containers/MobilePushNew/components/PlatformContentFields.js +0 -279
- package/v2Containers/MobilePushNew/components/index.js +0 -5
- package/v2Containers/MobilePushNew/components/tests/CtaButtons.test.js +0 -779
- package/v2Containers/MobilePushNew/components/tests/MediaUploaders.test.js +0 -2114
- package/v2Containers/MobilePushNew/components/tests/PlatformContentFields.test.js +0 -343
- package/v2Containers/MobilePushNew/constants.js +0 -115
- package/v2Containers/MobilePushNew/hooks/tests/usePlatformSync.test.js +0 -1299
- package/v2Containers/MobilePushNew/hooks/tests/useUpload.test.js +0 -1223
- package/v2Containers/MobilePushNew/hooks/usePlatformSync.js +0 -246
- package/v2Containers/MobilePushNew/hooks/useUpload.js +0 -709
- package/v2Containers/MobilePushNew/index.js +0 -2170
- package/v2Containers/MobilePushNew/index.scss +0 -308
- package/v2Containers/MobilePushNew/messages.js +0 -226
- package/v2Containers/MobilePushNew/reducer.js +0 -160
- package/v2Containers/MobilePushNew/sagas.js +0 -198
- package/v2Containers/MobilePushNew/selectors.js +0 -55
- package/v2Containers/MobilePushNew/tests/reducer.test.js +0 -741
- package/v2Containers/MobilePushNew/tests/sagas.test.js +0 -863
- package/v2Containers/MobilePushNew/tests/selectors.test.js +0 -425
- package/v2Containers/MobilePushNew/tests/utils.test.js +0 -322
- package/v2Containers/MobilePushNew/utils.js +0 -33
|
@@ -0,0 +1,652 @@
|
|
|
1
|
+
import { expectSaga } from 'redux-saga-test-plan';
|
|
2
|
+
import * as matchers from 'redux-saga-test-plan/matchers';
|
|
3
|
+
import { call, takeLatest } from 'redux-saga/effects';
|
|
4
|
+
import { throwError } from 'redux-saga-test-plan/providers';
|
|
5
|
+
import * as Api from '../../../services/api';
|
|
6
|
+
import * as sagas from '../sagas';
|
|
7
|
+
import * as types from '../constants';
|
|
8
|
+
|
|
9
|
+
describe('TestAndPreviewSlidebox Sagas', () => {
|
|
10
|
+
describe('searchCustomersSaga', () => {
|
|
11
|
+
it('should handle successful customer search', () => {
|
|
12
|
+
const mockResponse = {
|
|
13
|
+
result: {
|
|
14
|
+
data: { 1: { id: 1, name: 'Customer 1' } },
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
return expectSaga(sagas.searchCustomersSaga, {
|
|
19
|
+
payload: {
|
|
20
|
+
query: '432456',
|
|
21
|
+
},
|
|
22
|
+
})
|
|
23
|
+
.provide([
|
|
24
|
+
[call(Api.searchCustomers, { query: '432456' }), mockResponse],
|
|
25
|
+
])
|
|
26
|
+
.put({
|
|
27
|
+
type: types.SEARCH_CUSTOMERS_SUCCESS,
|
|
28
|
+
payload: {
|
|
29
|
+
customers: mockResponse.result.data,
|
|
30
|
+
},
|
|
31
|
+
})
|
|
32
|
+
.run();
|
|
33
|
+
});
|
|
34
|
+
it('should handle error in searchCustomersSaga', () => {
|
|
35
|
+
const error = 'Search failed';
|
|
36
|
+
return expectSaga(sagas.searchCustomersSaga, {
|
|
37
|
+
payload: {
|
|
38
|
+
query: '432456',
|
|
39
|
+
},
|
|
40
|
+
})
|
|
41
|
+
.provide([
|
|
42
|
+
[call(Api.searchCustomers, { query: '432456' }), throwError(error)],
|
|
43
|
+
])
|
|
44
|
+
.put({
|
|
45
|
+
type: types.SEARCH_CUSTOMERS_FAILURE,
|
|
46
|
+
payload: {
|
|
47
|
+
error: 'Network error occurred',
|
|
48
|
+
},
|
|
49
|
+
})
|
|
50
|
+
.run();
|
|
51
|
+
});
|
|
52
|
+
it('should handle error in searchCustomersSaga', () => {
|
|
53
|
+
const error = new Error('Search failed');
|
|
54
|
+
return expectSaga(sagas.searchCustomersSaga, {
|
|
55
|
+
payload: {
|
|
56
|
+
query: '432456',
|
|
57
|
+
},
|
|
58
|
+
})
|
|
59
|
+
.provide([
|
|
60
|
+
[call(Api.searchCustomers, { query: '432456' }), { isError: true, message: error.message }],
|
|
61
|
+
])
|
|
62
|
+
.put({
|
|
63
|
+
type: types.SEARCH_CUSTOMERS_FAILURE,
|
|
64
|
+
payload: {
|
|
65
|
+
error: error.message,
|
|
66
|
+
},
|
|
67
|
+
})
|
|
68
|
+
.run();
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe('extractTagsSaga', () => {
|
|
72
|
+
it('should handle successful tag extraction', () => {
|
|
73
|
+
const mockResponse = {
|
|
74
|
+
data: [{
|
|
75
|
+
tags: { 1: { id: 1, name: 'Tag 1' } },
|
|
76
|
+
}],
|
|
77
|
+
};
|
|
78
|
+
return expectSaga(sagas.extractTagsSaga, {
|
|
79
|
+
payload: {
|
|
80
|
+
templateSubject: 'Test Subject',
|
|
81
|
+
templateContent: 'Test Content',
|
|
82
|
+
},
|
|
83
|
+
})
|
|
84
|
+
.provide([
|
|
85
|
+
[call(Api.extractTagsWithMetaData, { messageTitle: 'Test Subject', messageBody: 'Test Content' }), mockResponse],
|
|
86
|
+
])
|
|
87
|
+
.put({
|
|
88
|
+
type: types.EXTRACT_TAGS_SUCCESS,
|
|
89
|
+
payload: {
|
|
90
|
+
extractedtags: mockResponse.data,
|
|
91
|
+
},
|
|
92
|
+
})
|
|
93
|
+
.run();
|
|
94
|
+
});
|
|
95
|
+
it('should handle successful tag extraction', () => {
|
|
96
|
+
const mockResponse = {
|
|
97
|
+
data: [],
|
|
98
|
+
};
|
|
99
|
+
return expectSaga(sagas.extractTagsSaga, {
|
|
100
|
+
payload: {
|
|
101
|
+
templateSubject: 'Test Subject',
|
|
102
|
+
templateContent: 'Test Content',
|
|
103
|
+
},
|
|
104
|
+
})
|
|
105
|
+
.provide([
|
|
106
|
+
[call(Api.extractTagsWithMetaData, { messageTitle: 'Test Subject', messageBody: 'Test Content' }), mockResponse],
|
|
107
|
+
])
|
|
108
|
+
.put({
|
|
109
|
+
type: types.EXTRACT_TAGS_FAILURE,
|
|
110
|
+
payload: {
|
|
111
|
+
error: 'Failed to extract tags',
|
|
112
|
+
},
|
|
113
|
+
})
|
|
114
|
+
.run();
|
|
115
|
+
});
|
|
116
|
+
it('should handle error in extractTagsSaga', () => {
|
|
117
|
+
const error = new Error('Tag extraction failed');
|
|
118
|
+
return expectSaga(sagas.extractTagsSaga, {
|
|
119
|
+
payload: {
|
|
120
|
+
templateSubject: 'Test Subject',
|
|
121
|
+
templateContent: 'Test Content',
|
|
122
|
+
},
|
|
123
|
+
})
|
|
124
|
+
.provide([
|
|
125
|
+
[call(Api.extractTagsWithMetaData, { messageTitle: 'Test Subject', messageBody: 'Test Content' }), throwError(error)],
|
|
126
|
+
])
|
|
127
|
+
.put({
|
|
128
|
+
type: types.EXTRACT_TAGS_FAILURE,
|
|
129
|
+
payload: {
|
|
130
|
+
error: error.message,
|
|
131
|
+
},
|
|
132
|
+
})
|
|
133
|
+
.run();
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
describe('updatePreviewSaga', () => {
|
|
137
|
+
it('should handle successful preview update', () => {
|
|
138
|
+
const mockResponse = {
|
|
139
|
+
data: 'Test Preview Data',
|
|
140
|
+
};
|
|
141
|
+
return expectSaga(sagas.updatePreviewSaga, {
|
|
142
|
+
payload: {
|
|
143
|
+
previewData: 'Test Preview Data',
|
|
144
|
+
},
|
|
145
|
+
})
|
|
146
|
+
.provide([
|
|
147
|
+
[call(Api.updateEmailPreview, { previewData: 'Test Preview Data' }), mockResponse],
|
|
148
|
+
])
|
|
149
|
+
.put({
|
|
150
|
+
type: types.UPDATE_PREVIEW_SUCCESS,
|
|
151
|
+
payload: {
|
|
152
|
+
previewData: mockResponse.data,
|
|
153
|
+
},
|
|
154
|
+
})
|
|
155
|
+
.run();
|
|
156
|
+
});
|
|
157
|
+
it('should throw error in updatePreviewSaga', () => {
|
|
158
|
+
const mockResponse = {
|
|
159
|
+
previewData: 'Test Preview Data',
|
|
160
|
+
error: 'Failed to load preview',
|
|
161
|
+
};
|
|
162
|
+
return expectSaga(sagas.updatePreviewSaga, {
|
|
163
|
+
payload: {
|
|
164
|
+
previewData: 'Test Preview Data',
|
|
165
|
+
},
|
|
166
|
+
})
|
|
167
|
+
.provide([
|
|
168
|
+
[call(Api.updateEmailPreview, { previewData: 'Test Preview Data' }), mockResponse],
|
|
169
|
+
])
|
|
170
|
+
.put({
|
|
171
|
+
type: types.UPDATE_PREVIEW_FAILURE,
|
|
172
|
+
payload: {
|
|
173
|
+
error: 'Failed to load preview',
|
|
174
|
+
},
|
|
175
|
+
})
|
|
176
|
+
.run();
|
|
177
|
+
});
|
|
178
|
+
it('should throw error in updatePreviewSaga', () => {
|
|
179
|
+
const mockResponse = {
|
|
180
|
+
previewData: 'Test Preview Data',
|
|
181
|
+
};
|
|
182
|
+
return expectSaga(sagas.updatePreviewSaga, {
|
|
183
|
+
payload: {
|
|
184
|
+
previewData: 'Test Preview Data',
|
|
185
|
+
},
|
|
186
|
+
})
|
|
187
|
+
.provide([
|
|
188
|
+
[call(Api.updateEmailPreview, { previewData: 'Test Preview Data' }), mockResponse],
|
|
189
|
+
])
|
|
190
|
+
.put({
|
|
191
|
+
type: types.UPDATE_PREVIEW_FAILURE,
|
|
192
|
+
payload: {
|
|
193
|
+
error: 'Failed to update preview',
|
|
194
|
+
},
|
|
195
|
+
})
|
|
196
|
+
.run();
|
|
197
|
+
});
|
|
198
|
+
it('should handle error in updatePreviewSaga', () => {
|
|
199
|
+
const error = new Error('Preview update failed');
|
|
200
|
+
return expectSaga(sagas.updatePreviewSaga, {
|
|
201
|
+
payload: {
|
|
202
|
+
previewData: 'Test Preview Data',
|
|
203
|
+
},
|
|
204
|
+
})
|
|
205
|
+
.provide([
|
|
206
|
+
[call(Api.updateEmailPreview, { previewData: 'Test Preview Data' }), throwError(error)],
|
|
207
|
+
])
|
|
208
|
+
.put({
|
|
209
|
+
type: types.UPDATE_PREVIEW_FAILURE,
|
|
210
|
+
payload: {
|
|
211
|
+
error: error.message,
|
|
212
|
+
},
|
|
213
|
+
})
|
|
214
|
+
.run();
|
|
215
|
+
});
|
|
216
|
+
it('should handle error in updatePreviewSaga', () => {
|
|
217
|
+
const error = 'Preview update failed';
|
|
218
|
+
return expectSaga(sagas.updatePreviewSaga, {
|
|
219
|
+
payload: {
|
|
220
|
+
previewData: 'Test Preview Data',
|
|
221
|
+
},
|
|
222
|
+
})
|
|
223
|
+
.provide([
|
|
224
|
+
[call(Api.updateEmailPreview, { previewData: 'Test Preview Data' }), throwError(error)],
|
|
225
|
+
])
|
|
226
|
+
.put({
|
|
227
|
+
type: types.UPDATE_PREVIEW_FAILURE,
|
|
228
|
+
payload: {
|
|
229
|
+
error: 'Network error occurred',
|
|
230
|
+
},
|
|
231
|
+
})
|
|
232
|
+
.run();
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
describe('sendTestMessageSaga', () => {
|
|
236
|
+
it('should handle successful test message send', () => {
|
|
237
|
+
const mockResponse = {
|
|
238
|
+
data: {
|
|
239
|
+
testMessage: 'Test Message',
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
return expectSaga(sagas.sendTestMessageSaga, {
|
|
243
|
+
payload: {
|
|
244
|
+
testMessage: 'Test Message',
|
|
245
|
+
},
|
|
246
|
+
callback: jest.fn(),
|
|
247
|
+
})
|
|
248
|
+
.provide([
|
|
249
|
+
[call(Api.sendTestMessage, { testMessage: 'Test Message' }), mockResponse],
|
|
250
|
+
])
|
|
251
|
+
.put({
|
|
252
|
+
type: types.SEND_TEST_MESSAGE_SUCCESS,
|
|
253
|
+
payload: {
|
|
254
|
+
response: true,
|
|
255
|
+
},
|
|
256
|
+
})
|
|
257
|
+
.run();
|
|
258
|
+
});
|
|
259
|
+
it('should handle successful test message send', () => {
|
|
260
|
+
const mockResponse = {
|
|
261
|
+
errors: 'true',
|
|
262
|
+
};
|
|
263
|
+
return expectSaga(sagas.sendTestMessageSaga, {
|
|
264
|
+
payload: {
|
|
265
|
+
testMessage: 'Test Message',
|
|
266
|
+
},
|
|
267
|
+
callback: jest.fn(),
|
|
268
|
+
})
|
|
269
|
+
.provide([
|
|
270
|
+
[call(Api.sendTestMessage, { testMessage: 'Test Message' }), mockResponse],
|
|
271
|
+
])
|
|
272
|
+
.put({
|
|
273
|
+
type: types.SEND_TEST_MESSAGE_FAILURE,
|
|
274
|
+
payload: {
|
|
275
|
+
response: false,
|
|
276
|
+
error: 'true',
|
|
277
|
+
},
|
|
278
|
+
})
|
|
279
|
+
.run();
|
|
280
|
+
});
|
|
281
|
+
it('should handle error in sendTestMessageSaga', () => {
|
|
282
|
+
const error = new Error('Test message send failed');
|
|
283
|
+
return expectSaga(sagas.sendTestMessageSaga, {
|
|
284
|
+
payload: {
|
|
285
|
+
testMessage: 'Test Message',
|
|
286
|
+
},
|
|
287
|
+
callback: jest.fn(),
|
|
288
|
+
})
|
|
289
|
+
.provide([
|
|
290
|
+
[call(Api.sendTestMessage, { testMessage: 'Test Message' }), throwError(error)],
|
|
291
|
+
])
|
|
292
|
+
.put({
|
|
293
|
+
type: types.SEND_TEST_MESSAGE_FAILURE,
|
|
294
|
+
payload: {
|
|
295
|
+
response: false,
|
|
296
|
+
error: error.message,
|
|
297
|
+
},
|
|
298
|
+
})
|
|
299
|
+
.run();
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
describe('fetchTestCustomersSaga', () => {
|
|
303
|
+
it('should handle successful test customers fetch', () => {
|
|
304
|
+
const mockResponse = {
|
|
305
|
+
entity: {
|
|
306
|
+
userIds: [1, 2, 3],
|
|
307
|
+
},
|
|
308
|
+
};
|
|
309
|
+
return expectSaga(sagas.fetchTestCustomersSaga)
|
|
310
|
+
.provide([
|
|
311
|
+
[matchers.call.fn(Api.fetchTestCustomers), mockResponse],
|
|
312
|
+
[matchers.call.fn(Api.getBulkCustomerDetails, { fetchedUserIds: [1, 2, 3] }), {
|
|
313
|
+
result: {
|
|
314
|
+
data: [
|
|
315
|
+
{
|
|
316
|
+
entity: {
|
|
317
|
+
id: 1,
|
|
318
|
+
profiles: [{
|
|
319
|
+
firstName: 'John',
|
|
320
|
+
lastName: 'Doe',
|
|
321
|
+
identifiers: [{
|
|
322
|
+
type: 'mobile',
|
|
323
|
+
value: '1234567890',
|
|
324
|
+
}, {
|
|
325
|
+
type: 'email',
|
|
326
|
+
value: 'john@example.com',
|
|
327
|
+
}],
|
|
328
|
+
}],
|
|
329
|
+
},
|
|
330
|
+
},
|
|
331
|
+
],
|
|
332
|
+
},
|
|
333
|
+
}],
|
|
334
|
+
|
|
335
|
+
])
|
|
336
|
+
.put({
|
|
337
|
+
type: types.FETCH_TEST_CUSTOMERS_SUCCESS,
|
|
338
|
+
payload: {
|
|
339
|
+
customers: [
|
|
340
|
+
{
|
|
341
|
+
userId: 1,
|
|
342
|
+
name: 'John Doe',
|
|
343
|
+
mobile: '1234567890',
|
|
344
|
+
email: 'john@example.com',
|
|
345
|
+
},
|
|
346
|
+
],
|
|
347
|
+
},
|
|
348
|
+
})
|
|
349
|
+
.run();
|
|
350
|
+
});
|
|
351
|
+
it('should throw error in fetchTestCustomersSaga', () => {
|
|
352
|
+
const mockResponse = {
|
|
353
|
+
ent: {
|
|
354
|
+
userIds: [1, 2, 3],
|
|
355
|
+
},
|
|
356
|
+
};
|
|
357
|
+
return expectSaga(sagas.fetchTestCustomersSaga)
|
|
358
|
+
.provide([
|
|
359
|
+
[matchers.call.fn(Api.fetchTestCustomers), mockResponse],
|
|
360
|
+
[matchers.call.fn(Api.getBulkCustomerDetails, { fetchedUserIds: [1, 2, 3] }), {
|
|
361
|
+
result: {
|
|
362
|
+
data: [
|
|
363
|
+
{
|
|
364
|
+
entity: {
|
|
365
|
+
id: 1,
|
|
366
|
+
profiles: [{
|
|
367
|
+
firstName: 'John',
|
|
368
|
+
lastName: 'Doe',
|
|
369
|
+
identifiers: [{
|
|
370
|
+
type: 'mobile',
|
|
371
|
+
value: '1234567890',
|
|
372
|
+
}, {
|
|
373
|
+
type: 'email',
|
|
374
|
+
value: 'john@example.com',
|
|
375
|
+
}],
|
|
376
|
+
}],
|
|
377
|
+
},
|
|
378
|
+
},
|
|
379
|
+
],
|
|
380
|
+
},
|
|
381
|
+
}],
|
|
382
|
+
|
|
383
|
+
])
|
|
384
|
+
.put({
|
|
385
|
+
type: types.FETCH_TEST_CUSTOMERS_FAILURE,
|
|
386
|
+
payload: {
|
|
387
|
+
error: 'Failed to fetch test customers',
|
|
388
|
+
},
|
|
389
|
+
})
|
|
390
|
+
.run();
|
|
391
|
+
});
|
|
392
|
+
it('should throw error in fetchTestCustomersSaga', () => {
|
|
393
|
+
const mockResponse = {
|
|
394
|
+
entity: {
|
|
395
|
+
userIds: 'not array',
|
|
396
|
+
},
|
|
397
|
+
};
|
|
398
|
+
return expectSaga(sagas.fetchTestCustomersSaga)
|
|
399
|
+
.provide([
|
|
400
|
+
[matchers.call.fn(Api.fetchTestCustomers), mockResponse],
|
|
401
|
+
[matchers.call.fn(Api.getBulkCustomerDetails, { fetchedUserIds: [1, 2, 3] }), {
|
|
402
|
+
result: {
|
|
403
|
+
data: [
|
|
404
|
+
{
|
|
405
|
+
entity: {
|
|
406
|
+
id: 1,
|
|
407
|
+
profiles: [{
|
|
408
|
+
firstName: 'John',
|
|
409
|
+
lastName: 'Doe',
|
|
410
|
+
identifiers: [{
|
|
411
|
+
type: 'mobile',
|
|
412
|
+
value: '1234567890',
|
|
413
|
+
}, {
|
|
414
|
+
type: 'email',
|
|
415
|
+
value: 'john@example.com',
|
|
416
|
+
}],
|
|
417
|
+
}],
|
|
418
|
+
},
|
|
419
|
+
},
|
|
420
|
+
],
|
|
421
|
+
},
|
|
422
|
+
}],
|
|
423
|
+
|
|
424
|
+
])
|
|
425
|
+
.put({
|
|
426
|
+
type: types.FETCH_TEST_CUSTOMERS_FAILURE,
|
|
427
|
+
payload: {
|
|
428
|
+
error: 'No test customers found',
|
|
429
|
+
},
|
|
430
|
+
})
|
|
431
|
+
.run();
|
|
432
|
+
});
|
|
433
|
+
it('should handle error in fetchTestCustomersSaga', () => {
|
|
434
|
+
const error = new Error('Test customers fetch failed');
|
|
435
|
+
return expectSaga(sagas.fetchTestCustomersSaga)
|
|
436
|
+
.provide([
|
|
437
|
+
[call(Api.fetchTestCustomers), throwError(error)],
|
|
438
|
+
])
|
|
439
|
+
.put({
|
|
440
|
+
type: types.FETCH_TEST_CUSTOMERS_FAILURE,
|
|
441
|
+
payload: {
|
|
442
|
+
error: error.message,
|
|
443
|
+
},
|
|
444
|
+
})
|
|
445
|
+
.run();
|
|
446
|
+
});
|
|
447
|
+
});
|
|
448
|
+
describe('fetchTestGroupsSaga', () => {
|
|
449
|
+
it('should handle successful test groups fetch', () => {
|
|
450
|
+
const mockResponse = {
|
|
451
|
+
entity: {
|
|
452
|
+
userGroups: [
|
|
453
|
+
{
|
|
454
|
+
id: 1,
|
|
455
|
+
name: 'Test Group',
|
|
456
|
+
userIds: [1, 2, 3],
|
|
457
|
+
},
|
|
458
|
+
],
|
|
459
|
+
},
|
|
460
|
+
};
|
|
461
|
+
return expectSaga(sagas.fetchTestGroupsSaga)
|
|
462
|
+
.provide([
|
|
463
|
+
[call(Api.fetchTestGroups), mockResponse],
|
|
464
|
+
])
|
|
465
|
+
.put({
|
|
466
|
+
type: types.FETCH_TEST_GROUPS_SUCCESS,
|
|
467
|
+
payload: {
|
|
468
|
+
groups: mockResponse.entity.userGroups,
|
|
469
|
+
},
|
|
470
|
+
})
|
|
471
|
+
.run();
|
|
472
|
+
});
|
|
473
|
+
it('should throw error in fetchTestGroupsSaga', () => {
|
|
474
|
+
const mockResponse = {
|
|
475
|
+
ent: {
|
|
476
|
+
userGroups: [
|
|
477
|
+
{
|
|
478
|
+
id: 1,
|
|
479
|
+
name: 'Test Group',
|
|
480
|
+
userIds: [1, 2, 3],
|
|
481
|
+
},
|
|
482
|
+
],
|
|
483
|
+
},
|
|
484
|
+
};
|
|
485
|
+
return expectSaga(sagas.fetchTestGroupsSaga)
|
|
486
|
+
.provide([
|
|
487
|
+
[call(Api.fetchTestGroups), mockResponse],
|
|
488
|
+
])
|
|
489
|
+
.put({
|
|
490
|
+
type: types.FETCH_TEST_GROUPS_FAILURE,
|
|
491
|
+
payload: {
|
|
492
|
+
error: 'Failed to fetch test groups',
|
|
493
|
+
},
|
|
494
|
+
})
|
|
495
|
+
.run();
|
|
496
|
+
});
|
|
497
|
+
it('should handle error in fetchTestGroupsSaga', () => {
|
|
498
|
+
const error = new Error('Test groups fetch failed');
|
|
499
|
+
return expectSaga(sagas.fetchTestGroupsSaga)
|
|
500
|
+
.provide([
|
|
501
|
+
[call(Api.fetchTestGroups), throwError(error)],
|
|
502
|
+
])
|
|
503
|
+
.put({
|
|
504
|
+
type: types.FETCH_TEST_GROUPS_FAILURE,
|
|
505
|
+
payload: {
|
|
506
|
+
error: error.message,
|
|
507
|
+
},
|
|
508
|
+
})
|
|
509
|
+
.run();
|
|
510
|
+
});
|
|
511
|
+
});
|
|
512
|
+
describe('createMessageMetaSaga', () => {
|
|
513
|
+
it('should handle successful message meta creation', () => {
|
|
514
|
+
const mockResponse = {
|
|
515
|
+
data: {
|
|
516
|
+
messageMeta: 'Test Message Meta',
|
|
517
|
+
},
|
|
518
|
+
};
|
|
519
|
+
return expectSaga(sagas.createMessageMetaSaga, {
|
|
520
|
+
payload: {
|
|
521
|
+
messageMeta: 'Test Message Meta',
|
|
522
|
+
},
|
|
523
|
+
messageMetaConfigId: undefined,
|
|
524
|
+
callback: jest.fn(),
|
|
525
|
+
})
|
|
526
|
+
.provide([
|
|
527
|
+
[call(Api.createTestMessageMeta, { messageMeta: 'Test Message Meta' }), mockResponse],
|
|
528
|
+
])
|
|
529
|
+
.put({
|
|
530
|
+
type: types.CREATE_MESSAGE_META_SUCCESS,
|
|
531
|
+
payload: {
|
|
532
|
+
response: mockResponse,
|
|
533
|
+
},
|
|
534
|
+
})
|
|
535
|
+
.run();
|
|
536
|
+
});
|
|
537
|
+
it('should handle error in createMessageMetaSaga', () => {
|
|
538
|
+
const mockResponse = {
|
|
539
|
+
errors: true,
|
|
540
|
+
};
|
|
541
|
+
return expectSaga(sagas.createMessageMetaSaga, {
|
|
542
|
+
payload: {
|
|
543
|
+
messageMeta: 'Test Message Meta',
|
|
544
|
+
},
|
|
545
|
+
messageMetaConfigId: '123',
|
|
546
|
+
callback: jest.fn(),
|
|
547
|
+
})
|
|
548
|
+
.provide([
|
|
549
|
+
[call(Api.updateTestMessageMeta, { data: { messageMeta: 'Test Message Meta' }, messageMetaConfigId: '123' }), mockResponse],
|
|
550
|
+
])
|
|
551
|
+
.put({
|
|
552
|
+
type: types.CREATE_MESSAGE_META_FAILURE,
|
|
553
|
+
payload: {
|
|
554
|
+
error: mockResponse.errors,
|
|
555
|
+
},
|
|
556
|
+
})
|
|
557
|
+
.run();
|
|
558
|
+
});
|
|
559
|
+
});
|
|
560
|
+
describe('getPrefilledValuesSaga', () => {
|
|
561
|
+
it('should handle successful prefilled values fetch', () => {
|
|
562
|
+
const mockResponse = {
|
|
563
|
+
data: {
|
|
564
|
+
resolvedTagValues: 'Test Prefilled Values',
|
|
565
|
+
},
|
|
566
|
+
};
|
|
567
|
+
return expectSaga(sagas.getPrefilledValuesSaga, {
|
|
568
|
+
payload: {
|
|
569
|
+
previewData: 'test',
|
|
570
|
+
},
|
|
571
|
+
})
|
|
572
|
+
.provide([
|
|
573
|
+
[call(Api.updateEmailPreview, { previewData: 'test' }), mockResponse],
|
|
574
|
+
])
|
|
575
|
+
.put({
|
|
576
|
+
type: types.GET_PREFILLED_VALUES_SUCCESS,
|
|
577
|
+
payload: {
|
|
578
|
+
values: mockResponse.data.resolvedTagValues,
|
|
579
|
+
},
|
|
580
|
+
})
|
|
581
|
+
.run();
|
|
582
|
+
});
|
|
583
|
+
it('should handle error in getPrefilledValuesSaga', () => {
|
|
584
|
+
const error = new Error('Failed to fetch prefilled values');
|
|
585
|
+
return expectSaga(sagas.getPrefilledValuesSaga, {
|
|
586
|
+
payload: {
|
|
587
|
+
previewData: 'test',
|
|
588
|
+
},
|
|
589
|
+
})
|
|
590
|
+
.provide([
|
|
591
|
+
[call(Api.updateEmailPreview, { previewData: 'test' }), error],
|
|
592
|
+
])
|
|
593
|
+
.put({
|
|
594
|
+
type: types.GET_PREFILLED_VALUES_FAILURE,
|
|
595
|
+
payload: {
|
|
596
|
+
error: error.message,
|
|
597
|
+
},
|
|
598
|
+
})
|
|
599
|
+
.run();
|
|
600
|
+
});
|
|
601
|
+
});
|
|
602
|
+
});
|
|
603
|
+
describe('Saga watchers', () => {
|
|
604
|
+
describe('watchSearchCustomersSaga', () => {
|
|
605
|
+
const generator = sagas.watchSearchCustomers();
|
|
606
|
+
it('should take the latest SEARCH_CUSTOMERS_REQUESTED actions and call searchCustomersSaga', () => {
|
|
607
|
+
expect(generator.next().value).toEqual(takeLatest(types.SEARCH_CUSTOMERS_REQUESTED, sagas.searchCustomersSaga));
|
|
608
|
+
});
|
|
609
|
+
});
|
|
610
|
+
describe('watchExtractTagsSaga', () => {
|
|
611
|
+
const generator = sagas.watchExtractTags();
|
|
612
|
+
it('should take the latest EXTRACT_TAGS_REQUESTED actions and call extractTagsSaga', () => {
|
|
613
|
+
expect(generator.next().value).toEqual(takeLatest(types.EXTRACT_TAGS_REQUEST, sagas.extractTagsSaga));
|
|
614
|
+
});
|
|
615
|
+
});
|
|
616
|
+
describe('watchUpdatePreviewSaga', () => {
|
|
617
|
+
const generator = sagas.watchUpdatePreview();
|
|
618
|
+
it('should take the latest UPDATE_PREVIEW_REQUESTED actions and call updatePreviewSaga', () => {
|
|
619
|
+
expect(generator.next().value).toEqual(takeLatest(types.UPDATE_PREVIEW_REQUEST, sagas.updatePreviewSaga));
|
|
620
|
+
});
|
|
621
|
+
});
|
|
622
|
+
describe('watchSendTestMessageSaga', () => {
|
|
623
|
+
const generator = sagas.watchSendTestMessage();
|
|
624
|
+
it('should take the latest SEND_TEST_MESSAGE_REQUESTED actions and call sendTestMessageSaga', () => {
|
|
625
|
+
expect(generator.next().value).toEqual(takeLatest(types.SEND_TEST_MESSAGE_REQUESTED, sagas.sendTestMessageSaga));
|
|
626
|
+
});
|
|
627
|
+
});
|
|
628
|
+
describe('watchFetchTestCustomersSaga', () => {
|
|
629
|
+
const generator = sagas.watchFetchTestCustomers();
|
|
630
|
+
it('should take the latest FETCH_TEST_CUSTOMERS_REQUESTED actions and call fetchTestCustomersSaga', () => {
|
|
631
|
+
expect(generator.next().value).toEqual(takeLatest(types.FETCH_TEST_CUSTOMERS_REQUESTED, sagas.fetchTestCustomersSaga));
|
|
632
|
+
});
|
|
633
|
+
});
|
|
634
|
+
describe('watchFetchTestGroupsSaga', () => {
|
|
635
|
+
const generator = sagas.watchFetchTestGroups();
|
|
636
|
+
it('should take the latest FETCH_TEST_GROUPS_REQUESTED actions and call fetchTestGroupsSaga', () => {
|
|
637
|
+
expect(generator.next().value).toEqual(takeLatest(types.FETCH_TEST_GROUPS_REQUESTED, sagas.fetchTestGroupsSaga));
|
|
638
|
+
});
|
|
639
|
+
});
|
|
640
|
+
describe('watchCreateMessageMetaSaga', () => {
|
|
641
|
+
const generator = sagas.watchCreateMessageMeta();
|
|
642
|
+
it('should take the latest CREATE_MESSAGE_META_REQUESTED actions and call createMessageMetaSaga', () => {
|
|
643
|
+
expect(generator.next().value).toEqual(takeLatest(types.CREATE_MESSAGE_META_REQUESTED, sagas.createMessageMetaSaga));
|
|
644
|
+
});
|
|
645
|
+
});
|
|
646
|
+
describe('watchGetPrefilledValuesSaga', () => {
|
|
647
|
+
const generator = sagas.watchGetPrefilledValues();
|
|
648
|
+
it('should take the latest GET_PREFILLED_VALUES_REQUESTED actions and call getPrefilledValuesSaga', () => {
|
|
649
|
+
expect(generator.next().value).toEqual(takeLatest(types.GET_PREFILLED_VALUES_REQUESTED, sagas.getPrefilledValuesSaga));
|
|
650
|
+
});
|
|
651
|
+
});
|
|
652
|
+
});
|