diff options
author | Patrick Steinhardt <psteinhardt@gitlab.com> | 2020-09-21 12:08:24 +0300 |
---|---|---|
committer | Patrick Steinhardt <psteinhardt@gitlab.com> | 2020-09-21 12:08:24 +0300 |
commit | 6ed54e07456297ee4d026dd60eeff29c8edf2cb8 (patch) | |
tree | c1e9a6d771d7a2ffd0c11ddcb66d1d66963788f8 | |
parent | 295c3b7c65a88205a4aef33e6ad0e625d7ba3123 (diff) |
git2go: Add serialization tests merge command
The merge command doesn't have any unit tests expliciting its standalone
behaviour. Add tests to verify that serialization and deserialization of
merge commands and results work.
-rw-r--r-- | internal/git2go/merge_test.go | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/internal/git2go/merge_test.go b/internal/git2go/merge_test.go new file mode 100644 index 000000000..1de4f3cab --- /dev/null +++ b/internal/git2go/merge_test.go @@ -0,0 +1,157 @@ +package git2go + +import ( + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +func TestGit2Go_MergeCommandSerialization(t *testing.T) { + testcases := []struct { + desc string + cmd MergeCommand + err string + }{ + { + desc: "missing repository", + cmd: MergeCommand{}, + err: "missing repository", + }, + { + desc: "missing author name", + cmd: MergeCommand{ + Repository: "foo", + }, + err: "missing author name", + }, + { + desc: "missing author mail", + cmd: MergeCommand{ + Repository: "foo", + AuthorName: "Au Thor", + }, + err: "missing author mail", + }, + { + desc: "missing author message", + cmd: MergeCommand{ + Repository: "foo", + AuthorName: "Au Thor", + AuthorMail: "au@thor.com", + }, + err: "missing message", + }, + { + desc: "missing author ours", + cmd: MergeCommand{ + Repository: "foo", + AuthorName: "Au Thor", + AuthorMail: "au@thor.com", + Message: "Message", + }, + err: "missing ours", + }, + { + desc: "missing theirs", + cmd: MergeCommand{ + Repository: "foo", + AuthorName: "Au Thor", + AuthorMail: "au@thor.com", + Message: "Message", + Ours: "refs/heads/master", + }, + err: "missing theirs", + }, + { + desc: "valid command", + cmd: MergeCommand{ + Repository: "foo", + AuthorName: "Au Thor", + AuthorMail: "au@thor.com", + Message: "Message", + Ours: "refs/heads/master", + Theirs: "refs/heads/foo", + }, + }, + { + desc: "valid command with date", + cmd: MergeCommand{ + Repository: "foo", + AuthorName: "Au Thor", + AuthorMail: "au@thor.com", + AuthorDate: time.Now().UTC(), + Message: "Message", + Ours: "refs/heads/master", + Theirs: "refs/heads/foo", + }, + }, + } + + for _, tc := range testcases { + t.Run(tc.desc, func(t *testing.T) { + serialized, err := serialize(tc.cmd) + require.NoError(t, err) + + deserialized, err := MergeCommandFromSerialized(serialized) + + if tc.err != "" { + require.Error(t, err) + require.Contains(t, err.Error(), tc.err) + } else { + require.NoError(t, err) + require.Equal(t, deserialized, tc.cmd) + } + }) + } +} + +func TestGit2Go_MergeResultSerialization(t *testing.T) { + serializeResult := func(t *testing.T, result MergeResult) string { + serialized, err := result.Serialize() + require.NoError(t, err) + return serialized + } + + testcases := []struct { + desc string + serialized string + expected MergeResult + err string + }{ + { + desc: "empty merge result", + serialized: serializeResult(t, MergeResult{}), + expected: MergeResult{}, + }, + { + desc: "merge result with commit", + serialized: serializeResult(t, MergeResult{ + CommitID: "1234", + }), + expected: MergeResult{ + CommitID: "1234", + }, + }, + { + desc: "invalid serialized representation", + serialized: "xvlc", + err: "invalid character", + }, + } + + for _, tc := range testcases { + t.Run(tc.desc, func(t *testing.T) { + var deserialized MergeResult + err := deserialize(tc.serialized, &deserialized) + + if tc.err != "" { + require.Error(t, err) + require.Contains(t, err.Error(), tc.err) + } else { + require.NoError(t, err) + require.Equal(t, deserialized, tc.expected) + } + }) + } +} |