Skip to content

Commit

Permalink
fix(core): throw error for invalid URL in config file (facebook#8116)
Browse files Browse the repository at this point in the history
    * fix: throw error for site URL in sub-path format

    * Also update unit tests to check error is thrown
  • Loading branch information
forgeRW committed Oct 8, 2022
1 parent 6c8af03 commit 575c0c4
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 23 deletions.
33 changes: 13 additions & 20 deletions packages/docusaurus/src/server/__tests__/configValidation.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
* LICENSE file in the root directory of this source tree.
*/

import {jest} from '@jest/globals';
import {
ConfigSchema,
DEFAULT_CONFIG,
Expand Down Expand Up @@ -111,25 +110,20 @@ describe('normalizeConfig', () => {
});

it('normalizes various URLs', () => {
const consoleMock = jest
.spyOn(console, 'warn')
.mockImplementation(() => {});

expect(
normalizeConfig({
url: 'https://mysite.com/',
}).url,
).toBe('https://mysite.com');
expect(
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."`,
);
}),
).toThrowErrorMatchingInlineSnapshot(`
"The url is not supposed to contain a sub-path like "". Please use the baseUrl field for sub-paths.
"
`);
});

it('throws for non-string base URLs', () => {
Expand Down Expand Up @@ -392,7 +386,7 @@ describe('normalizeConfig', () => {
});
});

describe('config warnings', () => {
describe('config warning and error', () => {
function getWarning(config: unknown) {
return ConfigSchema.validate(config).warning;
}
Expand All @@ -402,15 +396,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 "". Please use the baseUrl field for sub-paths.',
);
});
});
6 changes: 3 additions & 3 deletions packages/docusaurus/src/server/configValidation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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.configValidationWarning');
}
} catch {
return helpers.error('any.invalid');
Expand All @@ -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.configValidationWarning':
'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
Expand Down

0 comments on commit 575c0c4

Please sign in to comment.