gogit_testing.go

 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}