1package git2go 2 3import ( 4 "bytes" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8) 9 10func TestConflictsCommand_Serialization(t *testing.T) { 11 testcases := []struct { 12 desc string 13 cmd ConflictsCommand 14 err string 15 }{ 16 { 17 desc: "missing repository", 18 cmd: ConflictsCommand{}, 19 err: "missing repository", 20 }, 21 { 22 desc: "missing theirs", 23 cmd: ConflictsCommand{ 24 Repository: "foo", 25 Ours: "refs/heads/master", 26 }, 27 err: "missing theirs", 28 }, 29 { 30 desc: "missing ours", 31 cmd: ConflictsCommand{ 32 Repository: "foo", 33 Theirs: "refs/heads/master", 34 }, 35 err: "missing ours", 36 }, 37 { 38 desc: "valid command", 39 cmd: ConflictsCommand{ 40 Repository: "foo", 41 Ours: "refs/heads/master", 42 Theirs: "refs/heads/foo", 43 }, 44 }, 45 } 46 47 for _, tc := range testcases { 48 t.Run(tc.desc, func(t *testing.T) { 49 serialized, err := serialize(tc.cmd) 50 require.NoError(t, err) 51 52 deserialized, err := ConflictsCommandFromSerialized(serialized) 53 54 if tc.err != "" { 55 require.Error(t, err) 56 require.Contains(t, err.Error(), tc.err) 57 } else { 58 require.NoError(t, err) 59 require.Equal(t, deserialized, tc.cmd) 60 } 61 }) 62 } 63} 64 65func TestConflictsResult_Serialization(t *testing.T) { 66 serializeResult := func(t *testing.T, result ConflictsResult) string { 67 var buf bytes.Buffer 68 err := result.SerializeTo(&buf) 69 require.NoError(t, err) 70 return buf.String() 71 } 72 73 testcases := []struct { 74 desc string 75 serialized string 76 expected ConflictsResult 77 err string 78 }{ 79 { 80 desc: "empty merge result", 81 serialized: serializeResult(t, ConflictsResult{}), 82 expected: ConflictsResult{}, 83 }, 84 { 85 desc: "merge result with commit", 86 serialized: serializeResult(t, ConflictsResult{ 87 Conflicts: []Conflict{ 88 { 89 Ancestor: ConflictEntry{Path: "dir/ancestor", Mode: 0o100644}, 90 Our: ConflictEntry{Path: "dir/our", Mode: 0o100644}, 91 Their: ConflictEntry{Path: "dir/their", Mode: 0o100644}, 92 Content: []byte("content"), 93 }, 94 }, 95 }), 96 expected: ConflictsResult{ 97 Conflicts: []Conflict{ 98 { 99 Ancestor: ConflictEntry{Path: "dir/ancestor", Mode: 0o100644}, 100 Our: ConflictEntry{Path: "dir/our", Mode: 0o100644}, 101 Their: ConflictEntry{Path: "dir/their", Mode: 0o100644}, 102 Content: []byte("content"), 103 }, 104 }, 105 }, 106 }, 107 { 108 desc: "invalid serialized representation", 109 serialized: "xvlc", 110 err: "invalid character", 111 }, 112 } 113 114 for _, tc := range testcases { 115 t.Run(tc.desc, func(t *testing.T) { 116 var deserialized ConflictsResult 117 err := deserialize(tc.serialized, &deserialized) 118 119 if tc.err != "" { 120 require.Error(t, err) 121 require.Contains(t, err.Error(), tc.err) 122 } else { 123 require.NoError(t, err) 124 require.Equal(t, deserialized, tc.expected) 125 } 126 }) 127 } 128} 129