返回 DeepSeek-Reasonix
workspace_readd_test.go
根目录 / desktop / workspace_readd_test.go
1 package main
2
3 import (
4 "sync/atomic"
5 "testing"
6 )
7
8 func TestSwitchWorkspaceMakesPreviouslyRemovedProjectVisibleAgain(t *testing.T) {
9 isolateDesktopUserDirs(t)
10 projectRoot := t.TempDir()
11
12 app := NewApp()
13 installNoopRuntimeEvents(app)
14 if _, err := app.SwitchWorkspace(projectRoot); err != nil {
15 t.Fatalf("initial switch workspace: %v", err)
16 }
17 if err := app.RemoveWorkspace(projectRoot); err != nil {
18 t.Fatalf("remove workspace: %v", err)
19 }
20 var sidebarNotifications atomic.Int64
21 app.projectTreeChangedHook = func() { sidebarNotifications.Add(1) }
22 if _, err := app.SwitchWorkspace(projectRoot); err != nil {
23 t.Fatalf("re-add workspace: %v", err)
24 }
25 if sidebarNotifications.Load() == 0 {
26 t.Fatal("re-adding a hidden workspace did not notify the mounted project tree")
27 }
28
29 for _, project := range mustProjectTreeSnapshot(t, app).Projects {
30 if project.Kind == "project" && sameProjectRoot(project.Root, projectRoot) {
31 return
32 }
33 }
34 t.Fatalf("re-added project %q is still hidden from the project tree", projectRoot)
35 }
36
37 func TestSwitchWorkspaceDoesNotRevealProjectDuringRemoval(t *testing.T) {
38 isolateDesktopUserDirs(t)
39 projectRoot := t.TempDir()
40 app := NewApp()
41 workspaceID, err := app.ensureDesktopWorkspace(t.Context(), "project", projectRoot)
42 if err != nil {
43 t.Fatal(err)
44 }
45 if err := app.workspaceRegistry().SetWorkspaceVisible(t.Context(), workspaceID, false); err != nil {
46 t.Fatal(err)
47 }
48 release, err := app.reserveWorkspaceRemoval(projectRoot)
49 if err != nil {
50 t.Fatal(err)
51 }
52 defer release()
53 if _, err := app.SwitchWorkspace(projectRoot); err == nil {
54 t.Fatal("SwitchWorkspace succeeded while the workspace was being removed")
55 }
56 state, err := app.workspaceRegistry().Load(t.Context())
57 if err != nil {
58 t.Fatal(err)
59 }
60 if state.Workspaces[workspaceID].Visible {
61 t.Fatal("failed re-add revealed a workspace that is still being removed")
62 }
63 }
64
64 lines GO