From a384722b2ea7580d646589578c3a29629dd475d2 Mon Sep 17 00:00:00 2001 From: Nadeem Patwekar Date: Thu, 13 Feb 2025 11:03:22 +0530 Subject: [PATCH] fix: update test for asset url method for gql --- __test__/mock/gql-asset-url-update-mock.ts | 23 ++++++-------- __test__/updateAssetURLForGQL.test.ts | 8 ++--- src/updateAssetURLForGQL.ts | 35 +++++++++++++++------- 3 files changed, 37 insertions(+), 29 deletions(-) diff --git a/__test__/mock/gql-asset-url-update-mock.ts b/__test__/mock/gql-asset-url-update-mock.ts index 671ca5f..bc9fdb3 100644 --- a/__test__/mock/gql-asset-url-update-mock.ts +++ b/__test__/mock/gql-asset-url-update-mock.ts @@ -264,21 +264,13 @@ export const gqlResponseForAssetUpdateMultipleEntries = { "title": "merry-marketplace.png", "url": "actual_asset_url.png", "content_type": "image/png", - "description": null, + "description": "null", "file_size": 273858, "filename": "merry-marketplace.png", - "permanent_url": "Permanent URL Not Defined!" - } - }, - { - "node": { - "title": "Screenshot.png", - "url": "https://azure-na-images.contentstack.com/v3/assets/folder_uid/asset_uid_2/folder_uid_4/Screenshot_2024-12-09_at_7.28.28_PM.png?branch=test2", - "content_type": "image/png", - "description": "", - "file_size": 287954, - "filename": "Screenshot_2024-12-09_at_7.28.28_PM.png", - "permanent_url": "Permanent URL Not Defined!" + "permanent_url": "Permanent URL Not Defined!", + "system" : { + "uid": "asset_uid_1" + } } }, { @@ -289,7 +281,10 @@ export const gqlResponseForAssetUpdateMultipleEntries = { "description": "", "file_size": 1050317, "filename": "Aadhaar.pdf", - "permanent_url": "Permanent URL Not Defined!" + "permanent_url": "Permanent URL Not Defined!", + "system" : { + "uid": "asset_uid_2" + } } } ] diff --git a/__test__/updateAssetURLForGQL.test.ts b/__test__/updateAssetURLForGQL.test.ts index fc33f5c..a165271 100644 --- a/__test__/updateAssetURLForGQL.test.ts +++ b/__test__/updateAssetURLForGQL.test.ts @@ -3,7 +3,7 @@ import { gqlResponseForAssetUpdate, gqlResponseForAssetUpdateWithoutSystemUid, g describe('updateAssetURLForGQL test', () => { - it.skip('should update the asset URL in the GQL response when proper response is passed', done => { + it('should update the asset URL in the GQL response when proper response is passed', done => { const testResponse = { ...gqlResponseForAssetUpdate }; updateAssetURLForGQL(testResponse); @@ -15,19 +15,19 @@ describe('updateAssetURLForGQL test', () => { done(); }); - it.skip('should update the asset URL in the GQL response when proper response is passed', done => { + it('should update the asset URL in the GQL response with multiple entries when proper response is passed', done => { const testResponse = { ...gqlResponseForAssetUpdateMultipleEntries }; updateAssetURLForGQL(testResponse); const rteField = testResponse.data.page_json_rte.items[0].body_new[0].body.body_12; const assetLink = rteField.json.children[0].attrs['asset-link']; const expectedUrl = rteField.embedded_itemsConnection.edges[0].node.url; - + expect(assetLink).toBe(expectedUrl); done(); }); - it.skip('should throw error when system.uid is not present', done => { + it('should throw error when system.uid is not present', done => { jest.spyOn(console, 'error').mockImplementation(() => {}); const testResponse = { ...gqlResponseForAssetUpdateWithoutSystemUid }; diff --git a/src/updateAssetURLForGQL.ts b/src/updateAssetURLForGQL.ts index cde8fb2..29a3e4f 100644 --- a/src/updateAssetURLForGQL.ts +++ b/src/updateAssetURLForGQL.ts @@ -20,21 +20,34 @@ export function updateAssetURLForGQL(gqlResponse:any) { function processEntry(entry:any) { for (let field in entry) { const fieldData = entry[field]; - const rteField = findRTEField(fieldData) - const edges = rteField?.embedded_itemsConnection?.edges; - edges.forEach((edge:any) => { - const node = edge.node; - if (node?.url && node?.filename) { - - if (!node?.system?.uid) throw new Error('Asset UID not found in the response'); - - const correspondingAsset = rteField?.json?.children?.find((child:any) => child.attrs['asset-uid'] === node.system.uid); - correspondingAsset.attrs['asset-link'] = node.url; - } + if (fieldData instanceof Array) { + fieldData.forEach((data:any) => { + findRTEFieldAndUpdateURL(data); }); + } else if (fieldData && typeof fieldData === 'object') { + findRTEFieldAndUpdateURL(fieldData); + } } } +function findRTEFieldAndUpdateURL(fieldData:any) { + const rteField = findRTEField(fieldData); + + if (!rteField) return; + + const edges = rteField?.embedded_itemsConnection?.edges; + edges.forEach((edge:any) => { + const node = edge.node; + if (node?.url && node?.filename) { + + if (!node?.system?.uid) throw new Error('Asset UID not found in the response'); + + const correspondingAsset = rteField?.json?.children?.find((child:any) => child.attrs['asset-uid'] === node.system.uid); + correspondingAsset.attrs['asset-link'] = node.url; + } + }); +} + function findRTEField(fieldData: any): any { if (fieldData && fieldData.embedded_itemsConnection) { return fieldData;