docusaurus/packages/docusaurus-theme-live-codeb.../src/__tests__/validateThemeConfig.test.ts
2022-05-23 15:40:53 +08:00

96 lines
2.4 KiB
TypeScript

/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import {validateThemeConfig, DEFAULT_CONFIG} from '../validateThemeConfig';
import type {Joi} from '@docusaurus/utils-validation';
function testValidateThemeConfig(themeConfig: {[key: string]: unknown}) {
function validate(
schema: Joi.ObjectSchema<{[key: string]: unknown}>,
cfg: {[key: string]: unknown},
) {
const {value, error} = schema.validate(cfg, {
convert: false,
});
if (error) {
throw error;
}
return value;
}
return validateThemeConfig({validate, themeConfig});
}
describe('validateThemeConfig', () => {
it('undefined config', () => {
const liveCodeBlock = undefined;
expect(testValidateThemeConfig({liveCodeBlock})).toEqual({
liveCodeBlock: {
...DEFAULT_CONFIG,
},
});
});
it('nonexistent config', () => {
expect(testValidateThemeConfig({})).toEqual({
liveCodeBlock: {
...DEFAULT_CONFIG,
},
});
});
it('empty config', () => {
const liveCodeBlock = {};
expect(testValidateThemeConfig({liveCodeBlock})).toEqual({
liveCodeBlock: {
...DEFAULT_CONFIG,
},
});
});
it('playgroundPosition top', () => {
const liveCodeBlock = {
playgroundPosition: 'top',
};
expect(testValidateThemeConfig({liveCodeBlock})).toEqual({
liveCodeBlock: {
...DEFAULT_CONFIG,
...liveCodeBlock,
},
});
});
it('playgroundPosition bottom', () => {
const liveCodeBlock = {
playgroundPosition: 'bottom',
};
expect(testValidateThemeConfig({liveCodeBlock})).toEqual({
liveCodeBlock: {
...DEFAULT_CONFIG,
...liveCodeBlock,
},
});
});
it('playgroundPosition invalid string', () => {
const liveCodeBlock = {playgroundPosition: 'invalid'};
expect(() =>
testValidateThemeConfig({liveCodeBlock}),
).toThrowErrorMatchingInlineSnapshot(
`""liveCodeBlock.playgroundPosition" must be one of [top, bottom]"`,
);
});
it('playgroundPosition invalid boolean', () => {
const liveCodeBlock = {playgroundPosition: true};
expect(() =>
testValidateThemeConfig({liveCodeBlock}),
).toThrowErrorMatchingInlineSnapshot(
`""liveCodeBlock.playgroundPosition" must be one of [top, bottom]"`,
);
});
});