package org_tangled
import (
"encoding/json"
"reflect"
"strings"
"testing"
lexutil "github.com/bluesky-social/indigo/lex/util"
)
func TestCiDefsPipelineTriggerJSON(t *testing.T) {
cases := []struct {
name string
trigger CiDefs_Pipeline_Trigger
typeID string
}{
{"push", CiDefs_Pipeline_Trigger{EventPush: &EventPush{}}, EventPushNSID},
{"pull_request", CiDefs_Pipeline_Trigger{EventPullRequest: &EventPullRequest{}}, EventPullRequestNSID},
{"manual", CiDefs_Pipeline_Trigger{CiTriggerManual: &CiTriggerManual{Repo: "did:plc:repo", Commit: strings.Repeat("1", 40)}}, CiTriggerManualNSID},
{"schedule", CiDefs_Pipeline_Trigger{CiTriggerSchedule: &CiTriggerSchedule{Repo: "did:plc:repo", Commit: strings.Repeat("1", 40)}}, CiTriggerScheduleNSID},
}
for _, test := range cases {
t.Run(test.name, func(t *testing.T) {
encoded, err := json.Marshal(&test.trigger)
if err != nil {
t.Fatal(err)
}
if !strings.Contains(string(encoded), `"$type":"`+test.typeID+`"`) {
t.Fatalf("trigger JSON = %s", encoded)
}
})
}
}
func TestCiDefsPipelineTriggerRoundTripsUnknownType(t *testing.T) {
original := []byte(`{"$type":"org.tangled.event.future","detail":{"value":1}}`)
var trigger CiDefs_Pipeline_Trigger
if err := json.Unmarshal(original, &trigger); err != nil {
t.Fatal(err)
}
if trigger.EventPush != nil || trigger.EventPullRequest != nil || trigger.CiTriggerManual != nil || trigger.CiTriggerSchedule != nil || trigger.Unknown == nil {
t.Fatalf("unknown trigger = %+v", trigger)
}
encoded, err := json.Marshal(&trigger)
if err != nil {
t.Fatal(err)
}
var originalValue, encodedValue any
if err := json.Unmarshal(original, &originalValue); err != nil {
t.Fatal(err)
}
if err := json.Unmarshal(encoded, &encodedValue); err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(encodedValue, originalValue) {
t.Fatalf("round trip = %s, want %s", encoded, original)
}
}
func TestCanonicalTriggerTypesAreRegistered(t *testing.T) {
for _, typeID := range []string{EventPushNSID, EventPullRequestNSID, CiTriggerManualNSID, CiTriggerScheduleNSID} {
var decoded lexutil.LexiconTypeDecoder
if err := json.Unmarshal([]byte(`{"$type":"`+typeID+`","repo":"did:plc:repo","commit":"1111111111111111111111111111111111111111"}`), &decoded); err != nil {
t.Fatalf("decode %s: %v", typeID, err)
}
if decoded.Val == nil {
t.Fatalf("decode %s returned no value", typeID)
}
}
}