diff --git a/packages/docusaurus/src/commands/serve/__tests__/__fixtures__/build/legacy.html/index.html b/packages/docusaurus/src/commands/serve/__tests__/__fixtures__/build/legacy.html/index.html deleted file mode 100644 index 754720dc3169..000000000000 --- a/packages/docusaurus/src/commands/serve/__tests__/__fixtures__/build/legacy.html/index.html +++ /dev/null @@ -1 +0,0 @@ -legacy.html/index.html diff --git a/packages/docusaurus/src/commands/serve/__tests__/__fixtures__/build/redirect-file.html.html b/packages/docusaurus/src/commands/serve/__tests__/__fixtures__/build/redirect-file.html.html new file mode 100644 index 000000000000..931c060a761c --- /dev/null +++ b/packages/docusaurus/src/commands/serve/__tests__/__fixtures__/build/redirect-file.html.html @@ -0,0 +1 @@ +redirect-file.html.html diff --git a/packages/docusaurus/src/commands/serve/__tests__/__fixtures__/build/redirect-folder.html/index.html b/packages/docusaurus/src/commands/serve/__tests__/__fixtures__/build/redirect-folder.html/index.html new file mode 100644 index 000000000000..fc89b9b924fe --- /dev/null +++ b/packages/docusaurus/src/commands/serve/__tests__/__fixtures__/build/redirect-folder.html/index.html @@ -0,0 +1 @@ +redirect-folder.html/index.html diff --git a/packages/docusaurus/src/commands/serve/__tests__/requestHandler.test.ts b/packages/docusaurus/src/commands/serve/__tests__/requestHandler.test.ts index 73bc3ffc5bfc..0c8b5056066a 100644 --- a/packages/docusaurus/src/commands/serve/__tests__/requestHandler.test.ts +++ b/packages/docusaurus/src/commands/serve/__tests__/requestHandler.test.ts @@ -62,8 +62,12 @@ const RequestPaths = [ '/missing', '/missing/', '/missing.html', - // A client redirect file, from /legacy.html - '/legacy.html', + // Client redirect files, for redirects from a .html path + // plugin-client-redirects writes a folder, or a file with trailingSlash false + '/redirect-folder.html', + '/redirect-folder.html/', + '/redirect-file.html', + '/redirect-file.html/', '/file?query=1', '/file/?query=1', @@ -151,7 +155,10 @@ describe('createServeRequestHandler', () => { /missing 404 404.html /missing/ 404 404.html /missing.html 301 /missing → 404 404.html - /legacy.html 301 /legacy → 404 404.html + /redirect-folder.html 301 /redirect-folder → 404 404.html + /redirect-folder.html/ 200 redirect-folder.html/index.html + /redirect-file.html 301 /redirect-file → 404 404.html + /redirect-file.html/ 200 redirect-file.html.html /file?query=1 200 file.html /file/?query=1 200 file.html /file.html?query=1 200 file.html @@ -212,7 +219,10 @@ describe('createServeRequestHandler', () => { /missing 301 /missing/ → 404 404.html /missing/ 404 404.html /missing.html 301 /missing → 301 /missing/ → 404 404.html - /legacy.html 301 /legacy → 301 /legacy/ → 404 404.html + /redirect-folder.html 301 /redirect-folder → 301 /redirect-folder/ → 404 404.html + /redirect-folder.html/ 200 redirect-folder.html/index.html + /redirect-file.html 301 /redirect-file → 301 /redirect-file/ → 404 404.html + /redirect-file.html/ 200 redirect-file.html.html /file?query=1 301 /file/?query=1 → 200 file.html /file/?query=1 200 file.html /file.html?query=1 200 file.html @@ -273,7 +283,10 @@ describe('createServeRequestHandler', () => { /missing 404 404.html /missing/ 301 /missing → 404 404.html /missing.html 301 /missing → 404 404.html - /legacy.html 301 /legacy → 404 404.html + /redirect-folder.html 301 /redirect-folder → 404 404.html + /redirect-folder.html/ 301 /redirect-folder.html → 301 /redirect-folder → 404 404.html + /redirect-file.html 301 /redirect-file → 404 404.html + /redirect-file.html/ 301 /redirect-file.html → 301 /redirect-file → 404 404.html /file?query=1 200 file.html /file/?query=1 301 /file?query=1 → 200 file.html /file.html?query=1 200 file.html @@ -336,7 +349,10 @@ describe('createServeRequestHandler', () => { /base/missing 404 404.html /base/missing/ 404 404.html /base/missing.html 301 /base/missing → 404 404.html - /base/legacy.html 301 /base/legacy → 404 404.html + /base/redirect-folder.html 301 /base/redirect-folder → 404 404.html + /base/redirect-folder.html/ 200 redirect-folder.html/index.html + /base/redirect-file.html 301 /base/redirect-file → 404 404.html + /base/redirect-file.html/ 200 redirect-file.html.html /base/file?query=1 200 file.html /base/file/?query=1 200 file.html /base/file.html?query=1 200 file.html @@ -397,7 +413,10 @@ describe('createServeRequestHandler', () => { /base/missing 301 /base/missing/ → 404 404.html /base/missing/ 404 404.html /base/missing.html 301 /base/missing → 301 /base/missing/ → 404 404.html - /base/legacy.html 301 /base/legacy → 301 /base/legacy/ → 404 404.html + /base/redirect-folder.html 301 /base/redirect-folder → 301 /base/redirect-folder/ → 404 404.html + /base/redirect-folder.html/ 200 redirect-folder.html/index.html + /base/redirect-file.html 301 /base/redirect-file → 301 /base/redirect-file/ → 404 404.html + /base/redirect-file.html/ 200 redirect-file.html.html /base/file?query=1 301 /base/file/?query=1 → 200 file.html /base/file/?query=1 200 file.html /base/file.html?query=1 200 file.html @@ -458,7 +477,10 @@ describe('createServeRequestHandler', () => { /base/missing 404 404.html /base/missing/ 301 /base/missing → 404 404.html /base/missing.html 301 /base/missing → 404 404.html - /base/legacy.html 301 /base/legacy → 404 404.html + /base/redirect-folder.html 301 /base/redirect-folder → 404 404.html + /base/redirect-folder.html/ 301 /base/redirect-folder.html → 301 /base/redirect-folder → 404 404.html + /base/redirect-file.html 301 /base/redirect-file → 404 404.html + /base/redirect-file.html/ 301 /base/redirect-file.html → 301 /base/redirect-file → 404 404.html /base/file?query=1 200 file.html /base/file/?query=1 301 /base/file?query=1 → 200 file.html /base/file.html?query=1 200 file.html @@ -815,6 +837,29 @@ describe('createServeRequestHandler', () => { ); }); + // TODO fix: "200 redirect-folder.html/index.html" + // plugin-client-redirects writes it for redirects from /redirect-folder.html + it('serves no client redirect folder of .html paths', async () => { + await expect( + serveRequest( + {baseUrl: '/base/', trailingSlash: undefined}, + '/base/redirect-folder.html', + ), + ).resolves.toBe('301 /base/redirect-folder → 404 404.html'); + }); + + // TODO fix: "200 redirect-file.html.html" + // plugin-client-redirects writes it for redirects from /redirect-file.html, + // with trailingSlash false + it('serves no client redirect file of .html paths', async () => { + await expect( + serveRequest( + {baseUrl: '/base/', trailingSlash: false}, + '/base/redirect-file.html', + ), + ).resolves.toBe('301 /base/redirect-file → 404 404.html'); + }); + // Like the malformed percent-encodings it('answers 400 to null bytes', async () => { await expect(