Merge pull request #808 from selesy/fix/778-git-bug-rm-broken

Steve Moyer created

fix(778): git bug rm broken

Change summary

cache/repo_cache_bug.go      |  4 ---
commands/add_test.go         | 32 +++++++++++++++++++++++++
commands/env_testing.go      | 48 ++++++++++++++++++++++++++++++++++++++
commands/rm_test.go          | 17 +++++++++++++
commands/user_create_test.go | 36 ++++++++++++++++++++++++++++
5 files changed, 133 insertions(+), 4 deletions(-)

Detailed changes

cache/repo_cache_bug.go 🔗

@@ -499,14 +499,10 @@ func (c *RepoCache) NewBugRaw(author *IdentityCache, unixTime int64, title strin
 
 // RemoveBug removes a bug from the cache and repo given a bug id prefix
 func (c *RepoCache) RemoveBug(prefix string) error {
-	c.muBug.RLock()
-
 	b, err := c.ResolveBugPrefix(prefix)
 	if err != nil {
-		c.muBug.RUnlock()
 		return err
 	}
-	c.muBug.RUnlock()
 
 	c.muBug.Lock()
 	err = bug.RemoveBug(c.repo, b.Id())

commands/add_test.go 🔗

@@ -0,0 +1,32 @@
+package commands
+
+import (
+	"strings"
+	"testing"
+
+	"github.com/stretchr/testify/require"
+)
+
+func newTestEnvUserAndBug(t *testing.T) (*testEnv, string, string) {
+	t.Helper()
+
+	testEnv, userID := newTestEnvAndUser(t)
+	opts := addOptions{
+		title:          "this is a bug title",
+		message:        "this is a bug message",
+		messageFile:    "",
+		nonInteractive: true,
+	}
+
+	require.NoError(t, runAdd(testEnv.env, opts))
+	require.Regexp(t, "^[0-9A-Fa-f]{7} created\n$", testEnv.out)
+	bugID := strings.Split(testEnv.out.String(), " ")[0]
+	testEnv.out.Reset()
+
+	return testEnv, userID, bugID
+}
+
+func TestAdd(t *testing.T) {
+	_, _, user := newTestEnvUserAndBug(t)
+	require.Regexp(t, "^[0-9A-Fa-f]{7}$", user)
+}

commands/env_testing.go 🔗

@@ -0,0 +1,48 @@
+package commands
+
+import (
+	"bytes"
+	"testing"
+
+	"github.com/stretchr/testify/require"
+
+	"github.com/MichaelMure/git-bug/cache"
+	"github.com/MichaelMure/git-bug/repository"
+)
+
+type testEnv struct {
+	env *Env
+	cwd string
+	out *bytes.Buffer
+}
+
+func newTestEnv(t *testing.T) *testEnv {
+	t.Helper()
+
+	cwd := t.TempDir()
+
+	repo, err := repository.InitGoGitRepo(cwd, gitBugNamespace)
+	require.NoError(t, err)
+	t.Cleanup(func() {
+		require.NoError(t, repo.Close())
+	})
+
+	buf := new(bytes.Buffer)
+
+	backend, err := cache.NewRepoCache(repo)
+	require.NoError(t, err)
+	t.Cleanup(func() {
+		backend.Close()
+	})
+
+	return &testEnv{
+		env: &Env{
+			repo:    repo,
+			backend: backend,
+			out:     out{Writer: buf},
+			err:     out{Writer: buf},
+		},
+		cwd: cwd,
+		out: buf,
+	}
+}

commands/rm_test.go 🔗

@@ -0,0 +1,17 @@
+package commands
+
+import (
+	"testing"
+
+	"github.com/stretchr/testify/require"
+)
+
+func TestRm(t *testing.T) {
+	testEnv, _, bugID := newTestEnvUserAndBug(t)
+
+	exp := "bug " + bugID + " removed\n"
+
+	require.NoError(t, runRm(testEnv.env, []string{bugID}))
+	require.Equal(t, exp, testEnv.out.String())
+	testEnv.out.Reset()
+}

commands/user_create_test.go 🔗

@@ -0,0 +1,36 @@
+package commands
+
+import (
+	"path/filepath"
+	"strings"
+	"testing"
+
+	"github.com/stretchr/testify/require"
+)
+
+func newTestEnvAndUser(t *testing.T) (*testEnv, string) {
+	t.Helper()
+
+	testEnv := newTestEnv(t)
+
+	opts := createUserOptions{
+		name:           "John Doe",
+		email:          "jdoe@example.com",
+		avatarURL:      "",
+		nonInteractive: true,
+	}
+
+	require.NoError(t, runUserCreate(testEnv.env, opts))
+
+	userID := strings.TrimSpace(testEnv.out.String())
+	testEnv.out.Reset()
+
+	return testEnv, userID
+}
+
+func TestUserCreateCommand(t *testing.T) {
+	testEnv, userID := newTestEnvAndUser(t)
+
+	require.FileExists(t, filepath.Join(testEnv.cwd, ".git", "refs", "identities", userID))
+	require.FileExists(t, filepath.Join(testEnv.cwd, ".git", "git-bug", "identity-cache"))
+}