summaryrefslogtreecommitdiffstats
path: root/pkg/integration/tests/cherry_pick
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2022-09-16 22:15:02 -0700
committerJesse Duffield <jessedduffield@gmail.com>2022-09-16 22:15:16 -0700
commit74acb3e86a3b171c79c06e3d5d02abcfe5c8cdd0 (patch)
treea68f7659fab9157d74bd39e9a296b26531ee1f66 /pkg/integration/tests/cherry_pick
parent9351af382933d456de65acab1451b17677ddb171 (diff)
add integration tests for cherry picking
Diffstat (limited to 'pkg/integration/tests/cherry_pick')
-rw-r--r--pkg/integration/tests/cherry_pick/cherry_pick.go66
-rw-r--r--pkg/integration/tests/cherry_pick/cherry_pick_conflicts.go87
2 files changed, 153 insertions, 0 deletions
diff --git a/pkg/integration/tests/cherry_pick/cherry_pick.go b/pkg/integration/tests/cherry_pick/cherry_pick.go
new file mode 100644
index 000000000..0f5715434
--- /dev/null
+++ b/pkg/integration/tests/cherry_pick/cherry_pick.go
@@ -0,0 +1,66 @@
+package cherry_pick
+
+import (
+ "github.com/jesseduffield/lazygit/pkg/config"
+ . "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var CherryPick = NewIntegrationTest(NewIntegrationTestArgs{
+ Description: "Cherry pick commits from the subcommits view, without conflicts",
+ ExtraCmdArgs: "",
+ Skip: false,
+ SetupConfig: func(config *config.AppConfig) {},
+ SetupRepo: func(shell *Shell) {
+ shell.
+ EmptyCommit("base").
+ NewBranch("first-branch").
+ NewBranch("second-branch").
+ Checkout("first-branch").
+ EmptyCommit("one").
+ EmptyCommit("two").
+ Checkout("second-branch").
+ EmptyCommit("three").
+ EmptyCommit("four").
+ Checkout("first-branch")
+ },
+ Run: func(shell *Shell, input *Input, assert *Assert, keys config.KeybindingConfig) {
+ input.SwitchToBranchesWindow()
+ assert.CurrentViewName("localBranches")
+
+ assert.MatchSelectedLine(Contains("first-branch"))
+ input.NextItem()
+ assert.MatchSelectedLine(Contains("second-branch"))
+
+ input.Enter()
+
+ assert.CurrentViewName("subCommits")
+ assert.MatchSelectedLine(Contains("four"))
+ input.PressKeys(keys.Commits.CherryPickCopy)
+ assert.MatchViewContent("information", Contains("1 commit copied"))
+
+ input.NextItem()
+ assert.MatchSelectedLine(Contains("three"))
+ input.PressKeys(keys.Commits.CherryPickCopy)
+ assert.MatchViewContent("information", Contains("2 commits copied"))
+
+ input.SwitchToCommitsWindow()
+ assert.CurrentViewName("commits")
+
+ assert.MatchSelectedLine(Contains("two"))
+ input.PressKeys(keys.Commits.PasteCommits)
+ assert.InAlert()
+ assert.MatchCurrentViewContent(Contains("Are you sure you want to cherry-pick the copied commits onto this branch?"))
+
+ input.Confirm()
+ assert.CurrentViewName("commits")
+ assert.MatchSelectedLine(Contains("four"))
+ input.NextItem()
+ assert.MatchSelectedLine(Contains("three"))
+ input.NextItem()
+ assert.MatchSelectedLine(Contains("two"))
+
+ assert.MatchViewContent("information", Contains("2 commits copied"))
+ input.PressKeys(keys.Universal.Return)
+ assert.MatchViewContent("information", NotContains("commits copied"))
+ },
+})
diff --git a/pkg/integration/tests/cherry_pick/cherry_pick_conflicts.go b/pkg/integration/tests/cherry_pick/cherry_pick_conflicts.go
new file mode 100644
index 000000000..e747d8e4d
--- /dev/null
+++ b/pkg/integration/tests/cherry_pick/cherry_pick_conflicts.go
@@ -0,0 +1,87 @@
+package cherry_pick
+
+import (
+ "github.com/jesseduffield/lazygit/pkg/config"
+ . "github.com/jesseduffield/lazygit/pkg/integration/components"
+ "github.com/jesseduffield/lazygit/pkg/integration/tests/shared"
+)
+
+var CherryPickConflicts = NewIntegrationTest(NewIntegrationTestArgs{
+ Description: "Cherry pick commits from the subcommits view, with conflicts",
+ ExtraCmdArgs: "",
+ Skip: false,
+ SetupConfig: func(config *config.AppConfig) {},
+ SetupRepo: func(shell *Shell) {
+ shared.MergeConflictsSetup(shell)
+ },
+ Run: func(shell *Shell, input *Input, assert *Assert, keys config.KeybindingConfig) {
+ input.SwitchToBranchesWindow()
+ assert.CurrentViewName("localBranches")
+
+ assert.MatchSelectedLine(Contains("first-change-branch"))
+ input.NextItem()
+ assert.MatchSelectedLine(Contains("second-change-branch"))
+
+ input.Enter()
+
+ assert.CurrentViewName("subCommits")
+ assert.MatchSelectedLine(Contains("second-change-branch unrelated change"))
+ input.PressKeys(keys.Commits.CherryPickCopy)
+ assert.MatchViewContent("information", Contains("1 commit copied"))
+
+ input.NextItem()
+ assert.MatchSelectedLine(Contains("second change"))
+ input.PressKeys(keys.Commits.CherryPickCopy)
+ assert.MatchViewContent("information", Contains("2 commits copied"))
+
+ input.SwitchToCommitsWindow()
+ assert.CurrentViewName("commits")
+
+ assert.MatchSelectedLine(Contains("first change"))
+ input.PressKeys(keys.Commits.PasteCommits)
+ assert.InAlert()
+ assert.MatchCurrentViewContent(Contains("Are you sure you want to cherry-pick the copied commits onto this branch?"))
+
+ input.Confirm()
+
+ assert.MatchCurrentViewContent(Contains("Conflicts!"))
+ input.Confirm()
+
+ assert.CurrentViewName("files")
+ assert.MatchSelectedLine(Contains("file"))
+
+ // not using Confirm() convenience method because I suspect we might change this
+ // keybinding to something more bespoke
+ input.PressKeys(keys.Universal.Confirm)
+
+ assert.CurrentViewName("mergeConflicts")
+ // picking 'Second change'
+ input.NextItem()
+ input.PrimaryAction()
+
+ assert.InConfirm()
+ assert.MatchCurrentViewContent(Contains("all merge conflicts resolved. Continue?"))
+ input.Confirm()
+
+ assert.CurrentViewName("files")
+ assert.WorkingTreeFileCount(0)
+
+ input.SwitchToCommitsWindow()
+ assert.CurrentViewName("commits")
+
+ assert.MatchSelectedLine(Contains("second-change-branch unrelated change"))
+ input.NextItem()
+ assert.MatchSelectedLine(Contains("second change"))
+ // because we picked 'Second change' when resolving the conflict,
+ // we now see this commit as having replaced First Change with Second Change,
+ // as opposed to replacing 'Original' with 'Second change'
+ assert.MatchMainViewContent(Contains("-First Change"))
+ assert.MatchMainViewContent(Contains("+Second Change"))
+ input.NextItem()
+ assert.MatchSelectedLine(Contains("first change"))
+
+ assert.MatchViewContent("information", Contains("2 commits copied"))
+ input.PressKeys(keys.Universal.Return)
+ assert.MatchViewContent("information", NotContains("commits copied"))
+ },
+})