1// SPDX-License-Identifier: AGPL-3.0-or-later
2
3package usecase_test
4
5import (
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9
10 "bnema.dev/ermite/internal/usecase"
11)
12
13func TestMatchWorkflowRun(t *testing.T) {
14 def := parsePR(t, " workflow_run:\n workflows: [ci, 'Build and test']\n")
15 assert.True(t, usecase.MatchWorkflowRun(def, "ci", "completed", "main"))
16 assert.True(t, usecase.MatchWorkflowRun(def, "Build and test", "requested", "x/y"), "no types: both activities")
17 assert.False(t, usecase.MatchWorkflowRun(def, "other", "completed", "main"), "the name must be listed")
18 assert.False(t, usecase.MatchWorkflowRun(def, "CI", "completed", "main"), "names are exact")
19 assert.False(t, usecase.MatchWorkflowRun(def, "ci", "in_progress", "main"), "ermite has no in_progress activity")
20 assert.False(t, usecase.MatchWorkflowRun(parsePR(t, " push:\n"), "ci", "completed", "main"))
21
22 typed := parsePR(t, " workflow_run:\n workflows: [ci]\n types: [completed]\n")
23 assert.True(t, usecase.MatchWorkflowRun(typed, "ci", "completed", "main"))
24 assert.False(t, usecase.MatchWorkflowRun(typed, "ci", "requested", "main"))
25
26 branches := parsePR(t, " workflow_run:\n workflows: [ci]\n branches: [main, 'release/**']\n")
27 assert.True(t, usecase.MatchWorkflowRun(branches, "ci", "completed", "main"))
28 assert.True(t, usecase.MatchWorkflowRun(branches, "ci", "completed", "release/1.0"))
29 assert.False(t, usecase.MatchWorkflowRun(branches, "ci", "completed", "feature"), "the head branch of the triggering run is filtered")
30
31 ignore := parsePR(t, " workflow_run:\n workflows: [ci]\n branches-ignore: [wip/**]\n")
32 assert.True(t, usecase.MatchWorkflowRun(ignore, "ci", "completed", "main"))
33 assert.False(t, usecase.MatchWorkflowRun(ignore, "ci", "completed", "wip/x"))
34}