package jsonl import ( "os" "testing" "gitea.k3s.k0.nu/tools/photocli/internal/manifest/types" ) func TestAdapter(t *testing.T) { a := Adapter{} if a.Format() != types.FormatJSONL { t.Fatal("expected JSONL format") } if len(a.Aliases()) != 1 || a.Aliases()[0] != "json" { t.Fatal("expected json alias") } dir := t.TempDir() if a.Path(dir) != Path(dir) { t.Fatal("expected path match") } if a.Exists(dir) { t.Fatal("expected not to exist in empty dir") } m, err := a.Open(dir) if err != nil { t.Fatal(err) } m.Close() w, err := a.OpenLogWriter(nil, dir) if err != nil { t.Fatal(err) } w.Close() } func TestStoreLoadEmpty(t *testing.T) { m := Load(t.TempDir()) if m == nil { t.Fatal("expected non-nil store") } } func TestStoreLoadNonexistent(t *testing.T) { m := Load("/nonexistent/path") if m == nil { t.Fatal("expected non-nil store") } } func TestStoreAddAndHas(t *testing.T) { m := Load(t.TempDir()) if m.Has("x") { t.Fatal("expected Has to return false") } m.Add("x", "photo.jpg", 42, "s3") if !m.Has("x") { t.Fatal("expected Has to return true") } } func TestStoreSaveAndReload(t *testing.T) { dir := t.TempDir() m := Load(dir) if err := m.OpenAppend(); err != nil { t.Fatal(err) } m.Add("id1", "file1.jpg", 10, "aws") m.Add("id2", "file2.jpg", 20, "gcs") if err := m.Save(); err != nil { t.Fatal(err) } m.Close() m2 := Load(dir) if !m2.Has("id1") { t.Fatal("expected id1 after reload") } if !m2.Has("id2") { t.Fatal("expected id2 after reload") } } func TestStoreOpenAppendCreatesDirs(t *testing.T) { dir := t.TempDir() subdir := dir + "/a/b" m := Load(subdir) if err := m.OpenAppend(); err != nil { t.Fatal(err) } m.Close() } func TestStoreCloseIdempotent(t *testing.T) { m := Load(t.TempDir()) if err := m.OpenAppend(); err != nil { t.Fatal(err) } m.Close() m.Close() } func TestStoreOpenAppendIdempotent(t *testing.T) { m := Load(t.TempDir()) if err := m.OpenAppend(); err != nil { t.Fatal(err) } if err := m.OpenAppend(); err != nil { t.Fatal(err) } m.Close() } func TestStoreEntries(t *testing.T) { m := Load(t.TempDir()) m.Add("e1", "f1.jpg", 1, "c1") m.Add("e2", "f2.jpg", 2, "c2") entries := m.Entries() if len(entries) != 2 { t.Fatalf("expected 2 entries, got %d", len(entries)) } } func TestStoreManifestFormat(t *testing.T) { m := Load(t.TempDir()) if m.ManifestFormat() != types.FormatJSONL { t.Fatal("expected JSONL format") } } func TestStoreOpenAppendMkdirError(t *testing.T) { m := Load("/proc/cannot-create-dir-here") if err := m.OpenAppend(); err == nil { t.Fatal("expected error") } } func TestStoreSaveWithNoFile(t *testing.T) { m := Load(t.TempDir()) if err := m.Save(); err != nil { t.Fatal(err) } } func TestStoreLoadFromExistingFile(t *testing.T) { dir := t.TempDir() m := Load(dir) if err := m.OpenAppend(); err != nil { t.Fatal(err) } m.Add("abc", "a.jpg", 100, "gcs") m.Close() m2 := Load(dir) if !m2.Has("abc") { t.Fatal("expected abc after reload") } } func TestFileExists(t *testing.T) { dir := t.TempDir() if FileExists(dir) { t.Fatal("expected false for directory") } if FileExists("/nonexistent/file") { t.Fatal("expected false for nonexistent") } } func TestLoadWithPathFallback(t *testing.T) { dir := t.TempDir() path := Path(dir) osWriteFile(path, []byte(`{"id":"abc","filename":"a.jpg","size":100,"cloud":"gcs","exported":1234}`+"\n"), 0644) m := Load(dir) if !m.Has("abc") { t.Fatal("expected abc") } if e := m.Entries()["abc"]; e.Path != "a.jpg" { t.Fatalf("expected path fallback to filename, got %q", e.Path) } } func TestOpenAppendAlreadyOpen(t *testing.T) { m := Load(t.TempDir()) if err := m.OpenAppend(); err != nil { t.Fatal(err) } if err := m.OpenAppend(); err != nil { t.Fatal(err) } m.Close() } func TestOpenAppendOpenFileError(t *testing.T) { dir := t.TempDir() os.MkdirAll(Path(dir), 0755) m := Load(dir) if err := m.OpenAppend(); err == nil { t.Fatal("expected error when path is a directory") } } func TestOpenAppendMkdirError(t *testing.T) { m := Load("/proc/cannot-create-dir-here") if err := m.OpenAppend(); err == nil { t.Fatal("expected error") } } var osWriteFile = os.WriteFile