From 1af13b4e9489e4588c2e0188b3a1efa9e1c454a6 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Thu, 21 Nov 2024 18:46:59 +1300 Subject: [PATCH 1/5] Fixes #3904 - content negotiation test failure --- server/middleware/content-negotiation.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/middleware/content-negotiation.js b/server/middleware/content-negotiation.js index a5bc7dc83..9798c60bb 100644 --- a/server/middleware/content-negotiation.js +++ b/server/middleware/content-negotiation.js @@ -6,7 +6,7 @@ module.exports = (req, res, next)=>{ const isImageRequest = req.get('Accept')?.split(',') ?.filter((h)=>!h.includes('q=')) ?.every((h)=>/image\/.*/.test(h)); - if(isImageRequest && !isLocalEnvironment && !req.url?.startsWith('/staticImages')) { + if(isImageRequest && !(isLocalEnvironment && req.url?.startsWith('/staticImages'))) { return res.status(406).send({ message : 'Request for image at this URL is not supported' }); From bd413cfc55e54ffa537470d69dd1583c2787015d Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Thu, 21 Nov 2024 18:53:20 +1300 Subject: [PATCH 2/5] Add content negotiation test command --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 08473ca05..768303d2f 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "test:api-unit:themes": "jest \"server/.*.spec.js\" -t \"theme bundle\" --verbose", "test:api-unit:css": "jest \"server/.*.spec.js\" -t \"Get CSS\" --verbose", "test:api-unit:notifications": "jest \"server/.*.spec.js\" -t \"Notifications\" --verbose", + "test:content-negotiation": "jest \"server/middleware/.*.spec.js\" --verbose", "test:coverage": "jest --coverage --silent --runInBand", "test:dev": "jest --verbose --watch", "test:basic": "jest tests/markdown/basic.test.js --verbose", From 108d368d452ff3eafdc29f0883aaa5a0a3aa6d2e Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Thu, 21 Nov 2024 18:54:23 +1300 Subject: [PATCH 3/5] Add content-negotiation test to CircleCI config --- .circleci/config.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index d405486b5..00cbdf5bc 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -82,6 +82,9 @@ jobs: - run: name: Test - Coverage command: npm run test:coverage + - run: + name: Test - Content Negotiation + command: npm run test:content-negotiation workflows: build_and_test: From fcf985a115f73ac7eeda67ffdee71abaf9ca193d Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Mon, 16 Dec 2024 17:42:06 -0500 Subject: [PATCH 4/5] Restore content-negotiation test --- server/middleware/content-negotiation.spec.js | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 server/middleware/content-negotiation.spec.js diff --git a/server/middleware/content-negotiation.spec.js b/server/middleware/content-negotiation.spec.js new file mode 100644 index 000000000..018330434 --- /dev/null +++ b/server/middleware/content-negotiation.spec.js @@ -0,0 +1,41 @@ +const contentNegotiationMiddleware = require('./content-negotiation.js'); + +describe('content-negotiation-middleware', ()=>{ + let request; + let response; + let next; + + beforeEach(()=>{ + request = { + get : function(key) { + return this[key]; + } + }; + response = { + status : jest.fn(()=>response), + send : jest.fn(()=>{}) + }; + next = jest.fn(); + }); + + it('should return 406 on image request', ()=>{ + contentNegotiationMiddleware({ + Accept : 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8', + ...request + }, response); + + expect(response.status).toHaveBeenLastCalledWith(406); + expect(response.send).toHaveBeenCalledWith({ + message : 'Request for image at this URL is not supported' + }); + }); + + it('should call next on non-image request', ()=>{ + contentNegotiationMiddleware({ + Accept : 'text,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8', + ...request + }, response, next); + + expect(next).toHaveBeenCalled(); + }); +}); From bc14246fe7ca1da61a56922144dabd3f833ac49f Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Mon, 16 Dec 2024 17:58:08 -0500 Subject: [PATCH 5/5] fix import --- server/middleware/content-negotiation.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/middleware/content-negotiation.spec.js b/server/middleware/content-negotiation.spec.js index 018330434..80b9e515d 100644 --- a/server/middleware/content-negotiation.spec.js +++ b/server/middleware/content-negotiation.spec.js @@ -1,4 +1,4 @@ -const contentNegotiationMiddleware = require('./content-negotiation.js'); +import contentNegotiationMiddleware from './content-negotiation.js'; describe('content-negotiation-middleware', ()=>{ let request;