avianz_types_test.go
package calls
import (
"encoding/json"
"testing"
)
func TestAviaNZMetaJSONRoundTrip(t *testing.T) {
reviewer := "alice"
tests := []struct {
name string
in AviaNZMeta
}{
{"no reviewer", AviaNZMeta{Operator: "bob", Duration: 60.5}},
{"with reviewer", AviaNZMeta{Operator: "bob", Reviewer: &reviewer, Duration: 0}},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
b, err := json.Marshal(tt.in)
if err != nil {
t.Fatalf("marshal: %v", err)
}
var out AviaNZMeta
if err := json.Unmarshal(b, &out); err != nil {
t.Fatalf("unmarshal: %v", err)
}
if out.Operator != tt.in.Operator || out.Duration != tt.in.Duration {
t.Errorf("operator/duration mismatch: got %+v want %+v", out, tt.in)
}
if (out.Reviewer == nil) != (tt.in.Reviewer == nil) {
t.Errorf("reviewer nil mismatch: got %v want %v", out.Reviewer, tt.in.Reviewer)
}
if out.Reviewer != nil && tt.in.Reviewer != nil && *out.Reviewer != *tt.in.Reviewer {
t.Errorf("reviewer mismatch: got %q want %q", *out.Reviewer, *tt.in.Reviewer)
}
})
}
}
func TestAviaNZMetaOmitsNilReviewer(t *testing.T) {
b, err := json.Marshal(AviaNZMeta{Operator: "bob", Duration: 1})
if err != nil {
t.Fatalf("marshal: %v", err)
}
if got := string(b); got != `{"Operator":"bob","Duration":1}` {
t.Errorf("unexpected JSON: %s", got)
}
}
func TestAviaNZLabelJSONRoundTrip(t *testing.T) {
in := AviaNZLabel{Species: "Tomtit", Certainty: 100, Filter: "kiwi.txt"}
b, err := json.Marshal(in)
if err != nil {
t.Fatalf("marshal: %v", err)
}
var out AviaNZLabel
if err := json.Unmarshal(b, &out); err != nil {
t.Fatalf("unmarshal: %v", err)
}
if out != in {
t.Errorf("got %+v want %+v", out, in)
}
}
func TestAviaNZSegmentJSONRoundTrip(t *testing.T) {
raw := `[1.5,2.5,500,8000,[{"species":"Bellbird","certainty":80,"filter":"f.txt"}]]`
var seg AviaNZSegment
if err := json.Unmarshal([]byte(raw), &seg); err != nil {
t.Fatalf("unmarshal: %v", err)
}
start, ok := seg[0].(float64)
if !ok || start != 1.5 {
t.Errorf("start: got %v (%T), want 1.5", seg[0], seg[0])
}
end, ok := seg[1].(float64)
if !ok || end != 2.5 {
t.Errorf("end: got %v (%T), want 2.5", seg[1], seg[1])
}
labels, ok := seg[4].([]any)
if !ok || len(labels) != 1 {
t.Fatalf("labels: got %v (%T)", seg[4], seg[4])
}
b, err := json.Marshal(seg)
if err != nil {
t.Fatalf("marshal: %v", err)
}
var seg2 AviaNZSegment
if err := json.Unmarshal(b, &seg2); err != nil {
t.Fatalf("re-unmarshal: %v", err)
}
}