@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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@capillarytech/creatives-library",
3
3
  "author": "meharaj",
4
- "version": "8.0.76-alpha.0",
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
@@ -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 = ({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 {
@@ -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 { response = '' } = compressedEdmTemplates || {};
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 { response = '' } = compressedDefaultBeeTemplates || {};
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
- "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
+ });
@@ -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.versions.base.drag_drop_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.versions.base.drag_drop_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});