mirror of
				https://github.com/jesseduffield/lazygit.git
				synced 2025-10-31 02:25:35 +03:00 
			
		
		
		
	In go 1.22, loop variables are redeclared with each iteration of the loop, rather than simple updated on each iteration. This means that we no longer need to manually redeclare variables when they're closed over by a function.
		
			
				
	
	
		
			171 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package git_commands
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/jesseduffield/gocui"
 | |
| 	"github.com/jesseduffield/lazygit/pkg/commands/oscommands"
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| )
 | |
| 
 | |
| func TestSyncPush(t *testing.T) {
 | |
| 	type scenario struct {
 | |
| 		testName string
 | |
| 		opts     PushOpts
 | |
| 		test     func(oscommands.ICmdObj, error)
 | |
| 	}
 | |
| 
 | |
| 	scenarios := []scenario{
 | |
| 		{
 | |
| 			testName: "Push with force disabled",
 | |
| 			opts:     PushOpts{Force: false},
 | |
| 			test: func(cmdObj oscommands.ICmdObj, err error) {
 | |
| 				assert.Equal(t, cmdObj.Args(), []string{"git", "push"})
 | |
| 				assert.NoError(t, err)
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			testName: "Push with force enabled",
 | |
| 			opts:     PushOpts{Force: true},
 | |
| 			test: func(cmdObj oscommands.ICmdObj, err error) {
 | |
| 				assert.Equal(t, cmdObj.Args(), []string{"git", "push", "--force-with-lease"})
 | |
| 				assert.NoError(t, err)
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			testName: "Push with force disabled, upstream supplied",
 | |
| 			opts: PushOpts{
 | |
| 				Force:          false,
 | |
| 				UpstreamRemote: "origin",
 | |
| 				UpstreamBranch: "master",
 | |
| 			},
 | |
| 			test: func(cmdObj oscommands.ICmdObj, err error) {
 | |
| 				assert.Equal(t, cmdObj.Args(), []string{"git", "push", "origin", "master"})
 | |
| 				assert.NoError(t, err)
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			testName: "Push with force disabled, setting upstream",
 | |
| 			opts: PushOpts{
 | |
| 				Force:          false,
 | |
| 				UpstreamRemote: "origin",
 | |
| 				UpstreamBranch: "master",
 | |
| 				SetUpstream:    true,
 | |
| 			},
 | |
| 			test: func(cmdObj oscommands.ICmdObj, err error) {
 | |
| 				assert.Equal(t, cmdObj.Args(), []string{"git", "push", "--set-upstream", "origin", "master"})
 | |
| 				assert.NoError(t, err)
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			testName: "Push with force enabled, setting upstream",
 | |
| 			opts: PushOpts{
 | |
| 				Force:          true,
 | |
| 				UpstreamRemote: "origin",
 | |
| 				UpstreamBranch: "master",
 | |
| 				SetUpstream:    true,
 | |
| 			},
 | |
| 			test: func(cmdObj oscommands.ICmdObj, err error) {
 | |
| 				assert.Equal(t, cmdObj.Args(), []string{"git", "push", "--force-with-lease", "--set-upstream", "origin", "master"})
 | |
| 				assert.NoError(t, err)
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			testName: "Push with remote branch but no origin",
 | |
| 			opts: PushOpts{
 | |
| 				Force:          true,
 | |
| 				UpstreamRemote: "",
 | |
| 				UpstreamBranch: "master",
 | |
| 				SetUpstream:    true,
 | |
| 			},
 | |
| 			test: func(cmdObj oscommands.ICmdObj, err error) {
 | |
| 				assert.Error(t, err)
 | |
| 				assert.EqualValues(t, "Must specify a remote if specifying a branch", err.Error())
 | |
| 			},
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	for _, s := range scenarios {
 | |
| 		t.Run(s.testName, func(t *testing.T) {
 | |
| 			instance := buildSyncCommands(commonDeps{})
 | |
| 			task := gocui.NewFakeTask()
 | |
| 			s.test(instance.PushCmdObj(task, s.opts))
 | |
| 		})
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestSyncFetch(t *testing.T) {
 | |
| 	type scenario struct {
 | |
| 		testName       string
 | |
| 		fetchAllConfig bool
 | |
| 		test           func(oscommands.ICmdObj)
 | |
| 	}
 | |
| 
 | |
| 	scenarios := []scenario{
 | |
| 		{
 | |
| 			testName:       "Fetch in foreground (all=false)",
 | |
| 			fetchAllConfig: false,
 | |
| 			test: func(cmdObj oscommands.ICmdObj) {
 | |
| 				assert.True(t, cmdObj.ShouldLog())
 | |
| 				assert.Equal(t, cmdObj.GetCredentialStrategy(), oscommands.PROMPT)
 | |
| 				assert.Equal(t, cmdObj.Args(), []string{"git", "fetch"})
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			testName:       "Fetch in foreground (all=true)",
 | |
| 			fetchAllConfig: true,
 | |
| 			test: func(cmdObj oscommands.ICmdObj) {
 | |
| 				assert.True(t, cmdObj.ShouldLog())
 | |
| 				assert.Equal(t, cmdObj.GetCredentialStrategy(), oscommands.PROMPT)
 | |
| 				assert.Equal(t, cmdObj.Args(), []string{"git", "fetch", "--all"})
 | |
| 			},
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	for _, s := range scenarios {
 | |
| 		t.Run(s.testName, func(t *testing.T) {
 | |
| 			instance := buildSyncCommands(commonDeps{})
 | |
| 			instance.UserConfig.Git.FetchAll = s.fetchAllConfig
 | |
| 			task := gocui.NewFakeTask()
 | |
| 			s.test(instance.FetchCmdObj(task))
 | |
| 		})
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestSyncFetchBackground(t *testing.T) {
 | |
| 	type scenario struct {
 | |
| 		testName       string
 | |
| 		fetchAllConfig bool
 | |
| 		test           func(oscommands.ICmdObj)
 | |
| 	}
 | |
| 
 | |
| 	scenarios := []scenario{
 | |
| 		{
 | |
| 			testName:       "Fetch in background (all=false)",
 | |
| 			fetchAllConfig: false,
 | |
| 			test: func(cmdObj oscommands.ICmdObj) {
 | |
| 				assert.False(t, cmdObj.ShouldLog())
 | |
| 				assert.Equal(t, cmdObj.GetCredentialStrategy(), oscommands.FAIL)
 | |
| 				assert.Equal(t, cmdObj.Args(), []string{"git", "fetch"})
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			testName:       "Fetch in background (all=true)",
 | |
| 			fetchAllConfig: true,
 | |
| 			test: func(cmdObj oscommands.ICmdObj) {
 | |
| 				assert.False(t, cmdObj.ShouldLog())
 | |
| 				assert.Equal(t, cmdObj.GetCredentialStrategy(), oscommands.FAIL)
 | |
| 				assert.Equal(t, cmdObj.Args(), []string{"git", "fetch", "--all"})
 | |
| 			},
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	for _, s := range scenarios {
 | |
| 		t.Run(s.testName, func(t *testing.T) {
 | |
| 			instance := buildSyncCommands(commonDeps{})
 | |
| 			instance.UserConfig.Git.FetchAll = s.fetchAllConfig
 | |
| 			s.test(instance.FetchBackgroundCmdObj())
 | |
| 		})
 | |
| 	}
 | |
| }
 |