c9ac014473
- Extract shared manifest types into internal/manifest/types leaf package. - Extract SQLite adapter into internal/manifest/sqlite. - Extract JSONL adapter into internal/manifest/jsonl. - Isolate modernc.org/sqlite import to sqlite/adapter.go. - Add adapter-backed registry with manifest.Default. - Adapter-agnostic ConvertManifest in types/. - MemoryAdapter for in-memory manifest testing. - CLI uses manifest.Default registry directly. - SQLite LogWriter type assertion moved into SQLiteAdapter. - Manifest interface includes Entries(); EntryReader removed. - No behavior changes. 100% coverage across all 6 packages.
80 lines
1.8 KiB
Go
80 lines
1.8 KiB
Go
package jsonl
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"gitea.k3s.k0.nu/tools/photocli/internal/manifest/types"
|
|
)
|
|
|
|
func TestSetSaveHook(t *testing.T) {
|
|
old := SetSaveHook(func() error { return fmt.Errorf("hook error") })
|
|
if old != nil {
|
|
t.Error("expected nil old hook")
|
|
}
|
|
restore := SetSaveHook(old)
|
|
if restore == nil {
|
|
t.Error("expected non-nil restore function")
|
|
}
|
|
}
|
|
|
|
func TestSaveHookError(t *testing.T) {
|
|
dir := t.TempDir()
|
|
m := Load(dir)
|
|
if err := m.OpenAppend(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
m.Add("x1", "photo.jpg", 1024, "local")
|
|
old := SetSaveHook(func() error { return fmt.Errorf("hook error") })
|
|
defer SetSaveHook(old)
|
|
if err := m.Save(); err == nil {
|
|
t.Error("expected hook error from Save")
|
|
}
|
|
m.Close()
|
|
}
|
|
|
|
func TestSyncFuncError(t *testing.T) {
|
|
dir := t.TempDir()
|
|
m := Load(dir)
|
|
if err := m.OpenAppend(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
m.Add("x1", "photo.jpg", 1024, "local")
|
|
m.SyncFunc = func() error { return fmt.Errorf("sync func error") }
|
|
if err := m.Save(); err == nil {
|
|
t.Error("expected syncFunc error from Save")
|
|
}
|
|
m.Close()
|
|
}
|
|
|
|
func TestSaveError(t *testing.T) {
|
|
dir := t.TempDir()
|
|
m := Load(dir)
|
|
if err := m.OpenAppend(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
m.Add("x1", "photo.jpg", 1024, "local")
|
|
m.file.Close()
|
|
if err := m.Save(); err == nil {
|
|
t.Error("expected Sync error on closed file")
|
|
}
|
|
m.Close()
|
|
}
|
|
|
|
func TestAddEntryDefaultsPath(t *testing.T) {
|
|
dir := t.TempDir()
|
|
m := Load(dir)
|
|
if err := m.OpenAppend(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
m.AddEntry(types.Entry{ID: "x1", Filename: "file.jpg", Size: 3, Cloud: "local", Checksum: "sha256:abc"})
|
|
m.Close()
|
|
loaded := Load(dir).Entries()["x1"]
|
|
if got := loaded.Path; got != "file.jpg" {
|
|
t.Fatalf("jsonl path = %q", got)
|
|
}
|
|
if loaded.Checksum != "sha256:abc" {
|
|
t.Fatalf("jsonl checksum = %q", loaded.Checksum)
|
|
}
|
|
}
|