fix(tests): resolve 5 cross-file test isolation failures

- model-fallback hook: mock selectFallbackProvider and add _resetForTesting()
  to test-setup.ts to clear module-level state between files
- fallback-retry-handler: add afterAll(mock.restore) and use mockReturnValueOnce
  to prevent connected-providers mock leaking to subsequent test files
- opencode-config-dir: use win32.join for Windows APPDATA path construction
  so tests pass on macOS (path.join uses POSIX semantics regardless of
  process.platform override)
- system-loaded-version: use resolveSymlink from file-utils instead of
  realpathSync to handle macOS /var -> /private/var symlink consistently

All 4456 tests pass (0 failures) on full bun test suite.
This commit is contained in:
YeonGyu-Kim
2026-03-26 09:30:34 +09:00
parent 90919bf359
commit 7895361f42
8 changed files with 60 additions and 21 deletions
+4 -3
View File
@@ -1,6 +1,6 @@
import { describe, test, expect, beforeEach, afterEach } from "bun:test"
import { homedir } from "node:os"
import { join, resolve } from "node:path"
import { join, resolve, win32 } from "node:path"
import {
getOpenCodeConfigDir,
getOpenCodeConfigPaths,
@@ -241,9 +241,10 @@ describe("opencode-config-dir", () => {
// when getOpenCodeConfigDir is called with binary="opencode-desktop"
const result = getOpenCodeConfigDir({ binary: "opencode-desktop", version: "1.0.200", checkExisting: false })
// then returns %APPDATA%/ai.opencode.desktop
expect(result).toBe(join("C:\\Users\\TestUser\\AppData\\Roaming", TAURI_APP_IDENTIFIER))
// then returns %APPDATA%/ai.opencode.desktop using Windows path semantics
expect(result).toBe(win32.join("C:\\Users\\TestUser\\AppData\\Roaming", TAURI_APP_IDENTIFIER))
})
})
describe("dev build detection", () => {
+6 -3
View File
@@ -1,6 +1,6 @@
import { existsSync, realpathSync } from "node:fs"
import { homedir } from "node:os"
import { join, resolve } from "node:path"
import { join, resolve, win32 } from "node:path"
import type {
OpenCodeBinaryType,
@@ -31,7 +31,7 @@ function getTauriConfigDir(identifier: string): string {
case "win32": {
const appData = process.env.APPDATA || join(homedir(), "AppData", "Roaming")
return join(appData, identifier)
return win32.join(appData, identifier)
}
case "linux":
@@ -71,7 +71,10 @@ export function getOpenCodeConfigDir(options: OpenCodeConfigDirOptions): string
}
const identifier = isDevBuild(version) ? TAURI_APP_IDENTIFIER_DEV : TAURI_APP_IDENTIFIER
const tauriDir = resolveConfigPath(getTauriConfigDir(identifier))
const tauriDirBase = getTauriConfigDir(identifier)
const tauriDir = process.platform === "win32"
? (win32.isAbsolute(tauriDirBase) ? win32.normalize(tauriDirBase) : win32.resolve(tauriDirBase))
: resolveConfigPath(tauriDirBase)
if (checkExisting) {
const legacyDir = getCliConfigDir()