@capillarytech/creatives-library 8.0.76-alpha.0 → 8.0.77
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/package.json +1 -1
- package/services/api.js +8 -13
- package/services/tests/api.test.js +117 -1
- package/v2Containers/Email/index.js +2 -2
package/package.json
CHANGED
package/services/api.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import 'whatwg-fetch';
|
|
5
5
|
import { GA, decompressJsonObject } from '@capillarytech/cap-ui-utils';
|
|
6
|
+
import { get } from 'lodash';
|
|
6
7
|
import { loadItem, clearItem } from './localStorageApi';
|
|
7
8
|
import config from '../config/app';
|
|
8
9
|
import pathConfig from '../config/path';
|
|
@@ -300,15 +301,17 @@ export const getAllAssets = ({assetType, queryParams = {}}) => {
|
|
|
300
301
|
});
|
|
301
302
|
// const url = `https://nightly.capillary.in/arya/api/v1/creatives/assets/${assetType}?query=${JSON.stringify(queryParams)}`;
|
|
302
303
|
return request(url, getAPICallObject('GET'));
|
|
303
|
-
}
|
|
304
|
-
|
|
304
|
+
};
|
|
305
|
+
|
|
305
306
|
export const deleteAssetById = ({assetId, assetType}) => {
|
|
306
307
|
const url = `${API_ENDPOINT}/assets/${assetId}/${assetType}`;
|
|
307
308
|
return request(url, getAPICallObject('DELETE'));
|
|
308
309
|
// return API.deleteResource(url);
|
|
309
310
|
};
|
|
310
311
|
|
|
311
|
-
export const uploadFile = ({
|
|
312
|
+
export const uploadFile = ({
|
|
313
|
+
file, assetType, fileParams, mode, wechatParams, whatsappParams,
|
|
314
|
+
}) => {
|
|
312
315
|
const data = new FormData();
|
|
313
316
|
let fileName = '';
|
|
314
317
|
try {
|
|
@@ -406,11 +409,7 @@ export const getCmsData = (cmsType, projectId, langId) => {
|
|
|
406
409
|
export const getEdmTemplates = async () => {
|
|
407
410
|
const url = `${API_ENDPOINT}/templates/email/default`;
|
|
408
411
|
const compressedEdmTemplates = await request(url, getAPICallObject('GET'));
|
|
409
|
-
const
|
|
410
|
-
// Check if response contains error
|
|
411
|
-
if (compressedEdmTemplates.errorMessage || compressedEdmTemplates.error) {
|
|
412
|
-
return compressedEdmTemplates;
|
|
413
|
-
}
|
|
412
|
+
const response = get(compressedEdmTemplates, 'response', '');
|
|
414
413
|
const decompressedEdmTemplates = decompressJsonObject(response);
|
|
415
414
|
return { ...compressedEdmTemplates, response: addBaseToTemplate(decompressedEdmTemplates) };
|
|
416
415
|
};
|
|
@@ -418,11 +417,7 @@ export const getEdmTemplates = async () => {
|
|
|
418
417
|
export const getDefaultBeeTemplates = async () => {
|
|
419
418
|
const url = `${API_ENDPOINT}/templates/v2/email/default`;
|
|
420
419
|
const compressedDefaultBeeTemplates = await request(url, getAPICallObject('GET'));
|
|
421
|
-
const
|
|
422
|
-
// Check if response contains error
|
|
423
|
-
if (compressedDefaultBeeTemplates.errorMessage || compressedDefaultBeeTemplates.error) {
|
|
424
|
-
return compressedDefaultBeeTemplates;
|
|
425
|
-
}
|
|
420
|
+
const response = get(compressedDefaultBeeTemplates, 'response', '');
|
|
426
421
|
const decompressedBeeTemplates = decompressJsonObject(response);
|
|
427
422
|
return { ...compressedDefaultBeeTemplates, response: addBaseToTemplate(decompressedBeeTemplates) };
|
|
428
423
|
};
|
|
@@ -12,17 +12,22 @@ import {
|
|
|
12
12
|
askAiraForLiquid,
|
|
13
13
|
getLiquidTags,
|
|
14
14
|
fetchSchemaForEntity,
|
|
15
|
+
getDefaultBeeTemplates,
|
|
16
|
+
getEdmTemplates,
|
|
15
17
|
} from '../api';
|
|
16
18
|
import { mockData } from './mockData';
|
|
17
19
|
import getSchema from '../getSchema';
|
|
18
20
|
const sampleFile = require('../../assets/line.png');
|
|
19
21
|
|
|
20
22
|
let mockDecompressJsonObject;
|
|
23
|
+
let mockAddBaseToTemplate;
|
|
21
24
|
jest.mock('@capillarytech/cap-ui-utils', () => {
|
|
22
25
|
mockDecompressJsonObject = jest.fn();
|
|
26
|
+
mockAddBaseToTemplate = jest.fn();
|
|
23
27
|
return {
|
|
24
28
|
...jest.requireActual('@capillarytech/cap-ui-utils'),
|
|
25
29
|
decompressJsonObject: mockDecompressJsonObject,
|
|
30
|
+
addBaseToTemplate: mockAddBaseToTemplate,
|
|
26
31
|
};
|
|
27
32
|
});
|
|
28
33
|
|
|
@@ -136,7 +141,7 @@ describe('getAllTemplates -- Test with valid responses', () => {
|
|
|
136
141
|
global.fetch.mockReturnValue(Promise.resolve({json: () => Promise.resolve(),}));
|
|
137
142
|
mockDecompressJsonObject.mockReturnValue();
|
|
138
143
|
expect(await getAllTemplates({channel: 'email'})).toEqual({
|
|
139
|
-
|
|
144
|
+
response: undefined,
|
|
140
145
|
});
|
|
141
146
|
});
|
|
142
147
|
|
|
@@ -493,3 +498,114 @@ describe('fetchSchemaForEntity', () => {
|
|
|
493
498
|
expect(console.error).toHaveBeenCalledWith(mockError);
|
|
494
499
|
});
|
|
495
500
|
});
|
|
501
|
+
|
|
502
|
+
describe('Email Template APIs', () => {
|
|
503
|
+
beforeEach(() => {
|
|
504
|
+
global.fetch = jest.fn();
|
|
505
|
+
});
|
|
506
|
+
|
|
507
|
+
afterEach(() => {
|
|
508
|
+
jest.restoreAllMocks();
|
|
509
|
+
});
|
|
510
|
+
|
|
511
|
+
const sharedTests = (apiFunction, functionName) => {
|
|
512
|
+
it('should handle successful response', async () => {
|
|
513
|
+
const mockResponse = { response: 'compressed-data' };
|
|
514
|
+
const mockDecompressed = { template: 'decompressed-data' };
|
|
515
|
+
const mockWithBase = { template: 'data-with-base' };
|
|
516
|
+
|
|
517
|
+
global.fetch.mockReturnValue(Promise.resolve({
|
|
518
|
+
status: 200,
|
|
519
|
+
json: () => Promise.resolve(mockResponse),
|
|
520
|
+
}));
|
|
521
|
+
mockDecompressJsonObject.mockReturnValue(mockDecompressed);
|
|
522
|
+
mockAddBaseToTemplate.mockReturnValue(mockWithBase);
|
|
523
|
+
|
|
524
|
+
const result = await apiFunction();
|
|
525
|
+
expect(result).toEqual({
|
|
526
|
+
...mockResponse,
|
|
527
|
+
response: mockDecompressed,
|
|
528
|
+
});
|
|
529
|
+
});
|
|
530
|
+
|
|
531
|
+
it('should handle response property as empty object', async () => {
|
|
532
|
+
const mockResponse = { response: {} };
|
|
533
|
+
|
|
534
|
+
global.fetch.mockReturnValue(Promise.resolve({
|
|
535
|
+
status: 200,
|
|
536
|
+
json: () => Promise.resolve(mockResponse),
|
|
537
|
+
}));
|
|
538
|
+
mockDecompressJsonObject.mockReturnValue({});
|
|
539
|
+
mockAddBaseToTemplate.mockReturnValue({});
|
|
540
|
+
|
|
541
|
+
const result = await apiFunction();
|
|
542
|
+
expect(result).toEqual({
|
|
543
|
+
...mockResponse,
|
|
544
|
+
response: {},
|
|
545
|
+
});
|
|
546
|
+
});
|
|
547
|
+
|
|
548
|
+
it('should handle missing response property', async () => {
|
|
549
|
+
const mockResponse = {};
|
|
550
|
+
|
|
551
|
+
global.fetch.mockReturnValue(Promise.resolve({
|
|
552
|
+
status: 200,
|
|
553
|
+
json: () => Promise.resolve(mockResponse),
|
|
554
|
+
}));
|
|
555
|
+
mockDecompressJsonObject.mockReturnValue('');
|
|
556
|
+
mockAddBaseToTemplate.mockReturnValue('');
|
|
557
|
+
|
|
558
|
+
const result = await apiFunction();
|
|
559
|
+
expect(result).toEqual({
|
|
560
|
+
response: '',
|
|
561
|
+
});
|
|
562
|
+
});
|
|
563
|
+
|
|
564
|
+
it('should handle null response', async () => {
|
|
565
|
+
global.fetch.mockReturnValue(Promise.resolve({
|
|
566
|
+
json: () => Promise.resolve(null),
|
|
567
|
+
}));
|
|
568
|
+
mockDecompressJsonObject.mockReturnValue('');
|
|
569
|
+
mockAddBaseToTemplate.mockReturnValue('');
|
|
570
|
+
|
|
571
|
+
const result = await apiFunction();
|
|
572
|
+
expect(result).toEqual({
|
|
573
|
+
response: '',
|
|
574
|
+
});
|
|
575
|
+
});
|
|
576
|
+
|
|
577
|
+
it('should handle undefined response', async () => {
|
|
578
|
+
global.fetch.mockReturnValue(Promise.resolve({
|
|
579
|
+
json: () => Promise.resolve(undefined),
|
|
580
|
+
}));
|
|
581
|
+
mockDecompressJsonObject.mockReturnValue('');
|
|
582
|
+
mockAddBaseToTemplate.mockReturnValue('');
|
|
583
|
+
|
|
584
|
+
const result = await apiFunction();
|
|
585
|
+
expect(result).toEqual({
|
|
586
|
+
response: '',
|
|
587
|
+
});
|
|
588
|
+
});
|
|
589
|
+
|
|
590
|
+
it('should handle fetch failure', async () => {
|
|
591
|
+
global.fetch.mockRejectedValue(new Error('Network error'));
|
|
592
|
+
mockDecompressJsonObject.mockReturnValue(undefined);
|
|
593
|
+
mockAddBaseToTemplate.mockReturnValue(undefined);
|
|
594
|
+
console.error = jest.fn();
|
|
595
|
+
|
|
596
|
+
const result = await apiFunction();
|
|
597
|
+
|
|
598
|
+
expect(result).toEqual({
|
|
599
|
+
response: undefined,
|
|
600
|
+
});
|
|
601
|
+
});
|
|
602
|
+
};
|
|
603
|
+
|
|
604
|
+
describe('getEdmTemplates', () => {
|
|
605
|
+
sharedTests(getEdmTemplates, 'getEdmTemplates');
|
|
606
|
+
});
|
|
607
|
+
|
|
608
|
+
describe('getDefaultBeeTemplates', () => {
|
|
609
|
+
sharedTests(getDefaultBeeTemplates, 'getDefaultBeeTemplates');
|
|
610
|
+
});
|
|
611
|
+
});
|
|
@@ -199,9 +199,9 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
|
|
|
199
199
|
this.setState({isDragDrop: true});
|
|
200
200
|
}
|
|
201
201
|
if (this.props.params.id) {
|
|
202
|
-
this.props.actions.getCmsSetting(BEE_PLUGIN, this.props.Templates.BEETemplate
|
|
202
|
+
this.props.actions.getCmsSetting(BEE_PLUGIN, _.get(this.props.Templates.BEETemplate, 'versions.base.drag_drop_id', this.props.Templates.BEETemplate?._id), 'open', undefined, isBEESupport, isBEEAppEnable);
|
|
203
203
|
} else if (this.props.location.query.module !== "library" || (this.props.location.query.module === "library" && !this.props.templateData)) {
|
|
204
|
-
this.props.actions.getCmsSetting(BEE_PLUGIN, this.props.Templates.BEETemplate
|
|
204
|
+
this.props.actions.getCmsSetting(BEE_PLUGIN, _.get(this.props.Templates.BEETemplate, 'versions.base.drag_drop_id', this.props.Templates.BEETemplate?._id), 'create', undefined, isBEESupport, isBEEAppEnable);
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
207
|
this.setState({ content: (this.props.Templates.selectedEmailLayout ? this.props.Templates.selectedEmailLayout : ''), formData});
|