github.com/purpleclay/gitz@v0.8.2-0.20240515052600-43f80eea2fe1/push_test.go (about)

     1  package git_test
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	git "github.com/purpleclay/gitz"
     8  	"github.com/purpleclay/gitz/gittest"
     9  	"github.com/stretchr/testify/assert"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestPush(t *testing.T) {
    14  	gittest.InitRepository(t, gittest.WithLocalCommits("testing git push"))
    15  
    16  	client, _ := git.NewClient()
    17  	out, err := client.Push()
    18  
    19  	require.NoError(t, err)
    20  	assert.Contains(t, out, fmt.Sprintf("%[1]s -> %[1]s", gittest.DefaultBranch))
    21  
    22  	remoteLog := gittest.RemoteLog(t)
    23  	require.Equal(t, "testing git push", remoteLog[0].Message)
    24  }
    25  
    26  func TestPushWithPushOptions(t *testing.T) {
    27  	gittest.InitRepository(t, gittest.WithLocalCommits("testing git push options"))
    28  
    29  	client, _ := git.NewClient()
    30  	_, err := client.Push(git.WithPushOptions("option1", "option2"))
    31  
    32  	require.NoError(t, err)
    33  }
    34  
    35  func TestPushResolveBranchError(t *testing.T) {
    36  	nonWorkingDirectory(t)
    37  
    38  	client, _ := git.NewClient()
    39  	_, err := client.Push()
    40  
    41  	assert.Error(t, err)
    42  }
    43  
    44  func TestPushAwareOfCurrentBranch(t *testing.T) {
    45  	log := "(HEAD -> branch-aware, main, origin/main) chore: finished scaffolding project"
    46  	gittest.InitRepository(t,
    47  		gittest.WithLog(log),
    48  		gittest.WithLocalCommits("this should be pushed on current branch"))
    49  
    50  	client, _ := git.NewClient()
    51  	out, err := client.Push()
    52  
    53  	require.NoError(t, err)
    54  	assert.Contains(t, out, fmt.Sprintf("%[1]s -> %[1]s", "branch-aware"))
    55  }
    56  
    57  func TestPushWithAllBranches(t *testing.T) {
    58  	log := "(main, local-branch-1, local-branch-2) feat: can push all branches"
    59  	gittest.InitRepository(t, gittest.WithLog(log))
    60  	gittest.Tag(t, "0.1.0")
    61  
    62  	client, _ := git.NewClient()
    63  	out, err := client.Push(git.WithAllBranches())
    64  
    65  	require.NoError(t, err)
    66  	assert.Contains(t, out, fmt.Sprintf("%[1]s -> %[1]s", "main"))
    67  	assert.Contains(t, out, fmt.Sprintf("%[1]s -> %[1]s", "local-branch-1"))
    68  	assert.Contains(t, out, fmt.Sprintf("%[1]s -> %[1]s", "local-branch-2"))
    69  	assert.NotContains(t, out, fmt.Sprintf("%[1]s -> %[1]s", "0.1.0"))
    70  }
    71  
    72  func TestPushWithAllTags(t *testing.T) {
    73  	log := "(main) feat: can push all tags"
    74  	gittest.InitRepository(t, gittest.WithLog(log))
    75  	gittest.Tag(t, "0.1.0")
    76  	gittest.Tag(t, "0.2.0")
    77  
    78  	client, _ := git.NewClient()
    79  	out, err := client.Push(git.WithAllTags())
    80  
    81  	require.NoError(t, err)
    82  	assert.Contains(t, out, fmt.Sprintf("%[1]s -> %[1]s", "0.1.0"))
    83  	assert.Contains(t, out, fmt.Sprintf("%[1]s -> %[1]s", "0.2.0"))
    84  	assert.NotContains(t, out, fmt.Sprintf("%[1]s -> %[1]s", "main"))
    85  }
    86  
    87  func TestPushWithRefSpecs(t *testing.T) {
    88  	log := "(main, local-branch-3, local-branch-4) feat: can cherry-pick push"
    89  	gittest.InitRepository(t, gittest.WithLog(log))
    90  	gittest.Tag(t, "0.3.0")
    91  	gittest.Tag(t, "0.4.0")
    92  
    93  	client, _ := git.NewClient()
    94  	out, err := client.Push(git.WithRefSpecs("0.3.0", "local-branch-3"))
    95  
    96  	require.NoError(t, err)
    97  	assert.Contains(t, out, fmt.Sprintf("%[1]s -> %[1]s", "0.3.0"))
    98  	assert.Contains(t, out, fmt.Sprintf("%[1]s -> %[1]s", "local-branch-3"))
    99  	assert.NotContains(t, out, fmt.Sprintf("%[1]s -> %[1]s", "0.4.0"))
   100  	assert.NotContains(t, out, fmt.Sprintf("%[1]s -> %[1]s", "local-branch-4"))
   101  }
   102  
   103  func TestPushWithDeleteRefSpecs(t *testing.T) {
   104  	log := "(tag: 0.1.0, tag: 0.2.0) feat: recreate user data indexes for speedier queries"
   105  	gittest.InitRepository(t, gittest.WithLog(log))
   106  
   107  	client, _ := git.NewClient()
   108  	_, err := client.Push(git.WithDeleteRefSpecs("0.2.0"))
   109  	require.NoError(t, err)
   110  
   111  	remoteTags := gittest.RemoteTags(t)
   112  	assert.ElementsMatch(t, []string{"0.1.0"}, remoteTags)
   113  }