github.com/azunymous/cdx@v0.0.0-20201122180449-fbb46cc4d252/test/e2e/tag/latest_test.go (about) 1 //+build e2e 2 3 package tag 4 5 import ( 6 "bytes" 7 "github.com/azunymous/cdx/test/check" 8 "github.com/azunymous/cdx/test/e2e" 9 "os/exec" 10 "testing" 11 ) 12 13 func TestLatestOpensRepositoryWithNoTagsFails(t *testing.T) { 14 e2e.CreateTempGitDir() 15 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app") 16 err := command.Run() 17 check.Assert(t, err != nil, "expecting error to not be nil, got %v", err) 18 } 19 20 func TestLatestGetsTagsFromRepository(t *testing.T) { 21 dir := e2e.CreateTempGitDir() 22 e2e.CreateTag(dir, "app-0.1.0") 23 24 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app") 25 var stdOut bytes.Buffer 26 var stdErr bytes.Buffer 27 command.Stdout = &stdOut 28 command.Stderr = &stdErr 29 err := command.Run() 30 check.Ok(t, err) 31 check.Equals(t, "0.1.0\n", stdOut.String()) 32 check.Equals(t, "", stdErr.String()) 33 } 34 35 func TestLatestGetsAnnotatedTagsFromRepository(t *testing.T) { 36 _ = e2e.CreateTempGitDir() 37 _, _ = exec.Command("git", "tag", "app-0.1.0", "-a", "-m", "").CombinedOutput() 38 39 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app") 40 var stdOut bytes.Buffer 41 var stdErr bytes.Buffer 42 command.Stdout = &stdOut 43 command.Stderr = &stdErr 44 err := command.Run() 45 check.Equals(t, "", stdErr.String()) 46 check.Ok(t, err) 47 check.Equals(t, "0.1.0\n", stdOut.String()) 48 } 49 50 func TestLatestGetsHashFromRepositoryWhenNoTagsAndHashFlagProvided(t *testing.T) { 51 _ = e2e.CreateTempGitDir() 52 53 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app", "--head", "--fallback") 54 var stdOut bytes.Buffer 55 var stdErr bytes.Buffer 56 command.Stdout = &stdOut 57 command.Stderr = &stdErr 58 err := command.Run() 59 check.Ok(t, err) 60 expectedOutput, _ := exec.Command("git", "rev-parse", "HEAD").Output() 61 check.Equals(t, "", stdErr.String()) 62 check.Equals(t, string(expectedOutput), stdOut.String()) 63 } 64 65 func TestLatestGetsTagsFromRepositoryForMultipleCommits(t *testing.T) { 66 dir := e2e.CreateTempGitDir() 67 e2e.CreateTag(dir, "app-0.1.0") 68 e2e.CreateCommit(dir, "commit 2") 69 e2e.CreateTag(dir, "app-0.2.0") 70 e2e.CreateCommit(dir, "commit 3") 71 72 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app") 73 var stdOut bytes.Buffer 74 var stdErr bytes.Buffer 75 command.Stdout = &stdOut 76 command.Stderr = &stdErr 77 err := command.Run() 78 check.Ok(t, err) 79 check.Equals(t, "0.2.0\n", stdOut.String()) 80 check.Equals(t, "", stdErr.String()) 81 } 82 83 func TestLatestGetsTagsFromRepositoryForMultipleCommits_UnnaturalSorting(t *testing.T) { 84 dir := e2e.CreateTempGitDir() 85 e2e.CreateTag(dir, "app-0.99.0") 86 e2e.CreateCommit(dir, "commit 2") 87 e2e.CreateTag(dir, "app-0.100.0") 88 e2e.CreateCommit(dir, "commit 3") 89 90 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app") 91 var stdOut bytes.Buffer 92 var stdErr bytes.Buffer 93 command.Stdout = &stdOut 94 command.Stderr = &stdErr 95 err := command.Run() 96 check.Ok(t, err) 97 check.Equals(t, "0.100.0\n", stdOut.String()) 98 check.Equals(t, "", stdErr.String()) 99 } 100 101 func TestLatestGetsTagsFromRepositoryForMultipleCommits_Prerelease(t *testing.T) { 102 dir := e2e.CreateTempGitDir() 103 e2e.CreateTag(dir, "app-0.1.0-RC1") 104 e2e.CreateCommit(dir, "commit 2") 105 e2e.CreateTag(dir, "app-0.1.0") 106 e2e.CreateCommit(dir, "commit 3") 107 108 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app") 109 var stdOut bytes.Buffer 110 var stdErr bytes.Buffer 111 command.Stdout = &stdOut 112 command.Stderr = &stdErr 113 err := command.Run() 114 check.Ok(t, err) 115 check.Equals(t, "0.1.0\n", stdOut.String()) 116 check.Equals(t, "", stdErr.String()) 117 } 118 119 func TestLatestGetsTagsFromRepositoryForMultipleCommits_PrereleaseIgnored(t *testing.T) { 120 dir := e2e.CreateTempGitDir() 121 e2e.CreateTag(dir, "app-0.1.0") 122 e2e.CreateCommit(dir, "commit 2") 123 e2e.CreateTag(dir, "app-0.2.0-RC1") 124 e2e.CreateCommit(dir, "commit 3") 125 126 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app") 127 var stdOut bytes.Buffer 128 var stdErr bytes.Buffer 129 command.Stdout = &stdOut 130 command.Stderr = &stdErr 131 err := command.Run() 132 check.Ok(t, err) 133 check.Equals(t, "0.1.0\n", stdOut.String()) 134 check.Equals(t, "", stdErr.String()) 135 } 136 137 func TestLatestGetsTagsFromRepositoryOnlyOnHead(t *testing.T) { 138 dir := e2e.CreateTempGitDir() 139 e2e.CreateTag(dir, "app-0.1.0") 140 e2e.CreateCommit(dir, "commit 2") 141 e2e.CreateTag(dir, "app-0.2.0") 142 _ = exec.Command("git", "checkout", "HEAD~1", "--detach").Run() 143 144 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app", "--head") 145 var stdOut bytes.Buffer 146 var stdErr bytes.Buffer 147 command.Stdout = &stdOut 148 command.Stderr = &stdErr 149 err := command.Run() 150 check.Equals(t, "", stdErr.String()) 151 check.Ok(t, err) 152 check.Equals(t, "0.1.0\n", stdOut.String()) 153 } 154 155 func TestLatestOpensRepositoryForStageWithNoTagsFails(t *testing.T) { 156 e2e.CreateTempGitDir() 157 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app", "promoted") 158 err := command.Run() 159 check.Assert(t, err != nil, "expecting error to not be nil, got %v", err) 160 } 161 162 func TestLatestOpensRepositoryForStageWithNoStageTagsFails(t *testing.T) { 163 dir := e2e.CreateTempGitDir() 164 e2e.CreateTag(dir, "app-0.1.0") 165 166 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app", "promoted") 167 err := command.Run() 168 check.Assert(t, err != nil, "expecting error to not be nil, got %v", err) 169 } 170 171 func TestLatestOpensRepositoryForStageWithNoStageTagsFails_requiresPlusSeparator(t *testing.T) { 172 dir := e2e.CreateTempGitDir() 173 e2e.CreateTag(dir, "app-0.1.0-promoted") 174 175 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app", "promoted") 176 err := command.Run() 177 check.Assert(t, err != nil, "expecting error to not be nil, got %v", err) 178 } 179 180 func TestLatestGetsTagsFromRepositoryForStage(t *testing.T) { 181 dir := e2e.CreateTempGitDir() 182 e2e.CreateTag(dir, "app-0.1.0") 183 e2e.CreateTag(dir, "app-0.1.0+promoted") 184 185 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app", "promoted") 186 var stdOut bytes.Buffer 187 var stdErr bytes.Buffer 188 command.Stdout = &stdOut 189 command.Stderr = &stdErr 190 err := command.Run() 191 check.Equals(t, "", stdErr.String()) 192 check.Ok(t, err) 193 check.Equals(t, "0.1.0\n", stdOut.String()) 194 } 195 196 func TestLatestGetsTagsFromRepositoryForStageWhenHeadIsNotTagged(t *testing.T) { 197 dir := e2e.CreateTempGitDir() 198 e2e.CreateTag(dir, "app-0.1.0") 199 e2e.CreateTag(dir, "app-0.1.0+promoted") 200 e2e.CreateCommit(dir, "commit 2") 201 202 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app", "promoted") 203 var stdOut bytes.Buffer 204 var stdErr bytes.Buffer 205 command.Stdout = &stdOut 206 command.Stderr = &stdErr 207 err := command.Run() 208 check.Equals(t, "", stdErr.String()) 209 check.Ok(t, err) 210 check.Equals(t, "0.1.0\n", stdOut.String()) 211 } 212 213 func TestLatestGetsTagsFromRepositoryForStageForMultipleCommits(t *testing.T) { 214 dir := e2e.CreateTempGitDir() 215 e2e.CreateTag(dir, "app-0.1.0") 216 e2e.CreateTag(dir, "app-0.1.0+promoted") 217 e2e.CreateCommit(dir, "commit 2") 218 e2e.CreateTag(dir, "app-0.2.0") 219 e2e.CreateTag(dir, "app-0.2.0+promoted") 220 e2e.CreateCommit(dir, "commit 3") 221 222 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app", "promoted") 223 var stdOut bytes.Buffer 224 var stdErr bytes.Buffer 225 command.Stdout = &stdOut 226 command.Stderr = &stdErr 227 err := command.Run() 228 check.Equals(t, "", stdErr.String()) 229 check.Ok(t, err) 230 check.Equals(t, "0.2.0\n", stdOut.String()) 231 } 232 233 func TestLatestGetsTagsFromRepositoryForStageForMultipleCommits_Prerelease(t *testing.T) { 234 dir := e2e.CreateTempGitDir() 235 e2e.CreateTag(dir, "app-0.1.0-rc1") 236 e2e.CreateTag(dir, "app-0.1.0-rc2") 237 e2e.CreateTag(dir, "app-0.1.0") 238 e2e.CreateTag(dir, "app-0.1.0+promoted") 239 e2e.CreateCommit(dir, "commit 2") 240 e2e.CreateTag(dir, "app-0.2.0") 241 e2e.CreateTag(dir, "app-0.2.0-rc1") 242 e2e.CreateTag(dir, "app-0.2.0-rc2") 243 e2e.CreateTag(dir, "app-0.2.0+promoted") 244 e2e.CreateCommit(dir, "commit 3") 245 246 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app", "promoted") 247 var stdOut bytes.Buffer 248 var stdErr bytes.Buffer 249 command.Stdout = &stdOut 250 command.Stderr = &stdErr 251 err := command.Run() 252 check.Equals(t, "", stdErr.String()) 253 check.Ok(t, err) 254 check.Equals(t, "0.2.0\n", stdOut.String()) 255 } 256 257 func TestLatestGetsTagsFromRepositoryForStageForMultipleCommits_PrereleaseIgnored(t *testing.T) { 258 dir := e2e.CreateTempGitDir() 259 e2e.CreateTag(dir, "app-0.1.0-rc1") 260 e2e.CreateTag(dir, "app-0.1.0-rc2") 261 e2e.CreateTag(dir, "app-0.1.0+promoted") 262 e2e.CreateCommit(dir, "commit 2") 263 e2e.CreateTag(dir, "app-0.2.0-rc1") 264 e2e.CreateTag(dir, "app-0.2.0-rc2") 265 e2e.CreateTag(dir, "app-0.2.0-rc2+promoted") 266 e2e.CreateCommit(dir, "commit 3") 267 268 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app", "promoted") 269 var stdOut bytes.Buffer 270 var stdErr bytes.Buffer 271 command.Stdout = &stdOut 272 command.Stderr = &stdErr 273 err := command.Run() 274 check.Equals(t, "", stdErr.String()) 275 check.Ok(t, err) 276 check.Equals(t, "0.1.0\n", stdOut.String()) 277 } 278 279 func TestLatestGetsTagsFromRepositoryForStageForMultipleCommits_onlyPromoted(t *testing.T) { 280 dir := e2e.CreateTempGitDir() 281 e2e.CreateTag(dir, "app-0.1.0") 282 e2e.CreateTag(dir, "app-0.1.0+promoted") 283 e2e.CreateCommit(dir, "commit 2") 284 e2e.CreateTag(dir, "app-0.2.0") 285 e2e.CreateTag(dir, "app-0.2.0") 286 e2e.CreateCommit(dir, "commit 3") 287 288 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app", "promoted") 289 var stdOut bytes.Buffer 290 var stdErr bytes.Buffer 291 command.Stdout = &stdOut 292 command.Stderr = &stdErr 293 err := command.Run() 294 check.Equals(t, "", stdErr.String()) 295 check.Ok(t, err) 296 check.Equals(t, "0.1.0\n", stdOut.String()) 297 } 298 299 func TestLatestGetsTagsFromRepositoryForStageOnlyOnHead(t *testing.T) { 300 dir := e2e.CreateTempGitDir() 301 e2e.CreateTag(dir, "app-0.1.0") 302 e2e.CreateTag(dir, "app-0.1.0+promoted") 303 e2e.CreateCommit(dir, "commit 2") 304 e2e.CreateTag(dir, "app-0.2.0") 305 e2e.CreateTag(dir, "app-0.2.0+promoted") 306 _ = exec.Command("git", "checkout", "HEAD~1", "--detach").Run() 307 308 command := exec.Command(e2e.CDX, "tag", "latest", "-n", "app", "promoted", "--head") 309 var stdOut bytes.Buffer 310 var stdErr bytes.Buffer 311 command.Stdout = &stdOut 312 command.Stderr = &stdErr 313 err := command.Run() 314 check.Equals(t, "", stdErr.String()) 315 check.Ok(t, err) 316 check.Equals(t, "0.1.0\n", stdOut.String()) 317 }