Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -541,14 +541,14 @@ describe('blog plugin', () => {
});

it('excludes draft blog post from production build', async () => {
const originalEnv = process.env;
vi.resetModules();
process.env = {...originalEnv, NODE_ENV: 'production'};
vi.stubEnv('NODE_ENV', 'production');

const siteDir = path.join(__dirname, '__fixtures__', 'website');
const blogPosts = await getBlogPosts(siteDir);

expect(blogPosts.find((v) => v.metadata.title === 'draft')).toBeUndefined();
process.env = originalEnv;
vi.unstubAllEnvs();
});

it('creates blog post without date', async () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,25 @@
* LICENSE file in the root directory of this source tree.
*/
// @vitest-environment jsdom
import {afterAll, beforeEach, describe, expect, it, vi} from 'vitest';

import {afterAll, describe, expect, it, vi} from 'vitest';
import React from 'react';
import {render} from '@testing-library/react';
import '@testing-library/jest-dom/vitest';
import BrowserOnly from '../BrowserOnly';
import {Context} from '../../browserContext';

describe('<BrowserOnly>', () => {
const originalEnv = process.env;

beforeEach(() => {
vi.resetModules();
process.env = {...originalEnv};
});

afterAll(() => {
process.env = originalEnv;
vi.unstubAllEnvs();
});

it('rejects react element children', () => {
process.env.NODE_ENV = 'development';
vi.stubEnv('NODE_ENV', 'development');
expect(() =>
render(
<Context.Provider value>
<BrowserOnly>
{/* @ts-expect-error test */}
<span>{window.location.href}</span>
</BrowserOnly>
</Context.Provider>,
Expand All @@ -42,11 +35,10 @@ describe('<BrowserOnly>', () => {
});

it('rejects string children', () => {
process.env.NODE_ENV = 'development';
vi.stubEnv('NODE_ENV', 'development');
expect(() => {
render(
<Context.Provider value>
{/* @ts-expect-error test */}
<BrowserOnly> </BrowserOnly>
</Context.Provider>,
);
Expand Down
81 changes: 26 additions & 55 deletions packages/docusaurus/src/commands/swizzle/__tests__/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,7 @@
* LICENSE file in the root directory of this source tree.
*/

import {
afterEach,
beforeEach,
describe,
expect,
it,
vi,
type MockInstance,
} from 'vitest';
import {describe, expect, it, vi} from 'vitest';
import path from 'path';
import fs from 'fs-extra';
import tree from 'tree-node-cli';
Expand Down Expand Up @@ -55,38 +47,19 @@ module.exports = {
);
}

class MockExitError extends Error {
constructor(public code: number) {
super(`Exit with code ${code}`);
this.code = code;
}
}

function createExitMock() {
let mock: MockInstance<(code?: number) => never>;

/* eslint-disable-next-line vitest/require-top-level-describe */
beforeEach(async () => {
mock = vi.spyOn(process, 'exit').mockImplementation((code) => {
throw new MockExitError(code as number);
}) as MockInstance<(code?: number) => never>;
});
/* eslint-disable-next-line vitest/require-top-level-describe */
afterEach(async () => {
mock.mockRestore();
});
function createExitMock(expectedExitCode: number = 0) {
const mock = vi
.spyOn(process, 'exit')
.mockImplementation((() => {}) as () => never);

return {
expectExitCode: (code: number) => {
expect(mock).toHaveBeenCalledWith(code);
[Symbol.dispose]: () => {
expect(mock).toHaveBeenCalledExactlyOnceWith(expectedExitCode);
mock.mockRestore();
},
};
}

const swizzleWithExit: typeof swizzle = async (...args) => {
await expect(() => swizzle(...args)).rejects.toThrow(MockExitError);
};

async function createTestSite() {
const siteDir = await createTempSiteDir();

Expand Down Expand Up @@ -117,7 +90,7 @@ async function createTestSite() {
component: string;
typescript?: boolean;
}) {
return swizzleWithExit(FixtureThemeName, component, siteDir, {
return swizzle(FixtureThemeName, component, siteDir, {
wrap: true,
danger: true,
typescript,
Expand All @@ -132,7 +105,7 @@ async function createTestSite() {
component: string;
typescript?: boolean;
}) {
return swizzleWithExit(FixtureThemeName, component, siteDir, {
return swizzle(FixtureThemeName, component, siteDir, {
eject: true,
danger: true,
typescript,
Expand All @@ -150,18 +123,17 @@ async function createTestSite() {
}

describe('swizzle wrap', () => {
const exitMock = createExitMock();

it(`${Components.FirstLevelComponent} JS`, async () => {
using _exitMock = createExitMock();
const {snapshotThemeDir, testWrap} = await createTestSite();
await testWrap({
component: Components.FirstLevelComponent,
});
exitMock.expectExitCode(0);
await snapshotThemeDir();
});

it(`${Components.FirstLevelComponent} TS`, async () => {
using _exitMock = createExitMock();
const {snapshotThemeDir, testWrap} = await createTestSite();
await testWrap({
component: Components.FirstLevelComponent,
Expand All @@ -171,76 +143,75 @@ describe('swizzle wrap', () => {
});

it(`${Components.ComponentInFolder} JS`, async () => {
using _exitMock = createExitMock();
const {snapshotThemeDir, testWrap} = await createTestSite();
await testWrap({
component: Components.ComponentInFolder,
});
exitMock.expectExitCode(0);
await snapshotThemeDir();
});

it(`${Components.ComponentInFolder} TS`, async () => {
using _exitMock = createExitMock();
const {snapshotThemeDir, testWrap} = await createTestSite();
await testWrap({
component: Components.ComponentInFolder,
typescript: true,
});
exitMock.expectExitCode(0);
await snapshotThemeDir();
});

it(`${Components.ComponentInSubFolder} JS`, async () => {
using _exitMock = createExitMock();
const {snapshotThemeDir, testWrap} = await createTestSite();
await testWrap({
component: Components.ComponentInSubFolder,
});
exitMock.expectExitCode(0);
await snapshotThemeDir();
});

it(`${Components.ComponentInSubFolder} TS`, async () => {
using _exitMock = createExitMock();
const {snapshotThemeDir, testWrap} = await createTestSite();
await testWrap({
component: Components.ComponentInSubFolder,
typescript: true,
});
exitMock.expectExitCode(0);
await snapshotThemeDir();
});

it(`${Components.Sibling} JS`, async () => {
using _exitMock = createExitMock();
const {snapshotThemeDir, testWrap} = await createTestSite();
await testWrap({
component: Components.Sibling,
});
exitMock.expectExitCode(0);
await snapshotThemeDir();
});

it(`${Components.Sibling} TS`, async () => {
using _exitMock = createExitMock();
const {snapshotThemeDir, testWrap} = await createTestSite();
await testWrap({
component: Components.Sibling,
typescript: true,
});
exitMock.expectExitCode(0);
await snapshotThemeDir();
});
});

describe('swizzle eject', () => {
const exitMock = createExitMock();

it(`${Components.FirstLevelComponent} JS`, async () => {
using _exitMock = createExitMock();
const {snapshotThemeDir, testEject} = await createTestSite();
await testEject({
component: Components.FirstLevelComponent,
});
exitMock.expectExitCode(0);
await snapshotThemeDir();
});

it(`${Components.FirstLevelComponent} TS`, async () => {
using _exitMock = createExitMock();
const {snapshotThemeDir, testEject} = await createTestSite();
await testEject({
component: Components.FirstLevelComponent,
Expand All @@ -250,59 +221,59 @@ describe('swizzle eject', () => {
});

it(`${Components.ComponentInFolder} JS`, async () => {
using _exitMock = createExitMock();
const {snapshotThemeDir, testEject} = await createTestSite();
await testEject({
component: Components.ComponentInFolder,
});
exitMock.expectExitCode(0);
await snapshotThemeDir();
});

it(`${Components.ComponentInFolder} TS`, async () => {
using _exitMock = createExitMock();
const {snapshotThemeDir, testEject} = await createTestSite();
await testEject({
component: Components.ComponentInFolder,
typescript: true,
});
exitMock.expectExitCode(0);
await snapshotThemeDir();
});

it(`${Components.ComponentInSubFolder} JS`, async () => {
using _exitMock = createExitMock();
const {snapshotThemeDir, testEject} = await createTestSite();
await testEject({
component: Components.ComponentInSubFolder,
});
exitMock.expectExitCode(0);
await snapshotThemeDir();
});

it(`${Components.ComponentInSubFolder} TS`, async () => {
using _exitMock = createExitMock();
const {snapshotThemeDir, testEject} = await createTestSite();
await testEject({
component: Components.ComponentInSubFolder,
typescript: true,
});
exitMock.expectExitCode(0);
await snapshotThemeDir();
});

it(`${Components.Sibling} JS`, async () => {
using _exitMock = createExitMock();
const {snapshotThemeDir, testEject} = await createTestSite();
await testEject({
component: Components.Sibling,
});
exitMock.expectExitCode(0);
await snapshotThemeDir();
});

it(`${Components.Sibling} TS`, async () => {
using _exitMock = createExitMock();
const {snapshotThemeDir, testEject} = await createTestSite();
await testEject({
component: Components.Sibling,
typescript: true,
});
exitMock.expectExitCode(0);
await snapshotThemeDir();
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -1844,7 +1844,7 @@ exports[`loadSite > simple-site-with-baseUrl-i18n > loads site - locale es 1`] =
"themes": [],
"title": "Hello",
"titleDelimiter": "|",
"url": "https://docusaurus.io",
"url": "https://es.docusaurus.io",
},
"siteConfigPath": "<PROJECT_ROOT>/packages/docusaurus/src/server/__tests__/__fixtures__/loadSiteFixtures/simple-site-with-baseUrl-i18n/docusaurus.config.js",
"siteDir": "<PROJECT_ROOT>/packages/docusaurus/src/server/__tests__/__fixtures__/loadSiteFixtures/simple-site-with-baseUrl-i18n",
Expand Down Expand Up @@ -2312,7 +2312,7 @@ exports[`loadSite > simple-site-with-baseUrl-i18n > loads site - locale it 1`] =
"themes": [],
"title": "Hello",
"titleDelimiter": "|",
"url": "https://docusaurus.io",
"url": "https://it.docusaurus.io",
},
"siteConfigPath": "<PROJECT_ROOT>/packages/docusaurus/src/server/__tests__/__fixtures__/loadSiteFixtures/simple-site-with-baseUrl-i18n/docusaurus.config.js",
"siteDir": "<PROJECT_ROOT>/packages/docusaurus/src/server/__tests__/__fixtures__/loadSiteFixtures/simple-site-with-baseUrl-i18n",
Expand Down
7 changes: 7 additions & 0 deletions packages/docusaurus/src/server/__tests__/site.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,13 @@ describe('loadSite', () => {
expect(site.props).toMatchSnapshot();
});

it('uses locale url in site config', async () => {
const site = await loadSiteFixture(siteFixture, {
locale: 'es',
});
expect(site.props.siteConfig.url).toBe('https://es.docusaurus.io');
});

it('loads site - locale de', async () => {
const site = await loadSiteFixture(siteFixture, {
locale: 'de',
Expand Down
1 change: 1 addition & 0 deletions packages/docusaurus/src/server/site.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ export async function loadContext(

const siteConfig: DocusaurusConfig = {
...initialSiteConfig,
url: localeConfig.url,
baseUrl,
};

Expand Down
6 changes: 1 addition & 5 deletions packages/docusaurus/src/webpack/__tests__/base.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*/

import {afterEach, describe, expect, it, vi} from 'vitest';
import {describe, expect, it} from 'vitest';
import path from 'path';
import _ from 'lodash';
import webpack from 'webpack';
Expand Down Expand Up @@ -112,10 +112,6 @@ describe('base webpack config', () => {
],
} as Props;

afterEach(() => {
vi.restoreAllMocks();
});

it('creates webpack aliases', async () => {
const aliases = ((
await createBaseConfig({
Expand Down
Loading
Loading