@@ -168,3 +168,138 @@ func Test_defaultBranchForNewTag(t *testing.T) {
168168 })
169169 }
170170}
171+
172+ func Test_validateConfig (t * testing.T ) {
173+ tests := []struct {
174+ name string
175+ args * notesCmdConfig
176+ wantErr bool
177+ errorMessage string
178+ }{
179+ {
180+ name : "Missing fromRef or newTag when branch is set only" ,
181+ args : & notesCmdConfig {
182+ branch : "main" ,
183+ },
184+ wantErr : true ,
185+ errorMessage : "at least one of --from or --release need to be set" ,
186+ },
187+ {
188+ name : "Missing branch or newTag when fromRef is set only" ,
189+ args : & notesCmdConfig {
190+ fromRef : "ref1/tags" ,
191+ },
192+ wantErr : true ,
193+ errorMessage : "at least one of --branch or --release need to be set" ,
194+ },
195+ {
196+ name : "Invalid fromRef" ,
197+ args : & notesCmdConfig {
198+ fromRef : "invalid" ,
199+ branch : "main" ,
200+ },
201+ wantErr : true ,
202+ errorMessage : "invalid ref invalid: must follow [type]/[value]" ,
203+ },
204+ {
205+ name : "Invalid toRef" ,
206+ args : & notesCmdConfig {
207+ toRef : "invalid" ,
208+ branch : "main" ,
209+ fromRef : "ref1/tags" ,
210+ },
211+ wantErr : true ,
212+ errorMessage : "invalid ref invalid: must follow [type]/[value]" ,
213+ },
214+ {
215+ name : "Valid fromRef, toRef, and newTag" ,
216+ args : & notesCmdConfig {
217+ fromRef : "ref1/tags" ,
218+ toRef : "ref2/tags" ,
219+ newTag : "v1.0.0" ,
220+ },
221+ wantErr : false ,
222+ },
223+ {
224+ name : "Missing branch when newTag is set" ,
225+ args : & notesCmdConfig {
226+ branch : "main" ,
227+ toRef : "ref2/tags" ,
228+ newTag : "v1.0.0" ,
229+ },
230+ wantErr : false ,
231+ },
232+ }
233+ for _ , tt := range tests {
234+ t .Run (tt .name , func (t * testing.T ) {
235+ err := validateConfig (tt .args )
236+ if tt .wantErr {
237+ if err == nil || err .Error () != tt .errorMessage {
238+ t .Errorf ("expected error '%s', got '%v'" , tt .errorMessage , err )
239+ }
240+ } else if err != nil {
241+ t .Errorf ("unexpected error: %v" , err )
242+ }
243+ })
244+ }
245+ }
246+
247+ func Test_computeConfigDefaults (t * testing.T ) {
248+ tests := []struct {
249+ name string
250+ args * notesCmdConfig
251+ want * notesCmdConfig
252+ wantErr bool
253+ }{
254+ {
255+ name : "Calculate fromRef when newTag is a new minor release and toRef" ,
256+ args : & notesCmdConfig {
257+ branch : "develop" ,
258+ newTag : "v1.1.0" ,
259+ },
260+ want : & notesCmdConfig {
261+ fromRef : "tags/v1.0.0" ,
262+ branch : "develop" ,
263+ toRef : "heads/develop" ,
264+ newTag : "v1.1.0" ,
265+ },
266+ wantErr : false ,
267+ },
268+ {
269+ name : "Calculate fromRef when newTag is not a new minor release, branch and toRef" ,
270+ args : & notesCmdConfig {
271+ newTag : "v1.1.3" ,
272+ },
273+ want : & notesCmdConfig {
274+ fromRef : "tags/v1.1.2" ,
275+ branch : "release-1.1" ,
276+ toRef : "heads/release-1.1" ,
277+ newTag : "v1.1.3" ,
278+ },
279+ wantErr : false ,
280+ },
281+ {
282+ name : "Fail when newTag is not a valid semver" ,
283+ args : & notesCmdConfig {
284+ newTag : "invalid-tag" ,
285+ },
286+ want : nil ,
287+ wantErr : true ,
288+ },
289+ }
290+ for _ , tt := range tests {
291+ t .Run (tt .name , func (t * testing.T ) {
292+ err := computeConfigDefaults (tt .args )
293+ g := NewWithT (t )
294+ if tt .wantErr {
295+ g .Expect (err ).To (HaveOccurred ())
296+ g .Expect (err .Error ()).To (ContainSubstring ("invalid --release, is not a semver:" ))
297+ } else {
298+ g .Expect (err ).ToNot (HaveOccurred ())
299+ g .Expect (tt .args .fromRef ).To (Equal (tt .want .fromRef ))
300+ g .Expect (tt .args .branch ).To (Equal (tt .want .branch ))
301+ g .Expect (tt .args .toRef ).To (Equal (tt .want .toRef ))
302+ }
303+ })
304+ }
305+ }
0 commit comments