129 lines
3.3 KiB
Go
129 lines
3.3 KiB
Go
package store_test
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"superwork-tui/internal/store"
|
|
)
|
|
|
|
func TestReadConfirmed_MissingFile(t *testing.T) {
|
|
root := t.TempDir()
|
|
got, err := store.ReadConfirmed(root, 12, "abc")
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if len(got) != 0 {
|
|
t.Errorf("got %v, want empty", got)
|
|
}
|
|
}
|
|
|
|
func TestWriteConfirmed_Roundtrip(t *testing.T) {
|
|
root := t.TempDir()
|
|
want := []string{"src/a.go", "src/b.go"}
|
|
if err := store.WriteConfirmed(root, 12, "abc", want); err != nil {
|
|
t.Fatalf("write: %v", err)
|
|
}
|
|
got, err := store.ReadConfirmed(root, 12, "abc")
|
|
if err != nil {
|
|
t.Fatalf("read: %v", err)
|
|
}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Errorf("got %v, want %v", got, want)
|
|
}
|
|
}
|
|
|
|
func TestWriteConfirmed_EmptyDeletesKey(t *testing.T) {
|
|
root := t.TempDir()
|
|
if err := store.WriteConfirmed(root, 12, "abc", []string{"x.go"}); err != nil {
|
|
t.Fatalf("write: %v", err)
|
|
}
|
|
if err := store.WriteConfirmed(root, 12, "abc", nil); err != nil {
|
|
t.Fatalf("write empty: %v", err)
|
|
}
|
|
m := readRawMap(t, root)
|
|
if _, ok := m["12:abc"]; ok {
|
|
t.Errorf("key 12:abc still present after empty write: %v", m)
|
|
}
|
|
}
|
|
|
|
func TestKeyConvention(t *testing.T) {
|
|
root := t.TempDir()
|
|
if err := store.WriteConfirmed(root, 7, "deadbeef", []string{"f.go"}); err != nil {
|
|
t.Fatalf("write file: %v", err)
|
|
}
|
|
if err := store.WriteConfirmedCommits(root, 7, []string{"deadbeef", "cafe"}); err != nil {
|
|
t.Fatalf("write commits: %v", err)
|
|
}
|
|
m := readRawMap(t, root)
|
|
if _, ok := m["7:deadbeef"]; !ok {
|
|
t.Errorf("missing file-level key 7:deadbeef: %v", m)
|
|
}
|
|
if _, ok := m["7:commits"]; !ok {
|
|
t.Errorf("missing commit-level key 7:commits: %v", m)
|
|
}
|
|
}
|
|
|
|
func TestConfirmedCommits_Roundtrip(t *testing.T) {
|
|
root := t.TempDir()
|
|
want := []string{"sha1", "sha2"}
|
|
if err := store.WriteConfirmedCommits(root, 9, want); err != nil {
|
|
t.Fatalf("write: %v", err)
|
|
}
|
|
got, err := store.ReadConfirmedCommits(root, 9)
|
|
if err != nil {
|
|
t.Fatalf("read: %v", err)
|
|
}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Errorf("got %v, want %v", got, want)
|
|
}
|
|
}
|
|
|
|
func TestConfirmedCommits_EmptyDeletesKey(t *testing.T) {
|
|
root := t.TempDir()
|
|
if err := store.WriteConfirmedCommits(root, 9, []string{"sha1"}); err != nil {
|
|
t.Fatalf("write: %v", err)
|
|
}
|
|
if err := store.WriteConfirmedCommits(root, 9, nil); err != nil {
|
|
t.Fatalf("write empty: %v", err)
|
|
}
|
|
m := readRawMap(t, root)
|
|
if _, ok := m["9:commits"]; ok {
|
|
t.Errorf("key 9:commits still present after empty write: %v", m)
|
|
}
|
|
}
|
|
|
|
func TestReadConfirmed_MalformedFile(t *testing.T) {
|
|
root := t.TempDir()
|
|
spx := filepath.Join(root, ".spx")
|
|
if err := os.MkdirAll(spx, 0o755); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.WriteFile(filepath.Join(spx, "pr-review-confirmed.json"), []byte("not json"), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
got, err := store.ReadConfirmed(root, 1, "x")
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if len(got) != 0 {
|
|
t.Errorf("got %v, want empty for malformed file", got)
|
|
}
|
|
}
|
|
|
|
func readRawMap(t *testing.T, root string) map[string][]string {
|
|
t.Helper()
|
|
raw, err := os.ReadFile(filepath.Join(root, ".spx", "pr-review-confirmed.json"))
|
|
if err != nil {
|
|
t.Fatalf("read raw: %v", err)
|
|
}
|
|
var m map[string][]string
|
|
if err := json.Unmarshal(raw, &m); err != nil {
|
|
t.Fatalf("unmarshal raw: %v", err)
|
|
}
|
|
return m
|
|
}
|