fix(lint): resolve pre-existing lint errors and merge conflicts

- Remove unused imports/vars from routes.ts (VALID_TRANSITIONS, AUTOMATION_PRESETS, ChatStore, FileListResponse, etc.)
- Prefix unused destructured error vars with _ convention
- Fix prefer-const for summary variable
- Add _ ignore pattern to eslint.config.mjs
- Include test files in tsconfig.app.json to fix @testing-library/jest-dom types
- Resolve GitManagerModal.test.tsx merge conflict (take fn-1626 expectLatestCallStartsWith style)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
gsxdsm
2026-04-13 10:31:15 -07:00
parent 86ed4689d5
commit 2a4e5df3fc
9 changed files with 121 additions and 105 deletions

View File

@@ -29,6 +29,19 @@ describe("PWA configuration", () => {
expect(indexHtml).toContain("apple-mobile-web-app-capable");
});
it("viewport meta includes viewport-fit=cover for safe-area support", () => {
const indexHtml = readFileSync(resolve(__dirname, "../index.html"), "utf8");
expect(indexHtml).toMatch(/<meta\s+name="viewport"[^>]*content="[^"]*viewport-fit=cover[^"]*"/i);
});
it("CSS includes display-mode: standalone rule with safe-area-inset-bottom for PWA home bar spacing", () => {
const cssContent = readFileSync(resolve(__dirname, "../styles.css"), "utf8");
expect(cssContent).toMatch(/@media\s*\(\s*display-mode:\s*standalone\s*\)/);
expect(cssContent).toMatch(/@media\s*\(\s*display-mode:\s*standalone\s*\)\s*\{[^}]*#root\s*\{[^}]*env\(safe-area-inset-bottom,\s*0px\)/);
});
it("service worker contains lifecycle handlers and versioned cache name", () => {
const swSource = readFileSync(resolve(__dirname, "../public/sw.js"), "utf8");

View File

@@ -71,6 +71,11 @@ import {
fetchBranchCommits,
} from "../../api";
function expectLatestCallStartsWith(mockFn: { mock: { calls: unknown[][] } }, ...expectedArgs: unknown[]) {
expect(mockFn.mock.calls.length).toBeGreaterThan(0);
expect(mockFn.mock.calls.at(-1)?.slice(0, expectedArgs.length)).toEqual(expectedArgs);
}
const mockAddToast = vi.fn();
const mockTasks: Task[] = [
@@ -358,7 +363,7 @@ describe("GitManagerModal", () => {
await user.click(screen.getByText("Stage All"));
await waitFor(() => {
expect(stageFiles).toHaveBeenCalledWith(["src/app.ts"], undefined);
expectLatestCallStartsWith(stageFiles as any, ["src/app.ts"]);
});
});
@@ -375,7 +380,7 @@ describe("GitManagerModal", () => {
await user.click(screen.getByText("Unstage All"));
await waitFor(() => {
expect(unstageFiles).toHaveBeenCalledWith(["src/index.ts"], undefined);
expectLatestCallStartsWith(unstageFiles as any, ["src/index.ts"]);
});
});
@@ -397,7 +402,7 @@ describe("GitManagerModal", () => {
await user.click(commitBtn);
await waitFor(() => {
expect(createCommit).toHaveBeenCalledWith("fix: update app", undefined);
expectLatestCallStartsWith(createCommit as any, "fix: update app");
});
});
@@ -502,7 +507,7 @@ describe("GitManagerModal", () => {
// Click the commit to expand diff
fireEvent.click(screen.getByText("Test commit"));
await waitFor(() => {
expect(fetchCommitDiff).toHaveBeenCalledWith("abc1234def5678", undefined);
expectLatestCallStartsWith(fetchCommitDiff as any, "abc1234def5678");
});
});
@@ -539,7 +544,7 @@ describe("GitManagerModal", () => {
await user.click(createButton);
await waitFor(() => {
expect(createBranch).toHaveBeenCalledWith("new-feature", undefined, undefined);
expectLatestCallStartsWith(createBranch as any, "new-feature", undefined);
});
});
@@ -564,7 +569,7 @@ describe("GitManagerModal", () => {
await user.click(createButton);
await waitFor(() => {
expect(createBranch).toHaveBeenCalledWith("hotfix", "feature", undefined);
expectLatestCallStartsWith(createBranch as any, "hotfix", "feature");
});
});
@@ -606,7 +611,7 @@ describe("GitManagerModal", () => {
fireEvent.click(checkoutButtons[0]);
await waitFor(() => {
expect(checkoutBranch).toHaveBeenCalledWith("feature", undefined);
expectLatestCallStartsWith(checkoutBranch as any, "feature");
});
});
@@ -629,7 +634,7 @@ describe("GitManagerModal", () => {
fireEvent.click(deleteButtons[0]);
await waitFor(() => {
expect(deleteBranch).toHaveBeenCalledWith("feature", undefined, undefined);
expectLatestCallStartsWith(deleteBranch as any, "feature");
});
});
@@ -662,7 +667,7 @@ describe("GitManagerModal", () => {
fireEvent.click(branchItems[1]);
await waitFor(() => {
expect(fetchBranchCommits).toHaveBeenCalledWith("feature", 10, undefined);
expectLatestCallStartsWith(fetchBranchCommits as any, "feature", 10);
});
await waitFor(() => {
@@ -695,7 +700,7 @@ describe("GitManagerModal", () => {
fireEvent.click(branchItems[1]);
await waitFor(() => {
expect(fetchBranchCommits).toHaveBeenCalledWith("feature", 10, undefined);
expectLatestCallStartsWith(fetchBranchCommits as any, "feature", 10);
});
// Click again to deselect
@@ -798,7 +803,7 @@ describe("GitManagerModal", () => {
fireEvent.click(commitRow);
await waitFor(() => {
expect(fetchCommitDiff).toHaveBeenCalledWith("def456789abc", undefined);
expectLatestCallStartsWith(fetchCommitDiff as any, "def456789abc");
});
});
@@ -817,7 +822,7 @@ describe("GitManagerModal", () => {
fireEvent.click(branchItems[1]);
await waitFor(() => {
expect(fetchBranchCommits).toHaveBeenCalledWith("feature", 10, undefined);
expectLatestCallStartsWith(fetchBranchCommits as any, "feature", 10);
});
// Should show empty state since fetch failed
@@ -948,7 +953,7 @@ describe("GitManagerModal", () => {
await user.click(stashBtn);
await waitFor(() => {
expect(createStash).toHaveBeenCalledWith("my stash", undefined);
expectLatestCallStartsWith(createStash as any, "my stash");
});
});
@@ -965,7 +970,7 @@ describe("GitManagerModal", () => {
await user.click(screen.getByText("Apply"));
await waitFor(() => {
expect(applyStash).toHaveBeenCalledWith(0, false, undefined);
expectLatestCallStartsWith(applyStash as any, 0, false);
});
});
@@ -982,7 +987,7 @@ describe("GitManagerModal", () => {
await user.click(screen.getByText("Pop"));
await waitFor(() => {
expect(applyStash).toHaveBeenCalledWith(0, true, undefined);
expectLatestCallStartsWith(applyStash as any, 0, true);
});
});
@@ -1001,7 +1006,7 @@ describe("GitManagerModal", () => {
await user.click(screen.getByTitle("Drop stash"));
await waitFor(() => {
expect(dropStash).toHaveBeenCalledWith(0, undefined);
expectLatestCallStartsWith(dropStash as any, 0);
});
});
@@ -1858,7 +1863,7 @@ describe("GitManagerModal", () => {
await user.click(screen.getByText("First ahead commit"));
await waitFor(() => {
expect(fetchCommitDiff).toHaveBeenCalledWith("aaa1111");
expectLatestCallStartsWith(fetchCommitDiff as any, "aaa1111");
});
// Diff content should be rendered
@@ -1898,7 +1903,7 @@ describe("GitManagerModal", () => {
// Click to expand
await user.click(screen.getByText("Toggle commit"));
await waitFor(() => {
expect(fetchCommitDiff).toHaveBeenCalledWith("aaa1111");
expectLatestCallStartsWith(fetchCommitDiff as any, "aaa1111");
});
// Diff should be visible
@@ -1975,7 +1980,7 @@ describe("GitManagerModal", () => {
await user.click(screen.getByText("Remote commit 1"));
await waitFor(() => {
expect(fetchCommitDiff).toHaveBeenCalledWith("rc1hash1");
expectLatestCallStartsWith(fetchCommitDiff as any, "rc1hash1");
});
// Diff content should be rendered
@@ -2006,7 +2011,7 @@ describe("GitManagerModal", () => {
// Click to expand
await user.click(screen.getByText("Remote toggle commit"));
await waitFor(() => {
expect(fetchCommitDiff).toHaveBeenCalledWith("rc1hash1");
expectLatestCallStartsWith(fetchCommitDiff as any, "rc1hash1");
});
// Diff should be visible
@@ -2072,13 +2077,13 @@ describe("GitManagerModal", () => {
// Click first commit
await user.click(screen.getByText("First remote"));
await waitFor(() => {
expect(fetchCommitDiff).toHaveBeenCalledWith("rc1hash1");
expectLatestCallStartsWith(fetchCommitDiff as any, "rc1hash1");
});
// Click second commit — should collapse first, expand second
await user.click(screen.getByText("Second remote"));
await waitFor(() => {
expect(fetchCommitDiff).toHaveBeenCalledWith("rc2hash2");
expectLatestCallStartsWith(fetchCommitDiff as any, "rc2hash2");
});
// fetchCommitDiff should have been called for both commits

View File

@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8" />
<!-- Viewport configured for Capacitor mobile webview: disables pinch-zoom for app-like feel -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover" />
<title>Fusion</title>
<link rel="icon" type="image/svg+xml" href="/logo.svg" />
<link rel="manifest" href="/manifest.json" />

View File

@@ -6369,6 +6369,12 @@ body {
box-shadow: var(--shadow-sm);
}
@media (display-mode: standalone) {
#root {
padding-bottom: env(safe-area-inset-bottom, 0px);
}
}
/* === Mobile Responsive Overrides ===
On narrow viewports (≤768px) the board switches from a 5-column grid to a
horizontally-scrollable flex layout so only one scrollbar appears. Each