@capillarytech/creatives-library 8.0.136-alpha.4 → 8.0.136-beta.3
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/components/BreadCrumbs/index.js +65 -0
- package/components/BreadCrumbs/messages.js +13 -0
- package/components/CapTagList/index.js +235 -0
- package/components/CapTagList/messages.js +45 -0
- package/components/Card/_customCard.scss +40 -0
- package/components/Card/index.js +78 -0
- package/components/Card/tests/__snapshots__/index.test.js.snap +22 -0
- package/components/Card/tests/index.test.js +20 -0
- package/components/CardGrid/index.js +71 -0
- package/components/Ckeditor/index.js +238 -0
- package/components/Ckeditor/messages.js +13 -0
- package/components/Ckeditor/style.scss +3 -0
- package/components/Component/index.js +29 -0
- package/components/CustomPopOver/index.js +81 -0
- package/components/CustomPopOver/messages.js +17 -0
- package/components/DateFilter/index.js +349 -0
- package/components/DateFilter/messages.js +57 -0
- package/components/DateRange/index.js +114 -0
- package/components/DateRange/messages.js +25 -0
- package/components/Edmeditor/index.js +65 -0
- package/components/Edmeditor/messages.js +13 -0
- package/components/EmailPreview/_emailPreview.scss +119 -0
- package/components/EmailPreview/assets/images/iPad.svg +10 -0
- package/components/EmailPreview/assets/images/mobile.png +0 -0
- package/components/EmailPreview/index.js +107 -0
- package/components/EmailPreview/messages.js +33 -0
- package/components/Footer/index.js +27 -0
- package/components/Footer/messages.js +13 -0
- package/components/FormBuilder/_formBuilder.scss +83 -0
- package/components/FormBuilder/index.js +3279 -0
- package/components/FormBuilder/messages.js +61 -0
- package/components/Header/index.js +44 -0
- package/components/Header/messages.js +29 -0
- package/components/ImagePreview/_imagePreview.scss +63 -0
- package/components/ImagePreview/index.js +52 -0
- package/components/ImagePreview/messages.js +17 -0
- package/components/PageHeader/_pageHeader.scss +22 -0
- package/components/PageHeader/index.js +37 -0
- package/components/PageHeader/messages.js +13 -0
- package/components/Pagination/_pagination.scss +5 -0
- package/components/Pagination/index.js +49 -0
- package/components/PreviewSideBar/_previewsidebar.scss +28 -0
- package/components/PreviewSideBar/index.js +152 -0
- package/components/PreviewSideBar/messages.js +41 -0
- package/components/Sidebar/_sidebar.scss +115 -0
- package/components/Sidebar/index.js +214 -0
- package/components/Sidebar/messages.js +21 -0
- package/components/SlideBox/_slideBox.scss +63 -0
- package/components/SlideBox/index.js +47 -0
- package/components/SlideBox/tests/index.test.js +103 -0
- package/components/SmsEditor/index.js +55 -0
- package/components/SmsTest/index.js +117 -0
- package/components/SmsTest/messages.js +21 -0
- package/components/TemplatePreview/WechatRichmediaTemplatePreview/_wechatRichmediaTemplatePrev.scss +42 -0
- package/components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +141 -0
- package/components/TemplatePreview/WechatRichmediaTemplatePreview/messages.js +21 -0
- package/components/TemplatePreview/_templatePreview.scss +642 -0
- package/components/TemplatePreview/assets/images/WECHAT_5x.png +0 -0
- package/components/TemplatePreview/assets/images/androidPushMessage.svg +45 -0
- package/components/TemplatePreview/assets/images/home-screen-android.svg +21 -0
- package/components/TemplatePreview/assets/images/home-screen-ios.svg +16 -0
- package/components/TemplatePreview/assets/images/iPhonePushMessage.svg +135 -0
- package/components/TemplatePreview/assets/images/mobile.svg +24 -0
- package/components/TemplatePreview/assets/images/sms-body.png +0 -0
- package/components/TemplatePreview/assets/images/sms-icon.png +0 -0
- package/components/TemplatePreview/assets/images/sms_mobile.png +0 -0
- package/components/TemplatePreview/assets/images/sms_mobile_android.svg +22 -0
- package/components/TemplatePreview/assets/images/sms_mobile_ios.svg +16 -0
- package/components/TemplatePreview/assets/images/user-icon.svg +19 -0
- package/components/TemplatePreview/assets/images/wechat-mobile.svg +78 -0
- package/components/TemplatePreview/assets/images/wechat_mobile_android.svg +20 -0
- package/components/TemplatePreview/index.js +617 -0
- package/components/TemplatePreview/messages.js +78 -0
- package/components/Toastr/index.js +60 -0
- package/components/Toastr/messages.js +13 -0
- package/components/ToastrMessage/index.js +113 -0
- package/components/ToastrMessage/messages.js +17 -0
- package/components/TopBar/_topbar.scss +46 -0
- package/components/TopBar/assets/images/capillary_logo.png +0 -0
- package/components/TopBar/assets/images/old_capillary_logo.png +0 -0
- package/components/TopBar/index.js +113 -0
- package/components/TopBar/messages.js +29 -0
- package/containers/App/actions.js +7 -0
- package/containers/App/constants.js +114 -0
- package/containers/App/index.js +52 -0
- package/containers/App/reducer.js +19 -0
- package/containers/App/sagas.js +31 -0
- package/containers/App/selectors.js +25 -0
- package/containers/App/test/saga.test.js +11 -0
- package/containers/Assets/Gallery/_gallery.scss +126 -0
- package/containers/Assets/Gallery/actions.js +37 -0
- package/containers/Assets/Gallery/constants.js +23 -0
- package/containers/Assets/Gallery/index.js +473 -0
- package/containers/Assets/Gallery/messages.js +93 -0
- package/containers/Assets/Gallery/reducer.js +81 -0
- package/containers/Assets/Gallery/sagas.js +80 -0
- package/containers/Assets/Gallery/selectors.js +25 -0
- package/containers/Assets/Gallery/tests/__snapshots__/reducer.test.js.snap +9 -0
- package/containers/Assets/Gallery/tests/actions.test.js +25 -0
- package/containers/Assets/Gallery/tests/reducer.test.js +96 -0
- package/containers/Assets/Gallery/tests/saga.test.js +157 -0
- package/containers/Cap/actions.js +66 -0
- package/containers/Cap/constants.js +25 -0
- package/containers/Cap/index.js +402 -0
- package/containers/Cap/messages.js +75 -0
- package/containers/Cap/reducer.js +113 -0
- package/containers/Cap/sagas.js +159 -0
- package/containers/Cap/selectors.js +75 -0
- package/containers/Cap/tests/__snapshots__/index.test.js.snap +2269 -0
- package/containers/Cap/tests/index.test.js +22 -0
- package/containers/Cap/tests/saga.test.js +284 -0
- package/containers/Dashboard/actions.js +15 -0
- package/containers/Dashboard/constants.js +7 -0
- package/containers/Dashboard/index.js +76 -0
- package/containers/Dashboard/messages.js +13 -0
- package/containers/Dashboard/reducer.js +21 -0
- package/containers/Dashboard/sagas.js +17 -0
- package/containers/Dashboard/selectors.js +25 -0
- package/containers/Dashboard/test/saga.test.js +9 -0
- package/containers/Ebill/_ebill.scss +5 -0
- package/containers/Ebill/actions.js +43 -0
- package/containers/Ebill/constants.js +20 -0
- package/containers/Ebill/index.js +1278 -0
- package/containers/Ebill/messages.js +77 -0
- package/containers/Ebill/reducer.js +72 -0
- package/containers/Ebill/sagas.js +74 -0
- package/containers/Ebill/selectors.js +25 -0
- package/containers/Ebill/test/saga.test.js +11 -0
- package/containers/Email/_email.scss +141 -0
- package/containers/Email/actions.js +81 -0
- package/containers/Email/constants.js +36 -0
- package/containers/Email/index.js +3325 -0
- package/containers/Email/messages.js +289 -0
- package/containers/Email/reducer.js +142 -0
- package/containers/Email/sagas.js +135 -0
- package/containers/Email/selectors.js +31 -0
- package/containers/Email/test/saga.test.js +671 -0
- package/containers/LanguageProvider/actions.js +17 -0
- package/containers/LanguageProvider/constants.js +8 -0
- package/containers/LanguageProvider/index.js +80 -0
- package/containers/LanguageProvider/reducer.js +30 -0
- package/containers/LanguageProvider/selectors.js +20 -0
- package/containers/LanguageProvider/tests/actions.test.js +19 -0
- package/containers/LanguageProvider/tests/index.test.js +78 -0
- package/containers/LanguageProvider/tests/reducer.test.js +20 -0
- package/containers/LanguageProvider/tests/selectors.test.js +15 -0
- package/containers/Line/Create/_lineCreate.scss +54 -0
- package/containers/Line/Create/actions.js +90 -0
- package/containers/Line/Create/constants.js +39 -0
- package/containers/Line/Create/index.js +836 -0
- package/containers/Line/Create/messages.js +189 -0
- package/containers/Line/Create/reducer.js +99 -0
- package/containers/Line/Create/sagas.js +121 -0
- package/containers/Line/Create/selectors.js +36 -0
- package/containers/Line/Create/tests/saga.test.js +202 -0
- package/containers/Line/Edit/_lineEdit.scss +35 -0
- package/containers/Line/Edit/actions.js +79 -0
- package/containers/Line/Edit/constants.js +27 -0
- package/containers/Line/Edit/index.js +1050 -0
- package/containers/Line/Edit/messages.js +177 -0
- package/containers/Line/Edit/reducer.js +83 -0
- package/containers/Line/Edit/sagas.js +80 -0
- package/containers/Line/Edit/selectors.js +29 -0
- package/containers/Line/Edit/test/saga.test.js +160 -0
- package/containers/Login/assets/images/capillary_logo.png +0 -0
- package/containers/Login/components/LoginForm/index.js +62 -0
- package/containers/Login/components/LoginForm/messages.js +33 -0
- package/containers/Login/index.js +130 -0
- package/containers/Login/messages.js +25 -0
- package/containers/Login/selectors.js +25 -0
- package/containers/MobilePush/Create/_mobilePushCreate.scss +39 -0
- package/containers/MobilePush/Create/actions.js +46 -0
- package/containers/MobilePush/Create/constants.js +23 -0
- package/containers/MobilePush/Create/index.js +2303 -0
- package/containers/MobilePush/Create/messages.js +269 -0
- package/containers/MobilePush/Create/reducer.js +70 -0
- package/containers/MobilePush/Create/sagas.js +74 -0
- package/containers/MobilePush/Create/selectors.js +28 -0
- package/containers/MobilePush/Create/test/saga.test.js +19 -0
- package/containers/MobilePush/Edit/_mobilePushCreate.scss +39 -0
- package/containers/MobilePush/Edit/actions.js +91 -0
- package/containers/MobilePush/Edit/constants.js +35 -0
- package/containers/MobilePush/Edit/index.js +2601 -0
- package/containers/MobilePush/Edit/messages.js +266 -0
- package/containers/MobilePush/Edit/reducer.js +112 -0
- package/containers/MobilePush/Edit/sagas.js +126 -0
- package/containers/MobilePush/Edit/selectors.js +29 -0
- package/containers/MobilePush/Edit/tests/saga.test.js +255 -0
- package/containers/NotFoundPage/index.js +25 -0
- package/containers/NotFoundPage/messages.js +13 -0
- package/containers/NotFoundPage/tests/index.test.js +17 -0
- package/containers/Sms/Create/_smsCreate.scss +42 -0
- package/containers/Sms/Create/actions.js +27 -0
- package/containers/Sms/Create/constants.js +16 -0
- package/containers/Sms/Create/index.js +1488 -0
- package/containers/Sms/Create/messages.js +109 -0
- package/containers/Sms/Create/reducer.js +41 -0
- package/containers/Sms/Create/sagas.js +40 -0
- package/containers/Sms/Create/selectors.js +28 -0
- package/containers/Sms/Create/test/saga.test.js +11 -0
- package/containers/Sms/Edit/actions.js +40 -0
- package/containers/Sms/Edit/constants.js +17 -0
- package/containers/Sms/Edit/index.js +1472 -0
- package/containers/Sms/Edit/messages.js +105 -0
- package/containers/Sms/Edit/reducer.js +50 -0
- package/containers/Sms/Edit/sagas.js +60 -0
- package/containers/Sms/Edit/selectors.js +32 -0
- package/containers/Sms/Edit/test/saga.test.js +13 -0
- package/containers/TagList/_tagList.scss +8 -0
- package/containers/TagList/actions.js +15 -0
- package/containers/TagList/constants.js +32 -0
- package/containers/TagList/index.js +236 -0
- package/containers/TagList/messages.js +13 -0
- package/containers/TagList/reducer.js +23 -0
- package/containers/TagList/sagas.js +11 -0
- package/containers/TagList/selectors.js +25 -0
- package/containers/Templates/_templates.scss +333 -0
- package/containers/Templates/actions.js +103 -0
- package/containers/Templates/constants.js +60 -0
- package/containers/Templates/index.js +1756 -0
- package/containers/Templates/messages.js +337 -0
- package/containers/Templates/reducer.js +142 -0
- package/containers/Templates/sagas.js +163 -0
- package/containers/Templates/selectors.js +28 -0
- package/containers/Templates/test/saga.test.js +241 -0
- package/containers/WeChat/MapTemplates/_mapTemplates.scss +8 -0
- package/containers/WeChat/MapTemplates/actions.js +52 -0
- package/containers/WeChat/MapTemplates/constants.js +28 -0
- package/containers/WeChat/MapTemplates/index.js +1610 -0
- package/containers/WeChat/MapTemplates/messages.js +157 -0
- package/containers/WeChat/MapTemplates/reducer.js +74 -0
- package/containers/WeChat/MapTemplates/sagas.js +84 -0
- package/containers/WeChat/MapTemplates/selectors.js +25 -0
- package/containers/WeChat/MapTemplates/test/saga.test.js +155 -0
- package/containers/WeChat/RichmediaTemplates/Create/_createRichmedia.scss +57 -0
- package/containers/WeChat/RichmediaTemplates/Create/actions.js +36 -0
- package/containers/WeChat/RichmediaTemplates/Create/constants.js +15 -0
- package/containers/WeChat/RichmediaTemplates/Create/index.js +1071 -0
- package/containers/WeChat/RichmediaTemplates/Create/messages.js +165 -0
- package/containers/WeChat/RichmediaTemplates/Create/reducer.js +60 -0
- package/containers/WeChat/RichmediaTemplates/Create/richmediaschema.js +497 -0
- package/containers/WeChat/RichmediaTemplates/Create/sagas.js +51 -0
- package/containers/WeChat/RichmediaTemplates/Create/selectors.js +37 -0
- package/containers/WeChat/RichmediaTemplates/Create/test/saga.test.js +13 -0
- package/containers/WeChat/RichmediaTemplates/Edit/actions.js +20 -0
- package/containers/WeChat/RichmediaTemplates/Edit/constants.js +10 -0
- package/containers/WeChat/RichmediaTemplates/Edit/index.js +136 -0
- package/containers/WeChat/RichmediaTemplates/Edit/messages.js +13 -0
- package/containers/WeChat/RichmediaTemplates/Edit/reducer.js +28 -0
- package/containers/WeChat/RichmediaTemplates/Edit/sagas.js +36 -0
- package/containers/WeChat/RichmediaTemplates/Edit/selectors.js +30 -0
- package/containers/WeChat/RichmediaTemplates/Edit/test/saga.test.js +12 -0
- package/containers/WeChat/RichmediaTemplates/View/actions.js +15 -0
- package/containers/WeChat/RichmediaTemplates/View/constants.js +7 -0
- package/containers/WeChat/RichmediaTemplates/View/index.js +47 -0
- package/containers/WeChat/RichmediaTemplates/View/messages.js +21 -0
- package/containers/WeChat/RichmediaTemplates/View/reducer.js +23 -0
- package/containers/WeChat/RichmediaTemplates/View/sagas.js +11 -0
- package/containers/WeChat/RichmediaTemplates/View/selectors.js +25 -0
- package/index.js +2 -4
- package/package.json +1 -1
- package/routes.js +202 -136
- package/services/getSchema.js +1 -1
- package/services/localStorageApi.js +0 -1
- package/tests/i18n.test.js +1 -1
- package/utils/asyncInjectors.js +78 -0
- package/utils/authWrapper.js +1 -1
- package/utils/callNativeEvent.js +16 -0
- package/utils/checkStore.js +21 -0
- package/utils/common.js +2 -2
- package/utils/customAuthWrapper.js +62 -0
- package/utils/customConnectedAuthWrapper.js +26 -0
- package/utils/tagValidations.js +1 -1
- package/utils/tests/checkStore.test.js +1 -1
- package/utils/tests/customAuth.test.js +1 -1
- package/utils/transformerUtils.js +195 -1
- package/v2Components/CapTagList/index.js +14 -9
- package/v2Components/Carousel/style.scss +1 -1
- package/v2Components/EmailMobilePreview/index.js +2 -2
- package/v2Components/FormBuilder/index.js +2 -2
- package/v2Components/TemplatePreview/index.js +1 -2
- package/v2Containers/Cap/tests/saga.test.js +1 -1
- package/v2Containers/Email/index.js +1 -1
- package/v2Containers/FTP/index.js +1 -1
- package/v2Containers/Line/Container/Text/index.js +6 -6
- package/v2Containers/Sms/Create/index.js +2 -2
- package/v2Containers/Sms/Edit/index.js +1 -1
- package/v2Containers/TagList/index.js +1 -1
- package/v2Containers/TagList/utils.js +1 -1
- package/v2Containers/Templates/index.js +1 -1
- package/v2Containers/Templates/sagas.js +1 -1
- package/constants/unified.js +0 -189
|
@@ -0,0 +1,671 @@
|
|
|
1
|
+
import { expectSaga } from 'redux-saga-test-plan';
|
|
2
|
+
import { call, put } from 'redux-saga/effects';
|
|
3
|
+
import { throwError } from 'redux-saga-test-plan/providers';
|
|
4
|
+
import * as Api from '../../../services/api';
|
|
5
|
+
import * as types from '../constants';
|
|
6
|
+
import * as sagas from '../sagas';
|
|
7
|
+
|
|
8
|
+
describe('Email Template Sagas', () => {
|
|
9
|
+
// Increase timeout to prevent timeout warnings
|
|
10
|
+
jest.setTimeout(1000);
|
|
11
|
+
|
|
12
|
+
describe('createTemplate Saga', () => {
|
|
13
|
+
const template = { name: 'Test Template', content: 'Test Content' };
|
|
14
|
+
|
|
15
|
+
it.concurrent('should handle successful template creation', () => {
|
|
16
|
+
const generator = sagas.createTemplate(template);
|
|
17
|
+
const response = {
|
|
18
|
+
response: { id: 1, name: 'Test Template' },
|
|
19
|
+
status: { code: 200 },
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
expect(generator.next().value)
|
|
23
|
+
.toEqual(call(Api.createEmailTemplate, template));
|
|
24
|
+
|
|
25
|
+
expect(generator.next(response).value)
|
|
26
|
+
.toEqual(put({
|
|
27
|
+
type: types.CREATE_TEMPLATE_SUCCESS,
|
|
28
|
+
data: response.response,
|
|
29
|
+
statusCode: response.status.code,
|
|
30
|
+
errorMsg: undefined,
|
|
31
|
+
}));
|
|
32
|
+
|
|
33
|
+
expect(generator.next().done).toBeTruthy();
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it.concurrent('should handle server error with status code 500', () => {
|
|
37
|
+
const generator = sagas.createTemplate(template);
|
|
38
|
+
const response = {
|
|
39
|
+
message: 'Internal Server Error',
|
|
40
|
+
status: { code: 500 },
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
expect(generator.next().value)
|
|
44
|
+
.toEqual(call(Api.createEmailTemplate, template));
|
|
45
|
+
|
|
46
|
+
expect(generator.next(response).value)
|
|
47
|
+
.toEqual(put({
|
|
48
|
+
type: types.CREATE_TEMPLATE_SUCCESS,
|
|
49
|
+
data: undefined,
|
|
50
|
+
statusCode: 500,
|
|
51
|
+
errorMsg: 'Internal Server Error',
|
|
52
|
+
}));
|
|
53
|
+
|
|
54
|
+
expect(generator.next().done).toBeTruthy();
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it.concurrent('should handle API error response with message', () => {
|
|
58
|
+
const generator = sagas.createTemplate(template);
|
|
59
|
+
const response = {
|
|
60
|
+
message: 'Validation Error',
|
|
61
|
+
status: { code: 400 },
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
expect(generator.next().value)
|
|
65
|
+
.toEqual(call(Api.createEmailTemplate, template));
|
|
66
|
+
|
|
67
|
+
expect(generator.next(response).value)
|
|
68
|
+
.toEqual(put({
|
|
69
|
+
type: types.CREATE_TEMPLATE_SUCCESS,
|
|
70
|
+
data: undefined,
|
|
71
|
+
statusCode: 400,
|
|
72
|
+
errorMsg: 'Validation Error',
|
|
73
|
+
}));
|
|
74
|
+
|
|
75
|
+
expect(generator.next().done).toBeTruthy();
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it.concurrent('should handle API call exception', () => {
|
|
79
|
+
const generator = sagas.createTemplate(template);
|
|
80
|
+
const error = new Error('Network Error');
|
|
81
|
+
|
|
82
|
+
expect(generator.next().value)
|
|
83
|
+
.toEqual(call(Api.createEmailTemplate, template));
|
|
84
|
+
|
|
85
|
+
expect(generator.throw(error).value)
|
|
86
|
+
.toEqual(put({
|
|
87
|
+
type: types.CREATE_TEMPLATE_FAILURE,
|
|
88
|
+
error,
|
|
89
|
+
errorMsg: undefined,
|
|
90
|
+
}));
|
|
91
|
+
|
|
92
|
+
expect(generator.next().done).toBeTruthy();
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it.concurrent('should set empty string statusCode when status is null', () => {
|
|
96
|
+
const generator = sagas.createTemplate(template);
|
|
97
|
+
const response = {
|
|
98
|
+
response: { id: 1, name: 'Test Template' },
|
|
99
|
+
status: null,
|
|
100
|
+
message: 'Success',
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
expect(generator.next().value)
|
|
104
|
+
.toEqual(call(Api.createEmailTemplate, template));
|
|
105
|
+
|
|
106
|
+
expect(generator.next(response).value)
|
|
107
|
+
.toEqual(put({
|
|
108
|
+
type: types.CREATE_TEMPLATE_SUCCESS,
|
|
109
|
+
data: response.response,
|
|
110
|
+
statusCode: "",
|
|
111
|
+
errorMsg: response.message,
|
|
112
|
+
}));
|
|
113
|
+
|
|
114
|
+
expect(generator.next().done).toBeTruthy();
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it.concurrent('should set empty string statusCode when status is undefined', () => {
|
|
118
|
+
const generator = sagas.createTemplate(template);
|
|
119
|
+
const response = {
|
|
120
|
+
response: { id: 1, name: 'Test Template' },
|
|
121
|
+
message: 'Success',
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
expect(generator.next().value)
|
|
125
|
+
.toEqual(call(Api.createEmailTemplate, template));
|
|
126
|
+
|
|
127
|
+
expect(generator.next(response).value)
|
|
128
|
+
.toEqual(put({
|
|
129
|
+
type: types.CREATE_TEMPLATE_SUCCESS,
|
|
130
|
+
data: response.response,
|
|
131
|
+
statusCode: "",
|
|
132
|
+
errorMsg: response.message,
|
|
133
|
+
}));
|
|
134
|
+
|
|
135
|
+
expect(generator.next().done).toBeTruthy();
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it.concurrent('should set empty string statusCode when status.code is null', () => {
|
|
139
|
+
const generator = sagas.createTemplate(template);
|
|
140
|
+
const response = {
|
|
141
|
+
response: { id: 1, name: 'Test Template' },
|
|
142
|
+
status: { code: null },
|
|
143
|
+
message: 'Success',
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
expect(generator.next().value)
|
|
147
|
+
.toEqual(call(Api.createEmailTemplate, template));
|
|
148
|
+
|
|
149
|
+
expect(generator.next(response).value)
|
|
150
|
+
.toEqual(put({
|
|
151
|
+
type: types.CREATE_TEMPLATE_SUCCESS,
|
|
152
|
+
data: response.response,
|
|
153
|
+
statusCode: null,
|
|
154
|
+
errorMsg: response.message,
|
|
155
|
+
}));
|
|
156
|
+
|
|
157
|
+
expect(generator.next().done).toBeTruthy();
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
it.concurrent('should set empty string statusCode when status.code is undefined', () => {
|
|
161
|
+
const generator = sagas.createTemplate(template);
|
|
162
|
+
const response = {
|
|
163
|
+
response: { id: 1, name: 'Test Template' },
|
|
164
|
+
status: { code: undefined },
|
|
165
|
+
message: 'Success',
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
expect(generator.next().value)
|
|
169
|
+
.toEqual(call(Api.createEmailTemplate, template));
|
|
170
|
+
|
|
171
|
+
expect(generator.next(response).value)
|
|
172
|
+
.toEqual(put({
|
|
173
|
+
type: types.CREATE_TEMPLATE_SUCCESS,
|
|
174
|
+
data: response.response,
|
|
175
|
+
statusCode: undefined,
|
|
176
|
+
errorMsg: response.message,
|
|
177
|
+
}));
|
|
178
|
+
|
|
179
|
+
expect(generator.next().done).toBeTruthy();
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
it.concurrent('should set empty string statusCode when status is an empty object', () => {
|
|
183
|
+
const generator = sagas.createTemplate(template);
|
|
184
|
+
const response = {
|
|
185
|
+
response: { id: 1, name: 'Test Template' },
|
|
186
|
+
status: {},
|
|
187
|
+
message: 'Success',
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
expect(generator.next().value)
|
|
191
|
+
.toEqual(call(Api.createEmailTemplate, template));
|
|
192
|
+
|
|
193
|
+
expect(generator.next(response).value)
|
|
194
|
+
.toEqual(put({
|
|
195
|
+
type: types.CREATE_TEMPLATE_SUCCESS,
|
|
196
|
+
data: response.response,
|
|
197
|
+
statusCode: undefined,
|
|
198
|
+
errorMsg: response.message,
|
|
199
|
+
}));
|
|
200
|
+
|
|
201
|
+
expect(generator.next().done).toBeTruthy();
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
describe('duplicateTemplate saga', () => {
|
|
206
|
+
const templateId = 123;
|
|
207
|
+
const channel = 'email';
|
|
208
|
+
|
|
209
|
+
it.concurrent('should handle successful template duplication with complete response', () => {
|
|
210
|
+
const generator = sagas.duplicateTemplate(templateId, channel);
|
|
211
|
+
const response = {
|
|
212
|
+
response: { id: 456, name: 'Duplicated Template' },
|
|
213
|
+
status: { code: 200 },
|
|
214
|
+
message: 'Template duplicated successfully',
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
expect(generator.next().value)
|
|
218
|
+
.toEqual(call(Api.duplicateTemplate, templateId, channel));
|
|
219
|
+
|
|
220
|
+
expect(generator.next(response).value)
|
|
221
|
+
.toEqual(put({
|
|
222
|
+
type: types.DUPLICATE_TEMPLATE_SUCCESS,
|
|
223
|
+
data: response.response,
|
|
224
|
+
statusCode: response.status.code,
|
|
225
|
+
errorMsg: response.message,
|
|
226
|
+
}));
|
|
227
|
+
|
|
228
|
+
expect(generator.next().done).toBeTruthy();
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
it.concurrent('should handle response with missing status object', () => {
|
|
232
|
+
const generator = sagas.duplicateTemplate(templateId, channel);
|
|
233
|
+
const response = {
|
|
234
|
+
response: { id: 456, name: 'Duplicated Template' },
|
|
235
|
+
message: 'Success without status',
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
expect(generator.next().value)
|
|
239
|
+
.toEqual(call(Api.duplicateTemplate, templateId, channel));
|
|
240
|
+
|
|
241
|
+
expect(generator.next(response).value)
|
|
242
|
+
.toEqual(put({
|
|
243
|
+
type: types.DUPLICATE_TEMPLATE_SUCCESS,
|
|
244
|
+
data: response.response,
|
|
245
|
+
statusCode: '',
|
|
246
|
+
errorMsg: response.message,
|
|
247
|
+
}));
|
|
248
|
+
|
|
249
|
+
expect(generator.next().done).toBeTruthy();
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
it.concurrent('should handle response with empty status object', () => {
|
|
253
|
+
const generator = sagas.duplicateTemplate(templateId, channel);
|
|
254
|
+
const response = {
|
|
255
|
+
response: { id: 456, name: 'Duplicated Template' },
|
|
256
|
+
status: {},
|
|
257
|
+
message: 'Success with empty status',
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
expect(generator.next().value)
|
|
261
|
+
.toEqual(call(Api.duplicateTemplate, templateId, channel));
|
|
262
|
+
|
|
263
|
+
expect(generator.next(response).value)
|
|
264
|
+
.toEqual(put({
|
|
265
|
+
type: types.DUPLICATE_TEMPLATE_SUCCESS,
|
|
266
|
+
data: response.response,
|
|
267
|
+
statusCode: undefined,
|
|
268
|
+
errorMsg: response.message,
|
|
269
|
+
}));
|
|
270
|
+
|
|
271
|
+
expect(generator.next().done).toBeTruthy();
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
it.concurrent('should handle response with null status', () => {
|
|
275
|
+
const generator = sagas.duplicateTemplate(templateId, channel);
|
|
276
|
+
const response = {
|
|
277
|
+
response: { id: 456, name: 'Duplicated Template' },
|
|
278
|
+
status: null,
|
|
279
|
+
message: 'Success with null status',
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
expect(generator.next().value)
|
|
283
|
+
.toEqual(call(Api.duplicateTemplate, templateId, channel));
|
|
284
|
+
|
|
285
|
+
expect(generator.next(response).value)
|
|
286
|
+
.toEqual(put({
|
|
287
|
+
type: types.DUPLICATE_TEMPLATE_SUCCESS,
|
|
288
|
+
data: response.response,
|
|
289
|
+
statusCode: '',
|
|
290
|
+
errorMsg: response.message,
|
|
291
|
+
}));
|
|
292
|
+
|
|
293
|
+
expect(generator.next().done).toBeTruthy();
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
it.concurrent('should handle response with undefined status code', () => {
|
|
297
|
+
const generator = sagas.duplicateTemplate(templateId, channel);
|
|
298
|
+
const response = {
|
|
299
|
+
response: { id: 456, name: 'Duplicated Template' },
|
|
300
|
+
status: { code: undefined },
|
|
301
|
+
message: 'Success with undefined status code',
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
expect(generator.next().value)
|
|
305
|
+
.toEqual(call(Api.duplicateTemplate, templateId, channel));
|
|
306
|
+
|
|
307
|
+
expect(generator.next(response).value)
|
|
308
|
+
.toEqual(put({
|
|
309
|
+
type: types.DUPLICATE_TEMPLATE_SUCCESS,
|
|
310
|
+
data: response.response,
|
|
311
|
+
statusCode: undefined,
|
|
312
|
+
errorMsg: response.message,
|
|
313
|
+
}));
|
|
314
|
+
|
|
315
|
+
expect(generator.next().done).toBeTruthy();
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
it.concurrent('should handle response with missing response data', () => {
|
|
319
|
+
const generator = sagas.duplicateTemplate(templateId, channel);
|
|
320
|
+
const response = {
|
|
321
|
+
status: { code: 200 },
|
|
322
|
+
message: 'Success but no response data',
|
|
323
|
+
};
|
|
324
|
+
|
|
325
|
+
expect(generator.next().value)
|
|
326
|
+
.toEqual(call(Api.duplicateTemplate, templateId, channel));
|
|
327
|
+
|
|
328
|
+
expect(generator.next(response).value)
|
|
329
|
+
.toEqual(put({
|
|
330
|
+
type: types.DUPLICATE_TEMPLATE_SUCCESS,
|
|
331
|
+
data: undefined,
|
|
332
|
+
statusCode: response.status.code,
|
|
333
|
+
errorMsg: response.message,
|
|
334
|
+
}));
|
|
335
|
+
|
|
336
|
+
expect(generator.next().done).toBeTruthy();
|
|
337
|
+
});
|
|
338
|
+
|
|
339
|
+
it.concurrent('should handle error response', () => {
|
|
340
|
+
const generator = sagas.duplicateTemplate(templateId, channel);
|
|
341
|
+
const error = new Error('Duplication failed');
|
|
342
|
+
|
|
343
|
+
expect(generator.next().value)
|
|
344
|
+
.toEqual(call(Api.duplicateTemplate, templateId, channel));
|
|
345
|
+
|
|
346
|
+
expect(generator.throw(error).value)
|
|
347
|
+
.toEqual(put({
|
|
348
|
+
type: types.DUPLICATE_TEMPLATE_FAILURE,
|
|
349
|
+
error,
|
|
350
|
+
errorMsg: undefined,
|
|
351
|
+
}));
|
|
352
|
+
|
|
353
|
+
expect(generator.next().done).toBeTruthy();
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
it.concurrent('should set errorMsg when status code is 500', () => {
|
|
357
|
+
const generator = sagas.duplicateTemplate(templateId, channel);
|
|
358
|
+
const response = {
|
|
359
|
+
response: { id: 456 },
|
|
360
|
+
status: { code: 500 },
|
|
361
|
+
message: 'Internal Server Error',
|
|
362
|
+
};
|
|
363
|
+
|
|
364
|
+
expect(generator.next().value)
|
|
365
|
+
.toEqual(call(Api.duplicateTemplate, templateId, channel));
|
|
366
|
+
|
|
367
|
+
expect(generator.next(response).value)
|
|
368
|
+
.toEqual(put({
|
|
369
|
+
type: types.DUPLICATE_TEMPLATE_SUCCESS,
|
|
370
|
+
data: response.response,
|
|
371
|
+
statusCode: 500,
|
|
372
|
+
errorMsg: 'Internal Server Error',
|
|
373
|
+
}));
|
|
374
|
+
|
|
375
|
+
expect(generator.next().done).toBeTruthy();
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
it.concurrent('should set errorMsg when both message exists and status code is 500', () => {
|
|
379
|
+
const generator = sagas.duplicateTemplate(templateId, channel);
|
|
380
|
+
const response = {
|
|
381
|
+
response: null,
|
|
382
|
+
status: { code: 500 },
|
|
383
|
+
message: 'Custom Error Message',
|
|
384
|
+
};
|
|
385
|
+
|
|
386
|
+
expect(generator.next().value)
|
|
387
|
+
.toEqual(call(Api.duplicateTemplate, templateId, channel));
|
|
388
|
+
|
|
389
|
+
expect(generator.next(response).value)
|
|
390
|
+
.toEqual(put({
|
|
391
|
+
type: types.DUPLICATE_TEMPLATE_SUCCESS,
|
|
392
|
+
data: null,
|
|
393
|
+
statusCode: 500,
|
|
394
|
+
errorMsg: 'Custom Error Message',
|
|
395
|
+
}));
|
|
396
|
+
|
|
397
|
+
expect(generator.next().done).toBeTruthy();
|
|
398
|
+
});
|
|
399
|
+
|
|
400
|
+
it.concurrent('should set errorMsg when message exists but status code is not 500', () => {
|
|
401
|
+
const generator = sagas.duplicateTemplate(templateId, channel);
|
|
402
|
+
const response = {
|
|
403
|
+
response: { id: 456 },
|
|
404
|
+
status: { code: 400 },
|
|
405
|
+
message: 'Bad Request Error',
|
|
406
|
+
};
|
|
407
|
+
|
|
408
|
+
expect(generator.next().value)
|
|
409
|
+
.toEqual(call(Api.duplicateTemplate, templateId, channel));
|
|
410
|
+
|
|
411
|
+
expect(generator.next(response).value)
|
|
412
|
+
.toEqual(put({
|
|
413
|
+
type: types.DUPLICATE_TEMPLATE_SUCCESS,
|
|
414
|
+
data: response.response,
|
|
415
|
+
statusCode: 400,
|
|
416
|
+
errorMsg: 'Bad Request Error',
|
|
417
|
+
}));
|
|
418
|
+
|
|
419
|
+
expect(generator.next().done).toBeTruthy();
|
|
420
|
+
});
|
|
421
|
+
|
|
422
|
+
it.concurrent('should handle case when status code is 500 but no message exists', () => {
|
|
423
|
+
const generator = sagas.duplicateTemplate(templateId, channel);
|
|
424
|
+
const response = {
|
|
425
|
+
response: { id: 456 },
|
|
426
|
+
status: { code: 500 },
|
|
427
|
+
};
|
|
428
|
+
|
|
429
|
+
expect(generator.next().value)
|
|
430
|
+
.toEqual(call(Api.duplicateTemplate, templateId, channel));
|
|
431
|
+
|
|
432
|
+
expect(generator.next(response).value)
|
|
433
|
+
.toEqual(put({
|
|
434
|
+
type: types.DUPLICATE_TEMPLATE_SUCCESS,
|
|
435
|
+
data: response.response,
|
|
436
|
+
statusCode: 500,
|
|
437
|
+
errorMsg: undefined,
|
|
438
|
+
}));
|
|
439
|
+
|
|
440
|
+
expect(generator.next().done).toBeTruthy();
|
|
441
|
+
});
|
|
442
|
+
|
|
443
|
+
it.concurrent('should not set errorMsg when no message and status code is not 500', () => {
|
|
444
|
+
const generator = sagas.duplicateTemplate(templateId, channel);
|
|
445
|
+
const response = {
|
|
446
|
+
response: { id: 456 },
|
|
447
|
+
status: { code: 200 },
|
|
448
|
+
};
|
|
449
|
+
|
|
450
|
+
expect(generator.next().value)
|
|
451
|
+
.toEqual(call(Api.duplicateTemplate, templateId, channel));
|
|
452
|
+
|
|
453
|
+
expect(generator.next(response).value)
|
|
454
|
+
.toEqual(put({
|
|
455
|
+
type: types.DUPLICATE_TEMPLATE_SUCCESS,
|
|
456
|
+
data: response.response,
|
|
457
|
+
statusCode: 200,
|
|
458
|
+
errorMsg: undefined,
|
|
459
|
+
}));
|
|
460
|
+
|
|
461
|
+
expect(generator.next().done).toBeTruthy();
|
|
462
|
+
});
|
|
463
|
+
|
|
464
|
+
it.concurrent('should handle case when accessing status.code throws error', () => {
|
|
465
|
+
const generator = sagas.duplicateTemplate(templateId, channel);
|
|
466
|
+
const error = new TypeError("Cannot read property 'code' of undefined");
|
|
467
|
+
|
|
468
|
+
expect(generator.next().value)
|
|
469
|
+
.toEqual(call(Api.duplicateTemplate, templateId, channel));
|
|
470
|
+
|
|
471
|
+
expect(generator.throw(error).value)
|
|
472
|
+
.toEqual(put({
|
|
473
|
+
type: types.DUPLICATE_TEMPLATE_FAILURE,
|
|
474
|
+
error,
|
|
475
|
+
errorMsg: undefined,
|
|
476
|
+
}));
|
|
477
|
+
|
|
478
|
+
expect(generator.next().done).toBeTruthy();
|
|
479
|
+
});
|
|
480
|
+
});
|
|
481
|
+
|
|
482
|
+
describe('getTemplateDetails Saga', () => {
|
|
483
|
+
const id = '123';
|
|
484
|
+
|
|
485
|
+
it.concurrent('handles fetching template details successfully', () => {
|
|
486
|
+
const fakeResponse = {
|
|
487
|
+
response: { id: 123, name: 'Detailed Template' },
|
|
488
|
+
};
|
|
489
|
+
|
|
490
|
+
return expectSaga(sagas.getTemplateDetails, id)
|
|
491
|
+
.provide([
|
|
492
|
+
[call(Api.getTemplateDetails, id), fakeResponse],
|
|
493
|
+
])
|
|
494
|
+
.put({
|
|
495
|
+
type: types.GET_TEMPLATE_DETAILS_SUCCESS,
|
|
496
|
+
data: fakeResponse.response,
|
|
497
|
+
})
|
|
498
|
+
.run();
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
it.concurrent('handles failure in fetching template details', () => {
|
|
502
|
+
const error = new Error('Fetch failed');
|
|
503
|
+
|
|
504
|
+
return expectSaga(sagas.getTemplateDetails, id)
|
|
505
|
+
.provide([
|
|
506
|
+
[call(Api.getTemplateDetails, id), throwError(error)],
|
|
507
|
+
])
|
|
508
|
+
.put({
|
|
509
|
+
type: types.GET_TEMPLATE_DETAILS_FAILURE,
|
|
510
|
+
error,
|
|
511
|
+
})
|
|
512
|
+
.run();
|
|
513
|
+
});
|
|
514
|
+
});
|
|
515
|
+
|
|
516
|
+
describe('getAllAssets Saga', () => {
|
|
517
|
+
const mockAssets = [{ id: 1, url: 'http://example.com/asset.jpg' }];
|
|
518
|
+
const mockError = new Error('Fetch failed');
|
|
519
|
+
const assetType = 'image';
|
|
520
|
+
const queryParams = { page: 1 };
|
|
521
|
+
|
|
522
|
+
it.concurrent('handles fetching all assets successfully', () => {
|
|
523
|
+
const result = {
|
|
524
|
+
response: { data: { data: mockAssets } },
|
|
525
|
+
};
|
|
526
|
+
return expectSaga(sagas.getAllAssets, { assetType, queryParams })
|
|
527
|
+
.provide([
|
|
528
|
+
[call(Api.getAllAssets, { assetType, queryParams }), result],
|
|
529
|
+
])
|
|
530
|
+
.put({
|
|
531
|
+
type: types.GET_ALL_ASSETS_SUCCESS,
|
|
532
|
+
data: { data: { data: mockAssets } }, // Match the exact nested structure
|
|
533
|
+
isReset: true,
|
|
534
|
+
})
|
|
535
|
+
.run(500);
|
|
536
|
+
});
|
|
537
|
+
|
|
538
|
+
it.concurrent('handles failure in fetching all assets', () => expectSaga(sagas.getAllAssets, { assetType, queryParams })
|
|
539
|
+
.provide([
|
|
540
|
+
[call(Api.getAllAssets, { assetType, queryParams }), throwError(mockError)],
|
|
541
|
+
])
|
|
542
|
+
.put({
|
|
543
|
+
type: types.GET_ALL_ASSETS_FAILURE,
|
|
544
|
+
error: mockError,
|
|
545
|
+
})
|
|
546
|
+
.run(500));
|
|
547
|
+
});
|
|
548
|
+
|
|
549
|
+
describe('getCmsSetting Saga', () => {
|
|
550
|
+
const params = {
|
|
551
|
+
cmsType: 'email', projectId: '123', cmsMode: 'edit', langId: 'en', isEdmSupport: true,
|
|
552
|
+
};
|
|
553
|
+
|
|
554
|
+
it.concurrent('handles fetching CMS settings successfully', () => {
|
|
555
|
+
const fakeResponse = {
|
|
556
|
+
data: {
|
|
557
|
+
response: {
|
|
558
|
+
cmsDetails: { id: 1, name: 'CMS Config' },
|
|
559
|
+
},
|
|
560
|
+
},
|
|
561
|
+
};
|
|
562
|
+
|
|
563
|
+
return expectSaga(sagas.getCmsSetting, params)
|
|
564
|
+
.provide([
|
|
565
|
+
[call(Api.getCmsTemplateSettings, params.cmsType, params.projectId, params.cmsMode, params.langId, params.isEdmSupport), fakeResponse],
|
|
566
|
+
])
|
|
567
|
+
.put({
|
|
568
|
+
type: types.GET_CMS_EDITOR_DETAILS_SUCCESS,
|
|
569
|
+
settings: fakeResponse.data.response.cmsDetails,
|
|
570
|
+
})
|
|
571
|
+
.run();
|
|
572
|
+
});
|
|
573
|
+
|
|
574
|
+
it.concurrent('handles failure in fetching CMS settings', () => {
|
|
575
|
+
const error = new Error('Fetch failed');
|
|
576
|
+
|
|
577
|
+
return expectSaga(sagas.getCmsSetting, params)
|
|
578
|
+
.provide([
|
|
579
|
+
[call(Api.getCmsTemplateSettings, params.cmsType, params.projectId, params.cmsMode, params.langId, params.isEdmSupport), throwError(error)],
|
|
580
|
+
])
|
|
581
|
+
.put({
|
|
582
|
+
type: types.GET_CMS_EDITOR_DETAILS_FAILURE,
|
|
583
|
+
error,
|
|
584
|
+
})
|
|
585
|
+
.run();
|
|
586
|
+
});
|
|
587
|
+
});
|
|
588
|
+
|
|
589
|
+
describe('getCmsData Saga', () => {
|
|
590
|
+
const params = { cmsType: 'email', projectId: '123', langId: 'en' };
|
|
591
|
+
|
|
592
|
+
it.concurrent('handles fetching CMS data successfully', () => {
|
|
593
|
+
const fakeResponse = {
|
|
594
|
+
data: {
|
|
595
|
+
response: {
|
|
596
|
+
data: { id: 1, content: 'Content here' },
|
|
597
|
+
langId: 'en',
|
|
598
|
+
},
|
|
599
|
+
},
|
|
600
|
+
};
|
|
601
|
+
|
|
602
|
+
return expectSaga(sagas.getCmsData, params)
|
|
603
|
+
.provide([
|
|
604
|
+
[call(Api.getCmsTemplateData, params.cmsType, params.projectId, params.langId), fakeResponse],
|
|
605
|
+
])
|
|
606
|
+
.put({
|
|
607
|
+
type: types.GET_CMS_EDITOR_DATA_SUCCESS,
|
|
608
|
+
data: fakeResponse.data.response.data,
|
|
609
|
+
langId: fakeResponse.data.response.langId,
|
|
610
|
+
})
|
|
611
|
+
.run();
|
|
612
|
+
});
|
|
613
|
+
|
|
614
|
+
it.concurrent('handles failure in fetching CMS data', () => {
|
|
615
|
+
const error = new Error('Fetch failed');
|
|
616
|
+
|
|
617
|
+
return expectSaga(sagas.getCmsData, params)
|
|
618
|
+
.provide([
|
|
619
|
+
[call(Api.getCmsTemplateData, params.cmsType, params.projectId, params.langId), throwError(error)],
|
|
620
|
+
])
|
|
621
|
+
.put({
|
|
622
|
+
type: types.GET_CMS_EDITOR_DATA_FAILURE,
|
|
623
|
+
error,
|
|
624
|
+
})
|
|
625
|
+
.run();
|
|
626
|
+
});
|
|
627
|
+
});
|
|
628
|
+
|
|
629
|
+
describe('uploadAsset Saga', () => {
|
|
630
|
+
const file = new Blob();
|
|
631
|
+
const assetType = 'image';
|
|
632
|
+
const fileParams = { param1: 'value1' };
|
|
633
|
+
|
|
634
|
+
it.concurrent('handles successful asset upload', () => {
|
|
635
|
+
const fakeResponse = {
|
|
636
|
+
response: { asset: { id: 1, url: 'http://example.com/asset.jpg' } },
|
|
637
|
+
status: { code: '200' },
|
|
638
|
+
};
|
|
639
|
+
|
|
640
|
+
return expectSaga(sagas.uploadAsset, file, assetType, fileParams)
|
|
641
|
+
.provide([
|
|
642
|
+
[call(Api.uploadFile, file, assetType, fileParams), fakeResponse],
|
|
643
|
+
])
|
|
644
|
+
.put({
|
|
645
|
+
type: types.UPLOAD_ASSET_SUCCESS,
|
|
646
|
+
data: fakeResponse.response.asset,
|
|
647
|
+
statusCode: '200',
|
|
648
|
+
})
|
|
649
|
+
.run();
|
|
650
|
+
});
|
|
651
|
+
|
|
652
|
+
it.concurrent('handles failure in asset upload', () => {
|
|
653
|
+
const error = new Error('Failed to upload asset');
|
|
654
|
+
|
|
655
|
+
return expectSaga(sagas.uploadAsset, file, assetType, fileParams)
|
|
656
|
+
.provide([
|
|
657
|
+
[call(Api.uploadFile, file, assetType, fileParams), throwError(error)],
|
|
658
|
+
])
|
|
659
|
+
.put({
|
|
660
|
+
type: types.UPLOAD_ASSET_FAILURE,
|
|
661
|
+
error,
|
|
662
|
+
})
|
|
663
|
+
.run();
|
|
664
|
+
});
|
|
665
|
+
});
|
|
666
|
+
|
|
667
|
+
describe('Combined emailSaga', () => {
|
|
668
|
+
it.concurrent('should initialize all email-related watcher sagas without error', () => expectSaga(sagas.emailSaga)
|
|
669
|
+
.run());
|
|
670
|
+
});
|
|
671
|
+
});
|