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 }