@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
|
@@ -1,425 +0,0 @@
|
|
|
1
|
-
import { fromJS } from 'immutable';
|
|
2
|
-
import {
|
|
3
|
-
makeSelectMobilePushNew,
|
|
4
|
-
makeSelectUploadedAssetData,
|
|
5
|
-
makeSelectUploadAssetSuccess,
|
|
6
|
-
makeSelectCreateError,
|
|
7
|
-
makeSelectAssetUploading,
|
|
8
|
-
makeSelectGetTemplateDetailsInProgress,
|
|
9
|
-
} from '../selectors';
|
|
10
|
-
|
|
11
|
-
describe('MobilePushNew selectors', () => {
|
|
12
|
-
// Mock state structures
|
|
13
|
-
const mockMobilePushNewState = {
|
|
14
|
-
uploadedAssetData: { id: 1, url: 'test-url' },
|
|
15
|
-
uploadAssetSuccess: true,
|
|
16
|
-
createTemplateErrorMessage: 'Test error message',
|
|
17
|
-
assetUploading: true,
|
|
18
|
-
getTemplateDetailsInProgress: true,
|
|
19
|
-
otherProperty: 'test-value',
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const mockStateWithMobilePushNew = fromJS({
|
|
23
|
-
mobilePushNew: mockMobilePushNewState,
|
|
24
|
-
otherState: { value: 'test' },
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
const mockStateWithoutMobilePushNew = fromJS({
|
|
28
|
-
otherState: { value: 'test' },
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
const mockStateWithEmptyMobilePushNew = fromJS({
|
|
32
|
-
mobilePushNew: {},
|
|
33
|
-
otherState: { value: 'test' },
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
const mockStateWithPartialMobilePushNew = fromJS({
|
|
37
|
-
mobilePushNew: {
|
|
38
|
-
uploadedAssetData: { id: 2, name: 'test-asset' },
|
|
39
|
-
uploadAssetSuccess: false,
|
|
40
|
-
// Missing other properties to test defaults
|
|
41
|
-
},
|
|
42
|
-
otherState: { value: 'test' },
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
describe('makeSelectMobilePushNew', () => {
|
|
46
|
-
it('should select the mobilePushNew state and convert to JS', () => {
|
|
47
|
-
const selector = makeSelectMobilePushNew();
|
|
48
|
-
const result = selector(mockStateWithMobilePushNew);
|
|
49
|
-
|
|
50
|
-
expect(result).toEqual(mockMobilePushNewState);
|
|
51
|
-
expect(typeof result).toBe('object');
|
|
52
|
-
expect(Array.isArray(result)).toBe(false);
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
it('should return empty object when mobilePushNew state does not exist', () => {
|
|
56
|
-
const selector = makeSelectMobilePushNew();
|
|
57
|
-
const result = selector(mockStateWithoutMobilePushNew);
|
|
58
|
-
|
|
59
|
-
expect(result).toEqual({});
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
it('should return empty object when mobilePushNew state is empty', () => {
|
|
63
|
-
const selector = makeSelectMobilePushNew();
|
|
64
|
-
const result = selector(mockStateWithEmptyMobilePushNew);
|
|
65
|
-
|
|
66
|
-
expect(result).toEqual({});
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
it('should handle partial mobilePushNew state', () => {
|
|
70
|
-
const selector = makeSelectMobilePushNew();
|
|
71
|
-
const result = selector(mockStateWithPartialMobilePushNew);
|
|
72
|
-
|
|
73
|
-
expect(result).toEqual({
|
|
74
|
-
uploadedAssetData: { id: 2, name: 'test-asset' },
|
|
75
|
-
uploadAssetSuccess: false,
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
describe('makeSelectUploadedAssetData', () => {
|
|
81
|
-
it('should select uploadedAssetData when it exists', () => {
|
|
82
|
-
const selector = makeSelectUploadedAssetData();
|
|
83
|
-
const result = selector(mockStateWithMobilePushNew);
|
|
84
|
-
|
|
85
|
-
// The selector returns the Immutable object directly, not converted to JS
|
|
86
|
-
expect(result.get('id')).toBe(1);
|
|
87
|
-
expect(result.get('url')).toBe('test-url');
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
it('should return empty object when uploadedAssetData does not exist', () => {
|
|
91
|
-
const selector = makeSelectUploadedAssetData();
|
|
92
|
-
const result = selector(mockStateWithoutMobilePushNew);
|
|
93
|
-
|
|
94
|
-
expect(result).toEqual({});
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
it('should return empty object when mobilePushNew state is empty', () => {
|
|
98
|
-
const selector = makeSelectUploadedAssetData();
|
|
99
|
-
const result = selector(mockStateWithEmptyMobilePushNew);
|
|
100
|
-
|
|
101
|
-
expect(result).toEqual({});
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
it('should return uploadedAssetData from partial state', () => {
|
|
105
|
-
const selector = makeSelectUploadedAssetData();
|
|
106
|
-
const result = selector(mockStateWithPartialMobilePushNew);
|
|
107
|
-
|
|
108
|
-
// The selector returns the Immutable object directly
|
|
109
|
-
expect(result.get('id')).toBe(2);
|
|
110
|
-
expect(result.get('name')).toBe('test-asset');
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
it('should return empty object when uploadedAssetData is null', () => {
|
|
114
|
-
const stateWithNullAssetData = fromJS({
|
|
115
|
-
mobilePushNew: {
|
|
116
|
-
uploadedAssetData: null,
|
|
117
|
-
uploadAssetSuccess: true,
|
|
118
|
-
},
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
const selector = makeSelectUploadedAssetData();
|
|
122
|
-
const result = selector(stateWithNullAssetData);
|
|
123
|
-
|
|
124
|
-
expect(result).toEqual({});
|
|
125
|
-
});
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
describe('makeSelectUploadAssetSuccess', () => {
|
|
129
|
-
it('should select uploadAssetSuccess when it is true', () => {
|
|
130
|
-
const selector = makeSelectUploadAssetSuccess();
|
|
131
|
-
const result = selector(mockStateWithMobilePushNew);
|
|
132
|
-
|
|
133
|
-
expect(result).toBe(true);
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
it('should select uploadAssetSuccess when it is false', () => {
|
|
137
|
-
const selector = makeSelectUploadAssetSuccess();
|
|
138
|
-
const result = selector(mockStateWithPartialMobilePushNew);
|
|
139
|
-
|
|
140
|
-
expect(result).toBe(false);
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
it('should return false when uploadAssetSuccess does not exist', () => {
|
|
144
|
-
const selector = makeSelectUploadAssetSuccess();
|
|
145
|
-
const result = selector(mockStateWithoutMobilePushNew);
|
|
146
|
-
|
|
147
|
-
expect(result).toBe(false);
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
it('should return false when mobilePushNew state is empty', () => {
|
|
151
|
-
const selector = makeSelectUploadAssetSuccess();
|
|
152
|
-
const result = selector(mockStateWithEmptyMobilePushNew);
|
|
153
|
-
|
|
154
|
-
expect(result).toBe(false);
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
it('should return false when uploadAssetSuccess is null or undefined', () => {
|
|
158
|
-
const stateWithNullSuccess = fromJS({
|
|
159
|
-
mobilePushNew: {
|
|
160
|
-
uploadAssetSuccess: null,
|
|
161
|
-
uploadedAssetData: {},
|
|
162
|
-
},
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
const selector = makeSelectUploadAssetSuccess();
|
|
166
|
-
const result = selector(stateWithNullSuccess);
|
|
167
|
-
|
|
168
|
-
expect(result).toBe(false);
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
describe('makeSelectCreateError', () => {
|
|
173
|
-
it('should select createTemplateErrorMessage when it exists', () => {
|
|
174
|
-
const selector = makeSelectCreateError();
|
|
175
|
-
const result = selector(mockStateWithMobilePushNew);
|
|
176
|
-
|
|
177
|
-
expect(result).toBe('Test error message');
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
it('should return empty string when createTemplateErrorMessage does not exist', () => {
|
|
181
|
-
const selector = makeSelectCreateError();
|
|
182
|
-
const result = selector(mockStateWithoutMobilePushNew);
|
|
183
|
-
|
|
184
|
-
expect(result).toBe('');
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
it('should return empty string when mobilePushNew state is empty', () => {
|
|
188
|
-
const selector = makeSelectCreateError();
|
|
189
|
-
const result = selector(mockStateWithEmptyMobilePushNew);
|
|
190
|
-
|
|
191
|
-
expect(result).toBe('');
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
it('should return empty string when createTemplateErrorMessage is not in partial state', () => {
|
|
195
|
-
const selector = makeSelectCreateError();
|
|
196
|
-
const result = selector(mockStateWithPartialMobilePushNew);
|
|
197
|
-
|
|
198
|
-
expect(result).toBe('');
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
it('should handle various error message types', () => {
|
|
202
|
-
const stateWithErrorMessage = fromJS({
|
|
203
|
-
mobilePushNew: {
|
|
204
|
-
createTemplateErrorMessage: 'Network error occurred',
|
|
205
|
-
},
|
|
206
|
-
});
|
|
207
|
-
|
|
208
|
-
const selector = makeSelectCreateError();
|
|
209
|
-
const result = selector(stateWithErrorMessage);
|
|
210
|
-
|
|
211
|
-
expect(result).toBe('Network error occurred');
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
it('should return empty string when createTemplateErrorMessage is null', () => {
|
|
215
|
-
const stateWithNullError = fromJS({
|
|
216
|
-
mobilePushNew: {
|
|
217
|
-
createTemplateErrorMessage: null,
|
|
218
|
-
},
|
|
219
|
-
});
|
|
220
|
-
|
|
221
|
-
const selector = makeSelectCreateError();
|
|
222
|
-
const result = selector(stateWithNullError);
|
|
223
|
-
|
|
224
|
-
expect(result).toBe('');
|
|
225
|
-
});
|
|
226
|
-
});
|
|
227
|
-
|
|
228
|
-
describe('makeSelectAssetUploading', () => {
|
|
229
|
-
it('should select assetUploading when it is true', () => {
|
|
230
|
-
const selector = makeSelectAssetUploading();
|
|
231
|
-
const result = selector(mockStateWithMobilePushNew);
|
|
232
|
-
|
|
233
|
-
expect(result).toBe(true);
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
it('should return false when assetUploading does not exist', () => {
|
|
237
|
-
const selector = makeSelectAssetUploading();
|
|
238
|
-
const result = selector(mockStateWithoutMobilePushNew);
|
|
239
|
-
|
|
240
|
-
expect(result).toBe(false);
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
it('should return false when mobilePushNew state is empty', () => {
|
|
244
|
-
const selector = makeSelectAssetUploading();
|
|
245
|
-
const result = selector(mockStateWithEmptyMobilePushNew);
|
|
246
|
-
|
|
247
|
-
expect(result).toBe(false);
|
|
248
|
-
});
|
|
249
|
-
|
|
250
|
-
it('should return false when assetUploading is not in partial state', () => {
|
|
251
|
-
const selector = makeSelectAssetUploading();
|
|
252
|
-
const result = selector(mockStateWithPartialMobilePushNew);
|
|
253
|
-
|
|
254
|
-
expect(result).toBe(false);
|
|
255
|
-
});
|
|
256
|
-
|
|
257
|
-
it('should handle assetUploading when explicitly set to false', () => {
|
|
258
|
-
const stateWithFalseUploading = fromJS({
|
|
259
|
-
mobilePushNew: {
|
|
260
|
-
assetUploading: false,
|
|
261
|
-
},
|
|
262
|
-
});
|
|
263
|
-
|
|
264
|
-
const selector = makeSelectAssetUploading();
|
|
265
|
-
const result = selector(stateWithFalseUploading);
|
|
266
|
-
|
|
267
|
-
expect(result).toBe(false);
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
it('should return false when assetUploading is null', () => {
|
|
271
|
-
const stateWithNullUploading = fromJS({
|
|
272
|
-
mobilePushNew: {
|
|
273
|
-
assetUploading: null,
|
|
274
|
-
},
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
const selector = makeSelectAssetUploading();
|
|
278
|
-
const result = selector(stateWithNullUploading);
|
|
279
|
-
|
|
280
|
-
expect(result).toBe(false);
|
|
281
|
-
});
|
|
282
|
-
});
|
|
283
|
-
|
|
284
|
-
describe('makeSelectGetTemplateDetailsInProgress', () => {
|
|
285
|
-
it('should select getTemplateDetailsInProgress when it is true', () => {
|
|
286
|
-
const selector = makeSelectGetTemplateDetailsInProgress();
|
|
287
|
-
const result = selector(mockStateWithMobilePushNew);
|
|
288
|
-
|
|
289
|
-
expect(result).toBe(true);
|
|
290
|
-
});
|
|
291
|
-
|
|
292
|
-
it('should return false when getTemplateDetailsInProgress does not exist', () => {
|
|
293
|
-
const selector = makeSelectGetTemplateDetailsInProgress();
|
|
294
|
-
const result = selector(mockStateWithoutMobilePushNew);
|
|
295
|
-
|
|
296
|
-
expect(result).toBe(false);
|
|
297
|
-
});
|
|
298
|
-
|
|
299
|
-
it('should return false when mobilePushNew state is empty', () => {
|
|
300
|
-
const selector = makeSelectGetTemplateDetailsInProgress();
|
|
301
|
-
const result = selector(mockStateWithEmptyMobilePushNew);
|
|
302
|
-
|
|
303
|
-
expect(result).toBe(false);
|
|
304
|
-
});
|
|
305
|
-
|
|
306
|
-
it('should return false when getTemplateDetailsInProgress is not in partial state', () => {
|
|
307
|
-
const selector = makeSelectGetTemplateDetailsInProgress();
|
|
308
|
-
const result = selector(mockStateWithPartialMobilePushNew);
|
|
309
|
-
|
|
310
|
-
expect(result).toBe(false);
|
|
311
|
-
});
|
|
312
|
-
|
|
313
|
-
it('should handle getTemplateDetailsInProgress when explicitly set to false', () => {
|
|
314
|
-
const stateWithFalseProgress = fromJS({
|
|
315
|
-
mobilePushNew: {
|
|
316
|
-
getTemplateDetailsInProgress: false,
|
|
317
|
-
},
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
const selector = makeSelectGetTemplateDetailsInProgress();
|
|
321
|
-
const result = selector(stateWithFalseProgress);
|
|
322
|
-
|
|
323
|
-
expect(result).toBe(false);
|
|
324
|
-
});
|
|
325
|
-
|
|
326
|
-
it('should return false when getTemplateDetailsInProgress is null', () => {
|
|
327
|
-
const stateWithNullProgress = fromJS({
|
|
328
|
-
mobilePushNew: {
|
|
329
|
-
getTemplateDetailsInProgress: null,
|
|
330
|
-
},
|
|
331
|
-
});
|
|
332
|
-
|
|
333
|
-
const selector = makeSelectGetTemplateDetailsInProgress();
|
|
334
|
-
const result = selector(stateWithNullProgress);
|
|
335
|
-
|
|
336
|
-
expect(result).toBe(false);
|
|
337
|
-
});
|
|
338
|
-
});
|
|
339
|
-
|
|
340
|
-
describe('Selector memoization', () => {
|
|
341
|
-
it('should return the same result for identical state (memoization test)', () => {
|
|
342
|
-
const selector = makeSelectMobilePushNew();
|
|
343
|
-
const result1 = selector(mockStateWithMobilePushNew);
|
|
344
|
-
const result2 = selector(mockStateWithMobilePushNew);
|
|
345
|
-
|
|
346
|
-
expect(result1).toBe(result2);
|
|
347
|
-
});
|
|
348
|
-
|
|
349
|
-
it('should return different results for different states', () => {
|
|
350
|
-
const selector = makeSelectUploadAssetSuccess();
|
|
351
|
-
const result1 = selector(mockStateWithMobilePushNew);
|
|
352
|
-
const result2 = selector(mockStateWithPartialMobilePushNew);
|
|
353
|
-
|
|
354
|
-
expect(result1).toBe(true);
|
|
355
|
-
expect(result2).toBe(false);
|
|
356
|
-
expect(result1).not.toBe(result2);
|
|
357
|
-
});
|
|
358
|
-
});
|
|
359
|
-
|
|
360
|
-
describe('Edge cases', () => {
|
|
361
|
-
it('should handle undefined state gracefully', () => {
|
|
362
|
-
const selector = makeSelectMobilePushNew();
|
|
363
|
-
const undefinedState = fromJS({});
|
|
364
|
-
const result = selector(undefinedState);
|
|
365
|
-
|
|
366
|
-
expect(result).toEqual({});
|
|
367
|
-
});
|
|
368
|
-
|
|
369
|
-
it('should handle state with mobilePushNew as null', () => {
|
|
370
|
-
const stateWithNullMobilePushNew = fromJS({
|
|
371
|
-
mobilePushNew: null,
|
|
372
|
-
});
|
|
373
|
-
|
|
374
|
-
const selector = makeSelectUploadedAssetData();
|
|
375
|
-
const result = selector(stateWithNullMobilePushNew);
|
|
376
|
-
|
|
377
|
-
expect(result).toEqual({});
|
|
378
|
-
});
|
|
379
|
-
|
|
380
|
-
it('should handle deeply nested state access', () => {
|
|
381
|
-
const complexState = fromJS({
|
|
382
|
-
level1: {
|
|
383
|
-
level2: {
|
|
384
|
-
mobilePushNew: mockMobilePushNewState,
|
|
385
|
-
},
|
|
386
|
-
},
|
|
387
|
-
});
|
|
388
|
-
|
|
389
|
-
// This should return defaults since mobilePushNew is not at root level
|
|
390
|
-
const selector = makeSelectUploadAssetSuccess();
|
|
391
|
-
const result = selector(complexState);
|
|
392
|
-
|
|
393
|
-
expect(result).toBe(false);
|
|
394
|
-
});
|
|
395
|
-
});
|
|
396
|
-
|
|
397
|
-
describe('Multiple selector usage', () => {
|
|
398
|
-
it('should work correctly when multiple selectors are used on same state', () => {
|
|
399
|
-
const successSelector = makeSelectUploadAssetSuccess();
|
|
400
|
-
const uploadingSelector = makeSelectAssetUploading();
|
|
401
|
-
const errorSelector = makeSelectCreateError();
|
|
402
|
-
|
|
403
|
-
const successResult = successSelector(mockStateWithMobilePushNew);
|
|
404
|
-
const uploadingResult = uploadingSelector(mockStateWithMobilePushNew);
|
|
405
|
-
const errorResult = errorSelector(mockStateWithMobilePushNew);
|
|
406
|
-
|
|
407
|
-
expect(successResult).toBe(true);
|
|
408
|
-
expect(uploadingResult).toBe(true);
|
|
409
|
-
expect(errorResult).toBe('Test error message');
|
|
410
|
-
});
|
|
411
|
-
|
|
412
|
-
it('should maintain independent results across different selectors', () => {
|
|
413
|
-
const assetDataSelector = makeSelectUploadedAssetData();
|
|
414
|
-
const progressSelector = makeSelectGetTemplateDetailsInProgress();
|
|
415
|
-
|
|
416
|
-
const assetDataResult = assetDataSelector(mockStateWithPartialMobilePushNew);
|
|
417
|
-
const progressResult = progressSelector(mockStateWithPartialMobilePushNew);
|
|
418
|
-
|
|
419
|
-
// Check that assetDataResult is an Immutable object with the expected values
|
|
420
|
-
expect(assetDataResult.get('id')).toBe(2);
|
|
421
|
-
expect(assetDataResult.get('name')).toBe('test-asset');
|
|
422
|
-
expect(progressResult).toBe(false);
|
|
423
|
-
});
|
|
424
|
-
});
|
|
425
|
-
});
|