Fork channel

Create a new channel as a copy of main.

Rename channel

Rename main to:

Delete channel

Delete main? This cannot be undone.

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)
	}
}