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