返回 DeepSeek-Reasonix
session_export_journal_test.go
根目录 / desktop / session_export_journal_test.go
1 package main
2
3 import (
4 "context"
5 "os"
6 "path/filepath"
7 "testing"
8 )
9
10 func TestExportPublicationRecoveryPreservesReplacedFiles(t *testing.T) {
11 parent := t.TempDir()
12 dir, err := os.MkdirTemp(parent, ".reasonix-export-batch-")
13 if err != nil {
14 t.Fatal(err)
15 }
16 for i, name := range []string{"page-000000", "page-000001"} {
17 witness := filepath.Join(dir, name)
18 if err = os.WriteFile(witness, []byte("staged"), 0600); err != nil {
19 t.Fatal(err)
20 }
21 target := filepath.Join(parent, []string{"first.png", "second.png"}[i])
22 if err = os.Link(witness, target); err != nil {
23 t.Fatal(err)
24 }
25 }
26 if err = writeExportPublication(dir, exportPublication{Targets: []string{"first.png", "second.png"}}); err != nil {
27 t.Fatal(err)
28 }
29 if err = os.Remove(filepath.Join(parent, "second.png")); err != nil {
30 t.Fatal(err)
31 }
32 if err = os.WriteFile(filepath.Join(parent, "second.png"), []byte("user replacement"), 0600); err != nil {
33 t.Fatal(err)
34 }
35 if err = recoverExportPublications(parent); err != nil {
36 t.Fatal(err)
37 }
38 if _, err = os.Stat(filepath.Join(parent, "first.png")); !os.IsNotExist(err) {
39 t.Fatal("partial output survived recovery")
40 }
41 value, err := os.ReadFile(filepath.Join(parent, "second.png"))
42 if err != nil || string(value) != "user replacement" {
43 t.Fatal("recovery removed an unrelated replacement")
44 }
45 }
46 func TestExportPublicationConflictLeavesExistingFile(t *testing.T) {
47 parent, source := t.TempDir(), t.TempDir()
48 for _, name := range []string{"page-000000", "page-000001"} {
49 if err := os.WriteFile(filepath.Join(source, name), []byte(name), 0600); err != nil {
50 t.Fatal(err)
51 }
52 }
53 targets := []string{filepath.Join(parent, "first.png"), filepath.Join(parent, "second.png")}
54 if err := os.WriteFile(targets[1], []byte("existing"), 0600); err != nil {
55 t.Fatal(err)
56 }
57 if err := publishJournaledImages(context.Background(), source, targets); err == nil {
58 t.Fatal("overwrote existing output")
59 }
60 if _, err := os.Stat(targets[0]); !os.IsNotExist(err) {
61 t.Fatal("published partial output")
62 }
63 if err := os.Remove(targets[1]); err != nil {
64 t.Fatal(err)
65 }
66 if err := publishJournaledImages(context.Background(), source, targets); err != nil {
67 t.Fatal(err)
68 }
69 if err := recoverExportPublications(parent); err != nil {
70 t.Fatal(err)
71 }
72 for _, target := range targets {
73 if _, err := os.Stat(target); err != nil {
74 t.Fatal(err)
75 }
76 }
77 }
78
78 lines GO