diff --git a/packages/docusaurus/src/server/__tests__/configValidation.test.ts b/packages/docusaurus/src/server/__tests__/configValidation.test.ts index 9297df2db422..4d4688e6968a 100644 --- a/packages/docusaurus/src/server/__tests__/configValidation.test.ts +++ b/packages/docusaurus/src/server/__tests__/configValidation.test.ts @@ -5,7 +5,6 @@ * LICENSE file in the root directory of this source tree. */ -import {jest} from '@jest/globals'; import { ConfigSchema, DEFAULT_CONFIG, @@ -110,26 +109,12 @@ describe('normalizeConfig', () => { `); }); - it('normalizes various URLs', () => { - const consoleMock = jest - .spyOn(console, 'warn') - .mockImplementation(() => {}); - + it('normalizes URL', () => { expect( normalizeConfig({ url: 'https://mysite.com/', }).url, ).toBe('https://mysite.com'); - expect( - normalizeConfig({ - // This shouldn't happen - url: 'https://mysite.com/foo/', - }).url, - ).toBe('https://mysite.com/foo'); - - expect(consoleMock.mock.calls[0][0]).toMatchInlineSnapshot( - `"[WARNING] Docusaurus config validation warning. Field "url": The url is not supposed to contain a sub-path like '/foo/'. Please use the baseUrl field for sub-paths."`, - ); }); it('throws for non-string base URLs', () => { @@ -392,7 +377,7 @@ describe('normalizeConfig', () => { }); }); -describe('config warnings', () => { +describe('config warning and error', () => { function getWarning(config: unknown) { return ConfigSchema.validate(config).warning; } @@ -402,15 +387,14 @@ describe('config warnings', () => { expect(warning).toBeUndefined(); }); - it('site url has warning when using subpath', () => { - const warning = getWarning({ + it('site url fails validation when using subpath', () => { + const {error} = ConfigSchema.validate({ ...baseConfig, url: 'https://mysite.com/someSubpath', - })!; - expect(warning).toBeDefined(); - expect(warning.details).toHaveLength(1); - expect(warning.details[0]!.message).toMatchInlineSnapshot( - `"Docusaurus config validation warning. Field "url": The url is not supposed to contain a sub-path like '/someSubpath'. Please use the baseUrl field for sub-paths."`, + }); + expect(error).toBeDefined(); + expect(error.message).toBe( + 'The url is not supposed to contain a sub-path like "/someSubpath". Please use the baseUrl field for sub-paths.', ); }); }); diff --git a/packages/docusaurus/src/server/configValidation.ts b/packages/docusaurus/src/server/configValidation.ts index ff8da9bd96eb..95af3bf34cbc 100644 --- a/packages/docusaurus/src/server/configValidation.ts +++ b/packages/docusaurus/src/server/configValidation.ts @@ -158,9 +158,7 @@ const SiteUrlSchema = Joi.string() try { const {pathname} = new URL(value); if (pathname !== '/') { - helpers.warn('docusaurus.configValidationWarning', { - warningMessage: `The url is not supposed to contain a sub-path like '${pathname}'. Please use the baseUrl field for sub-paths.`, - }); + return helpers.error('docusaurus.subPathError', {pathname}); } } catch { return helpers.error('any.invalid'); @@ -170,6 +168,8 @@ const SiteUrlSchema = Joi.string() .messages({ 'any.invalid': '"{#value}" does not look like a valid URL. Make sure it has a protocol; for example, "https://example.com".', + 'docusaurus.subPathError': + 'The url is not supposed to contain a sub-path like "{#pathname}". Please use the baseUrl field for sub-paths.', }); // TODO move to @docusaurus/utils-validation