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		err := repo.Close()
36		if err != nil {
37			log.Println(err)
38		}
39	})
40
41	config := repo.LocalConfig()
42	if err := config.StoreString("user.name", "testuser"); err != nil {
43		log.Fatal("failed to set user.name for test repository: ", err)
44	}
45	if err := config.StoreString("user.email", "testuser@example.com"); err != nil {
46		log.Fatal("failed to set user.email for test repository: ", err)
47	}
48
49	// make sure we use a mock keyring for testing to not interact with the global system
50	return &replaceKeyring{
51		TestedRepo: repo,
52		keyring:    keyring.NewArrayKeyring(nil),
53	}
54}
55
56func SetupGoGitReposAndRemote(t *testing.T) (repoA, repoB, remote TestedRepo) {
57	t.Helper()
58
59	repoA = CreateGoGitTestRepo(t, false)
60	repoB = CreateGoGitTestRepo(t, false)
61	remote = CreateGoGitTestRepo(t, true)
62
63	err := repoA.AddRemote("origin", remote.GetLocalRemote())
64	if err != nil {
65		log.Fatal(err)
66	}
67
68	err = repoB.AddRemote("origin", remote.GetLocalRemote())
69	if err != nil {
70		log.Fatal(err)
71	}
72
73	return repoA, repoB, remote
74}
75
76func goGitRepoDir(t *testing.T, repo TestedRepo) string {
77	t.Helper()
78
79	dir := repo.GetLocalRemote()
80	if strings.HasSuffix(dir, ".git") {
81		dir, _ = filepath.Split(dir)
82	}
83
84	if dir[len(dir)-1] == filepath.Separator {
85		dir = dir[:len(dir)-1]
86	}
87
88	return dir
89}