1// Copyright 2023 The Gitea Authors. All rights reserved.2// SPDX-License-Identifier: MIT34package run56import (7 "testing"89 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)1415func Test_generateWorkflow(t *testing.T) {16 type args struct {17 task *runnerv1.Task18 }19 tests := []struct {20 name string21 args args22 assert func(t *testing.T, wf *model.Workflow, err error)23 want1 string24 wantErr bool25 }{26 {27 name: "has needs",28 args: args{29 task: &runnerv1.Task{30 WorkflowPayload: []byte(`31name: Build and deploy32on: push3334jobs:35 job9:36 needs: build37 runs-on: ubuntu-latest38 steps:39 - uses: actions/checkout@v340 - 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: push7172env: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}