From 6ed54e07456297ee4d026dd60eeff29c8edf2cb8 Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Mon, 21 Sep 2020 11:08:24 +0200 Subject: 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. --- internal/git2go/merge_test.go | 157 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 internal/git2go/merge_test.go (limited to 'internal/git2go') 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) + } + }) + } +} -- cgit v1.2.3