1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 |
package export
import (
"os"
"path/filepath"
"testing"
"git.pablomurad.com/pablo/patchwork/internal/render"
)
func TestWriteSwapsAtomically(t *testing.T) {
dir := filepath.Join(t.TempDir(), "out")
first := &render.Tree{Files: map[string]render.File{"a/one.json": {Body: []byte("1")}, "stale.txt": {Body: []byte("x")}}}
if err := Write(first, dir); err != nil {
t.Fatal(err)
}
second := &render.Tree{Files: map[string]render.File{"a/one.json": {Body: []byte("2")}}}
if err := Write(second, dir); err != nil {
t.Fatal(err)
}
if b, _ := os.ReadFile(filepath.Join(dir, "a", "one.json")); string(b) != "2" {
t.Fatalf("content %q", b)
}
if _, err := os.Stat(filepath.Join(dir, "stale.txt")); !os.IsNotExist(err) {
t.Fatal("a file no longer in the tree must disappear")
}
for _, leftover := range []string{dir + ".tmp", dir + ".old"} {
if _, err := os.Stat(leftover); !os.IsNotExist(err) {
t.Fatalf("%s left behind", leftover)
}
}
}
|