databricks-cli/bundle/run/pipeline_options_test.go

91 lines
2.3 KiB
Go
Raw Normal View History

package run
import (
"testing"
flag "github.com/spf13/pflag"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func setupPipelineOptions(t *testing.T) (*flag.FlagSet, *PipelineOptions) {
var fs flag.FlagSet
var opts PipelineOptions
opts.Define(&fs)
return &fs, &opts
}
func TestPipelineOptionsRefreshAll(t *testing.T) {
fs, opts := setupPipelineOptions(t)
err := fs.Parse([]string{`--refresh-all`})
require.NoError(t, err)
assert.True(t, opts.RefreshAll)
}
func TestPipelineOptionsRefresh(t *testing.T) {
fs, opts := setupPipelineOptions(t)
err := fs.Parse([]string{`--refresh=arg1,arg2,arg3`})
require.NoError(t, err)
assert.Equal(t, []string{"arg1", "arg2", "arg3"}, opts.Refresh)
}
func TestPipelineOptionsFullRefreshAll(t *testing.T) {
fs, opts := setupPipelineOptions(t)
err := fs.Parse([]string{`--full-refresh-all`})
require.NoError(t, err)
assert.True(t, opts.FullRefreshAll)
}
func TestPipelineOptionsFullRefresh(t *testing.T) {
fs, opts := setupPipelineOptions(t)
err := fs.Parse([]string{`--full-refresh=arg1,arg2,arg3`})
require.NoError(t, err)
assert.Equal(t, []string{"arg1", "arg2", "arg3"}, opts.FullRefresh)
}
func TestPipelineOptionsValidateOnly(t *testing.T) {
fs, opts := setupPipelineOptions(t)
err := fs.Parse([]string{`--validate-only`})
require.NoError(t, err)
assert.True(t, opts.ValidateOnly)
}
func TestPipelineOptionsValidateSuccessWithSingleOption(t *testing.T) {
args := []string{
`--refresh-all`,
`--refresh=arg1,arg2,arg3`,
`--full-refresh-all`,
`--full-refresh=arg1,arg2,arg3`,
`--validate-only`,
}
for _, arg := range args {
fs, opts := setupPipelineOptions(t)
err := fs.Parse([]string{arg})
require.NoError(t, err)
err = opts.Validate(nil)
assert.NoError(t, err)
}
}
func TestPipelineOptionsValidateFailureWithMultipleOptions(t *testing.T) {
args := []string{
`--refresh-all`,
`--refresh=arg1,arg2,arg3`,
`--full-refresh-all`,
`--full-refresh=arg1,arg2,arg3`,
`--validate-only`,
}
for i := range args {
for j := range args {
if i == j {
continue
}
fs, opts := setupPipelineOptions(t)
err := fs.Parse([]string{args[i], args[j]})
require.NoError(t, err)
err = opts.Validate(nil)
assert.ErrorContains(t, err, "pipeline run arguments are mutually exclusive")
}
}
}