1package repository
2
3import (
4 "log"
5 "testing"
6
7 "github.com/99designs/keyring"
8)
9
10type TestingT interface {
11 Cleanup(func())
12 Helper()
13 TempDir() string
14}
15
16const namespace = "git-bug"
17
18// This is intended for testing only
19
20func CreateGoGitTestRepo(t TestingT, bare bool) TestedRepo {
21 t.Helper()
22
23 dir := t.TempDir()
24
25 var creator func(string, string) (*GoGitRepo, error)
26
27 if bare {
28 creator = InitBareGoGitRepo
29 } else {
30 creator = InitGoGitRepo
31 }
32
33 repo, err := creator(dir, namespace)
34 if err != nil {
35 log.Fatal(err)
36 }
37
38 t.Cleanup(func() {
39 repo.Close()
40 })
41
42 config := repo.LocalConfig()
43 if err := config.StoreString("user.name", "testuser"); err != nil {
44 log.Fatal("failed to set user.name for test repository: ", err)
45 }
46 if err := config.StoreString("user.email", "testuser@example.com"); err != nil {
47 log.Fatal("failed to set user.email for test repository: ", err)
48 }
49
50 // make sure we use a mock keyring for testing to not interact with the global system
51 return &replaceKeyring{
52 TestedRepo: repo,
53 keyring: keyring.NewArrayKeyring(nil),
54 }
55}
56
57func SetupGoGitReposAndRemote(t *testing.T) (repoA, repoB, remote TestedRepo) {
58 t.Helper()
59
60 repoA = CreateGoGitTestRepo(t, false)
61 repoB = CreateGoGitTestRepo(t, false)
62 remote = CreateGoGitTestRepo(t, true)
63
64 err := repoA.AddRemote("origin", remote.GetLocalRemote())
65 if err != nil {
66 log.Fatal(err)
67 }
68
69 err = repoB.AddRemote("origin", remote.GetLocalRemote())
70 if err != nil {
71 log.Fatal(err)
72 }
73
74 return repoA, repoB, remote
75}