forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
1package workflow 2 3import ( 4 "strings" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "tangled.sh/tangled.sh/core/api/tangled" 9) 10 11var trigger = tangled.Pipeline_TriggerMetadata{ 12 Kind: TriggerKindPush, 13 Push: &tangled.Pipeline_PushTriggerData{ 14 Ref: "refs/heads/main", 15 OldSha: strings.Repeat("0", 40), 16 NewSha: strings.Repeat("f", 40), 17 }, 18} 19 20var when = []Constraint{ 21 { 22 Event: []string{"push"}, 23 Branch: []string{"main"}, 24 }, 25} 26 27func TestCompileWorkflow_MatchingWorkflowWithSteps(t *testing.T) { 28 wf := Workflow{ 29 Name: ".tangled/workflows/test.yml", 30 When: when, 31 Steps: []Step{ 32 {Name: "Test", Command: "go test ./..."}, 33 }, 34 CloneOpts: CloneOpts{}, // default true 35 } 36 37 c := Compiler{Trigger: trigger} 38 cp := c.Compile([]Workflow{wf}) 39 40 assert.Len(t, cp.Workflows, 1) 41 assert.Equal(t, wf.Name, cp.Workflows[0].Name) 42 assert.False(t, cp.Workflows[0].Clone.Skip) 43 assert.False(t, c.Diagnostics.IsErr()) 44} 45 46func TestCompileWorkflow_EmptySteps(t *testing.T) { 47 wf := Workflow{ 48 Name: ".tangled/workflows/empty.yml", 49 When: when, 50 Steps: []Step{}, // no steps 51 } 52 53 c := Compiler{Trigger: trigger} 54 cp := c.Compile([]Workflow{wf}) 55 56 assert.Len(t, cp.Workflows, 0) 57 assert.Len(t, c.Diagnostics.Warnings, 1) 58 assert.Equal(t, WorkflowSkipped, c.Diagnostics.Warnings[0].Type) 59} 60 61func TestCompileWorkflow_TriggerMismatch(t *testing.T) { 62 wf := Workflow{ 63 Name: ".tangled/workflows/mismatch.yml", 64 When: []Constraint{ 65 { 66 Event: []string{"push"}, 67 Branch: []string{"master"}, // different branch 68 }, 69 }, 70 Steps: []Step{ 71 {Name: "Lint", Command: "golint ./..."}, 72 }, 73 } 74 75 c := Compiler{Trigger: trigger} 76 cp := c.Compile([]Workflow{wf}) 77 78 assert.Len(t, cp.Workflows, 0) 79 assert.Len(t, c.Diagnostics.Warnings, 1) 80 assert.Equal(t, WorkflowSkipped, c.Diagnostics.Warnings[0].Type) 81} 82 83func TestCompileWorkflow_CloneFalseWithShallowTrue(t *testing.T) { 84 wf := Workflow{ 85 Name: ".tangled/workflows/clone_skip.yml", 86 When: when, 87 Steps: []Step{ 88 {Name: "Skip", Command: "echo skip"}, 89 }, 90 CloneOpts: CloneOpts{ 91 Skip: true, 92 Depth: 1, 93 }, // false 94 } 95 96 c := Compiler{Trigger: trigger} 97 cp := c.Compile([]Workflow{wf}) 98 99 assert.Len(t, cp.Workflows, 1) 100 assert.True(t, cp.Workflows[0].Clone.Skip) 101 assert.Len(t, c.Diagnostics.Warnings, 1) 102 assert.Equal(t, InvalidConfiguration, c.Diagnostics.Warnings[0].Type) 103}