From 937c24735483d0b82a1a848f8ceb0f9001ee753f Mon Sep 17 00:00:00 2001 From: Robert Kaussow Date: Mon, 11 Mar 2024 11:52:52 +0100 Subject: [PATCH] refactor: use test runs and add test case names (#61) --- docs/docs_test.go | 6 +- plugin/commit_test.go | 32 +++--- tag/semver_test.go | 220 ++++++++++++++++++++++++++------------ tag/util_test.go | 6 +- types/stringslice_test.go | 19 ++-- 5 files changed, 189 insertions(+), 94 deletions(-) diff --git a/docs/docs_test.go b/docs/docs_test.go index 3d444ae..709b688 100644 --- a/docs/docs_test.go +++ b/docs/docs_test.go @@ -80,9 +80,8 @@ func TestToMarkdownFull(t *testing.T) { } for _, tt := range tests { - want := testFileContent(t, tt.want) - t.Run(tt.name, func(t *testing.T) { + want := testFileContent(t, tt.want) got, _ := ToMarkdown(tt.app) assert.Equal(t, want, got) }) @@ -140,9 +139,8 @@ func TestToData(t *testing.T) { } for _, tt := range tests { - got := GetTemplateData(tt.app) - t.Run(tt.name, func(t *testing.T) { + got := GetTemplateData(tt.app) assert.Equal(t, tt.want, got) }) } diff --git a/plugin/commit_test.go b/plugin/commit_test.go index 6cae834..7ca1dae 100644 --- a/plugin/commit_test.go +++ b/plugin/commit_test.go @@ -59,23 +59,25 @@ func Test_currFromContext(t *testing.T) { Execute: func(_ context.Context) error { return nil }, } - got := New(options) - got.App.Action = func(ctx *cli.Context) error { - got.Metadata = MetadataFromContext(ctx) + t.Run(tt.name, func(t *testing.T) { + got := New(options) + got.App.Action = func(ctx *cli.Context) error { + got.Metadata = MetadataFromContext(ctx) - return nil - } + return nil + } - _ = got.App.Run([]string{"dummy"}) + _ = got.App.Run([]string{"dummy"}) - assert.Equal(t, got.Metadata.Curr.Message, tt.want["message"]) - assert.Equal(t, got.Metadata.Curr.Title, tt.want["title"]) - assert.Equal(t, got.Metadata.Curr.Description, tt.want["desc"]) + assert.Equal(t, got.Metadata.Curr.Message, tt.want["message"]) + assert.Equal(t, got.Metadata.Curr.Title, tt.want["title"]) + assert.Equal(t, got.Metadata.Curr.Description, tt.want["desc"]) + }) } } func TestSplitMessage(t *testing.T) { - testCases := []struct { + tests := []struct { name string message string wantTitle string @@ -113,10 +115,12 @@ func TestSplitMessage(t *testing.T) { }, } - for _, tc := range testCases { - gotTitle, gotDescription := splitMessage(tc.message) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + gotTitle, gotDescription := splitMessage(tt.message) - assert.Equal(t, tc.wantTitle, gotTitle) - assert.Equal(t, tc.wantDescription, gotDescription) + assert.Equal(t, tt.wantTitle, gotTitle) + assert.Equal(t, tt.wantDescription, gotDescription) + }) } } diff --git a/tag/semver_test.go b/tag/semver_test.go index 80e8616..bdfbb3e 100644 --- a/tag/semver_test.go +++ b/tag/semver_test.go @@ -8,95 +8,188 @@ import ( func Test_stripTagPrefix(t *testing.T) { tests := []struct { + name string before string after string }{ - {before: "refs/tags/1.0.0", after: "1.0.0"}, - {before: "refs/tags/v1.0.0", after: "1.0.0"}, - {before: "v1.0.0", after: "1.0.0"}, + {name: "strip ref", before: "refs/tags/1.0.0", after: "1.0.0"}, + {name: "strip ref and version prefix", before: "refs/tags/v1.0.0", after: "1.0.0"}, + {name: "strip version prefix", before: "v1.0.0", after: "1.0.0"}, } for _, tt := range tests { - got, want := stripTagPrefix(tt.before), tt.after - assert.Equal(t, got, want) + t.Run(tt.name, func(t *testing.T) { + got := stripTagPrefix(tt.before) + assert.Equal(t, got, tt.after) + }) } } func TestSemverTagsStrict(t *testing.T) { tests := []struct { + name string before string after []string }{ - {before: "", after: []string{"latest"}}, - {before: "refs/heads/main", after: []string{"latest"}}, - {before: "refs/tags/0.9.0", after: []string{"0.9", "0.9.0"}}, - {before: "refs/tags/1.0.0", after: []string{"1", "1.0", "1.0.0"}}, - {before: "refs/tags/v1.0.0", after: []string{"1", "1.0", "1.0.0"}}, - {before: "refs/tags/v1.0.0+1", after: []string{"1", "1.0", "1.0.0"}}, - {before: "refs/tags/v1.0.0-alpha.1", after: []string{"1.0.0-alpha.1"}}, - {before: "refs/tags/v1.0.0-alpha", after: []string{"1.0.0-alpha"}}, + {name: "empty", before: "", after: []string{"latest"}}, + {name: "main branch", before: "refs/heads/main", after: []string{"latest"}}, + {name: "zero version", before: "refs/tags/0.9.0", after: []string{"0.9", "0.9.0"}}, + {name: "regular version", before: "refs/tags/1.0.0", after: []string{"1", "1.0", "1.0.0"}}, + {name: "regular version with version prefix", before: "refs/tags/v1.0.0", after: []string{"1", "1.0", "1.0.0"}}, + {name: "regular version with meta", before: "refs/tags/v1.0.0+1", after: []string{"1", "1.0", "1.0.0"}}, + {name: "regular pre-release version count", before: "refs/tags/v1.0.0-alpha.1", after: []string{"1.0.0-alpha.1"}}, + {name: "regular pre-release version", before: "refs/tags/v1.0.0-alpha", after: []string{"1.0.0-alpha"}}, } for _, tt := range tests { - tags, err := SemverTags(tt.before, true) - assert.NoError(t, err) + t.Run(tt.name, func(t *testing.T) { + tags, err := SemverTags(tt.before, true) + assert.NoError(t, err) - got, want := tags, tt.after - assert.Equal(t, got, want) + got, want := tags, tt.after + assert.Equal(t, got, want) + }) } } func TestSemverTags(t *testing.T) { tests := []struct { - Before string - After []string + name string + before string + after []string + strict bool + wantErr error }{ - {"", []string{"latest"}}, - {"refs/heads/main", []string{"latest"}}, - {"refs/tags/0.9.0", []string{"0.9", "0.9.0"}}, - {"refs/tags/1.0.0", []string{"1", "1.0", "1.0.0"}}, - {"refs/tags/v1.0.0", []string{"1", "1.0", "1.0.0"}}, - {"refs/tags/v1.0.0+1", []string{"1", "1.0", "1.0.0"}}, - {"refs/tags/v1.0.0-alpha.1", []string{"1.0.0-alpha.1"}}, - {"refs/tags/v1.0.0-alpha", []string{"1.0.0-alpha"}}, - {"refs/tags/v1.0-alpha", []string{"1.0.0-alpha"}}, - {"refs/tags/22.04.0", []string{"22", "22.4", "22.4.0"}}, - {"refs/tags/22.04", []string{"22", "22.4", "22.4.0"}}, + { + name: "empty", + before: "", + after: []string{"latest"}, + strict: false, + wantErr: nil, + }, + { + name: "main branch", + before: "refs/heads/main", + after: []string{"latest"}, + strict: false, + wantErr: nil, + }, + { + name: "zero version", + before: "refs/tags/0.9.0", + after: []string{"0.9", "0.9.0"}, + strict: false, + wantErr: nil, + }, + { + name: "regular version", + before: "refs/tags/1.0.0", + after: []string{"1", "1.0", "1.0.0"}, + strict: false, + wantErr: nil, + }, + { + name: "regular version with prefix", + before: "refs/tags/v1.0.0", + after: []string{"1", "1.0", "1.0.0"}, + strict: false, + wantErr: nil, + }, + { + name: "regular version with meta", + before: "refs/tags/v1.0.0+1", + after: []string{"1", "1.0", "1.0.0"}, + strict: false, + wantErr: nil, + }, + { + name: "regular prerelease version count", + before: "refs/tags/v1.0.0-alpha.1", + after: []string{"1.0.0-alpha.1"}, + strict: false, + wantErr: nil, + }, + { + name: "regular prerelease version", + before: "refs/tags/v1.0.0-alpha", + after: []string{"1.0.0-alpha"}, + strict: false, + wantErr: nil, + }, + { + name: "prerelease version", + before: "refs/tags/v1.0-alpha", + after: []string{"1.0.0-alpha"}, + strict: false, + wantErr: nil, + }, + { + name: "regular version", + before: "refs/tags/22.04.0", + after: []string{"22", "22.4", "22.4.0"}, + strict: false, + wantErr: nil, + }, + { + name: "regular version", + before: "refs/tags/22.04", + after: []string{"22", "22.4", "22.4.0"}, + strict: false, + wantErr: nil, + }, + { + name: "invalid semver", + before: "refs/tags/x1.0.0", + strict: true, + wantErr: assert.AnError, + }, + { + name: "date tag", + before: "refs/tags/20190203", + strict: true, + wantErr: assert.AnError, + }, + { + name: "regular version", + before: "refs/tags/22.04.0", + strict: true, + wantErr: assert.AnError, + }, + { + name: "regular version shorthand", + before: "refs/tags/22.04", + strict: true, + wantErr: assert.AnError, + }, } - for _, tt := range tests { - tags, err := SemverTags(tt.Before, false) - assert.NoError(t, err) - got, want := tags, tt.After - assert.Equal(t, got, want) - } -} + for _, tt := range tests { + tags, err := SemverTags(tt.before, tt.strict) + if tt.wantErr != nil { + assert.Error(t, err) -func TestSemverTagsSrtictError(t *testing.T) { - tests := []string{ - "refs/tags/x1.0.0", - "refs/tags/20190203", - "refs/tags/22.04.0", - "refs/tags/22.04", - } + continue + } - for _, tt := range tests { - _, err := SemverTags(tt, true) - assert.Error(t, err, "Expect tag error for %s", tt) + assert.NoError(t, err) + assert.Equal(t, tags, tt.after) } } func TestSemverTagSuffix(t *testing.T) { tests := []struct { + name string before string suffix string after []string }{ // without suffix { + name: "empty ref", after: []string{"latest"}, }, { + name: "ref without suffix", before: "refs/tags/v1.0.0", after: []string{ "1", @@ -106,10 +199,12 @@ func TestSemverTagSuffix(t *testing.T) { }, // with suffix { + name: "empty ref with suffix", suffix: "linux-amd64", after: []string{"linux-amd64"}, }, { + name: "ref with suffix", before: "refs/tags/v1.0.0", suffix: "linux-amd64", after: []string{ @@ -118,27 +213,16 @@ func TestSemverTagSuffix(t *testing.T) { "1.0.0-linux-amd64", }, }, - { - suffix: "nanoserver", - after: []string{"nanoserver"}, - }, - { - before: "refs/tags/v1.9.2", - suffix: "nanoserver", - after: []string{ - "1-nanoserver", - "1.9-nanoserver", - "1.9.2-nanoserver", - }, - }, } for _, tt := range tests { - tag, err := SemverTagSuffix(tt.before, tt.suffix, true) - assert.NoError(t, err) + t.Run(tt.name, func(t *testing.T) { + tag, err := SemverTagSuffix(tt.before, tt.suffix, true) + assert.NoError(t, err) - got, want := tag, tt.after - assert.Equal(t, got, want) + got, want := tag, tt.after + assert.Equal(t, got, want) + }) } } @@ -148,10 +232,12 @@ func Test_stripHeadPrefix(t *testing.T) { } tests := []struct { + name string args args want string }{ { + name: "main branch", args: args{ ref: "refs/heads/main", }, @@ -160,7 +246,9 @@ func Test_stripHeadPrefix(t *testing.T) { } for _, tt := range tests { - got := stripHeadPrefix(tt.args.ref) - assert.Equal(t, got, tt.want) + t.Run(tt.name, func(t *testing.T) { + got := stripHeadPrefix(tt.args.ref) + assert.Equal(t, got, tt.want) + }) } } diff --git a/tag/util_test.go b/tag/util_test.go index 0a2837a..a51acd8 100644 --- a/tag/util_test.go +++ b/tag/util_test.go @@ -44,7 +44,9 @@ func TestIsTaggable(t *testing.T) { } for _, tt := range tests { - got := IsTaggable(tt.args.ref, tt.args.defaultBranch) - assert.Equal(t, got, tt.want, "%q. IsTaggable() = %v, want %v", tt.name, got, tt.want) + t.Run(tt.name, func(t *testing.T) { + got := IsTaggable(tt.args.ref, tt.args.defaultBranch) + assert.Equal(t, got, tt.want, "%q. IsTaggable() = %v, want %v", tt.name, got, tt.want) + }) } } diff --git a/types/stringslice_test.go b/types/stringslice_test.go index 1fb4a62..2b4166d 100644 --- a/types/stringslice_test.go +++ b/types/stringslice_test.go @@ -8,20 +8,23 @@ import ( func TestSplitWithEscaping(t *testing.T) { tests := []struct { + name string input string output []string }{ - {input: "", output: []string{}}, - {input: "a,b", output: []string{"a", "b"}}, - {input: ",,,", output: []string{"", "", "", ""}}, - {input: ",a\\,", output: []string{"", "a,"}}, - {input: "a,b\\,c\\\\d,e", output: []string{"a", "b,c\\\\d", "e"}}, + {name: "empty string", input: "", output: []string{}}, + {name: "simple comma separated", input: "a,b", output: []string{"a", "b"}}, + {name: "multiple commas", input: ",,,", output: []string{"", "", "", ""}}, + {name: "escaped comma", input: ",a\\,", output: []string{"", "a,"}}, + {name: "escaped backslash", input: "a,b\\,c\\\\d,e", output: []string{"a", "b,c\\\\d", "e"}}, } for _, tt := range tests { - strings := splitWithEscaping(tt.input, ",", "\\") - got, want := strings, tt.output + t.Run(tt.name, func(t *testing.T) { + strings := splitWithEscaping(tt.input, ",", "\\") + got, want := strings, tt.output - assert.Equal(t, got, want) + assert.Equal(t, got, want) + }) } }