diff options
author | Michael Muré <batolettre@gmail.com> | 2020-09-26 23:01:14 +0200 |
---|---|---|
committer | Michael Muré <batolettre@gmail.com> | 2020-09-29 20:42:21 +0200 |
commit | aa8055e27e9b2b5e102681635fb73dfd05f08fa2 (patch) | |
tree | a6d85150afa7106599acf41ed4e69e817d50a4e8 | |
parent | c68be32df499fd06c2c0cc906f719586da9ee3f3 (diff) | |
download | git-bug-aa8055e27e9b2b5e102681635fb73dfd05f08fa2.tar.gz |
repo: split mocks into smaller reusable components
-rw-r--r-- | repository/mock_repo.go | 152 |
1 files changed, 104 insertions, 48 deletions
diff --git a/repository/mock_repo.go b/repository/mock_repo.go index 4e2c89bc..07425765 100644 --- a/repository/mock_repo.go +++ b/repository/mock_repo.go @@ -15,92 +15,138 @@ var _ TestedRepo = &mockRepoForTest{} // mockRepoForTest defines an instance of Repo that can be used for testing. type mockRepoForTest struct { - config *MemConfig - globalConfig *MemConfig - keyring *keyring.ArrayKeyring - blobs map[Hash][]byte - trees map[Hash]string - commits map[Hash]commit - refs map[string]Hash - clocks map[string]lamport.Clock -} - -type commit struct { - treeHash Hash - parent Hash + *mockRepoConfig + *mockRepoKeyring + *mockRepoCommon + *mockRepoData + *mockRepoClock } func NewMockRepoForTest() *mockRepoForTest { return &mockRepoForTest{ + mockRepoConfig: NewMockRepoConfig(), + mockRepoKeyring: NewMockRepoKeyring(), + mockRepoCommon: NewMockRepoCommon(), + mockRepoData: NewMockRepoData(), + mockRepoClock: NewMockRepoClock(), + } +} + +var _ RepoConfig = &mockRepoConfig{} + +type mockRepoConfig struct { + config *MemConfig + globalConfig *MemConfig +} + +func NewMockRepoConfig() *mockRepoConfig { + return &mockRepoConfig{ config: NewMemConfig(), globalConfig: NewMemConfig(), - keyring: keyring.NewArrayKeyring(nil), - blobs: make(map[Hash][]byte), - trees: make(map[Hash]string), - commits: make(map[Hash]commit), - refs: make(map[string]Hash), - clocks: make(map[string]lamport.Clock), } } // LocalConfig give access to the repository scoped configuration -func (r *mockRepoForTest) LocalConfig() Config { +func (r *mockRepoConfig) LocalConfig() Config { return r.config } // GlobalConfig give access to the git global configuration -func (r *mockRepoForTest) GlobalConfig() Config { +func (r *mockRepoConfig) GlobalConfig() Config { return r.globalConfig } +var _ RepoKeyring = &mockRepoKeyring{} + +type mockRepoKeyring struct { + keyring *keyring.ArrayKeyring +} + +func NewMockRepoKeyring() *mockRepoKeyring { + return &mockRepoKeyring{ + keyring: keyring.NewArrayKeyring(nil), + } +} + // Keyring give access to a user-wide storage for secrets -func (r *mockRepoForTest) Keyring() Keyring { +func (r *mockRepoKeyring) Keyring() Keyring { return r.keyring } +var _ RepoCommon = &mockRepoCommon{} + +type mockRepoCommon struct{} + +func NewMockRepoCommon() *mockRepoCommon { + return &mockRepoCommon{} +} + // GetPath returns the path to the repo. -func (r *mockRepoForTest) GetPath() string { +func (r *mockRepoCommon) GetPath() string { return "~/mockRepo/" } -func (r *mockRepoForTest) GetUserName() (string, error) { +func (r *mockRepoCommon) GetUserName() (string, error) { return "René Descartes", nil } // GetUserEmail returns the email address that the user has used to configure git. -func (r *mockRepoForTest) GetUserEmail() (string, error) { +func (r *mockRepoCommon) GetUserEmail() (string, error) { return "user@example.com", nil } // GetCoreEditor returns the name of the editor that the user has used to configure git. -func (r *mockRepoForTest) GetCoreEditor() (string, error) { +func (r *mockRepoCommon) GetCoreEditor() (string, error) { return "vi", nil } // GetRemotes returns the configured remotes repositories. -func (r *mockRepoForTest) GetRemotes() (map[string]string, error) { +func (r *mockRepoCommon) GetRemotes() (map[string]string, error) { return map[string]string{ "origin": "git://github.com/MichaelMure/git-bug", }, nil } +var _ RepoData = &mockRepoData{} + +type commit struct { + treeHash Hash + parent Hash +} + +type mockRepoData struct { + blobs map[Hash][]byte + trees map[Hash]string + commits map[Hash]commit + refs map[string]Hash +} + +func NewMockRepoData() *mockRepoData { + return &mockRepoData{ + blobs: make(map[Hash][]byte), + trees: make(map[Hash]string), + commits: make(map[Hash]commit), + refs: make(map[string]Hash), + } +} + // PushRefs push git refs to a remote -func (r *mockRepoForTest) PushRefs(remote string, refSpec string) (string, error) { +func (r *mockRepoData) PushRefs(remote string, refSpec string) (string, error) { return "", nil } -func (r *mockRepoForTest) FetchRefs(remote string, refSpec string) (string, error) { +func (r *mockRepoData) FetchRefs(remote string, refSpec string) (string, error) { return "", nil } -func (r *mockRepoForTest) StoreData(data []byte) (Hash, error) { +func (r *mockRepoData) StoreData(data []byte) (Hash, error) { rawHash := sha1.Sum(data) hash := Hash(fmt.Sprintf("%x", rawHash)) r.blobs[hash] = data return hash, nil } -func (r *mockRepoForTest) ReadData(hash Hash) ([]byte, error) { +func (r *mockRepoData) ReadData(hash Hash) ([]byte, error) { data, ok := r.blobs[hash] if !ok { @@ -110,7 +156,7 @@ func (r *mockRepoForTest) ReadData(hash Hash) ([]byte, error) { return data, nil } -func (r *mockRepoForTest) StoreTree(entries []TreeEntry) (Hash, error) { +func (r *mockRepoData) StoreTree(entries []TreeEntry) (Hash, error) { buffer := prepareTreeEntries(entries) rawHash := sha1.Sum(buffer.Bytes()) hash := Hash(fmt.Sprintf("%x", rawHash)) @@ -119,7 +165,7 @@ func (r *mockRepoForTest) StoreTree(entries []TreeEntry) (Hash, error) { return hash, nil } -func (r *mockRepoForTest) StoreCommit(treeHash Hash) (Hash, error) { +func (r *mockRepoData) StoreCommit(treeHash Hash) (Hash, error) { rawHash := sha1.Sum([]byte(treeHash)) hash := Hash(fmt.Sprintf("%x", rawHash)) r.commits[hash] = commit{ @@ -128,7 +174,7 @@ func (r *mockRepoForTest) StoreCommit(treeHash Hash) (Hash, error) { return hash, nil } -func (r *mockRepoForTest) StoreCommitWithParent(treeHash Hash, parent Hash) (Hash, error) { +func (r *mockRepoData) StoreCommitWithParent(treeHash Hash, parent Hash) (Hash, error) { rawHash := sha1.Sum([]byte(treeHash + parent)) hash := Hash(fmt.Sprintf("%x", rawHash)) r.commits[hash] = commit{ @@ -138,22 +184,22 @@ func (r *mockRepoForTest) StoreCommitWithParent(treeHash Hash, parent Hash) (Has return hash, nil } -func (r *mockRepoForTest) UpdateRef(ref string, hash Hash) error { +func (r *mockRepoData) UpdateRef(ref string, hash Hash) error { r.refs[ref] = hash return nil } -func (r *mockRepoForTest) RemoveRef(ref string) error { +func (r *mockRepoData) RemoveRef(ref string) error { delete(r.refs, ref) return nil } -func (r *mockRepoForTest) RefExist(ref string) (bool, error) { +func (r *mockRepoData) RefExist(ref string) (bool, error) { _, exist := r.refs[ref] return exist, nil } -func (r *mockRepoForTest) CopyRef(source string, dest string) error { +func (r *mockRepoData) CopyRef(source string, dest string) error { hash, exist := r.refs[source] if !exist { @@ -164,7 +210,7 @@ func (r *mockRepoForTest) CopyRef(source string, dest string) error { return nil } -func (r *mockRepoForTest) ListRefs(refPrefix string) ([]string, error) { +func (r *mockRepoData) ListRefs(refPrefix string) ([]string, error) { var keys []string for k := range r.refs { @@ -176,7 +222,7 @@ func (r *mockRepoForTest) ListRefs(refPrefix string) ([]string, error) { return keys, nil } -func (r *mockRepoForTest) ListCommits(ref string) ([]Hash, error) { +func (r *mockRepoData) ListCommits(ref string) ([]Hash, error) { var hashes []Hash hash := r.refs[ref] @@ -195,7 +241,7 @@ func (r *mockRepoForTest) ListCommits(ref string) ([]Hash, error) { return hashes, nil } -func (r *mockRepoForTest) ReadTree(hash Hash) ([]TreeEntry, error) { +func (r *mockRepoData) ReadTree(hash Hash) ([]TreeEntry, error) { var data string data, ok := r.trees[hash] @@ -218,7 +264,7 @@ func (r *mockRepoForTest) ReadTree(hash Hash) ([]TreeEntry, error) { return readTreeEntries(data) } -func (r *mockRepoForTest) FindCommonAncestor(hash1 Hash, hash2 Hash) (Hash, error) { +func (r *mockRepoData) FindCommonAncestor(hash1 Hash, hash2 Hash) (Hash, error) { ancestor1 := []Hash{hash1} for hash1 != "" { @@ -250,7 +296,7 @@ func (r *mockRepoForTest) FindCommonAncestor(hash1 Hash, hash2 Hash) (Hash, erro } } -func (r *mockRepoForTest) GetTreeHash(commit Hash) (Hash, error) { +func (r *mockRepoData) GetTreeHash(commit Hash) (Hash, error) { c, ok := r.commits[commit] if !ok { return "", fmt.Errorf("unknown commit") @@ -259,7 +305,21 @@ func (r *mockRepoForTest) GetTreeHash(commit Hash) (Hash, error) { return c.treeHash, nil } -func (r *mockRepoForTest) GetOrCreateClock(name string) (lamport.Clock, error) { +func (r *mockRepoData) AddRemote(name string, url string) error { + panic("implement me") +} + +type mockRepoClock struct { + clocks map[string]lamport.Clock +} + +func NewMockRepoClock() *mockRepoClock { + return &mockRepoClock{ + clocks: make(map[string]lamport.Clock), + } +} + +func (r *mockRepoClock) GetOrCreateClock(name string) (lamport.Clock, error) { if c, ok := r.clocks[name]; ok { return c, nil } @@ -268,7 +328,3 @@ func (r *mockRepoForTest) GetOrCreateClock(name string) (lamport.Clock, error) { r.clocks[name] = c return c, nil } - -func (r *mockRepoForTest) AddRemote(name string, url string) error { - panic("implement me") -} |