返回 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/worktree"
11 )
12
13 func TestDeliveryWorktreeAvailabilityDelegatesWithoutRequiringGit(t *testing.T) {
14 original := inspectDeliveryWorktree
15 t.Cleanup(func() { inspectDeliveryWorktree = original })
16 inspectDeliveryWorktree = func(_ context.Context, root string) worktree.Availability {
17 return worktree.Availability{Available: false, Reason: "Git is not installed", RepoRoot: root}
18 }
19 got := NewApp().DeliveryWorktreeAvailability("project")
20 if got.Available || got.Reason != "Git is not installed" || got.RepoRoot != "project" {
21 t.Fatalf("availability = %+v", got)
22 }
23 }
24
25 func TestCreateDeliveryWorktreeRegistersAndOpensManagedProject(t *testing.T) {
26 home := t.TempDir()
27 t.Setenv("REASONIX_HOME", home)
28 t.Setenv("REASONIX_STATE_HOME", home)
29 t.Setenv("REASONIX_CACHE_HOME", filepath.Join(home, "cache"))
30 managed := config.DeliveryWorktreeDir()
31 isolatedRoot := filepath.Join(managed, "repo", "id", "project")
32 if err := os.MkdirAll(isolatedRoot, 0o755); err != nil {
33 t.Fatal(err)
34 }
35
36 original := createDeliveryWorktree
37 t.Cleanup(func() { createDeliveryWorktree = original })
38 createDeliveryWorktree = func(_ context.Context, source, gotManaged string) (worktree.Result, error) {
39 if source != "source-project" {
40 t.Fatalf("source = %q", source)
41 }
42 if gotManaged != managed {
43 t.Fatalf("managed root = %q, want %q", gotManaged, managed)
44 }
45 return worktree.Result{
46 WorkspaceRoot: isolatedRoot,
47 WorktreeRoot: filepath.Dir(isolatedRoot),
48 SourceRoot: "source-project",
49 Branch: "reasonix/delivery-test",
50 SourceDirty: true,
51 }, nil
52 }
53
54 app := NewApp()
55 t.Cleanup(func() { app.shutdown(context.Background()) })
56 result, err := app.CreateDeliveryWorktree("source-project")
57 if err != nil {
58 t.Fatal(err)
59 }
60 if result.WorkspaceRoot != isolatedRoot || result.Branch != "reasonix/delivery-test" || !result.SourceDirty {
61 t.Fatalf("result = %+v", result)
62 }
63 if result.Tab.WorkspaceRoot != isolatedRoot || !result.Tab.IsolatedWorktree || !result.Tab.Active || result.Tab.TokenMode != "delivery" {
64 t.Fatalf("opened tab = %+v", result.Tab)
65 }
66 }
67
67 lines GO