pkg/testutil/bldr/steps_context_builder.go (60 lines of code) (raw):
package bldr
import (
"testing"
"github.com/stretchr/testify/require"
"google.golang.org/protobuf/types/known/structpb"
"gitlab.com/gitlab-org/step-runner/pkg/runner"
"gitlab.com/gitlab-org/step-runner/proto"
)
type StepsContextBuilder struct {
t *testing.T
globalCtx *runner.GlobalContext
env map[string]string
inputs map[string]*structpb.Value
outputFile *runner.StepFile
exportFile *runner.StepFile
stepResults map[string]*proto.StepResult
}
func StepsContext(t *testing.T) *StepsContextBuilder {
outputFile, err := runner.NewStepFileInDir(t.TempDir())
require.NoError(t, err)
exportFile, err := runner.NewStepFileInDir(t.TempDir())
require.NoError(t, err)
return &StepsContextBuilder{
t: t,
globalCtx: GlobalContext().Build(),
env: map[string]string{},
inputs: map[string]*structpb.Value{},
outputFile: outputFile,
exportFile: exportFile,
stepResults: map[string]*proto.StepResult{},
}
}
func (bldr *StepsContextBuilder) WithGlobalContext(globalCtx *runner.GlobalContext) *StepsContextBuilder {
bldr.globalCtx = globalCtx
return bldr
}
func (bldr *StepsContextBuilder) WithEnv(key, value string) *StepsContextBuilder {
bldr.env[key] = value
return bldr
}
func (bldr *StepsContextBuilder) WithInput(name string, value *structpb.Value) *StepsContextBuilder {
bldr.inputs[name] = value
return bldr
}
func (bldr *StepsContextBuilder) WithStepResults(stepResults map[string]*proto.StepResult) *StepsContextBuilder {
bldr.stepResults = stepResults
return bldr
}
func (bldr *StepsContextBuilder) Build() *runner.StepsContext {
stepsCtx, err := runner.NewStepsContext(
bldr.globalCtx,
".",
bldr.inputs,
runner.NewEnvironment(bldr.env),
runner.WithStepsCtxOutputFile(bldr.outputFile),
runner.WithStepsCtxExportFile(bldr.exportFile),
runner.WithStepsCtxStepResults(bldr.stepResults))
require.NoError(bldr.t, err)
return stepsCtx
}