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: string(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}