返回 DeepSeek-Reasonix
browser_upload_files_test.go
根目录 / desktop / browser_upload_files_test.go
1 package main
2
3 import (
4 "os"
5 "path/filepath"
6 "testing"
7 )
8
9 func TestBrowserUploadStagesOnlyOwnedFiles(t *testing.T) {
10 root, other, scratch := t.TempDir(), t.TempDir(), t.TempDir()
11 owned := filepath.Join(root, "report.csv")
12 foreign := filepath.Join(other, "secret.csv")
13 if err := os.WriteFile(owned, []byte("owned bytes"), 0o600); err != nil {
14 t.Fatal(err)
15 }
16 if err := os.WriteFile(foreign, []byte("foreign bytes"), 0o600); err != nil {
17 t.Fatal(err)
18 }
19 link := filepath.Join(root, "escape.csv")
20 if err := os.Symlink(foreign, link); err != nil {
21 t.Fatal(err)
22 }
23 for _, file := range []string{foreign, link, root, "relative.csv"} {
24 if _, err := stageOwnedBrowserFile([]string{root}, scratch, file); err == nil {
25 t.Fatalf("unowned/non-file path accepted: %s", file)
26 }
27 }
28 staged, err := stageOwnedBrowserFile([]string{root}, scratch, owned)
29 if err != nil {
30 t.Fatal(err)
31 }
32 if filepath.Base(staged) != "report.csv" {
33 t.Fatalf("filename changed: %s", staged)
34 }
35 if err := os.WriteFile(owned, []byte("later bytes"), 0o600); err != nil {
36 t.Fatal(err)
37 }
38 got, err := os.ReadFile(staged)
39 if err != nil || string(got) != "owned bytes" {
40 t.Fatalf("staged file did not retain approved bytes: %q %v", got, err)
41 }
42 }
43
44 func TestBrowserUploadPreservesSelectedFileName(t *testing.T) {
45 root, scratch := t.TempDir(), t.TempDir()
46 target := filepath.Join(root, "stored.csv")
47 if err := os.WriteFile(target, []byte("approved bytes"), 0o600); err != nil {
48 t.Fatal(err)
49 }
50 selected := filepath.Join(root, "客户 report.csv")
51 if err := os.Symlink(target, selected); err != nil {
52 t.Fatal(err)
53 }
54 first, err := stageOwnedBrowserFile([]string{root}, scratch, selected)
55 if err != nil {
56 t.Fatal(err)
57 }
58 second, err := stageOwnedBrowserFile([]string{root}, scratch, selected)
59 if err != nil {
60 t.Fatal(err)
61 }
62 if first == second {
63 t.Fatal("separate uploads reused the same staging path")
64 }
65 for _, staged := range []string{first, second} {
66 if filepath.Base(staged) != filepath.Base(selected) {
67 t.Fatalf("selected filename changed: %s", staged)
68 }
69 got, err := os.ReadFile(staged)
70 if err != nil || string(got) != "approved bytes" {
71 t.Fatalf("staged file lost approved bytes: %q %v", got, err)
72 }
73 }
74 }
75
75 lines GO