返回 DeepSeek-Reasonix
workspace_shell_integrity_test.go
根目录 / desktop / workspace_shell_integrity_test.go
1 package main
2
3 import (
4 "os"
5 "testing"
6 )
7
8 func TestWorkspaceShellSnapshotDoesNotFallbackPastRegistryFailure(t *testing.T) {
9 isolateDesktopUserDirs(t)
10 a := NewApp()
11 root := t.TempDir()
12 id, err := a.ensureDesktopWorkspace(t.Context(), "project", root)
13 if err != nil {
14 t.Fatal(err)
15 }
16 if err := addProject(root, ""); err != nil {
17 t.Fatal(err)
18 }
19 if err := a.workspaceRegistry().SetWorkspaceVisible(t.Context(), id, false); err != nil {
20 t.Fatal(err)
21 }
22 if err := os.WriteFile(a.workspaceRegistry().Path(), []byte("broken registry"), 0o600); err != nil {
23 t.Fatal(err)
24 }
25 if _, err := a.GetProjectTreeSnapshot(); err == nil {
26 t.Fatal("registry failure must not publish legacy-only membership")
27 }
28 }
29
30 func mustProjectTreeSnapshot(t *testing.T, a *App) ProjectTreeSnapshot {
31 t.Helper()
32 snapshot, err := a.GetProjectTreeSnapshot()
33 if err != nil {
34 t.Fatal(err)
35 }
36 return snapshot
37 }
38
39 func TestWorkspaceShellSnapshotUsesMembershipGeneration(t *testing.T) {
40 isolateDesktopUserDirs(t)
41 a := NewApp()
42 root := t.TempDir()
43 id, err := a.ensureDesktopWorkspace(t.Context(), "project", root)
44 if err != nil {
45 t.Fatal(err)
46 }
47 before := mustProjectTreeSnapshot(t, a)
48 if before.WorkspaceGeneration == nil {
49 t.Fatal("missing membership generation")
50 }
51 if err := a.workspaceRegistry().SetWorkspaceVisible(t.Context(), id, false); err != nil {
52 t.Fatal(err)
53 }
54 after := mustProjectTreeSnapshot(t, a)
55 if after.WorkspaceGeneration == nil || *after.WorkspaceGeneration <= *before.WorkspaceGeneration {
56 t.Fatal("visibility mutation did not advance membership generation")
57 }
58 for _, project := range after.Projects {
59 if sameProjectRoot(project.Root, root) {
60 t.Fatal("generation and membership came from different states")
61 }
62 }
63 }
64
64 lines GO