From 4d55dfb91c88a4ea8451c2feb49313358d8961f4 Mon Sep 17 00:00:00 2001 From: RAJVEER42 Date: Fri, 12 Jun 2026 01:16:54 +0530 Subject: [PATCH] Guard getResourceStatuses against a null resource getResourceStatuses already tolerates a missing resource (const {executions=[]} = resource || {}, resource?.is_approved, resource?.is_published) but then dereferenced resource.advertised directly, throwing TypeError on null. Use resource?.advertised to complete the existing null handling. Adds a test in ResourceUtils-test.js; getResourceStatuses(null) throws on master and returns the expected status object with the fix. --- .../client/js/utils/ResourceUtils.js | 2 +- .../client/js/utils/__tests__/ResourceUtils-test.js | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/geonode_mapstore_client/client/js/utils/ResourceUtils.js b/geonode_mapstore_client/client/js/utils/ResourceUtils.js index 9e91dcc415..cfb256f8ff 100644 --- a/geonode_mapstore_client/client/js/utils/ResourceUtils.js +++ b/geonode_mapstore_client/client/js/utils/ResourceUtils.js @@ -307,7 +307,7 @@ export const getResourceStatuses = (resource, userInfo) => { isDeleting, isCopying, items: [ - ...(resource.advertised === false ? [{ + ...(resource?.advertised === false ? [{ type: 'icon', tooltipId: 'resourcesCatalog.unadvertised', glyph: 'eye-slash' diff --git a/geonode_mapstore_client/client/js/utils/__tests__/ResourceUtils-test.js b/geonode_mapstore_client/client/js/utils/__tests__/ResourceUtils-test.js index 2029d317c9..862215d0ff 100644 --- a/geonode_mapstore_client/client/js/utils/__tests__/ResourceUtils-test.js +++ b/geonode_mapstore_client/client/js/utils/__tests__/ResourceUtils-test.js @@ -37,10 +37,18 @@ import { canManageResourceSettings, canAccessPermissions, formatResourceLinkUrl, - canEditMap + canEditMap, + getResourceStatuses } from '../ResourceUtils'; describe('Test Resource Utils', () => { + it('getResourceStatuses does not throw for a null resource', () => { + const status = getResourceStatuses(null); + expect(status.isProcessing).toBe(false); + expect(status.isDeleting).toBe(false); + expect(status.isCopying).toBe(false); + expect(status.items).toEqual([]); + }); it('should getViewedResourcePermissions', () => { const data = [{ name: "testType",