6868}
6969
7070func TestCmdStart_BackwardCompatibility (t * testing.T ) {
71- t .Run ("ShouldAcceptParametersAfter " , func (t * testing.T ) {
71+ t .Run ("ShouldRejectParametersAfterWithoutSeparator " , func (t * testing.T ) {
7272 th := test .SetupCommand (t )
7373 dagContent := `
7474params: KEY1=default1 KEY2=default2
@@ -78,12 +78,11 @@ steps:
7878`
7979 dagFile := th .CreateDAGFile (t , "test-params.yaml" , dagContent )
8080
81- cli := cmd .Start ()
82- cli .SetArgs ([]string {dagFile , "--" , "KEY1=value1" , "KEY2=value2" })
83-
84- // Execute will fail due to missing context setup, but we're testing
85- // that the command accepts the arguments
86- _ = cli .Execute ()
81+ err := th .RunCommandWithError (t , cmd .Start (), test.CmdTest {
82+ Args : []string {"start" , dagFile , "KEY1=value1" , "KEY2=value2" },
83+ })
84+ require .Error (t , err )
85+ require .Contains (t , err .Error (), "use '--' before parameters" )
8786 })
8887
8988 t .Run ("ShouldAcceptParamsFlag" , func (t * testing.T ) {
@@ -105,6 +104,95 @@ steps:
105104 })
106105}
107106
107+ func TestCmdStart_PositionalParamValidation (t * testing.T ) {
108+ th := test .SetupCommand (t )
109+
110+ dagFile := th .CreateDAGFile (t , "test-positional-params.yaml" , `
111+ params: "p1 p2"
112+ steps:
113+ - name: step1
114+ command: echo $1 $2
115+ ` )
116+ dagNoParamsFile := th .CreateDAGFile (t , "test-no-params.yaml" , `
117+ steps:
118+ - name: step1
119+ command: echo $1
120+ ` )
121+
122+ t .Run ("AllowsTooFewAfterDash" , func (t * testing.T ) {
123+ err := th .RunCommandWithError (t , cmd .Start (), test.CmdTest {
124+ Args : []string {"start" , dagFile , "--" , "only-one" },
125+ })
126+ require .NoError (t , err )
127+ })
128+
129+ t .Run ("RejectsTooManyAfterDash" , func (t * testing.T ) {
130+ err := th .RunCommandWithError (t , cmd .Start (), test.CmdTest {
131+ Args : []string {"start" , dagFile , "--" , "one" , "two" , "three" },
132+ })
133+ require .Error (t , err )
134+ require .Contains (t , err .Error (), "too many positional params: expected at most 2, got 3" )
135+ })
136+
137+ t .Run ("AllowsTooFewWithParamsFlag" , func (t * testing.T ) {
138+ err := th .RunCommandWithError (t , cmd .Start (), test.CmdTest {
139+ Args : []string {"start" , "--params" , "only-one" , dagFile },
140+ })
141+ require .NoError (t , err )
142+ })
143+
144+ t .Run ("AllowsNamedOnlyWithPositionalDefaults" , func (t * testing.T ) {
145+ err := th .RunCommandWithError (t , cmd .Start (), test.CmdTest {
146+ Args : []string {"start" , "--params" , "KEY1=value1 KEY2=value2" , dagFile },
147+ })
148+ require .NoError (t , err )
149+ })
150+
151+ t .Run ("AllowsJSONParamsWithoutPositionalValidation" , func (t * testing.T ) {
152+ err := th .RunCommandWithError (t , cmd .Start (), test.CmdTest {
153+ Args : []string {"start" , "--params" , `{"KEY":"value"}` , dagFile },
154+ })
155+ require .NoError (t , err )
156+ })
157+
158+ t .Run ("AllowsJSONAfterDashWithoutPositionalValidation" , func (t * testing.T ) {
159+ err := th .RunCommandWithError (t , cmd .Start (), test.CmdTest {
160+ Args : []string {"start" , dagFile , "--" , `{"KEY":"value"}` },
161+ })
162+ require .NoError (t , err )
163+ })
164+
165+ t .Run ("AllowsNamedPairsWhenNoParamsDeclared" , func (t * testing.T ) {
166+ err := th .RunCommandWithError (t , cmd .Start (), test.CmdTest {
167+ Args : []string {"start" , dagNoParamsFile , "--" , "key1=value1" , "key2=value2" },
168+ })
169+ require .NoError (t , err )
170+ })
171+
172+ t .Run ("AllowsPositionalWhenNoParamsDeclared" , func (t * testing.T ) {
173+ err := th .RunCommandWithError (t , cmd .Start (), test.CmdTest {
174+ Args : []string {"start" , dagNoParamsFile , "--" , "success" },
175+ })
176+ require .NoError (t , err )
177+ })
178+ }
179+
180+ func TestCmdStart_NamedParamsIgnorePositionalCount (t * testing.T ) {
181+ th := test .SetupCommand (t )
182+
183+ dagFile := th .CreateDAGFile (t , "test-named-params.yaml" , `
184+ params: KEY1=default1 KEY2=default2
185+ steps:
186+ - name: step1
187+ command: echo $KEY1 $KEY2
188+ ` )
189+
190+ err := th .RunCommandWithError (t , cmd .Start (), test.CmdTest {
191+ Args : []string {"start" , "--params" , "KEY1=value1 KEY2=value2" , dagFile },
192+ })
193+ require .NoError (t , err )
194+ }
195+
108196func TestCmdStart_FromRunID (t * testing.T ) {
109197 t .Run ("ReschedulesWithStoredParameters" , func (t * testing.T ) {
110198 th := test .SetupCommand (t )
0 commit comments