forgejo-runner

git clone git://git.lin.moe/forgejo-runner.git

 1// Copyright 2023 The Gitea Authors. All rights reserved.
 2// SPDX-License-Identifier: MIT
 3
 4package run
 5
 6import (
 7	"testing"
 8
 9	runnerv1 "code.gitea.io/actions-proto-go/runner/v1"
10	"github.com/nektos/act/pkg/model"
11	"github.com/stretchr/testify/require"
12	"gotest.tools/v3/assert"
13)
14
15func Test_generateWorkflow(t *testing.T) {
16	type args struct {
17		task *runnerv1.Task
18	}
19	tests := []struct {
20		name    string
21		args    args
22		assert  func(t *testing.T, wf *model.Workflow, err error)
23		want1   string
24		wantErr bool
25	}{
26		{
27			name: "has needs",
28			args: args{
29				task: &runnerv1.Task{
30					WorkflowPayload: []byte(`
31name: Build and deploy
32on: push
33
34jobs:
35  job9:
36    needs: build
37    runs-on: ubuntu-latest
38    steps:
39      - uses: actions/checkout@v3
40      - run: ./deploy --build ${{ needs.job1.outputs.output1 }}
41      - run: ./deploy --build ${{ needs.job2.outputs.output2 }}
42`),
43					Needs: map[string]*runnerv1.TaskNeed{
44						"job1": {
45							Outputs: map[string]string{
46								"output1": "output1 value",
47							},
48							Result: runnerv1.Result_RESULT_SUCCESS,
49						},
50						"job2": {
51							Outputs: map[string]string{
52								"output2": "output2 value",
53							},
54							Result: runnerv1.Result_RESULT_SUCCESS,
55						},
56					},
57				},
58			},
59			assert: func(t *testing.T, wf *model.Workflow, err error) {
60				assert.DeepEqual(t, wf.GetJob("job9").Needs(), []string{"job1", "job2"})
61			},
62			want1:   "job9",
63			wantErr: false,
64		},
65		{
66			name: "valid YAML syntax in top level env but wrong value type",
67			args: args{
68				task: &runnerv1.Task{
69					WorkflowPayload: []byte(`
70on: push
71
72env:
73  value: {{ }}
74`),
75				},
76			},
77			assert: func(t *testing.T, wf *model.Workflow, err error) {
78				require.Nil(t, wf)
79				assert.ErrorContains(t, err, "cannot unmarshal")
80			},
81			wantErr: true,
82		},
83	}
84	for _, tt := range tests {
85		t.Run(tt.name, func(t *testing.T) {
86			got, got1, err := generateWorkflow(tt.args.task)
87			if tt.wantErr {
88				require.Error(t, err)
89			} else {
90				require.NoError(t, err)
91				assert.Equal(t, got1, tt.want1)
92			}
93			tt.assert(t, got, err)
94		})
95	}
96}