]> git.giacomolli.uk - onechat/blob - file_test.go
Select notification targets by stable ID
[onechat] / file_test.go
1 package main
2
3 import (
4 "os"
5 "path/filepath"
6 "testing"
7
8 "github.com/stretchr/testify/require"
9 )
10
11 func TestDurableReplacementKeepsPrivateCompleteContents(t *testing.T) {
12 path := filepath.Join(t.TempDir(), "state.json")
13 require.NoError(t, writeFileDurable(path, []byte("first\n")))
14 require.NoError(t, writeFileDurable(path, []byte("second\n")))
15
16 data, err := os.ReadFile(path)
17 require.NoError(t, err)
18 require.Equal(t, "second\n", string(data))
19
20 info, err := os.Stat(path)
21 require.NoError(t, err)
22 require.Equal(t, os.FileMode(0o600), info.Mode().Perm())
23
24 entries, err := os.ReadDir(filepath.Dir(path))
25 require.NoError(t, err)
26 require.Len(t, entries, 1)
27 }
28
29 func TestDurableReplacementReportsFailuresAndRemovesTemporaryFiles(t *testing.T) {
30 directory := t.TempDir()
31 path := filepath.Join(directory, "state.json")
32 require.NoError(t, os.Mkdir(path, 0o700))
33 require.ErrorContains(t, writeFileDurable(path, []byte("data")), "publish durable file")
34
35 entries, err := os.ReadDir(directory)
36 require.NoError(t, err)
37 require.Len(t, entries, 1)
38 require.True(t, entries[0].IsDir())
39 require.ErrorContains(t, writeFileDurable(filepath.Join(directory, "missing", "state"), nil), "create durable temporary file")
40 }