Fix Forgejo CI terminal test mock alias
The final CI-only failure was a Next.js module-shape mismatch in the terminal test. I added the missing next/navigation.js alias so Forgejo can resolve the same named exports the full Bun test run expects.
New Changes as of 2026-05-30 01:48 EDT
This update is the last missing piece after the earlier Bun PATH and redirect-mock fixes. Forgejo was still loading next/navigation.js directly in the terminal test, so Bun threw before the test body could run.
Summary of changes
- Added a
next/navigation.jsmock alias inapps/web/app/terminal.test.ts. - Exposed both
redirectandusePathnamefrom the alias to match the CI runtime's import shape.
Why this change was made
The previous mock covered next/navigation, but the full CI run resolved the explicit .js entry point. Without the alias, Bun reported a missing named export and aborted the test file.
Code diff
mock.module("next/navigation.js", () => ({
default: {
redirect,
usePathname: () => "/options"
},
redirect,
usePathname: () => "/options"
}));
Related issues or PRs
islandflow-3l6
Summary
The remaining Forgejo failure was inside the web test suite, not the install or typecheck stages. The terminal test needed to mock the Next.js navigation module under both import paths, so the final change keeps the CI runner from tripping over a named export mismatch.
Changes Made
- Updated
apps/web/app/terminal.test.tsto mocknext/navigation.jsin addition tonext/navigation. - Kept the redirect shim and pathname stub aligned between both module shapes.
- Left the earlier Bun PATH and redirect-mock fixes intact, since they were already solving the other CI failure modes.
Context
The repository already had the Bun executable path fix and the routes mock alias fix in place. The last failure surfaced only in the full CI-shaped test run, where Bun resolved the terminal module through next/navigation.js rather than the shorter specifier used in the local test path.
Important Implementation Details
- The alias returns the same mock object for both module entry points, so the terminal module sees a consistent redirect helper and pathname stub regardless of the import path Bun chooses.
- This stays narrowly scoped to the test file and does not change production routing code.
- The fix addresses the exact CI import shape instead of widening the test harness in a way that could hide future regressions.
Relevant Diff Snippets
Rendered with @pierre/diffs/ssr from the current working tree. It shows the new next/navigation.js alias in the terminal test.
8 unmodified lines910111213148 unmodified linesredirect,usePathname: () => "/options"}));const {NAV_ITEMS,8 unmodified lines9101112131415161718192021228 unmodified linesredirect,usePathname: () => "/options"}));mock.module("next/navigation.js", () => ({default: {redirect,usePathname: () => "/options"},redirect,usePathname: () => "/options"}));const {NAV_ITEMS,
Expected Impact for End-Users
Forgejo should stop failing on the terminal test's CI-only module resolution mismatch, which reduces false negative pipeline runs and makes it easier to trust the branch when the suite passes.
Validation
env PATH="$HOME/.bun/bin:/usr/bin:/bin" bun test apps/web/app/terminal.test.tspassed: 74 tests, 0 failures.env PATH="$HOME/.bun/bin:/usr/bin:/bin" bun testpassed: 250 tests, 0 failures.
Issues, Limitations, and Mitigations
This fix is intentionally narrow. If another CI-only Next.js import path shows up later, the same pattern should be applied to the affected test file instead of broadening the mock surface globally. That keeps the failure signal honest and the test harness easy to reason about.
Follow-up Work
- Watch the next Forgejo run on this branch to confirm the updated terminal alias clears the last failure.
- If another module-shape mismatch appears, fold the shared mock setup into a tiny helper rather than repeating the alias logic by hand.