diff --git a/src/middleware/entityIssueDetails.middleware.js b/src/middleware/entityIssueDetails.middleware.js index 3c698e502..5a53ac44b 100644 --- a/src/middleware/entityIssueDetails.middleware.js +++ b/src/middleware/entityIssueDetails.middleware.js @@ -88,6 +88,10 @@ export function prepareEntity (req, res, next) { const { issueEntities, issues, specification } = req const { pageNumber, issue_type: issueType } = req.parsedParams + if (!issueEntities || issueEntities.length === 0) { + return next(new MiddlewareError('No issues for entity', 404)) + } + const entityData = issueEntities[pageNumber - 1] const entityIssues = issues.filter(issue => issue.entity === entityData.entity) diff --git a/test/unit/middleware/entityIssueDetails.middleware.test.js b/test/unit/middleware/entityIssueDetails.middleware.test.js index b5a03326b..7e4704ca0 100644 --- a/test/unit/middleware/entityIssueDetails.middleware.test.js +++ b/test/unit/middleware/entityIssueDetails.middleware.test.js @@ -44,7 +44,7 @@ describe('issueDetails.middleware.js', () => { expect(next).toHaveBeenCalledTimes(1) }) - it('sets the record count to 0 if req.issues is undefined', () => { + it('sets the record count to 0 if req.issueEntities is undefined', () => { const req = {} const res = {} const next = vi.fn() @@ -55,8 +55,8 @@ describe('issueDetails.middleware.js', () => { expect(next).toHaveBeenCalledTimes(1) }) - it('sets the record count to 0 if req.issues is null', () => { - const req = { issues: null } + it('sets the record count to 0 if req.issueEntities is undefined', () => { + const req = { issues: null, issueEntities: undefined } const res = {} const next = vi.fn() @@ -68,27 +68,32 @@ describe('issueDetails.middleware.js', () => { }) describe('prepareEntity', () => { - const req = {} - const res = {} - - beforeEach(() => { - req.issueEntities = [ + const reqTemplate = { + issueEntities: [ { entity: 'entity1', name: 'Entity 1', field1: 'value1', field2: 'value2', geometry: 'POINT (-0.10 51.49)' }, { entity: 'entity2', name: 'Entity 2', field1: 'value3', field2: 'value4', geometry: undefined } - ] - req.issues = [ + ], + issues: [ { entity: 'entity1', field: 'field1', message: 'Error 1' }, { entity: 'entity1', field: 'field2', message: 'Error 2' }, { entity: 'entity2', field: 'field1', message: 'Error 3' } - ] - req.specification = { + ], + specification: { fields: [ { field: 'field1', datasetField: 'datasetField1' }, { field: 'field2', datasetField: 'datasetField2' }, { field: 'geometry', datasetField: 'geometry_field' } ] - } - req.parsedParams = { pageNumber: 1, issue_type: 'issueType' } + }, + parsedParams: { pageNumber: 1, issue_type: 'issueType' } + } + const resTemplate = {} + let req = {} + let res = {} + + beforeEach(() => { + req = structuredClone(reqTemplate) + res = structuredClone(resTemplate) }) it('should set req.entry with correct title and fields', () => { @@ -154,6 +159,14 @@ describe('issueDetails.middleware.js', () => { geometries: [] }) }) + it('should handle no issueEntities', () => { + const request = structuredClone(req) + Object.assign(request, { issueEntities: [] }) + const next = vi.fn() + prepareEntity(request, {}, next) + expect(request.entry).toBeUndefined() + expect(next).toHaveBeenCalledWith(new MiddlewareError('No issues for entity', 404)) + }) }) describe('getIssueDetails', () => {