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  }