v0.8.3: add sidecar inspection
This commit is contained in:
@@ -35,6 +35,10 @@ type mockBridge struct {
|
||||
cancelled atomic.Bool
|
||||
}
|
||||
|
||||
type errWriter struct{}
|
||||
|
||||
func (errWriter) Write([]byte) (int, error) { return 0, fmt.Errorf("write") }
|
||||
|
||||
type noEntryManifest struct{}
|
||||
|
||||
func (noEntryManifest) Has(string) bool { return false }
|
||||
@@ -4219,6 +4223,50 @@ func TestVerifySidecarBranches(t *testing.T) {
|
||||
readFileFunc = oldRead
|
||||
}
|
||||
|
||||
func TestSidecarInspect(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
path := filepath.Join(dir, "photo.xmp")
|
||||
if err := writeXMPSidecar(path, xmpSidecarData{AssetID: "x1", ExportedFilename: "photo.jpg", Album: "Trips"}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
out, stderr, rc := runWith([]string{"sidecar", "inspect", path}, &mockBridge{})
|
||||
if rc != exitOK || stderr != "" || !strings.Contains(out, "assetID\tx1") || !strings.Contains(out, "album\tTrips") {
|
||||
t.Fatalf("inspect rc=%d out=%q stderr=%q", rc, out, stderr)
|
||||
}
|
||||
out, stderr, rc = runWith([]string{"sidecar", "inspect", path, "--json"}, &mockBridge{})
|
||||
if rc != exitOK || stderr != "" || !strings.Contains(out, `"assetID":"x1"`) || !strings.Contains(out, `"exportedFilename":"photo.jpg"`) {
|
||||
t.Fatalf("inspect json rc=%d out=%q stderr=%q", rc, out, stderr)
|
||||
}
|
||||
_, stderr, rc = runWith([]string{"sidecar"}, &mockBridge{})
|
||||
if rc != exitErr || !strings.Contains(stderr, "expected sidecar inspect") {
|
||||
t.Fatalf("inspect missing subcommand rc=%d stderr=%q", rc, stderr)
|
||||
}
|
||||
_, stderr, rc = runWith([]string{"sidecar", "inspect"}, &mockBridge{})
|
||||
if rc != exitErr || !strings.Contains(stderr, "requires <file.xmp>") {
|
||||
t.Fatalf("inspect missing path rc=%d stderr=%q", rc, stderr)
|
||||
}
|
||||
_, stderr, rc = runWith([]string{"sidecar", "inspect", filepath.Join(dir, "missing.xmp")}, &mockBridge{})
|
||||
if rc != exitErr || !strings.Contains(stderr, "error:") {
|
||||
t.Fatalf("inspect missing file rc=%d stderr=%q", rc, stderr)
|
||||
}
|
||||
plain := filepath.Join(dir, "plain.xmp")
|
||||
if err := os.WriteFile(plain, []byte(`<x:xmpmeta xmlns:x="adobe:ns:meta/"></x:xmpmeta>`), 0644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_, stderr, rc = runWith([]string{"sidecar", "inspect", plain}, &mockBridge{})
|
||||
if rc != exitErr || !strings.Contains(stderr, "no photoscli metadata") {
|
||||
t.Fatalf("inspect no metadata rc=%d stderr=%q", rc, stderr)
|
||||
}
|
||||
bad := inspectXMP([]byte(`<x:xmpmeta><rdf:RDF>`))
|
||||
if len(bad) != 0 {
|
||||
t.Fatalf("expected empty metadata on malformed XML, got %#v", bad)
|
||||
}
|
||||
stderrBuf := &bytes.Buffer{}
|
||||
if rc := cmdSidecar([]string{"inspect", path, "--json"}, errWriter{}, stderrBuf); rc != exitErr || !strings.Contains(stderrBuf.String(), "error:") {
|
||||
t.Fatalf("expected json encoder error rc=%d stderr=%q", rc, stderrBuf.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestXMPSidecarHelpers(t *testing.T) {
|
||||
if got := sidecarPath("/tmp/IMG_0001.HEIC"); got != "/tmp/IMG_0001.xmp" {
|
||||
t.Fatalf("sidecar path = %q", got)
|
||||
|
||||
Reference in New Issue
Block a user