git_test.go

 1// Package repository contains helper methods for working with the Git repo.
 2package repository
 3
 4import (
 5	"fmt"
 6	"testing"
 7
 8	"github.com/stretchr/testify/assert"
 9)
10
11func TestConfig(t *testing.T) {
12	repo := CreateTestRepo(false)
13	defer CleanupTestRepos(t, repo)
14
15	err := repo.LocalConfig().StoreString("section.key", "value")
16	assert.NoError(t, err)
17
18	val, err := repo.LocalConfig().ReadString("section.key")
19	assert.NoError(t, err)
20	assert.Equal(t, "value", val)
21
22	err = repo.LocalConfig().StoreString("section.true", "true")
23	assert.NoError(t, err)
24
25	val2, err := repo.LocalConfig().ReadBool("section.true")
26	assert.NoError(t, err)
27	assert.Equal(t, true, val2)
28
29	configs, err := repo.LocalConfig().ReadAll("section")
30	assert.NoError(t, err)
31	assert.Equal(t, configs, map[string]string{
32		"section.key":  "value",
33		"section.true": "true",
34	})
35
36	err = repo.LocalConfig().RemoveAll("section.true")
37	assert.NoError(t, err)
38
39	configs, err = repo.LocalConfig().ReadAll("section")
40	assert.NoError(t, err)
41	assert.Equal(t, configs, map[string]string{
42		"section.key": "value",
43	})
44
45	_, err = repo.LocalConfig().ReadBool("section.true")
46	assert.Equal(t, ErrNoConfigEntry, err)
47
48	err = repo.LocalConfig().RemoveAll("section.nonexistingkey")
49	assert.Error(t, err)
50
51	err = repo.LocalConfig().RemoveAll("section.key")
52	assert.NoError(t, err)
53
54	_, err = repo.LocalConfig().ReadString("section.key")
55	assert.Equal(t, ErrNoConfigEntry, err)
56
57	err = repo.LocalConfig().RemoveAll("nonexistingsection")
58	assert.Error(t, err)
59
60	err = repo.LocalConfig().RemoveAll("section")
61	assert.Error(t, err)
62
63	_, err = repo.LocalConfig().ReadString("section.key")
64	assert.Error(t, err)
65
66	err = repo.LocalConfig().RemoveAll("section.key")
67	assert.Error(t, err)
68}
69
70// checkStoreCommit creates a commit and checks if it has been signed.
71// See https://git-scm.com/docs/git-log#Documentation/git-log.txt-emGem
72// for possible signature status values.
73func checkStoreCommit(t *testing.T, repo *GitRepo, expectedSignedStatus string) {
74	content := fmt.Sprintf("file content %d", repo.CreateTime())
75	blobHash, err := repo.StoreData([]byte(content))
76	assert.NoError(t, err)
77
78	var entries = []TreeEntry{{Blob, blobHash, "filename"}}
79	treeHash, err := repo.StoreTree(entries)
80	assert.NoError(t, err)
81	commitHash, err := repo.StoreCommit(treeHash)
82	assert.NoError(t, err)
83
84	signedStatus, err := repo.runGitCommand("log", "--pretty=%G?", commitHash.String())
85	assert.NoError(t, err)
86	assert.Equal(t, expectedSignedStatus, signedStatus)
87}
88
89func TestGitRepo_StoreCommit(t *testing.T) {
90	repo := CreateTestRepo(false)
91	defer CleanupTestRepos(t, repo)
92
93	// Commit and expect no signature.
94	checkStoreCommit(t,repo, "N")
95
96	// Commit and expect a good signature with unknown validity.
97	SetupSigningKey(t, repo, "a@e.org")
98	checkStoreCommit(t, repo, "U")
99}