67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
package dream
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
)
|
|
|
|
func TestReportJSONTags(t *testing.T) {
|
|
r := Report{
|
|
Merged: 1,
|
|
Deduped: 2,
|
|
PathsCleaned: 3,
|
|
Pruned: 4,
|
|
Distilled: 5,
|
|
BytesBefore: 100,
|
|
BytesAfter: 80,
|
|
FilesBefore: 10,
|
|
FilesAfter: 9,
|
|
DryRun: true,
|
|
Notes: []string{"pruned stale entry"},
|
|
}
|
|
r.Reconciled.Indexed = 6
|
|
r.Reconciled.Pruned = 7
|
|
|
|
data, err := json.Marshal(r)
|
|
if err != nil {
|
|
t.Fatalf("marshal: %v", err)
|
|
}
|
|
var m map[string]any
|
|
if err := json.Unmarshal(data, &m); err != nil {
|
|
t.Fatalf("unmarshal: %v", err)
|
|
}
|
|
for _, key := range []string{
|
|
"merged", "deduped", "paths_cleaned", "pruned", "distilled",
|
|
"bytes_before", "bytes_after", "files_before", "files_after",
|
|
"dry_run", "notes", "reconciled",
|
|
} {
|
|
if _, ok := m[key]; !ok {
|
|
t.Errorf("missing JSON key %q in %s", key, data)
|
|
}
|
|
}
|
|
rec, ok := m["reconciled"].(map[string]any)
|
|
if !ok {
|
|
t.Fatalf("reconciled not an object: %v", m["reconciled"])
|
|
}
|
|
if _, ok := rec["indexed"]; !ok {
|
|
t.Errorf("reconciled.indexed missing: %v", rec)
|
|
}
|
|
if _, ok := rec["pruned"]; !ok {
|
|
t.Errorf("reconciled.pruned missing: %v", rec)
|
|
}
|
|
}
|
|
|
|
func TestReportZeroValueOmitsNotes(t *testing.T) {
|
|
data, err := json.Marshal(Report{})
|
|
if err != nil {
|
|
t.Fatalf("marshal: %v", err)
|
|
}
|
|
var m map[string]any
|
|
if err := json.Unmarshal(data, &m); err != nil {
|
|
t.Fatalf("unmarshal: %v", err)
|
|
}
|
|
if _, ok := m["notes"]; ok {
|
|
t.Errorf("empty notes should be omitted, got %s", data)
|
|
}
|
|
}
|