github.com/nektos/act@v0.2.63/pkg/model/planner_test.go (about)

     1  package model
     2  
     3  import (
     4  	"path/filepath"
     5  	"testing"
     6  
     7  	log "github.com/sirupsen/logrus"
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  type WorkflowPlanTest struct {
    12  	workflowPath      string
    13  	errorMessage      string
    14  	noWorkflowRecurse bool
    15  }
    16  
    17  func TestPlanner(t *testing.T) {
    18  	log.SetLevel(log.DebugLevel)
    19  
    20  	tables := []WorkflowPlanTest{
    21  		{"invalid-job-name/invalid-1.yml", "workflow is not valid. 'invalid-job-name-1': Job name 'invalid-JOB-Name-v1.2.3-docker_hub' is invalid. Names must start with a letter or '_' and contain only alphanumeric characters, '-', or '_'", false},
    22  		{"invalid-job-name/invalid-2.yml", "workflow is not valid. 'invalid-job-name-2': Job name '1234invalid-JOB-Name-v123-docker_hub' is invalid. Names must start with a letter or '_' and contain only alphanumeric characters, '-', or '_'", false},
    23  		{"invalid-job-name/valid-1.yml", "", false},
    24  		{"invalid-job-name/valid-2.yml", "", false},
    25  		{"empty-workflow", "unable to read workflow 'push.yml': file is empty: EOF", false},
    26  		{"nested", "unable to read workflow 'fail.yml': file is empty: EOF", false},
    27  		{"nested", "", true},
    28  	}
    29  
    30  	workdir, err := filepath.Abs("testdata")
    31  	assert.NoError(t, err, workdir)
    32  	for _, table := range tables {
    33  		fullWorkflowPath := filepath.Join(workdir, table.workflowPath)
    34  		_, err = NewWorkflowPlanner(fullWorkflowPath, table.noWorkflowRecurse)
    35  		if table.errorMessage == "" {
    36  			assert.NoError(t, err, "WorkflowPlanner should exit without any error")
    37  		} else {
    38  			assert.EqualError(t, err, table.errorMessage)
    39  		}
    40  	}
    41  }
    42  
    43  func TestWorkflow(t *testing.T) {
    44  	log.SetLevel(log.DebugLevel)
    45  
    46  	workflow := Workflow{
    47  		Jobs: map[string]*Job{
    48  			"valid_job": {
    49  				Name: "valid_job",
    50  			},
    51  		},
    52  	}
    53  
    54  	// Check that a valid job id returns non-error
    55  	result, err := createStages(&workflow, "valid_job")
    56  	assert.Nil(t, err)
    57  	assert.NotNil(t, result)
    58  }