package pipeline import ( "slices" "testing" "time" "tangled.org/core/api/tangled" "tangled.org/core/spindle/models" ) func TestFromTangledPreservesDeclaredDefinitionMetadata(t *testing.T) { target := "did:plc:target" source := "did:plc:source" raw := tangled.Pipeline{ TriggerMetadata: &tangled.Pipeline_TriggerMetadata{ Kind: "push", Repo: &tangled.Pipeline_TriggerRepo{RepoDid: &target}, SourceRepo: &source, Push: &tangled.Pipeline_PushTriggerData{NewSha: "1111111111111111111111111111111111111111", Ref: "refs/heads/main"}, }, Workflows: []*tangled.Pipeline_Workflow{{ Name: "ci.yml", Raw: `when: - event: [pull_request, push, custom.example.trigger] `, }}, } record, err := FromTangled(models.PipelineId("pipeline"), time.Unix(1, 0), raw) if err != nil { t.Fatal(err) } definition := record.Workflows[0].Definition wantTriggers := []string{TriggerNSIDPullRequest, TriggerNSIDPush, "custom.example.trigger"} if !slices.Equal(definition.Triggers, wantTriggers) { t.Fatalf("triggers = %v, want %v", definition.Triggers, wantTriggers) } if definition.Hash != nil { t.Fatalf("hash was invented: %q", *definition.Hash) } file := definition.Source.File if file == nil || file.Repo != source || file.Commit != record.Commit || file.Path != ".tangled/workflows/ci.yml" { t.Fatalf("file source = %+v", file) } } func TestFromTangledDoesNotInferDefinitionTriggers(t *testing.T) { repo := "did:plc:repo" record, err := FromTangled(models.PipelineId("pipeline"), time.Now(), tangled.Pipeline{ TriggerMetadata: &tangled.Pipeline_TriggerMetadata{ Kind: "manual", Repo: &tangled.Pipeline_TriggerRepo{RepoDid: &repo}, Manual: &tangled.Pipeline_ManualTriggerData{Sha: "1111111111111111111111111111111111111111"}, }, Workflows: []*tangled.Pipeline_Workflow{{Name: "ci.yml", Raw: `engine: nixery `}}, }) if err != nil { t.Fatal(err) } triggers := record.Workflows[0].Definition.Triggers if triggers == nil || len(triggers) != 0 { t.Fatalf("implicit triggers = %#v", triggers) } }