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}