github.com/git-chglog/git-chglog@v0.15.5-0.20240126074033-6a6993d52d69/tag_reader_test.go (about) 1 package chglog 2 3 import ( 4 "errors" 5 "strings" 6 "testing" 7 "time" 8 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func TestTagReader(t *testing.T) { 13 assert := assert.New(t) 14 client := &mockClient{ 15 ReturnExec: func(subcmd string, args ...string) (string, error) { 16 if subcmd != "for-each-ref" { 17 return "", errors.New("") 18 } 19 return strings.Join([]string{ 20 "", 21 "refs/tags/v2.0.4-beta.1@@__CHGLOG__@@Release v2.0.4-beta.1@@__CHGLOG__@@Thu Feb 1 00:00:00 2018 +0000@@__CHGLOG__@@", 22 "refs/tags/4.4.3@@__CHGLOG__@@This is tag subject@@__CHGLOG__@@@@__CHGLOG__@@Fri Feb 2 00:00:00 2018 +0000", 23 "refs/tags/4.4.4@@__CHGLOG__@@Release 4.4.4@@__CHGLOG__@@Fri Feb 2 10:00:40 2018 +0000@@__CHGLOG__@@", 24 "refs/tags/v2.0.4-beta.2@@__CHGLOG__@@Release v2.0.4-beta.2@@__CHGLOG__@@Sat Feb 3 12:15:00 2018 +0000@@__CHGLOG__@@", 25 "refs/tags/5.0.0-rc.0@@__CHGLOG__@@Release 5.0.0-rc.0@@__CHGLOG__@@Sat Feb 3 12:30:10 2018 +0000@@__CHGLOG__@@", 26 "refs/tags/hoge_fuga@@__CHGLOG__@@Invalid semver tag name@@__CHGLOG__@@Mon Mar 12 12:30:10 2018 +0000@@__CHGLOG__@@", 27 "hoge@@__CHGLOG__@@", 28 }, "\n"), nil 29 }, 30 } 31 32 actual, err := newTagReader(client, "", "date").ReadAll() 33 assert.Nil(err) 34 35 assert.Equal( 36 []*Tag{ 37 { 38 Name: "hoge_fuga", 39 Subject: "Invalid semver tag name", 40 Date: time.Date(2018, 3, 12, 12, 30, 10, 0, time.UTC), 41 Next: nil, 42 Previous: &RelateTag{ 43 Name: "5.0.0-rc.0", 44 Subject: "Release 5.0.0-rc.0", 45 Date: time.Date(2018, 2, 3, 12, 30, 10, 0, time.UTC), 46 }, 47 }, 48 { 49 Name: "5.0.0-rc.0", 50 Subject: "Release 5.0.0-rc.0", 51 Date: time.Date(2018, 2, 3, 12, 30, 10, 0, time.UTC), 52 Next: &RelateTag{ 53 Name: "hoge_fuga", 54 Subject: "Invalid semver tag name", 55 Date: time.Date(2018, 3, 12, 12, 30, 10, 0, time.UTC), 56 }, 57 Previous: &RelateTag{ 58 Name: "v2.0.4-beta.2", 59 Subject: "Release v2.0.4-beta.2", 60 Date: time.Date(2018, 2, 3, 12, 15, 0, 0, time.UTC), 61 }, 62 }, 63 { 64 Name: "v2.0.4-beta.2", 65 Subject: "Release v2.0.4-beta.2", 66 Date: time.Date(2018, 2, 3, 12, 15, 0, 0, time.UTC), 67 Next: &RelateTag{ 68 Name: "5.0.0-rc.0", 69 Subject: "Release 5.0.0-rc.0", 70 Date: time.Date(2018, 2, 3, 12, 30, 10, 0, time.UTC), 71 }, 72 Previous: &RelateTag{ 73 Name: "4.4.4", 74 Subject: "Release 4.4.4", 75 Date: time.Date(2018, 2, 2, 10, 0, 40, 0, time.UTC), 76 }, 77 }, 78 { 79 Name: "4.4.4", 80 Subject: "Release 4.4.4", 81 Date: time.Date(2018, 2, 2, 10, 0, 40, 0, time.UTC), 82 Next: &RelateTag{ 83 Name: "v2.0.4-beta.2", 84 Subject: "Release v2.0.4-beta.2", 85 Date: time.Date(2018, 2, 3, 12, 15, 0, 0, time.UTC), 86 }, 87 Previous: &RelateTag{ 88 Name: "4.4.3", 89 Subject: "This is tag subject", 90 Date: time.Date(2018, 2, 2, 0, 0, 0, 0, time.UTC), 91 }, 92 }, 93 { 94 Name: "4.4.3", 95 Subject: "This is tag subject", 96 Date: time.Date(2018, 2, 2, 0, 0, 0, 0, time.UTC), 97 Next: &RelateTag{ 98 Name: "4.4.4", 99 Subject: "Release 4.4.4", 100 Date: time.Date(2018, 2, 2, 10, 0, 40, 0, time.UTC), 101 }, 102 Previous: &RelateTag{ 103 Name: "v2.0.4-beta.1", 104 Subject: "Release v2.0.4-beta.1", 105 Date: time.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC), 106 }, 107 }, 108 { 109 Name: "v2.0.4-beta.1", 110 Subject: "Release v2.0.4-beta.1", 111 Date: time.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC), 112 Next: &RelateTag{ 113 Name: "4.4.3", 114 Subject: "This is tag subject", 115 Date: time.Date(2018, 2, 2, 0, 0, 0, 0, time.UTC), 116 }, 117 Previous: nil, 118 }, 119 }, 120 actual, 121 ) 122 123 actual, err = newTagReader(client, "", "semver").ReadAll() 124 assert.Nil(err) 125 126 assert.Equal( 127 []*Tag{ 128 { 129 Name: "5.0.0-rc.0", 130 Subject: "Release 5.0.0-rc.0", 131 Date: time.Date(2018, 2, 3, 12, 30, 10, 0, time.UTC), 132 Next: nil, 133 Previous: &RelateTag{ 134 Name: "4.4.4", 135 Subject: "Release 4.4.4", 136 Date: time.Date(2018, 2, 2, 10, 0, 40, 0, time.UTC), 137 }, 138 }, 139 { 140 Name: "4.4.4", 141 Subject: "Release 4.4.4", 142 Date: time.Date(2018, 2, 2, 10, 0, 40, 0, time.UTC), 143 Next: &RelateTag{ 144 Name: "5.0.0-rc.0", 145 Subject: "Release 5.0.0-rc.0", 146 Date: time.Date(2018, 2, 3, 12, 30, 10, 0, time.UTC), 147 }, 148 Previous: &RelateTag{ 149 Name: "4.4.3", 150 Subject: "This is tag subject", 151 Date: time.Date(2018, 2, 2, 0, 0, 0, 0, time.UTC), 152 }, 153 }, 154 { 155 Name: "4.4.3", 156 Subject: "This is tag subject", 157 Date: time.Date(2018, 2, 2, 0, 0, 0, 0, time.UTC), 158 Next: &RelateTag{ 159 Name: "4.4.4", 160 Subject: "Release 4.4.4", 161 Date: time.Date(2018, 2, 2, 10, 0, 40, 0, time.UTC), 162 }, 163 Previous: &RelateTag{ 164 Name: "v2.0.4-beta.2", 165 Subject: "Release v2.0.4-beta.2", 166 Date: time.Date(2018, 2, 3, 12, 15, 0, 0, time.UTC), 167 }, 168 }, 169 { 170 Name: "v2.0.4-beta.2", 171 Subject: "Release v2.0.4-beta.2", 172 Date: time.Date(2018, 2, 3, 12, 15, 0, 0, time.UTC), 173 Next: &RelateTag{ 174 Name: "4.4.3", 175 Subject: "This is tag subject", 176 Date: time.Date(2018, 2, 2, 0, 0, 0, 0, time.UTC), 177 }, 178 Previous: &RelateTag{ 179 Name: "v2.0.4-beta.1", 180 Subject: "Release v2.0.4-beta.1", 181 Date: time.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC), 182 }, 183 }, 184 { 185 Name: "v2.0.4-beta.1", 186 Subject: "Release v2.0.4-beta.1", 187 Date: time.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC), 188 Next: &RelateTag{ 189 Name: "v2.0.4-beta.2", 190 Subject: "Release v2.0.4-beta.2", 191 Date: time.Date(2018, 2, 3, 12, 15, 0, 0, time.UTC), 192 }, 193 Previous: nil, 194 }, 195 }, 196 actual, 197 ) 198 199 actualFiltered, errFiltered := newTagReader(client, "^v", "date").ReadAll() 200 assert.Nil(errFiltered) 201 assert.Equal( 202 []*Tag{ 203 { 204 Name: "v2.0.4-beta.2", 205 Subject: "Release v2.0.4-beta.2", 206 Date: time.Date(2018, 2, 3, 12, 15, 0, 0, time.UTC), 207 Next: nil, 208 Previous: &RelateTag{ 209 Name: "v2.0.4-beta.1", 210 Subject: "Release v2.0.4-beta.1", 211 Date: time.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC), 212 }, 213 }, 214 { 215 Name: "v2.0.4-beta.1", 216 Subject: "Release v2.0.4-beta.1", 217 Date: time.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC), 218 Next: &RelateTag{ 219 Name: "v2.0.4-beta.2", 220 Subject: "Release v2.0.4-beta.2", 221 Date: time.Date(2018, 2, 3, 12, 15, 0, 0, time.UTC), 222 }, 223 Previous: nil, 224 }, 225 }, 226 actualFiltered, 227 ) 228 }