返回 DeepSeek-Reasonix
delivery_worktree_test.go
根目录 / desktop / delivery_worktree_test.go
1 package main
2
3 import (
4 "context"
5 "os"
6 "path/filepath"
7 "testing"
8
9 "reasonix/internal/config"
10 "reasonix/internal/gitcmd"
11 "reasonix/internal/worktree"
12 )
13
14 func TestDeliveryWorktreeAvailabilityDelegatesWithoutRequiringGit(t *testing.T) {
15 original := inspectDeliveryWorktree
16 t.Cleanup(func() { inspectDeliveryWorktree = original })
17 inspectDeliveryWorktree = func(_ context.Context, repo gitcmd.Repo) worktree.Availability {
18 root := filepath.Base(repo.Dir)
19 return worktree.Availability{Available: false, Reason: "Git is not installed", RepoRoot: root}
20 }
21 got := NewApp().DeliveryWorktreeAvailability("project")
22 if got.Available || got.Reason != "Git is not installed" || got.RepoRoot != "project" {
23 t.Fatalf("availability = %+v", got)
24 }
25 }
26
27 func TestCreateDeliveryWorktreeRegistersAndOpensManagedProject(t *testing.T) {
28 home := t.TempDir()
29 t.Setenv("REASONIX_HOME", home)
30 t.Setenv("REASONIX_STATE_HOME", home)
31 t.Setenv("REASONIX_CACHE_HOME", filepath.Join(home, "cache"))
32 managed := config.DeliveryWorktreeDir()
33 isolatedRoot := filepath.Join(managed, "repo", "id", "project")
34 if err := os.MkdirAll(isolatedRoot, 0o755); err != nil {
35 t.Fatal(err)
36 }
37
38 original := createDeliveryWorktree
39 t.Cleanup(func() { createDeliveryWorktree = original })
40 createDeliveryWorktree = func(_ context.Context, sourceRepo gitcmd.Repo, gotManaged string) (worktree.Result, error) {
41 source := filepath.Base(sourceRepo.Dir)
42 if source != "source-project" {
43 t.Fatalf("source = %q", source)
44 }
45 if gotManaged != managed {
46 t.Fatalf("managed root = %q, want %q", gotManaged, managed)
47 }
48 return worktree.Result{
49 WorkspaceRoot: isolatedRoot,
50 WorktreeRoot: filepath.Dir(isolatedRoot),
51 SourceRoot: "source-project",
52 Branch: "reasonix/delivery-test",
53 SourceDirty: true,
54 }, nil
55 }
56
57 app := NewApp()
58 t.Cleanup(func() { app.shutdown(context.Background()) })
59 result, err := app.CreateDeliveryWorktree("source-project")
60 if err != nil {
61 t.Fatal(err)
62 }
63 if result.WorkspaceRoot != isolatedRoot || result.Branch != "reasonix/delivery-test" || !result.SourceDirty {
64 t.Fatalf("result = %+v", result)
65 }
66 if result.Tab.WorkspaceRoot != isolatedRoot || !result.Tab.IsolatedWorktree || !result.Tab.Active {
67 t.Fatalf("opened tab = %+v", result.Tab)
68 }
69 if result.Tab.TokenMode != "full" {
70 t.Fatalf("isolated worktree tokenMode = %q, want full", result.Tab.TokenMode)
71 }
72 if result.Tab.QualityFloor != "standard" || result.Tab.FloorInferred {
73 t.Fatalf("isolated worktree floor = %q inferred=%v, want standard/false", result.Tab.QualityFloor, result.Tab.FloorInferred)
74 }
75 }
76
76 lines GO