env_testing.go

 1package commands
 2
 3import (
 4	"bytes"
 5	"testing"
 6
 7	"github.com/stretchr/testify/require"
 8
 9	"github.com/MichaelMure/git-bug/cache"
10	"github.com/MichaelMure/git-bug/repository"
11	"github.com/MichaelMure/git-bug/util/interrupt"
12)
13
14type testEnv struct {
15	env *Env
16	cwd string
17	out *bytes.Buffer
18}
19
20func newTestEnv(t *testing.T) *testEnv {
21	t.Helper()
22
23	cwd := t.TempDir()
24
25	repo, err := repository.InitGoGitRepo(cwd, gitBugNamespace)
26	require.NoError(t, err)
27	t.Cleanup(func() {
28		require.NoError(t, repo.Close())
29	})
30
31	buf := new(bytes.Buffer)
32
33	backend, err := cache.NewRepoCache(repo)
34	require.NoError(t, err)
35
36	testEnv := &testEnv{
37		env: &Env{
38			repo:    repo,
39			backend: backend,
40			out:     out{Writer: buf},
41			err:     out{Writer: buf},
42		},
43		cwd: cwd,
44		out: buf,
45	}
46
47	cleaner := func(env *Env) interrupt.CleanerFunc {
48		return func() error {
49			if env.backend != nil {
50				err := env.backend.Close()
51				env.backend = nil
52				return err
53			}
54			return nil
55		}
56	}
57
58	// Cleanup properly on interrupt
59	interrupt.RegisterCleaner(cleaner(testEnv.env))
60
61	return testEnv
62}