aboutsummaryrefslogtreecommitdiff
path: root/main_test.go
diff options
context:
space:
mode:
authorMax Resnick <max@ofmax.li>2023-07-15 23:17:05 -0700
committerMax Resnick <max@ofmax.li>2023-07-15 23:17:05 -0700
commitfce837ca04f4ec6ab784fd8b1c908ab06a6da3c0 (patch)
treef83e2bd719c1d77b81dbe1fe82196ce6504424f4 /main_test.go
parentf2522a2e0dde56d6a33bfdf163e81a5bebe3da68 (diff)
downloadgo-bumpver-fce837ca04f4ec6ab784fd8b1c908ab06a6da3c0.tar.gz
chore: tests, refactor
Diffstat (limited to '')
-rw-r--r--main_test.go203
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))
+ }
+}