@capillarytech/creatives-library 8.0.242-alpha.0 → 8.0.242-alpha.10
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/assets/Android.png +0 -0
- package/assets/iOS.png +0 -0
- package/constants/unified.js +2 -1
- package/initialReducer.js +2 -0
- package/package.json +1 -1
- package/sagas/__tests__/assetPolling.test.js +74 -3
- package/sagas/assetPolling.js +8 -1
- package/services/api.js +10 -5
- package/services/tests/api.test.js +18 -0
- package/translations/en.json +0 -1
- package/utils/common.js +5 -0
- package/utils/commonUtils.js +14 -1
- package/utils/tests/commonUtil.test.js +224 -0
- package/utils/transformTemplateConfig.js +0 -10
- package/utils/transformerUtils.js +0 -42
- package/v2Components/CapDeviceContent/index.js +61 -56
- package/v2Components/CapImageUpload/constants.js +0 -2
- package/v2Components/CapImageUpload/index.js +14 -54
- package/v2Components/CapImageUpload/index.scss +1 -4
- package/v2Components/CapImageUpload/messages.js +0 -4
- package/v2Components/CapTagList/index.js +6 -1
- package/v2Components/CapTagListWithInput/index.js +5 -1
- package/v2Components/CapTagListWithInput/messages.js +1 -1
- package/v2Components/CapWhatsappCTA/tests/index.test.js +5 -0
- package/v2Components/ErrorInfoNote/index.js +412 -72
- package/v2Components/ErrorInfoNote/messages.js +22 -0
- package/v2Components/ErrorInfoNote/style.scss +279 -2
- package/v2Components/HtmlEditor/HTMLEditor.js +220 -91
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +1132 -133
- package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +17 -12
- package/v2Components/HtmlEditor/_htmlEditor.scss +107 -45
- package/v2Components/HtmlEditor/_index.lazy.scss +1 -1
- package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +13 -101
- package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +148 -139
- package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +2 -1
- package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
- package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +9 -0
- package/v2Components/HtmlEditor/components/EditorToolbar/index.js +1 -1
- package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +22 -0
- package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +4 -7
- package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +35 -45
- package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +1 -3
- package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
- package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +7 -6
- package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +3 -6
- package/v2Components/HtmlEditor/components/PreviewPane/index.js +10 -11
- package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +70 -72
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +49 -31
- package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +254 -0
- package/v2Components/HtmlEditor/components/ValidationTabs/index.js +362 -0
- package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +51 -0
- package/v2Components/HtmlEditor/constants.js +29 -20
- package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +373 -16
- package/v2Components/HtmlEditor/hooks/useEditorContent.js +5 -2
- package/v2Components/HtmlEditor/hooks/useInAppContent.js +88 -146
- package/v2Components/HtmlEditor/index.js +1 -1
- package/v2Components/HtmlEditor/messages.js +95 -85
- package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +99 -101
- package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +23 -25
- package/v2Components/HtmlEditor/utils/validationAdapter.js +34 -41
- package/v2Components/MobilePushPreviewV2/index.js +32 -7
- package/v2Components/TemplatePreview/_templatePreview.scss +44 -24
- package/v2Components/TemplatePreview/index.js +47 -32
- package/v2Components/TemplatePreview/messages.js +4 -0
- package/v2Components/TestAndPreviewSlidebox/index.js +31 -25
- package/v2Containers/App/constants.js +0 -5
- package/v2Containers/BeeEditor/index.js +82 -80
- package/v2Containers/BeePopupEditor/constants.js +10 -0
- package/v2Containers/BeePopupEditor/index.js +193 -0
- package/v2Containers/BeePopupEditor/tests/index.test.js +627 -0
- package/v2Containers/Cap/tests/__snapshots__/index.test.js.snap +0 -1
- package/v2Containers/CreativesContainer/SlideBoxContent.js +148 -120
- package/v2Containers/CreativesContainer/SlideBoxFooter.js +9 -3
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -2
- package/v2Containers/CreativesContainer/constants.js +1 -2
- package/v2Containers/CreativesContainer/index.js +173 -193
- package/v2Containers/CreativesContainer/messages.js +4 -4
- package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +38 -50
- package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +36 -0
- package/v2Containers/Email/actions.js +7 -0
- package/v2Containers/Email/constants.js +5 -1
- package/v2Containers/Email/index.js +13 -0
- package/v2Containers/Email/messages.js +32 -0
- package/v2Containers/Email/reducer.js +12 -1
- package/v2Containers/Email/sagas.js +41 -6
- package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +2 -0
- package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +1046 -0
- package/v2Containers/EmailWrapper/components/EmailWrapperView.js +193 -7
- package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +40 -74
- package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +2 -67
- package/v2Containers/EmailWrapper/constants.js +2 -0
- package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +436 -67
- package/v2Containers/EmailWrapper/index.js +99 -23
- package/v2Containers/EmailWrapper/messages.js +61 -1
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +111 -77
- package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +376 -0
- package/v2Containers/InApp/__tests__/sagas.test.js +363 -0
- package/v2Containers/InApp/actions.js +7 -0
- package/v2Containers/InApp/constants.js +20 -4
- package/v2Containers/InApp/index.js +801 -357
- package/v2Containers/InApp/index.scss +4 -3
- package/v2Containers/InApp/messages.js +7 -3
- package/v2Containers/InApp/reducer.js +21 -3
- package/v2Containers/InApp/sagas.js +29 -9
- package/v2Containers/InApp/selectors.js +25 -5
- package/v2Containers/InApp/tests/index.test.js +154 -50
- package/v2Containers/InApp/tests/reducer.test.js +34 -0
- package/v2Containers/InApp/tests/sagas.test.js +61 -9
- package/v2Containers/InApp/tests/selectors.test.js +612 -0
- package/v2Containers/InAppWrapper/components/InAppWrapperView.js +162 -0
- package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +267 -0
- package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +9 -0
- package/v2Containers/InAppWrapper/constants.js +16 -0
- package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +473 -0
- package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +198 -0
- package/v2Containers/InAppWrapper/index.js +148 -0
- package/v2Containers/InAppWrapper/messages.js +49 -0
- package/v2Containers/InappAdvance/index.js +1099 -0
- package/v2Containers/InappAdvance/index.scss +10 -0
- package/v2Containers/InappAdvance/tests/index.test.js +448 -0
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +3 -3
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +2 -2
- package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +2 -25
- package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +9 -18
- package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +12 -46
- package/v2Containers/SmsTrai/Create/tests/__snapshots__/index.test.js.snap +0 -4
- package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +4 -8
- package/v2Containers/TagList/index.js +67 -1
- package/v2Containers/Templates/ChannelTypeIllustration.js +1 -13
- package/v2Containers/Templates/_templates.scss +56 -200
- package/v2Containers/Templates/actions.js +1 -2
- package/v2Containers/Templates/constants.js +0 -1
- package/v2Containers/Templates/index.js +124 -277
- package/v2Containers/Templates/messages.js +4 -24
- package/v2Containers/Templates/reducer.js +0 -2
- package/v2Containers/Templates/tests/index.test.js +0 -10
- package/v2Containers/TemplatesV2/index.js +2 -3
- package/v2Containers/TemplatesV2/messages.js +0 -4
- package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +35 -132
- package/v2Components/CapImageUrlUpload/constants.js +0 -19
- package/v2Components/CapImageUrlUpload/index.js +0 -455
- package/v2Components/CapImageUrlUpload/index.scss +0 -35
- package/v2Components/CapImageUrlUpload/messages.js +0 -47
- package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +0 -214
- package/v2Containers/WebPush/Create/components/ButtonForm.js +0 -175
- package/v2Containers/WebPush/Create/components/ButtonItem.js +0 -101
- package/v2Containers/WebPush/Create/components/ButtonList.js +0 -144
- package/v2Containers/WebPush/Create/components/_buttons.scss +0 -246
- package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +0 -554
- package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +0 -607
- package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +0 -633
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +0 -666
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +0 -74
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +0 -80
- package/v2Containers/WebPush/Create/index.js +0 -1755
- package/v2Containers/WebPush/Create/index.scss +0 -123
- package/v2Containers/WebPush/Create/messages.js +0 -199
- package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +0 -241
- package/v2Containers/WebPush/Create/preview/NotificationContainer.js +0 -290
- package/v2Containers/WebPush/Create/preview/PreviewContent.js +0 -81
- package/v2Containers/WebPush/Create/preview/PreviewControls.js +0 -240
- package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +0 -23
- package/v2Containers/WebPush/Create/preview/WebPushPreview.js +0 -144
- package/v2Containers/WebPush/Create/preview/assets/Light.svg +0 -53
- package/v2Containers/WebPush/Create/preview/assets/Top.svg +0 -5
- package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
- package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
- package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +0 -106
- package/v2Containers/WebPush/Create/preview/assets/iOS.svg +0 -26
- package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +0 -18
- package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +0 -29
- package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +0 -44
- package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +0 -110
- package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +0 -45
- package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +0 -72
- package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +0 -55
- package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +0 -70
- package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +0 -512
- package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +0 -77
- package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +0 -527
- package/v2Containers/WebPush/Create/preview/constants.js +0 -162
- package/v2Containers/WebPush/Create/preview/notification-container.scss +0 -104
- package/v2Containers/WebPush/Create/preview/preview.scss +0 -409
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +0 -300
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +0 -12
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +0 -12
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +0 -12
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +0 -303
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +0 -11
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +0 -11
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +0 -11
- package/v2Containers/WebPush/Create/preview/styles/_base.scss +0 -188
- package/v2Containers/WebPush/Create/preview/styles/_ios.scss +0 -106
- package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +0 -107
- package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +0 -75
- package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +0 -174
- package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +0 -909
- package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +0 -1077
- package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +0 -723
- package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +0 -943
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +0 -128
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +0 -121
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +0 -144
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +0 -127
- package/v2Containers/WebPush/Create/utils/urlValidation.js +0 -116
- package/v2Containers/WebPush/Create/utils/urlValidation.test.js +0 -449
- package/v2Containers/WebPush/actions.js +0 -60
- package/v2Containers/WebPush/constants.js +0 -108
- package/v2Containers/WebPush/index.js +0 -2
- package/v2Containers/WebPush/reducer.js +0 -104
- package/v2Containers/WebPush/sagas.js +0 -119
- package/v2Containers/WebPush/selectors.js +0 -65
- package/v2Containers/WebPush/tests/reducer.test.js +0 -863
- package/v2Containers/WebPush/tests/sagas.test.js +0 -566
- package/v2Containers/WebPush/tests/selectors.test.js +0 -960
|
@@ -1,863 +0,0 @@
|
|
|
1
|
-
import { fromJS } from 'immutable';
|
|
2
|
-
import webPushReducer from '../reducer';
|
|
3
|
-
import * as types from '../constants';
|
|
4
|
-
|
|
5
|
-
describe('WebPush Reducer', () => {
|
|
6
|
-
const initialState = fromJS({
|
|
7
|
-
createTemplateInProgress: false,
|
|
8
|
-
response: {},
|
|
9
|
-
createTemplateErrorMessage: '',
|
|
10
|
-
editTemplateInProgress: false,
|
|
11
|
-
editResponse: {},
|
|
12
|
-
editTemplateErrorMessage: '',
|
|
13
|
-
uploadedAssetData: {},
|
|
14
|
-
uploadAssetSuccess: false,
|
|
15
|
-
assetUploading: false,
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
describe('Initial State', () => {
|
|
19
|
-
it.concurrent('should return the initial state', () => {
|
|
20
|
-
expect(webPushReducer(undefined, {})).toEqual(initialState);
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it.concurrent('should return the initial state when state is undefined', () => {
|
|
24
|
-
const action = { type: 'UNKNOWN_ACTION' };
|
|
25
|
-
expect(webPushReducer(undefined, action)).toEqual(initialState);
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
describe('Action Validation', () => {
|
|
30
|
-
it.concurrent('should handle null action', () => {
|
|
31
|
-
const currentState = initialState.set('createTemplateInProgress', true);
|
|
32
|
-
expect(webPushReducer(currentState, null)).toEqual(currentState);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it.concurrent('should handle undefined action', () => {
|
|
36
|
-
const currentState = initialState.set('createTemplateInProgress', true);
|
|
37
|
-
expect(webPushReducer(currentState, undefined)).toEqual(currentState);
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it.concurrent('should handle action without type property', () => {
|
|
41
|
-
const currentState = initialState.set('createTemplateInProgress', true);
|
|
42
|
-
const action = { payload: 'some data' };
|
|
43
|
-
expect(webPushReducer(currentState, action)).toEqual(currentState);
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
it.concurrent('should handle non-object action', () => {
|
|
47
|
-
const currentState = initialState.set('createTemplateInProgress', true);
|
|
48
|
-
expect(webPushReducer(currentState, 'invalid')).toEqual(currentState);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
describe('DEFAULT_ACTION', () => {
|
|
53
|
-
it.concurrent('should return the current state unchanged', () => {
|
|
54
|
-
const currentState = initialState.set('createTemplateInProgress', true);
|
|
55
|
-
const action = { type: types.DEFAULT_ACTION };
|
|
56
|
-
expect(webPushReducer(currentState, action)).toEqual(currentState);
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
describe('CREATE_TEMPLATE_REQUEST', () => {
|
|
61
|
-
it.concurrent('should set createTemplateInProgress to true and reset error states', () => {
|
|
62
|
-
const action = { type: types.CREATE_TEMPLATE_REQUEST };
|
|
63
|
-
const expectedState = initialState
|
|
64
|
-
.set('createTemplateInProgress', true)
|
|
65
|
-
.set('createTemplateError', false)
|
|
66
|
-
.set('createTemplateErrorMessage', fromJS(''));
|
|
67
|
-
|
|
68
|
-
expect(webPushReducer(initialState, action)).toEqual(expectedState);
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
it.concurrent('should reset error states when request is made', () => {
|
|
72
|
-
const currentState = initialState
|
|
73
|
-
.set('createTemplateError', true)
|
|
74
|
-
.set('createTemplateErrorMessage', fromJS('Previous error'));
|
|
75
|
-
|
|
76
|
-
const action = { type: types.CREATE_TEMPLATE_REQUEST };
|
|
77
|
-
const expectedState = currentState
|
|
78
|
-
.set('createTemplateInProgress', true)
|
|
79
|
-
.set('createTemplateError', false)
|
|
80
|
-
.set('createTemplateErrorMessage', fromJS(''));
|
|
81
|
-
|
|
82
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
describe('CREATE_TEMPLATE_SUCCESS', () => {
|
|
87
|
-
it.concurrent('should set createTemplateInProgress to false and store response with successful status', () => {
|
|
88
|
-
const mockData = { id: 1, name: 'Test Template', content: 'Test Content' };
|
|
89
|
-
const action = {
|
|
90
|
-
type: types.CREATE_TEMPLATE_SUCCESS,
|
|
91
|
-
data: mockData,
|
|
92
|
-
statusCode: 200,
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
const currentState = initialState.set('createTemplateInProgress', true);
|
|
96
|
-
const expectedState = currentState
|
|
97
|
-
.set('createTemplateInProgress', false)
|
|
98
|
-
.set('response', mockData)
|
|
99
|
-
.set('createTemplateError', false);
|
|
100
|
-
|
|
101
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
it.concurrent('should set createTemplateError to true when statusCode is greater than 300', () => {
|
|
105
|
-
const mockData = { error: 'Template creation failed' };
|
|
106
|
-
const action = {
|
|
107
|
-
type: types.CREATE_TEMPLATE_SUCCESS,
|
|
108
|
-
data: mockData,
|
|
109
|
-
statusCode: 400,
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
const currentState = initialState.set('createTemplateInProgress', true);
|
|
113
|
-
const expectedState = currentState
|
|
114
|
-
.set('createTemplateInProgress', false)
|
|
115
|
-
.set('response', mockData)
|
|
116
|
-
.set('createTemplateError', true);
|
|
117
|
-
|
|
118
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
it.concurrent('should set createTemplateError to true when statusCode is 301', () => {
|
|
122
|
-
const mockData = { id: 1, name: 'Test Template' };
|
|
123
|
-
const action = {
|
|
124
|
-
type: types.CREATE_TEMPLATE_SUCCESS,
|
|
125
|
-
data: mockData,
|
|
126
|
-
statusCode: 301,
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
const currentState = initialState.set('createTemplateInProgress', true);
|
|
130
|
-
const result = webPushReducer(currentState, action);
|
|
131
|
-
|
|
132
|
-
// statusCode > 300 should set error to true
|
|
133
|
-
expect(result.get('createTemplateError')).toBe(true);
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
it.concurrent('should handle success without statusCode', () => {
|
|
137
|
-
const mockData = { id: 1, name: 'Test Template' };
|
|
138
|
-
const action = {
|
|
139
|
-
type: types.CREATE_TEMPLATE_SUCCESS,
|
|
140
|
-
data: mockData,
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
const currentState = initialState.set('createTemplateInProgress', true);
|
|
144
|
-
const expectedState = currentState
|
|
145
|
-
.set('createTemplateInProgress', false)
|
|
146
|
-
.set('response', mockData)
|
|
147
|
-
.set('createTemplateError', false);
|
|
148
|
-
|
|
149
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
it.concurrent('should handle success with statusCode exactly 300', () => {
|
|
153
|
-
const mockData = { id: 1, name: 'Test Template' };
|
|
154
|
-
const action = {
|
|
155
|
-
type: types.CREATE_TEMPLATE_SUCCESS,
|
|
156
|
-
data: mockData,
|
|
157
|
-
statusCode: 300,
|
|
158
|
-
};
|
|
159
|
-
|
|
160
|
-
const currentState = initialState.set('createTemplateInProgress', true);
|
|
161
|
-
const expectedState = currentState
|
|
162
|
-
.set('createTemplateInProgress', false)
|
|
163
|
-
.set('response', mockData)
|
|
164
|
-
.set('createTemplateError', false);
|
|
165
|
-
|
|
166
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
describe('CREATE_TEMPLATE_FAILURE', () => {
|
|
171
|
-
it.concurrent('should set createTemplateInProgress to false and store error message', () => {
|
|
172
|
-
const errorMessage = 'Template creation failed';
|
|
173
|
-
const action = {
|
|
174
|
-
type: types.CREATE_TEMPLATE_FAILURE,
|
|
175
|
-
error: errorMessage,
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
const currentState = initialState.set('createTemplateInProgress', true);
|
|
179
|
-
const expectedState = currentState
|
|
180
|
-
.set('createTemplateInProgress', false)
|
|
181
|
-
.set('createTemplateError', true)
|
|
182
|
-
.set('createTemplateErrorMessage', fromJS(errorMessage));
|
|
183
|
-
|
|
184
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
it.concurrent('should handle failure with empty error message', () => {
|
|
188
|
-
const action = {
|
|
189
|
-
type: types.CREATE_TEMPLATE_FAILURE,
|
|
190
|
-
error: '',
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
const currentState = initialState.set('createTemplateInProgress', true);
|
|
194
|
-
const expectedState = currentState
|
|
195
|
-
.set('createTemplateInProgress', false)
|
|
196
|
-
.set('createTemplateError', true)
|
|
197
|
-
.set('createTemplateErrorMessage', fromJS(''));
|
|
198
|
-
|
|
199
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
it.concurrent('should handle failure with undefined error', () => {
|
|
203
|
-
const action = {
|
|
204
|
-
type: types.CREATE_TEMPLATE_FAILURE,
|
|
205
|
-
error: undefined,
|
|
206
|
-
};
|
|
207
|
-
|
|
208
|
-
const currentState = initialState.set('createTemplateInProgress', true);
|
|
209
|
-
const result = webPushReducer(currentState, action);
|
|
210
|
-
|
|
211
|
-
expect(result.get('createTemplateInProgress')).toBe(false);
|
|
212
|
-
expect(result.get('createTemplateError')).toBe(true);
|
|
213
|
-
expect(result.get('createTemplateErrorMessage')).toEqual(fromJS(undefined));
|
|
214
|
-
});
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
describe('CLEAR_CREATE_RESPONSE_REQUEST', () => {
|
|
218
|
-
it.concurrent('should clear the response', () => {
|
|
219
|
-
const currentState = initialState.set('response', { id: 1, name: 'Test Template' });
|
|
220
|
-
const action = { type: types.CLEAR_CREATE_RESPONSE_REQUEST };
|
|
221
|
-
const expectedState = currentState.set('response', {});
|
|
222
|
-
|
|
223
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
it.concurrent('should clear response even when it is already empty', () => {
|
|
227
|
-
const action = { type: types.CLEAR_CREATE_RESPONSE_REQUEST };
|
|
228
|
-
const expectedState = initialState.set('response', {});
|
|
229
|
-
|
|
230
|
-
expect(webPushReducer(initialState, action)).toEqual(expectedState);
|
|
231
|
-
});
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
describe('EDIT_TEMPLATE_REQUEST', () => {
|
|
235
|
-
it.concurrent('should set editTemplateInProgress to true and reset error states', () => {
|
|
236
|
-
const action = { type: types.EDIT_TEMPLATE_REQUEST };
|
|
237
|
-
const expectedState = initialState
|
|
238
|
-
.set('editTemplateInProgress', true)
|
|
239
|
-
.set('editTemplateError', false)
|
|
240
|
-
.set('editTemplateErrorMessage', fromJS(''));
|
|
241
|
-
|
|
242
|
-
expect(webPushReducer(initialState, action)).toEqual(expectedState);
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
it.concurrent('should reset error states when edit request is made', () => {
|
|
246
|
-
const currentState = initialState
|
|
247
|
-
.set('editTemplateError', true)
|
|
248
|
-
.set('editTemplateErrorMessage', fromJS('Previous error'));
|
|
249
|
-
|
|
250
|
-
const action = { type: types.EDIT_TEMPLATE_REQUEST };
|
|
251
|
-
const expectedState = currentState
|
|
252
|
-
.set('editTemplateInProgress', true)
|
|
253
|
-
.set('editTemplateError', false)
|
|
254
|
-
.set('editTemplateErrorMessage', fromJS(''));
|
|
255
|
-
|
|
256
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
257
|
-
});
|
|
258
|
-
});
|
|
259
|
-
|
|
260
|
-
describe('EDIT_TEMPLATE_SUCCESS', () => {
|
|
261
|
-
it.concurrent('should set editTemplateInProgress to false and store editResponse with successful status', () => {
|
|
262
|
-
const mockData = { id: 1, name: 'Updated Template', content: 'Updated Content' };
|
|
263
|
-
const action = {
|
|
264
|
-
type: types.EDIT_TEMPLATE_SUCCESS,
|
|
265
|
-
data: mockData,
|
|
266
|
-
statusCode: 200,
|
|
267
|
-
};
|
|
268
|
-
|
|
269
|
-
const currentState = initialState.set('editTemplateInProgress', true);
|
|
270
|
-
const expectedState = currentState
|
|
271
|
-
.set('editTemplateInProgress', false)
|
|
272
|
-
.set('editResponse', mockData)
|
|
273
|
-
.set('editTemplateError', false);
|
|
274
|
-
|
|
275
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
276
|
-
});
|
|
277
|
-
|
|
278
|
-
it.concurrent('should set editTemplateError to true when statusCode is greater than 300', () => {
|
|
279
|
-
const mockData = { error: 'Template update failed' };
|
|
280
|
-
const action = {
|
|
281
|
-
type: types.EDIT_TEMPLATE_SUCCESS,
|
|
282
|
-
data: mockData,
|
|
283
|
-
statusCode: 400,
|
|
284
|
-
};
|
|
285
|
-
|
|
286
|
-
const currentState = initialState.set('editTemplateInProgress', true);
|
|
287
|
-
const expectedState = currentState
|
|
288
|
-
.set('editTemplateInProgress', false)
|
|
289
|
-
.set('editResponse', mockData)
|
|
290
|
-
.set('editTemplateError', true);
|
|
291
|
-
|
|
292
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
293
|
-
});
|
|
294
|
-
|
|
295
|
-
it.concurrent('should handle edit success without statusCode', () => {
|
|
296
|
-
const mockData = { id: 1, name: 'Updated Template' };
|
|
297
|
-
const action = {
|
|
298
|
-
type: types.EDIT_TEMPLATE_SUCCESS,
|
|
299
|
-
data: mockData,
|
|
300
|
-
};
|
|
301
|
-
|
|
302
|
-
const currentState = initialState.set('editTemplateInProgress', true);
|
|
303
|
-
const expectedState = currentState
|
|
304
|
-
.set('editTemplateInProgress', false)
|
|
305
|
-
.set('editResponse', mockData)
|
|
306
|
-
.set('editTemplateError', false);
|
|
307
|
-
|
|
308
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
309
|
-
});
|
|
310
|
-
|
|
311
|
-
it.concurrent('should handle edit success with statusCode 500', () => {
|
|
312
|
-
const mockData = { error: 'Internal server error' };
|
|
313
|
-
const action = {
|
|
314
|
-
type: types.EDIT_TEMPLATE_SUCCESS,
|
|
315
|
-
data: mockData,
|
|
316
|
-
statusCode: 500,
|
|
317
|
-
};
|
|
318
|
-
|
|
319
|
-
const currentState = initialState.set('editTemplateInProgress', true);
|
|
320
|
-
const result = webPushReducer(currentState, action);
|
|
321
|
-
|
|
322
|
-
expect(result.get('editTemplateInProgress')).toBe(false);
|
|
323
|
-
expect(result.get('editResponse')).toEqual(mockData);
|
|
324
|
-
expect(result.get('editTemplateError')).toBe(true);
|
|
325
|
-
});
|
|
326
|
-
|
|
327
|
-
it.concurrent('should handle edit success with statusCode exactly 300', () => {
|
|
328
|
-
const mockData = { id: 1, name: 'Updated Template' };
|
|
329
|
-
const action = {
|
|
330
|
-
type: types.EDIT_TEMPLATE_SUCCESS,
|
|
331
|
-
data: mockData,
|
|
332
|
-
statusCode: 300,
|
|
333
|
-
};
|
|
334
|
-
|
|
335
|
-
const currentState = initialState.set('editTemplateInProgress', true);
|
|
336
|
-
const expectedState = currentState
|
|
337
|
-
.set('editTemplateInProgress', false)
|
|
338
|
-
.set('editResponse', mockData)
|
|
339
|
-
.set('editTemplateError', false);
|
|
340
|
-
|
|
341
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
342
|
-
});
|
|
343
|
-
});
|
|
344
|
-
|
|
345
|
-
describe('EDIT_TEMPLATE_FAILURE', () => {
|
|
346
|
-
it.concurrent('should set editTemplateInProgress to false and store error message from error property', () => {
|
|
347
|
-
const errorMessage = 'Template update failed';
|
|
348
|
-
const action = {
|
|
349
|
-
type: types.EDIT_TEMPLATE_FAILURE,
|
|
350
|
-
error: errorMessage,
|
|
351
|
-
};
|
|
352
|
-
|
|
353
|
-
const currentState = initialState.set('editTemplateInProgress', true);
|
|
354
|
-
const expectedState = currentState
|
|
355
|
-
.set('editTemplateInProgress', false)
|
|
356
|
-
.set('editTemplateError', true)
|
|
357
|
-
.set('editTemplateErrorMessage', fromJS(errorMessage));
|
|
358
|
-
|
|
359
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
360
|
-
});
|
|
361
|
-
|
|
362
|
-
it.concurrent('should handle failure with errorMsg property when error is not present', () => {
|
|
363
|
-
const errorMessage = 'Template update failed via errorMsg';
|
|
364
|
-
const action = {
|
|
365
|
-
type: types.EDIT_TEMPLATE_FAILURE,
|
|
366
|
-
errorMsg: errorMessage,
|
|
367
|
-
};
|
|
368
|
-
|
|
369
|
-
const currentState = initialState.set('editTemplateInProgress', true);
|
|
370
|
-
const expectedState = currentState
|
|
371
|
-
.set('editTemplateInProgress', false)
|
|
372
|
-
.set('editTemplateError', true)
|
|
373
|
-
.set('editTemplateErrorMessage', fromJS(errorMessage));
|
|
374
|
-
|
|
375
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
376
|
-
});
|
|
377
|
-
|
|
378
|
-
it.concurrent('should prioritize error property over errorMsg property', () => {
|
|
379
|
-
const action = {
|
|
380
|
-
type: types.EDIT_TEMPLATE_FAILURE,
|
|
381
|
-
error: 'Primary error',
|
|
382
|
-
errorMsg: 'Secondary error',
|
|
383
|
-
};
|
|
384
|
-
|
|
385
|
-
const currentState = initialState.set('editTemplateInProgress', true);
|
|
386
|
-
const result = webPushReducer(currentState, action);
|
|
387
|
-
|
|
388
|
-
expect(result.get('editTemplateErrorMessage')).toEqual(fromJS('Primary error'));
|
|
389
|
-
});
|
|
390
|
-
|
|
391
|
-
it.concurrent('should handle failure with empty error and errorMsg', () => {
|
|
392
|
-
const action = {
|
|
393
|
-
type: types.EDIT_TEMPLATE_FAILURE,
|
|
394
|
-
error: '',
|
|
395
|
-
errorMsg: '',
|
|
396
|
-
};
|
|
397
|
-
|
|
398
|
-
const currentState = initialState.set('editTemplateInProgress', true);
|
|
399
|
-
const expectedState = currentState
|
|
400
|
-
.set('editTemplateInProgress', false)
|
|
401
|
-
.set('editTemplateError', true)
|
|
402
|
-
.set('editTemplateErrorMessage', fromJS(''));
|
|
403
|
-
|
|
404
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
405
|
-
});
|
|
406
|
-
|
|
407
|
-
it.concurrent('should handle failure with neither error nor errorMsg', () => {
|
|
408
|
-
const action = {
|
|
409
|
-
type: types.EDIT_TEMPLATE_FAILURE,
|
|
410
|
-
};
|
|
411
|
-
|
|
412
|
-
const currentState = initialState.set('editTemplateInProgress', true);
|
|
413
|
-
const expectedState = currentState
|
|
414
|
-
.set('editTemplateInProgress', false)
|
|
415
|
-
.set('editTemplateError', true)
|
|
416
|
-
.set('editTemplateErrorMessage', fromJS(''));
|
|
417
|
-
|
|
418
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
419
|
-
});
|
|
420
|
-
});
|
|
421
|
-
|
|
422
|
-
describe('CLEAR_EDIT_RESPONSE_REQUEST', () => {
|
|
423
|
-
it.concurrent('should clear the editResponse', () => {
|
|
424
|
-
const currentState = initialState.set('editResponse', { id: 1, name: 'Updated Template' });
|
|
425
|
-
const action = { type: types.CLEAR_EDIT_RESPONSE_REQUEST };
|
|
426
|
-
const expectedState = currentState.set('editResponse', {});
|
|
427
|
-
|
|
428
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
429
|
-
});
|
|
430
|
-
|
|
431
|
-
it.concurrent('should clear editResponse even when it is already empty', () => {
|
|
432
|
-
const action = { type: types.CLEAR_EDIT_RESPONSE_REQUEST };
|
|
433
|
-
const expectedState = initialState.set('editResponse', {});
|
|
434
|
-
|
|
435
|
-
expect(webPushReducer(initialState, action)).toEqual(expectedState);
|
|
436
|
-
});
|
|
437
|
-
});
|
|
438
|
-
|
|
439
|
-
describe('UPLOAD_WEBPUSH_ASSET_REQUEST', () => {
|
|
440
|
-
it.concurrent('should set uploadAssetSuccess to false and assetUploading to true', () => {
|
|
441
|
-
const action = { type: types.UPLOAD_WEBPUSH_ASSET_REQUEST };
|
|
442
|
-
const expectedState = initialState
|
|
443
|
-
.set('uploadAssetSuccess', false)
|
|
444
|
-
.set('assetUploading', true);
|
|
445
|
-
|
|
446
|
-
expect(webPushReducer(initialState, action)).toEqual(expectedState);
|
|
447
|
-
});
|
|
448
|
-
|
|
449
|
-
it.concurrent('should reset uploadAssetSuccess when starting new upload', () => {
|
|
450
|
-
const currentState = initialState
|
|
451
|
-
.set('uploadAssetSuccess', true)
|
|
452
|
-
.set('assetUploading', false);
|
|
453
|
-
|
|
454
|
-
const action = { type: types.UPLOAD_WEBPUSH_ASSET_REQUEST };
|
|
455
|
-
const expectedState = currentState
|
|
456
|
-
.set('uploadAssetSuccess', false)
|
|
457
|
-
.set('assetUploading', true);
|
|
458
|
-
|
|
459
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
460
|
-
});
|
|
461
|
-
});
|
|
462
|
-
|
|
463
|
-
describe('UPLOAD_WEBPUSH_ASSET_SUCCESS', () => {
|
|
464
|
-
it.concurrent('should set uploadAssetSuccess to true and store asset data with successful status', () => {
|
|
465
|
-
const mockData = { url: 'https://example.com/image.jpg', id: 'asset-123' };
|
|
466
|
-
const action = {
|
|
467
|
-
type: types.UPLOAD_WEBPUSH_ASSET_SUCCESS,
|
|
468
|
-
data: mockData,
|
|
469
|
-
statusCode: 200,
|
|
470
|
-
};
|
|
471
|
-
|
|
472
|
-
const currentState = initialState.set('assetUploading', true);
|
|
473
|
-
const expectedState = currentState
|
|
474
|
-
.set('uploadAssetSuccess', true)
|
|
475
|
-
.set('assetUploading', false)
|
|
476
|
-
.set('uploadedAssetData', mockData);
|
|
477
|
-
|
|
478
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
479
|
-
});
|
|
480
|
-
|
|
481
|
-
it.concurrent('should set uploadAssetSuccess to false when statusCode is >= 300', () => {
|
|
482
|
-
const mockData = { error: 'Upload failed' };
|
|
483
|
-
const action = {
|
|
484
|
-
type: types.UPLOAD_WEBPUSH_ASSET_SUCCESS,
|
|
485
|
-
data: mockData,
|
|
486
|
-
statusCode: 400,
|
|
487
|
-
};
|
|
488
|
-
|
|
489
|
-
const currentState = initialState.set('assetUploading', true);
|
|
490
|
-
const expectedState = currentState
|
|
491
|
-
.set('uploadAssetSuccess', false)
|
|
492
|
-
.set('assetUploading', false)
|
|
493
|
-
.set('uploadedAssetData', mockData);
|
|
494
|
-
|
|
495
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
496
|
-
});
|
|
497
|
-
|
|
498
|
-
it.concurrent('should handle success with statusCode 299 (success)', () => {
|
|
499
|
-
const mockData = { url: 'https://example.com/image.jpg' };
|
|
500
|
-
const action = {
|
|
501
|
-
type: types.UPLOAD_WEBPUSH_ASSET_SUCCESS,
|
|
502
|
-
data: mockData,
|
|
503
|
-
statusCode: 299,
|
|
504
|
-
};
|
|
505
|
-
|
|
506
|
-
const currentState = initialState.set('assetUploading', true);
|
|
507
|
-
const expectedState = currentState
|
|
508
|
-
.set('uploadAssetSuccess', true)
|
|
509
|
-
.set('assetUploading', false)
|
|
510
|
-
.set('uploadedAssetData', mockData);
|
|
511
|
-
|
|
512
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
513
|
-
});
|
|
514
|
-
|
|
515
|
-
it.concurrent('should set uploadAssetSuccess to false when statusCode is 300', () => {
|
|
516
|
-
const mockData = { url: 'https://example.com/image.jpg' };
|
|
517
|
-
const action = {
|
|
518
|
-
type: types.UPLOAD_WEBPUSH_ASSET_SUCCESS,
|
|
519
|
-
data: mockData,
|
|
520
|
-
statusCode: 300,
|
|
521
|
-
};
|
|
522
|
-
|
|
523
|
-
const currentState = initialState.set('assetUploading', true);
|
|
524
|
-
const expectedState = currentState
|
|
525
|
-
.set('uploadAssetSuccess', false)
|
|
526
|
-
.set('assetUploading', false)
|
|
527
|
-
.set('uploadedAssetData', mockData);
|
|
528
|
-
|
|
529
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
530
|
-
});
|
|
531
|
-
|
|
532
|
-
it.concurrent('should handle success without statusCode', () => {
|
|
533
|
-
const mockData = { url: 'https://example.com/image.jpg' };
|
|
534
|
-
const action = {
|
|
535
|
-
type: types.UPLOAD_WEBPUSH_ASSET_SUCCESS,
|
|
536
|
-
data: mockData,
|
|
537
|
-
};
|
|
538
|
-
|
|
539
|
-
const currentState = initialState.set('assetUploading', true);
|
|
540
|
-
const expectedState = currentState
|
|
541
|
-
.set('uploadAssetSuccess', false)
|
|
542
|
-
.set('assetUploading', false)
|
|
543
|
-
.set('uploadedAssetData', mockData);
|
|
544
|
-
|
|
545
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
546
|
-
});
|
|
547
|
-
|
|
548
|
-
it.concurrent('should set uploadAssetSuccess to false when statusCode is empty string', () => {
|
|
549
|
-
const mockData = { url: 'https://example.com/image.jpg' };
|
|
550
|
-
const action = {
|
|
551
|
-
type: types.UPLOAD_WEBPUSH_ASSET_SUCCESS,
|
|
552
|
-
data: mockData,
|
|
553
|
-
statusCode: '',
|
|
554
|
-
};
|
|
555
|
-
|
|
556
|
-
const currentState = initialState.set('assetUploading', true);
|
|
557
|
-
const expectedState = currentState
|
|
558
|
-
.set('uploadAssetSuccess', false)
|
|
559
|
-
.set('assetUploading', false)
|
|
560
|
-
.set('uploadedAssetData', mockData);
|
|
561
|
-
|
|
562
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
563
|
-
});
|
|
564
|
-
|
|
565
|
-
it.concurrent('should store asset data with templateType when provided', () => {
|
|
566
|
-
const mockData = { url: 'https://example.com/brand-icon.png' };
|
|
567
|
-
const action = {
|
|
568
|
-
type: types.UPLOAD_WEBPUSH_ASSET_SUCCESS,
|
|
569
|
-
data: mockData,
|
|
570
|
-
statusCode: 200,
|
|
571
|
-
templateType: 'BrandIcon',
|
|
572
|
-
};
|
|
573
|
-
|
|
574
|
-
const currentState = initialState.set('assetUploading', true);
|
|
575
|
-
const expectedState = currentState
|
|
576
|
-
.set('uploadAssetSuccess', true)
|
|
577
|
-
.set('assetUploading', false)
|
|
578
|
-
.set('uploadedAssetDataBrandIcon', mockData);
|
|
579
|
-
|
|
580
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
581
|
-
});
|
|
582
|
-
|
|
583
|
-
it.concurrent('should store asset data without templateType when not provided', () => {
|
|
584
|
-
const mockData = { url: 'https://example.com/image.jpg' };
|
|
585
|
-
const action = {
|
|
586
|
-
type: types.UPLOAD_WEBPUSH_ASSET_SUCCESS,
|
|
587
|
-
data: mockData,
|
|
588
|
-
statusCode: 200,
|
|
589
|
-
};
|
|
590
|
-
|
|
591
|
-
const currentState = initialState.set('assetUploading', true);
|
|
592
|
-
const expectedState = currentState
|
|
593
|
-
.set('uploadAssetSuccess', true)
|
|
594
|
-
.set('assetUploading', false)
|
|
595
|
-
.set('uploadedAssetData', mockData);
|
|
596
|
-
|
|
597
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
598
|
-
});
|
|
599
|
-
|
|
600
|
-
it.concurrent('should handle success with different templateType values', () => {
|
|
601
|
-
const mockData = { url: 'https://example.com/media.jpg' };
|
|
602
|
-
const action = {
|
|
603
|
-
type: types.UPLOAD_WEBPUSH_ASSET_SUCCESS,
|
|
604
|
-
data: mockData,
|
|
605
|
-
statusCode: 200,
|
|
606
|
-
templateType: 'Media',
|
|
607
|
-
};
|
|
608
|
-
|
|
609
|
-
const currentState = initialState.set('assetUploading', true);
|
|
610
|
-
const result = webPushReducer(currentState, action);
|
|
611
|
-
|
|
612
|
-
expect(result.get('uploadAssetSuccess')).toBe(true);
|
|
613
|
-
expect(result.get('assetUploading')).toBe(false);
|
|
614
|
-
expect(result.get('uploadedAssetDataMedia')).toEqual(mockData);
|
|
615
|
-
});
|
|
616
|
-
});
|
|
617
|
-
|
|
618
|
-
describe('UPLOAD_WEBPUSH_ASSET_FAILURE', () => {
|
|
619
|
-
it.concurrent('should set uploadAssetSuccess to false and assetUploading to false', () => {
|
|
620
|
-
const action = { type: types.UPLOAD_WEBPUSH_ASSET_FAILURE };
|
|
621
|
-
const currentState = initialState
|
|
622
|
-
.set('uploadAssetSuccess', true)
|
|
623
|
-
.set('assetUploading', true);
|
|
624
|
-
|
|
625
|
-
const expectedState = currentState
|
|
626
|
-
.set('uploadAssetSuccess', false)
|
|
627
|
-
.set('assetUploading', false);
|
|
628
|
-
|
|
629
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
630
|
-
});
|
|
631
|
-
|
|
632
|
-
it.concurrent('should handle failure when upload was in progress', () => {
|
|
633
|
-
const action = { type: types.UPLOAD_WEBPUSH_ASSET_FAILURE };
|
|
634
|
-
const currentState = initialState.set('assetUploading', true);
|
|
635
|
-
|
|
636
|
-
const expectedState = currentState
|
|
637
|
-
.set('uploadAssetSuccess', false)
|
|
638
|
-
.set('assetUploading', false);
|
|
639
|
-
|
|
640
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
641
|
-
});
|
|
642
|
-
|
|
643
|
-
it.concurrent('should handle failure when upload was already successful', () => {
|
|
644
|
-
const action = { type: types.UPLOAD_WEBPUSH_ASSET_FAILURE };
|
|
645
|
-
const currentState = initialState
|
|
646
|
-
.set('uploadAssetSuccess', true)
|
|
647
|
-
.set('assetUploading', false)
|
|
648
|
-
.set('uploadedAssetData', { url: 'https://example.com/image.jpg' });
|
|
649
|
-
|
|
650
|
-
const expectedState = currentState
|
|
651
|
-
.set('uploadAssetSuccess', false)
|
|
652
|
-
.set('assetUploading', false);
|
|
653
|
-
|
|
654
|
-
expect(webPushReducer(currentState, action)).toEqual(expectedState);
|
|
655
|
-
});
|
|
656
|
-
});
|
|
657
|
-
|
|
658
|
-
describe('CLEAR_WEBPUSH_ASSET', () => {
|
|
659
|
-
it.concurrent('should delete uploadedAssetData when templateType is not provided', () => {
|
|
660
|
-
const currentState = initialState.set('uploadedAssetData', { url: 'https://example.com/image.jpg' });
|
|
661
|
-
const action = { type: types.CLEAR_WEBPUSH_ASSET };
|
|
662
|
-
const result = webPushReducer(currentState, action);
|
|
663
|
-
|
|
664
|
-
expect(result.has('uploadedAssetData')).toBe(false);
|
|
665
|
-
});
|
|
666
|
-
|
|
667
|
-
it.concurrent('should delete uploadedAssetData with templateType when provided', () => {
|
|
668
|
-
const currentState = initialState.set('uploadedAssetDataBrandIcon', { url: 'https://example.com/brand-icon.png' });
|
|
669
|
-
const action = {
|
|
670
|
-
type: types.CLEAR_WEBPUSH_ASSET,
|
|
671
|
-
templateType: 'BrandIcon',
|
|
672
|
-
};
|
|
673
|
-
const result = webPushReducer(currentState, action);
|
|
674
|
-
|
|
675
|
-
expect(result.has('uploadedAssetDataBrandIcon')).toBe(false);
|
|
676
|
-
});
|
|
677
|
-
|
|
678
|
-
it.concurrent('should handle clear when asset data does not exist', () => {
|
|
679
|
-
const action = { type: types.CLEAR_WEBPUSH_ASSET };
|
|
680
|
-
const result = webPushReducer(initialState, action);
|
|
681
|
-
|
|
682
|
-
expect(result.has('uploadedAssetData')).toBe(false);
|
|
683
|
-
});
|
|
684
|
-
|
|
685
|
-
it.concurrent('should handle clear with different templateType values', () => {
|
|
686
|
-
const currentState = initialState.set('uploadedAssetDataMedia', { url: 'https://example.com/media.jpg' });
|
|
687
|
-
const action = {
|
|
688
|
-
type: types.CLEAR_WEBPUSH_ASSET,
|
|
689
|
-
templateType: 'Media',
|
|
690
|
-
};
|
|
691
|
-
const result = webPushReducer(currentState, action);
|
|
692
|
-
|
|
693
|
-
expect(result.has('uploadedAssetDataMedia')).toBe(false);
|
|
694
|
-
});
|
|
695
|
-
|
|
696
|
-
it.concurrent('should only delete the specified templateType asset, not others', () => {
|
|
697
|
-
const currentState = initialState
|
|
698
|
-
.set('uploadedAssetData', { url: 'https://example.com/default.jpg' })
|
|
699
|
-
.set('uploadedAssetDataBrandIcon', { url: 'https://example.com/brand-icon.png' });
|
|
700
|
-
|
|
701
|
-
const action = {
|
|
702
|
-
type: types.CLEAR_WEBPUSH_ASSET,
|
|
703
|
-
templateType: 'BrandIcon',
|
|
704
|
-
};
|
|
705
|
-
const result = webPushReducer(currentState, action);
|
|
706
|
-
|
|
707
|
-
expect(result.has('uploadedAssetDataBrandIcon')).toBe(false);
|
|
708
|
-
expect(result.has('uploadedAssetData')).toBe(true);
|
|
709
|
-
});
|
|
710
|
-
});
|
|
711
|
-
|
|
712
|
-
describe('Default Case', () => {
|
|
713
|
-
it.concurrent('should return current state for unknown action types', () => {
|
|
714
|
-
const currentState = initialState.set('createTemplateInProgress', true);
|
|
715
|
-
const action = { type: 'UNKNOWN_ACTION_TYPE' };
|
|
716
|
-
expect(webPushReducer(currentState, action)).toEqual(currentState);
|
|
717
|
-
});
|
|
718
|
-
});
|
|
719
|
-
|
|
720
|
-
describe('Integration Scenarios', () => {
|
|
721
|
-
it.concurrent('should handle complete create template flow', () => {
|
|
722
|
-
let state = initialState;
|
|
723
|
-
|
|
724
|
-
// Request
|
|
725
|
-
state = webPushReducer(state, { type: types.CREATE_TEMPLATE_REQUEST });
|
|
726
|
-
expect(state.get('createTemplateInProgress')).toBe(true);
|
|
727
|
-
expect(state.get('createTemplateError')).toBe(false);
|
|
728
|
-
|
|
729
|
-
// Success
|
|
730
|
-
const mockData = { id: 1, name: 'Test Template' };
|
|
731
|
-
state = webPushReducer(state, {
|
|
732
|
-
type: types.CREATE_TEMPLATE_SUCCESS,
|
|
733
|
-
data: mockData,
|
|
734
|
-
statusCode: 200,
|
|
735
|
-
});
|
|
736
|
-
expect(state.get('createTemplateInProgress')).toBe(false);
|
|
737
|
-
expect(state.get('response')).toEqual(mockData);
|
|
738
|
-
expect(state.get('createTemplateError')).toBe(false);
|
|
739
|
-
|
|
740
|
-
// Clear
|
|
741
|
-
state = webPushReducer(state, { type: types.CLEAR_CREATE_RESPONSE_REQUEST });
|
|
742
|
-
expect(state.get('response')).toEqual({});
|
|
743
|
-
});
|
|
744
|
-
|
|
745
|
-
it.concurrent('should handle create template failure flow', () => {
|
|
746
|
-
let state = initialState;
|
|
747
|
-
|
|
748
|
-
// Request
|
|
749
|
-
state = webPushReducer(state, { type: types.CREATE_TEMPLATE_REQUEST });
|
|
750
|
-
expect(state.get('createTemplateInProgress')).toBe(true);
|
|
751
|
-
|
|
752
|
-
// Failure
|
|
753
|
-
state = webPushReducer(state, {
|
|
754
|
-
type: types.CREATE_TEMPLATE_FAILURE,
|
|
755
|
-
error: 'Creation failed',
|
|
756
|
-
});
|
|
757
|
-
expect(state.get('createTemplateInProgress')).toBe(false);
|
|
758
|
-
expect(state.get('createTemplateError')).toBe(true);
|
|
759
|
-
expect(state.get('createTemplateErrorMessage')).toEqual(fromJS('Creation failed'));
|
|
760
|
-
});
|
|
761
|
-
|
|
762
|
-
it.concurrent('should handle complete edit template flow', () => {
|
|
763
|
-
let state = initialState;
|
|
764
|
-
|
|
765
|
-
// Request
|
|
766
|
-
state = webPushReducer(state, { type: types.EDIT_TEMPLATE_REQUEST });
|
|
767
|
-
expect(state.get('editTemplateInProgress')).toBe(true);
|
|
768
|
-
|
|
769
|
-
// Success
|
|
770
|
-
const mockData = { id: 1, name: 'Updated Template' };
|
|
771
|
-
state = webPushReducer(state, {
|
|
772
|
-
type: types.EDIT_TEMPLATE_SUCCESS,
|
|
773
|
-
data: mockData,
|
|
774
|
-
statusCode: 200,
|
|
775
|
-
});
|
|
776
|
-
expect(state.get('editTemplateInProgress')).toBe(false);
|
|
777
|
-
expect(state.get('editResponse')).toEqual(mockData);
|
|
778
|
-
|
|
779
|
-
// Clear
|
|
780
|
-
state = webPushReducer(state, { type: types.CLEAR_EDIT_RESPONSE_REQUEST });
|
|
781
|
-
expect(state.get('editResponse')).toEqual({});
|
|
782
|
-
});
|
|
783
|
-
|
|
784
|
-
it.concurrent('should handle edit template failure flow', () => {
|
|
785
|
-
let state = initialState;
|
|
786
|
-
|
|
787
|
-
// Request
|
|
788
|
-
state = webPushReducer(state, { type: types.EDIT_TEMPLATE_REQUEST });
|
|
789
|
-
expect(state.get('editTemplateInProgress')).toBe(true);
|
|
790
|
-
|
|
791
|
-
// Failure
|
|
792
|
-
state = webPushReducer(state, {
|
|
793
|
-
type: types.EDIT_TEMPLATE_FAILURE,
|
|
794
|
-
error: 'Update failed',
|
|
795
|
-
});
|
|
796
|
-
expect(state.get('editTemplateInProgress')).toBe(false);
|
|
797
|
-
expect(state.get('editTemplateError')).toBe(true);
|
|
798
|
-
expect(state.get('editTemplateErrorMessage')).toEqual(fromJS('Update failed'));
|
|
799
|
-
});
|
|
800
|
-
|
|
801
|
-
it.concurrent('should handle complete asset upload flow', () => {
|
|
802
|
-
let state = initialState;
|
|
803
|
-
|
|
804
|
-
// Request
|
|
805
|
-
state = webPushReducer(state, { type: types.UPLOAD_WEBPUSH_ASSET_REQUEST });
|
|
806
|
-
expect(state.get('assetUploading')).toBe(true);
|
|
807
|
-
expect(state.get('uploadAssetSuccess')).toBe(false);
|
|
808
|
-
|
|
809
|
-
// Success
|
|
810
|
-
const mockData = { url: 'https://example.com/image.jpg' };
|
|
811
|
-
state = webPushReducer(state, {
|
|
812
|
-
type: types.UPLOAD_WEBPUSH_ASSET_SUCCESS,
|
|
813
|
-
data: mockData,
|
|
814
|
-
statusCode: 200,
|
|
815
|
-
});
|
|
816
|
-
expect(state.get('assetUploading')).toBe(false);
|
|
817
|
-
expect(state.get('uploadAssetSuccess')).toBe(true);
|
|
818
|
-
expect(state.get('uploadedAssetData')).toEqual(mockData);
|
|
819
|
-
|
|
820
|
-
// Clear
|
|
821
|
-
state = webPushReducer(state, { type: types.CLEAR_WEBPUSH_ASSET });
|
|
822
|
-
expect(state.has('uploadedAssetData')).toBe(false);
|
|
823
|
-
});
|
|
824
|
-
|
|
825
|
-
it.concurrent('should handle asset upload failure flow', () => {
|
|
826
|
-
let state = initialState;
|
|
827
|
-
|
|
828
|
-
// Request
|
|
829
|
-
state = webPushReducer(state, { type: types.UPLOAD_WEBPUSH_ASSET_REQUEST });
|
|
830
|
-
expect(state.get('assetUploading')).toBe(true);
|
|
831
|
-
|
|
832
|
-
// Failure
|
|
833
|
-
state = webPushReducer(state, { type: types.UPLOAD_WEBPUSH_ASSET_FAILURE });
|
|
834
|
-
expect(state.get('assetUploading')).toBe(false);
|
|
835
|
-
expect(state.get('uploadAssetSuccess')).toBe(false);
|
|
836
|
-
});
|
|
837
|
-
|
|
838
|
-
it.concurrent('should handle asset upload with templateType flow', () => {
|
|
839
|
-
let state = initialState;
|
|
840
|
-
|
|
841
|
-
// Request
|
|
842
|
-
state = webPushReducer(state, { type: types.UPLOAD_WEBPUSH_ASSET_REQUEST });
|
|
843
|
-
|
|
844
|
-
// Success with templateType
|
|
845
|
-
const mockData = { url: 'https://example.com/brand-icon.png' };
|
|
846
|
-
state = webPushReducer(state, {
|
|
847
|
-
type: types.UPLOAD_WEBPUSH_ASSET_SUCCESS,
|
|
848
|
-
data: mockData,
|
|
849
|
-
statusCode: 200,
|
|
850
|
-
templateType: 'BrandIcon',
|
|
851
|
-
});
|
|
852
|
-
expect(state.get('uploadedAssetDataBrandIcon')).toEqual(mockData);
|
|
853
|
-
|
|
854
|
-
// Clear with templateType
|
|
855
|
-
state = webPushReducer(state, {
|
|
856
|
-
type: types.CLEAR_WEBPUSH_ASSET,
|
|
857
|
-
templateType: 'BrandIcon',
|
|
858
|
-
});
|
|
859
|
-
expect(state.has('uploadedAssetDataBrandIcon')).toBe(false);
|
|
860
|
-
});
|
|
861
|
-
});
|
|
862
|
-
});
|
|
863
|
-
|