@capillarytech/creatives-library 8.0.76 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@capillarytech/creatives-library",
3
3
  "author": "meharaj",
4
- "version": "8.0.76",
4
+ "version": "8.0.77",
5
5
  "description": "Capillary creatives ui",
6
6
  "main": "./index.js",
7
7
  "module": "./index.es.js",
package/services/api.js CHANGED
@@ -2,12 +2,13 @@
2
2
  * Created by vivek on 3/5/17.
3
3
  */
4
4
  import 'whatwg-fetch';
5
+ import { GA, decompressJsonObject } from '@capillarytech/cap-ui-utils';
6
+ import { get } from 'lodash';
5
7
  import { loadItem, clearItem } from './localStorageApi';
6
8
  import config from '../config/app';
7
9
  import pathConfig from '../config/path';
8
10
  import getSchema from './getSchema';
9
11
  import * as API from '../utils/ApiCaller';
10
- import { GA, decompressJsonObject } from '@capillarytech/cap-ui-utils';
11
12
  import { addBaseToTemplate } from '../utils/commonUtils';
12
13
  import { EMAIL, SMS } from '../v2Containers/CreativesContainer/constants';
13
14
  let API_ENDPOINT = config.development.api_endpoint;
@@ -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 = ({file, assetType, fileParams, mode, wechatParams, whatsappParams}) => {
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 {
@@ -403,14 +406,20 @@ export const getCmsData = (cmsType, projectId, langId) => {
403
406
  return API.get(url);
404
407
  };
405
408
 
406
- export const getEdmTemplates = () => {
409
+ export const getEdmTemplates = async () => {
407
410
  const url = `${API_ENDPOINT}/templates/email/default`;
408
- return request(url, getAPICallObject('GET'));
411
+ const compressedEdmTemplates = await request(url, getAPICallObject('GET'));
412
+ const response = get(compressedEdmTemplates, 'response', '');
413
+ const decompressedEdmTemplates = decompressJsonObject(response);
414
+ return { ...compressedEdmTemplates, response: addBaseToTemplate(decompressedEdmTemplates) };
409
415
  };
410
416
 
411
- export const getDefaultBeeTemplates = () => {
417
+ export const getDefaultBeeTemplates = async () => {
412
418
  const url = `${API_ENDPOINT}/templates/v2/email/default`;
413
- return request(url, getAPICallObject('GET'));
419
+ const compressedDefaultBeeTemplates = await request(url, getAPICallObject('GET'));
420
+ const response = get(compressedDefaultBeeTemplates, 'response', '');
421
+ const decompressedBeeTemplates = decompressJsonObject(response);
422
+ return { ...compressedDefaultBeeTemplates, response: addBaseToTemplate(decompressedBeeTemplates) };
414
423
  };
415
424
 
416
425
  // All about line
@@ -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
- "response": undefined,
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
+ });
@@ -315,7 +315,7 @@ export const getTagMapValue = (object = {}) => {
315
315
  return Object.values(
316
316
  object
317
317
  ).reduce((acc, current) => {
318
- return { ...acc, ...current?.subtags ?? {} };
318
+ return { ...acc?.subtags ?? {}, ...current?.subtags ?? {} };
319
319
  }, {});
320
320
  };
321
321
 
@@ -498,27 +498,6 @@ describe("getTagMapValue", () => {
498
498
  name: "233",
499
499
  },
500
500
  },
501
- "key 2": {
502
- name: "24",
503
- subtags: {
504
- tagName: "234",
505
- },
506
- },
507
- };
508
- const result = getTagMapValue(object);
509
- expect(result).toEqual({ name: "233", tagName: "234", });
510
- });
511
- it("should return the tag map value when an object is provided but subtag is not present in one of the obj", () => {
512
- const object = {
513
- "key 1": {
514
- name: "23",
515
- subtags: {
516
- name: "233",
517
- },
518
- },
519
- "key 2": {
520
- name: "24",
521
- },
522
501
  };
523
502
  const result = getTagMapValue(object);
524
503
  expect(result).toEqual({ name: "233" });
@@ -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._id, 'open', undefined, isBEESupport, isBEEAppEnable);
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._id, 'create', undefined, isBEESupport, isBEEAppEnable);
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});