diff --git a/hack/tools/release/notes/main_test.go b/hack/tools/release/notes/main_test.go index 7bc1405720c9..ab279d43a9c1 100644 --- a/hack/tools/release/notes/main_test.go +++ b/hack/tools/release/notes/main_test.go @@ -168,3 +168,138 @@ func Test_defaultBranchForNewTag(t *testing.T) { }) } } + +func Test_validateConfig(t *testing.T) { + tests := []struct { + name string + args *notesCmdConfig + wantErr bool + errorMessage string + }{ + { + name: "Missing fromRef or newTag when branch is set only", + args: ¬esCmdConfig{ + branch: "main", + }, + wantErr: true, + errorMessage: "at least one of --from or --release need to be set", + }, + { + name: "Missing branch or newTag when fromRef is set only", + args: ¬esCmdConfig{ + fromRef: "ref1/tags", + }, + wantErr: true, + errorMessage: "at least one of --branch or --release need to be set", + }, + { + name: "Invalid fromRef", + args: ¬esCmdConfig{ + fromRef: "invalid", + branch: "main", + }, + wantErr: true, + errorMessage: "invalid ref invalid: must follow [type]/[value]", + }, + { + name: "Invalid toRef", + args: ¬esCmdConfig{ + toRef: "invalid", + branch: "main", + fromRef: "ref1/tags", + }, + wantErr: true, + errorMessage: "invalid ref invalid: must follow [type]/[value]", + }, + { + name: "Valid fromRef, toRef, and newTag", + args: ¬esCmdConfig{ + fromRef: "ref1/tags", + toRef: "ref2/tags", + newTag: "v1.0.0", + }, + wantErr: false, + }, + { + name: "Missing branch when newTag is set", + args: ¬esCmdConfig{ + branch: "main", + toRef: "ref2/tags", + newTag: "v1.0.0", + }, + wantErr: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := validateConfig(tt.args) + if tt.wantErr { + if err == nil || err.Error() != tt.errorMessage { + t.Errorf("expected error '%s', got '%v'", tt.errorMessage, err) + } + } else if err != nil { + t.Errorf("unexpected error: %v", err) + } + }) + } +} + +func Test_computeConfigDefaults(t *testing.T) { + tests := []struct { + name string + args *notesCmdConfig + want *notesCmdConfig + wantErr bool + }{ + { + name: "Calculate fromRef when newTag is a new minor release and toRef", + args: ¬esCmdConfig{ + branch: "develop", + newTag: "v1.1.0", + }, + want: ¬esCmdConfig{ + fromRef: "tags/v1.0.0", + branch: "develop", + toRef: "heads/develop", + newTag: "v1.1.0", + }, + wantErr: false, + }, + { + name: "Calculate fromRef when newTag is not a new minor release, branch and toRef", + args: ¬esCmdConfig{ + newTag: "v1.1.3", + }, + want: ¬esCmdConfig{ + fromRef: "tags/v1.1.2", + branch: "release-1.1", + toRef: "heads/release-1.1", + newTag: "v1.1.3", + }, + wantErr: false, + }, + { + name: "Fail when newTag is not a valid semver", + args: ¬esCmdConfig{ + newTag: "invalid-tag", + }, + want: nil, + wantErr: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := computeConfigDefaults(tt.args) + g := NewWithT(t) + if tt.wantErr { + g.Expect(err).To(HaveOccurred()) + g.Expect(err.Error()).To(ContainSubstring("invalid --release, is not a semver:")) + } else { + g.Expect(err).ToNot(HaveOccurred()) + g.Expect(tt.args.fromRef).To(Equal(tt.want.fromRef)) + g.Expect(tt.args.branch).To(Equal(tt.want.branch)) + g.Expect(tt.args.toRef).To(Equal(tt.want.toRef)) + } + }) + } +}