diff options
| author | Max Resnick <max@ofmax.li> | 2023-07-15 23:17:05 -0700 |
|---|---|---|
| committer | Max Resnick <max@ofmax.li> | 2023-07-15 23:17:05 -0700 |
| commit | fce837ca04f4ec6ab784fd8b1c908ab06a6da3c0 (patch) | |
| tree | f83e2bd719c1d77b81dbe1fe82196ce6504424f4 /main_test.go | |
| parent | f2522a2e0dde56d6a33bfdf163e81a5bebe3da68 (diff) | |
| download | go-bumpver-fce837ca04f4ec6ab784fd8b1c908ab06a6da3c0.tar.gz | |
chore: tests, refactor
Diffstat (limited to 'main_test.go')
| -rw-r--r-- | main_test.go | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/main_test.go b/main_test.go new file mode 100644 index 0000000..51285fc --- /dev/null +++ b/main_test.go @@ -0,0 +1,203 @@ +package main + +import ( + "bytes" + "log" + "testing" + + "github.com/Masterminds/semver/v3" + "github.com/go-git/go-billy/v5/osfs" + "github.com/go-git/go-git/v5" + "github.com/go-git/go-git/v5/plumbing" + "github.com/go-git/go-git/v5/storage/filesystem" +) + +var ( + tags = []string{"0.1.1", "1.2.3", "3.1.1", "0.3.0", "4.1.1", "0.8.1", "1.1.1-PR.44.4"} +) + +func newRepo(tempDir string) *git.Repository { + fs := osfs.New(tempDir) + strg := filesystem.NewStorage(fs, nil) + r, err := git.Init(strg, fs) + if err != nil { + log.Fatal(err) + } + return r +} + +func makeCommit(wt *git.Worktree) (plumbing.Hash, error) { + file, err := wt.Filesystem.Create("thisismyfile") + if err != nil { + return plumbing.Hash{}, err + } + file.Write([]byte("this is my content")) + wt.Add("thisismyfile") + hash, err := wt.Commit("this is a commit", &git.CommitOptions{}) + if err != nil { + return plumbing.Hash{}, err + } + return hash, nil + +} +func TestCmd(t *testing.T) { + + tests := []struct { + name string + input string + prior string + output string + isError error + }{ + { + name: "patch bump", + input: "patch", + prior: "1.1.1", + output: "1.1.2", + isError: nil, + }, + { + name: "minor bump", + input: "minor", + prior: "1.1.0", + output: "1.2.0", + isError: nil, + }, + { + name: "major bump", + input: "major", + prior: "1.2.1", + output: "2.0.0", + isError: nil, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + logOut := &bytes.Buffer{} + repoDir = t.TempDir() + testRepo := newRepo(repoDir) + wt, _ := testRepo.Worktree() + hash, err := makeCommit(wt) + if err != nil { + t.Fatal(err) + } + + _, err = testRepo.CreateTag(test.prior, hash, nil) + if err != nil { + t.Fatal(err) + } + + rootCmd.SetArgs([]string{test.input}) + rootCmd.SetOut(logOut) + rootCmd.SetErr(logOut) + result := rootCmd.Execute() + if result != test.isError { + t.Fatal("didn't expect this") + } + out := logOut.String() + t.Logf("stuff %s", out) + if out != test.output { + t.Fatalf("expected %s found %s", test.output, out) + } + }) + } +} + +func TestLatestTags(t *testing.T) { + semverTags := []*semver.Version{} + for _, v := range tags { + version, err := semver.NewVersion(v) + if err != nil { + log.Fatal(err) + } + semverTags = append(semverTags, version) + } + tests := []struct { + name string + inputs []*semver.Version + // * for nil cases + output *semver.Version + }{ + { + name: "returns the last item in slice", + inputs: semverTags, + output: semver.New(1, 1, 1, "PR.44.4", ""), + }, + { + name: "returns nil if no tags are present", + inputs: []*semver.Version{}, + output: &semver.Version{}, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + result := latestTag(test.inputs) + if !test.output.Equal(result) { + t.Fatalf("Expect %s found %s", test.output.String(), result.String()) + } + }) + } +} + +func TestFindingTags(t *testing.T) { + tmpDir := t.TempDir() + r := newRepo(tmpDir) + wt, err := r.Worktree() + if err != nil { + t.Fatal(err) + } + hash, err := makeCommit(wt) + if err != nil { + t.Fatal(err) + } + + results, err := findTags(r) + if err != nil { + t.Fatal(err) + } + + if len(results) != 0 { + t.Fatalf("Expected no tags, found %d", len(results)) + } + + // at least a single tag is found + _, err = r.CreateTag("0.0.1", hash, nil) + if err != nil { + t.Fatal(err) + } + + results1, err := findTags(r) + if err != nil { + t.Fatal(err) + } + + if len(results1) != 1 { + t.Fatalf("Expected no tags, found %d", len(results1)) + } + + // a random tag + _, _ = r.CreateTag("this-is-not-me", hash, nil) + results2, err := findTags(r) + if err != nil { + t.Fatal(err) + } + + if len(results2) != 1 { + t.Fatalf("Expected no tags, found %d", len(results2)) + } + + // all semver tags + for _, tag := range tags { + _, _ = r.CreateTag(tag, hash, nil) + } + results3, err := findTags(r) + if err != nil { + t.Fatal(err) + } + + if len(results3) != 8 { + t.Fatalf("found %d", len(results3)) + } +} |