From 74acb3e86a3b171c79c06e3d5d02abcfe5c8cdd0 Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Fri, 16 Sep 2022 22:15:02 -0700 Subject: add integration tests for cherry picking --- pkg/integration/tests/cherry_pick/cherry_pick.go | 66 ++++++++++++++++ .../tests/cherry_pick/cherry_pick_conflicts.go | 87 ++++++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 pkg/integration/tests/cherry_pick/cherry_pick.go create mode 100644 pkg/integration/tests/cherry_pick/cherry_pick_conflicts.go (limited to 'pkg/integration/tests/cherry_pick') 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")) + }, +}) -- cgit v1.2.3