authorgravatar for 269035359+t3-code[bot]@users.noreply.github.comt3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> 2026-09-03 06:16:21+00:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-09-03 06:16:21+00:00
log5eb4f452ee0fcde7b5bbc93d62de9118b70a33b2
tree4ac40b64221fa582c98c7400d72be4c6ba656409
parentd4bd8923ad8cab346a854967015b06d9e5cd77f7
signature Signed by PGP key B5690EEEBB952194

test(web): remove static markup-only component tests (#9364)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

6 files changed, 0 insertions(+), 199 deletions(-)

apps/web/src/components/ProjectScriptsControl.test.tsx deleted-65
......@@ -1,65 +0,0 @@
1import type { ProjectScript, ResolvedKeybindingsConfig } from "@t3tools/contracts";
2import { renderToStaticMarkup } from "react-dom/server";
3import { describe, expect, it } from "vite-plus/test";
4
5import ProjectScriptsControl from "./ProjectScriptsControl";
6
7const EMPTY_KEYBINDINGS: ResolvedKeybindingsConfig = [];
8const PRIMARY_SCRIPT: ProjectScript = {
9 id: "dev",
10 name: "Dev",
11 command: "vp dev",
12 icon: "play",
13 runOnWorktreeCreate: false,
14};
15
16function renderControl(scripts: ReadonlyArray<ProjectScript>) {
17 return renderToStaticMarkup(
18 <ProjectScriptsControl
19 scripts={scripts}
20 keybindings={EMPTY_KEYBINDINGS}
21 onRunScript={() => {}}
22 onAddScript={async () => undefined as never}
23 onUpdateScript={async () => undefined as never}
24 onDeleteScript={async () => undefined as never}
25 />,
26 );
27}
28
29function buttonTag(html: string, ariaLabel: string) {
30 return html.match(new RegExp(`<button[^>]*aria-label="${ariaLabel}"[^>]*>`))?.[0];
31}
32
33function expectResponsiveXsControl(markup: string | undefined) {
34 expect(markup).toBeDefined();
35 expect(markup).toContain("h-7");
36 expect(markup).toContain("gap-1");
37 expect(markup).toContain("text-sm");
38 expect(markup).toContain("sm:h-6");
39 expect(markup).toContain("sm:text-xs");
40 expect(markup).toContain("w-7");
41 expect(markup).toContain("px-0");
42 expect(markup).toContain("sm:w-6");
43 expect(markup).toContain("@3xl/header-actions:w-auto!");
44 expect(markup).toContain("@3xl/header-actions:px-[calc(--spacing(2)-1px)]");
45}
46
47describe("ProjectScriptsControl compact controls", () => {
48 it("keeps the primary Run control compact and expands it with its label", () => {
49 const html = renderControl([PRIMARY_SCRIPT]);
50
51 expectResponsiveXsControl(buttonTag(html, "Run Dev"));
52 expect(html).toContain(
53 'class="sr-only @3xl/header-actions:not-sr-only @3xl/header-actions:ml-0.5"',
54 );
55 });
56
57 it("keeps the standalone Add control compact and expands it with its label", () => {
58 const html = renderControl([]);
59
60 expectResponsiveXsControl(buttonTag(html, "Add action"));
61 expect(html).toContain(
62 'class="sr-only @3xl/header-actions:not-sr-only @3xl/header-actions:ml-0.5"',
63 );
64 });
65});
apps/web/src/components/chat/ComposerPendingTerminalContexts.test.tsx deleted-28
......@@ -1,28 +0,0 @@
1import { ThreadId } from "@t3tools/contracts";
2import { renderToStaticMarkup } from "react-dom/server";
3import { describe, expect, it } from "vite-plus/test";
4
5import { ComposerPendingTerminalContextChip } from "./ComposerPendingTerminalContexts";
6
7describe("ComposerPendingTerminalContextChip", () => {
8 it("renders expired terminal contexts with error styling", () => {
9 const markup = renderToStaticMarkup(
10 <ComposerPendingTerminalContextChip
11 context={{
12 id: "ctx-expired",
13 threadId: ThreadId.make("thread-1"),
14 terminalId: "default",
15 terminalLabel: "Terminal 1",
16 lineStart: 2,
17 lineEnd: 4,
18 text: "",
19 createdAt: "2026-03-17T18:42:05.449Z",
20 }}
21 />,
22 );
23
24 expect(markup).toContain('data-terminal-context-expired="true"');
25 expect(markup).toContain("border-destructive/35");
26 expect(markup).toContain("Terminal 1 lines 2-4");
27 });
28});
apps/web/src/components/chat/ComposerPromptLengthValidation.test.tsx deleted-23
......@@ -1,23 +0,0 @@
1import { PROVIDER_SEND_TURN_MAX_INPUT_CHARS } from "@t3tools/contracts";
2import { renderToStaticMarkup } from "react-dom/server";
3import { describe, expect, it } from "vite-plus/test";
4
5import { getComposerPromptLengthValidationMessage } from "./composerSubmission";
6import { ComposerPromptLengthValidation } from "./ComposerPromptLengthValidation";
7
8describe("ComposerPromptLengthValidation", () => {
9 it("renders oversized prompt feedback as an actionable composer alert", () => {
10 const message = getComposerPromptLengthValidationMessage(
11 "x".repeat(PROVIDER_SEND_TURN_MAX_INPUT_CHARS + 1),
12 );
13
14 const markup = renderToStaticMarkup(<ComposerPromptLengthValidation message={message} />);
15
16 expect(markup).toContain('role="alert"');
17 expect(markup).toContain('data-chat-composer-validation="prompt-length"');
18 expect(markup).toContain(
19 "Prompt is 1 character over the 120,000-character limit. Shorten or split it before sending.",
20 );
21 expect(markup).not.toContain("ProviderValidationError");
22 });
23});
apps/web/src/components/chat/PanelLayoutControls.test.tsx deleted-28
......@@ -1,28 +0,0 @@
1import { renderToStaticMarkup } from "react-dom/server";
2import { describe, expect, it } from "vite-plus/test";
3
4import { PanelLayoutControls } from "./PanelLayoutControls";
5
6describe("PanelLayoutControls", () => {
7 it("keeps unavailable panel tooltip triggers interactive", () => {
8 const markup = renderToStaticMarkup(
9 <PanelLayoutControls
10 showTerminalControl
11 terminalAvailable={false}
12 terminalOpen={false}
13 terminalShortcutLabel={null}
14 rightPanelAvailable={false}
15 rightPanelOpen={false}
16 rightPanelShortcutLabel={null}
17 liveAgentCount={0}
18 onToggleTerminal={() => {}}
19 onToggleRightPanel={() => {}}
20 />,
21 );
22
23 expect(markup.match(/data-slot="tooltip-trigger"/g)).toHaveLength(2);
24 expect(markup.match(/data-slot="tooltip-trigger"[^>]*><button[^>]*disabled=""/g)).toHaveLength(
25 2,
26 );
27 });
28});
apps/web/src/components/preview/PreviewChromeRow.test.tsx deleted-24
......@@ -1,24 +0,0 @@
1import { renderToStaticMarkup } from "react-dom/server";
2import { describe, expect, it, vi } from "vite-plus/test";
3
4import { PreviewChromeRow } from "./PreviewChromeRow";
5
6describe("PreviewChromeRow", () => {
7 it("shows the complete URL while the address bar is not focused", () => {
8 const markup = renderToStaticMarkup(
9 <PreviewChromeRow
10 url="https://example.com/dashboard?mode=edit&tab=1#notes"
11 loading={false}
12 canGoBack={false}
13 canGoForward={false}
14 refreshDisabled={false}
15 onBack={vi.fn()}
16 onForward={vi.fn()}
17 onRefresh={vi.fn()}
18 onSubmit={vi.fn()}
19 />,
20 );
21
22 expect(markup).toContain('value="https://example.com/dashboard?mode=edit&amp;tab=1#notes"');
23 });
24});
apps/web/src/components/ui/command.test.tsx deleted-31
......@@ -1,31 +0,0 @@
1import { renderToStaticMarkup } from "react-dom/server";
2import { describe, expect, it } from "vite-plus/test";
3
4import { Command, CommandFooter, CommandInput } from "./command";
5
6describe("command compact geometry", () => {
7 it("keeps shell selectors on the wrapper and direct-input padding on AutocompleteInput", () => {
8 const html = renderToStaticMarkup(
9 <Command>
10 <CommandInput placeholder="Search commands" />
11 </Command>,
12 );
13 const shellClass = html.match(/class="([^"]*px-\[var\(--command-shell-inset\)[^"]*)"/)?.[1];
14 const inputClass = html.match(/class="([^"]*has-focus-visible:ring-0[^"]*)"/)?.[1];
15
16 expect(shellClass).toContain(
17 "[&amp;_[data-slot=autocomplete-start-addon]]:ps-[calc(var(--command-shell-inset)+0.0625rem)]",
18 );
19 expect(shellClass).not.toContain("sm:*:data-[slot=autocomplete-input]");
20 expect(inputClass).toContain(
21 "sm:*:data-[slot=autocomplete-input]:ps-[calc(var(--command-shell-inset)+1.5rem)]!",
22 );
23 });
24
25 it("uses the semantic footer inset without changing compact vertical padding", () => {
26 const html = renderToStaticMarkup(<CommandFooter>Shortcuts</CommandFooter>);
27
28 expect(html).toContain("px-[var(--command-content-inset)]");
29 expect(html).toContain("py-2.5");
30 });
31});