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