070959e133
landing-page-staging / Deploy landing page to staging (push) Has been skipped
landing-page-ci / Validate landing page (push) Failing after 4s
visual-baseline / Capture visual baselines (push) Has been cancelled
bake-plugin-previews / Bake plugin previews (push) Has been cancelled
87 lines
1.9 KiB
TypeScript
87 lines
1.9 KiB
TypeScript
// @vitest-environment jsdom
|
|
|
|
import { cleanup, render, screen } from '@testing-library/react';
|
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
|
|
import { TerminalViewer } from '../../src/components/workspace/TerminalViewer';
|
|
import { I18nProvider } from '../../src/i18n';
|
|
|
|
vi.mock('@xterm/xterm', () => ({
|
|
Terminal: class {
|
|
cols = 80;
|
|
rows = 24;
|
|
options: { theme?: unknown } = {};
|
|
|
|
loadAddon() {}
|
|
open() {}
|
|
onData() {
|
|
return { dispose() {} };
|
|
}
|
|
write() {}
|
|
dispose() {}
|
|
},
|
|
}));
|
|
|
|
vi.mock('@xterm/addon-fit', () => ({
|
|
FitAddon: class {
|
|
fit() {}
|
|
},
|
|
}));
|
|
|
|
vi.mock('../../src/state/projects', () => ({
|
|
createTerminal: vi.fn(),
|
|
killTerminal: vi.fn(),
|
|
resizeTerminal: vi.fn(),
|
|
sendTerminalStdin: vi.fn(),
|
|
terminalStreamUrl: vi.fn(
|
|
(projectId: string, terminalId: string) =>
|
|
`/api/projects/${projectId}/terminals/${terminalId}/stream`,
|
|
),
|
|
}));
|
|
|
|
class StubEventSource {
|
|
static CLOSED = 2;
|
|
|
|
readyState = 0;
|
|
|
|
constructor(readonly url: string) {}
|
|
|
|
addEventListener() {}
|
|
|
|
close() {
|
|
this.readyState = StubEventSource.CLOSED;
|
|
}
|
|
}
|
|
|
|
beforeEach(() => {
|
|
vi.stubGlobal(
|
|
'ResizeObserver',
|
|
class {
|
|
observe() {}
|
|
unobserve() {}
|
|
disconnect() {}
|
|
},
|
|
);
|
|
vi.stubGlobal('EventSource', StubEventSource);
|
|
});
|
|
|
|
afterEach(() => {
|
|
cleanup();
|
|
vi.unstubAllGlobals();
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
describe('TerminalViewer', () => {
|
|
it('shows localized loading copy while the initial terminal connection is pending', () => {
|
|
render(
|
|
<I18nProvider initial="zh-CN">
|
|
<TerminalViewer terminalId="term-1" projectId="project-1" onClose={vi.fn()} />
|
|
</I18nProvider>,
|
|
);
|
|
|
|
const loading = screen.getByTestId('terminal-loading');
|
|
expect(loading.textContent).toContain('正在启动项目终端…');
|
|
expect(loading.textContent).toContain('正在连接项目目录,通常只需几秒。');
|
|
});
|
|
});
|