1package git2go 2 3import ( 4 "bytes" 5 "testing" 6 "time" 7 8 "github.com/stretchr/testify/require" 9) 10 11func TestGit2Go_MergeCommandSerialization(t *testing.T) { 12 testcases := []struct { 13 desc string 14 cmd MergeCommand 15 err string 16 }{ 17 { 18 desc: "missing repository", 19 cmd: MergeCommand{}, 20 err: "missing repository", 21 }, 22 { 23 desc: "missing author name", 24 cmd: MergeCommand{ 25 Repository: "foo", 26 }, 27 err: "missing author name", 28 }, 29 { 30 desc: "missing author mail", 31 cmd: MergeCommand{ 32 Repository: "foo", 33 AuthorName: "Au Thor", 34 }, 35 err: "missing author mail", 36 }, 37 { 38 desc: "missing author message", 39 cmd: MergeCommand{ 40 Repository: "foo", 41 AuthorName: "Au Thor", 42 AuthorMail: "au@thor.com", 43 }, 44 err: "missing message", 45 }, 46 { 47 desc: "missing author ours", 48 cmd: MergeCommand{ 49 Repository: "foo", 50 AuthorName: "Au Thor", 51 AuthorMail: "au@thor.com", 52 Message: "Message", 53 }, 54 err: "missing ours", 55 }, 56 { 57 desc: "missing theirs", 58 cmd: MergeCommand{ 59 Repository: "foo", 60 AuthorName: "Au Thor", 61 AuthorMail: "au@thor.com", 62 Message: "Message", 63 Ours: "refs/heads/master", 64 }, 65 err: "missing theirs", 66 }, 67 { 68 desc: "valid command", 69 cmd: MergeCommand{ 70 Repository: "foo", 71 AuthorName: "Au Thor", 72 AuthorMail: "au@thor.com", 73 Message: "Message", 74 Ours: "refs/heads/master", 75 Theirs: "refs/heads/foo", 76 }, 77 }, 78 { 79 desc: "valid command with date", 80 cmd: MergeCommand{ 81 Repository: "foo", 82 AuthorName: "Au Thor", 83 AuthorMail: "au@thor.com", 84 AuthorDate: time.Now().UTC(), 85 Message: "Message", 86 Ours: "refs/heads/master", 87 Theirs: "refs/heads/foo", 88 }, 89 }, 90 } 91 92 for _, tc := range testcases { 93 t.Run(tc.desc, func(t *testing.T) { 94 serialized, err := serialize(tc.cmd) 95 require.NoError(t, err) 96 97 deserialized, err := MergeCommandFromSerialized(serialized) 98 99 if tc.err != "" { 100 require.Error(t, err) 101 require.Contains(t, err.Error(), tc.err) 102 } else { 103 require.NoError(t, err) 104 require.Equal(t, deserialized, tc.cmd) 105 } 106 }) 107 } 108} 109 110func TestGit2Go_MergeResultSerialization(t *testing.T) { 111 serializeResult := func(t *testing.T, result MergeResult) string { 112 t.Helper() 113 var buf bytes.Buffer 114 err := result.SerializeTo(&buf) 115 require.NoError(t, err) 116 return buf.String() 117 } 118 119 testcases := []struct { 120 desc string 121 serialized string 122 expected MergeResult 123 err string 124 }{ 125 { 126 desc: "empty merge result", 127 serialized: serializeResult(t, MergeResult{}), 128 expected: MergeResult{}, 129 }, 130 { 131 desc: "merge result with commit", 132 serialized: serializeResult(t, MergeResult{ 133 CommitID: "1234", 134 }), 135 expected: MergeResult{ 136 CommitID: "1234", 137 }, 138 }, 139 { 140 desc: "invalid serialized representation", 141 serialized: "xvlc", 142 err: "invalid character", 143 }, 144 } 145 146 for _, tc := range testcases { 147 t.Run(tc.desc, func(t *testing.T) { 148 var deserialized MergeResult 149 err := deserialize(tc.serialized, &deserialized) 150 151 if tc.err != "" { 152 require.Error(t, err) 153 require.Contains(t, err.Error(), tc.err) 154 } else { 155 require.NoError(t, err) 156 require.Equal(t, deserialized, tc.expected) 157 } 158 }) 159 } 160} 161