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}