From 748749117d347b9925c5a2b48840ded6506c44fd Mon Sep 17 00:00:00 2001 From: Widthdom Date: Wed, 3 Jun 2026 04:37:17 +0900 Subject: [PATCH] Fix DbPathResolver query tests active workspace isolation (#2953) --- changelog.d/unreleased/2953.fixed.md | 15 +++++++++++++++ tests/CodeIndex.Tests/DbPathResolverTests.cs | 17 +++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 changelog.d/unreleased/2953.fixed.md diff --git a/changelog.d/unreleased/2953.fixed.md b/changelog.d/unreleased/2953.fixed.md new file mode 100644 index 0000000000..f00be3719c --- /dev/null +++ b/changelog.d/unreleased/2953.fixed.md @@ -0,0 +1,15 @@ +--- +category: fixed +issues: + - 2953 +affected: + - tests/CodeIndex.Tests/DbPathResolverTests.cs +--- + +## English + +- **DbPathResolver query data-dir tests no longer depend on the active workspace state (#2953)** — `ResolveDataDirForQuery` tests now isolate `CDIDX_ACTIVE_WORKSPACE` and `XDG_CONFIG_HOME`, so developer-local active workspace configuration cannot redirect expected test database paths. + +## 日本語 + +- **DbPathResolver の query data-dir テストが active workspace 状態に依存しないようになりました (#2953)** — `ResolveDataDirForQuery` テストで `CDIDX_ACTIVE_WORKSPACE` と `XDG_CONFIG_HOME` を隔離することで、開発者ローカルの active workspace 設定が期待するテスト用 DB パスを上書きしないようにしました。 diff --git a/tests/CodeIndex.Tests/DbPathResolverTests.cs b/tests/CodeIndex.Tests/DbPathResolverTests.cs index 7e324c1629..a362dedc69 100644 --- a/tests/CodeIndex.Tests/DbPathResolverTests.cs +++ b/tests/CodeIndex.Tests/DbPathResolverTests.cs @@ -81,9 +81,11 @@ public void ResolveDataDir_UsesStableXdgWorkspaceHashBeforeWorkspaceDefault() public void ResolveDataDirForQuery_WithXdgPrefersAncestorWorkspaceDataDir() { var projectRoot = TestProjectHelper.CreateTempProject("cdidx_query_xdg_root_db"); + var configHome = TestProjectHelper.CreateTempProject("cdidx_query_xdg_config"); var xdgDir = Path.Combine(Path.GetTempPath(), $"cdidx_xdg_dir_{Guid.NewGuid():N}"); try { + using var env = IsolateActiveWorkspace(configHome); var child = Path.Combine(projectRoot, "src", "App"); Directory.CreateDirectory(child); var indexedRootResolution = DbPathResolver.ResolveDataDir(projectRoot, explicitDataDir: null, environmentDataDir: null, xdgDataHome: xdgDir); @@ -98,6 +100,7 @@ public void ResolveDataDirForQuery_WithXdgPrefersAncestorWorkspaceDataDir() finally { TestProjectHelper.DeleteDirectory(projectRoot); + TestProjectHelper.DeleteDirectory(configHome); TestProjectHelper.DeleteDirectory(xdgDir); } } @@ -106,8 +109,10 @@ public void ResolveDataDirForQuery_WithXdgPrefersAncestorWorkspaceDataDir() public void ResolveDataDirForQuery_PrefersOutermostAncestorCdidx() { var projectRoot = TestProjectHelper.CreateTempProject("cdidx_query_root_db"); + var configHome = TestProjectHelper.CreateTempProject("cdidx_query_root_config"); try { + using var env = IsolateActiveWorkspace(configHome); var child = Path.Combine(projectRoot, "src", "App"); Directory.CreateDirectory(child); Directory.CreateDirectory(Path.Combine(projectRoot, ".cdidx")); @@ -121,6 +126,7 @@ public void ResolveDataDirForQuery_PrefersOutermostAncestorCdidx() finally { TestProjectHelper.DeleteDirectory(projectRoot); + TestProjectHelper.DeleteDirectory(configHome); } } @@ -128,8 +134,10 @@ public void ResolveDataDirForQuery_PrefersOutermostAncestorCdidx() public void ResolveDataDirForQuery_FallsBackToCurrentDirectoryWhenNoAncestorCdidxExists() { var projectRoot = TestProjectHelper.CreateTempProject("cdidx_query_no_root_db"); + var configHome = TestProjectHelper.CreateTempProject("cdidx_query_no_root_config"); try { + using var env = IsolateActiveWorkspace(configHome); var child = Path.Combine(projectRoot, "src", "App"); Directory.CreateDirectory(child); @@ -141,6 +149,7 @@ public void ResolveDataDirForQuery_FallsBackToCurrentDirectoryWhenNoAncestorCdid finally { TestProjectHelper.DeleteDirectory(projectRoot); + TestProjectHelper.DeleteDirectory(configHome); } } @@ -700,4 +709,12 @@ public void ResolveProjectRootForQuery_ReturnsNullForExplicitDbWithoutMetadata() TestProjectHelper.DeleteFile(dbPath); } } + + private static EnvironmentVariableScope IsolateActiveWorkspace(string configHome) + { + var env = EnvironmentVariableScope.Capture(ActiveWorkspace.EnvironmentVariable, "XDG_CONFIG_HOME"); + env.Set(ActiveWorkspace.EnvironmentVariable, null); + env.Set("XDG_CONFIG_HOME", configHome); + return env; + } }