diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2023-02-22 19:36:31 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2023-02-22 19:36:31 +1100 |
commit | 78f3a7a4786bf5f70af3489e6c4f2e44cddbd978 (patch) | |
tree | 4e1920587bb05585816107e05ab3c42a8fa9bfc6 /pkg/integration | |
parent | 526c9dea9b298d69a3fafec3303549b0d6292af4 (diff) |
migrate interactive rebase integration tests
Diffstat (limited to 'pkg/integration')
9 files changed, 508 insertions, 72 deletions
diff --git a/pkg/integration/tests/interactive_rebase/move.go b/pkg/integration/tests/interactive_rebase/move.go new file mode 100644 index 000000000..e7679a793 --- /dev/null +++ b/pkg/integration/tests/interactive_rebase/move.go @@ -0,0 +1,84 @@ +package interactive_rebase + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var Move = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Directly move a commit all the way down and all the way back up", + ExtraCmdArgs: "", + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.CreateNCommits(4) + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("commit 04").IsSelected(), + Contains("commit 03"), + Contains("commit 02"), + Contains("commit 01"), + ). + Press(keys.Commits.MoveDownCommit). + Lines( + Contains("commit 03"), + Contains("commit 04").IsSelected(), + Contains("commit 02"), + Contains("commit 01"), + ). + Press(keys.Commits.MoveDownCommit). + Lines( + Contains("commit 03"), + Contains("commit 02"), + Contains("commit 04").IsSelected(), + Contains("commit 01"), + ). + Press(keys.Commits.MoveDownCommit). + Lines( + Contains("commit 03"), + Contains("commit 02"), + Contains("commit 01"), + Contains("commit 04").IsSelected(), + ). + // assert nothing happens upon trying to move beyond the last commit + Press(keys.Commits.MoveDownCommit). + Lines( + Contains("commit 03"), + Contains("commit 02"), + Contains("commit 01"), + Contains("commit 04").IsSelected(), + ). + Press(keys.Commits.MoveUpCommit). + Lines( + Contains("commit 03"), + Contains("commit 02"), + Contains("commit 04").IsSelected(), + Contains("commit 01"), + ). + Press(keys.Commits.MoveUpCommit). + Lines( + Contains("commit 03"), + Contains("commit 04").IsSelected(), + Contains("commit 02"), + Contains("commit 01"), + ). + Press(keys.Commits.MoveUpCommit). + Lines( + Contains("commit 04").IsSelected(), + Contains("commit 03"), + Contains("commit 02"), + Contains("commit 01"), + ). + // assert nothing happens upon trying to move beyond the first commit + Press(keys.Commits.MoveUpCommit). + Lines( + Contains("commit 04").IsSelected(), + Contains("commit 03"), + Contains("commit 02"), + Contains("commit 01"), + ) + }, +}) diff --git a/pkg/integration/tests/interactive_rebase/move_in_rebase.go b/pkg/integration/tests/interactive_rebase/move_in_rebase.go new file mode 100644 index 000000000..daeedbf87 --- /dev/null +++ b/pkg/integration/tests/interactive_rebase/move_in_rebase.go @@ -0,0 +1,96 @@ +package interactive_rebase + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var MoveInRebase = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Via a single interactive rebase move a commit all the way up then back down then slightly back up again and apply the change", + ExtraCmdArgs: "", + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.CreateNCommits(4) + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("commit 04").IsSelected(), + Contains("commit 03"), + Contains("commit 02"), + Contains("commit 01"), + ). + NavigateToListItem(Contains("commit 01")). + Press(keys.Universal.Edit). + Lines( + Contains("commit 04"), + Contains("commit 03"), + Contains("commit 02"), + Contains("YOU ARE HERE").Contains("commit 01").IsSelected(), + ). + SelectPreviousItem(). + Press(keys.Commits.MoveUpCommit). + Lines( + Contains("commit 04"), + Contains("commit 02").IsSelected(), + Contains("commit 03"), + Contains("YOU ARE HERE").Contains("commit 01"), + ). + Press(keys.Commits.MoveUpCommit). + Lines( + Contains("commit 02").IsSelected(), + Contains("commit 04"), + Contains("commit 03"), + Contains("YOU ARE HERE").Contains("commit 01"), + ). + Press(keys.Commits.MoveUpCommit). + // assert we can't move past the top + Lines( + Contains("commit 02").IsSelected(), + Contains("commit 04"), + Contains("commit 03"), + Contains("YOU ARE HERE").Contains("commit 01"), + ). + Press(keys.Commits.MoveDownCommit). + Lines( + Contains("commit 04"), + Contains("commit 02").IsSelected(), + Contains("commit 03"), + Contains("YOU ARE HERE").Contains("commit 01"), + ). + Press(keys.Commits.MoveDownCommit). + Lines( + Contains("commit 04"), + Contains("commit 03"), + Contains("commit 02").IsSelected(), + Contains("YOU ARE HERE").Contains("commit 01"), + ). + // assert we can't move past the bottom + Press(keys.Commits.MoveDownCommit). + Lines( + Contains("commit 04"), + Contains("commit 03"), + Contains("commit 02").IsSelected(), + Contains("YOU ARE HERE").Contains("commit 01"), + ). + // move it back up one so that we land in a different order than we started with + Press(keys.Commits.MoveUpCommit). + Lines( + Contains("commit 04"), + Contains("commit 02").IsSelected(), + Contains("commit 03"), + Contains("YOU ARE HERE").Contains("commit 01"), + ). + Tap(func() { + t.Actions().ContinueRebase() + }). + Lines( + Contains("commit 04"), + Contains("commit 02").IsSelected(), + Contains("commit 03"), + DoesNotContain("YOU ARE HERE").Contains("commit 01"), + ) + }, +}) diff --git a/pkg/integration/tests/interactive_rebase/one.go b/pkg/integration/tests/interactive_rebase/one.go deleted file mode 100644 index d6d01239a..000000000 --- a/pkg/integration/tests/interactive_rebase/one.go +++ /dev/null @@ -1,71 +0,0 @@ -package interactive_rebase - -import ( - "github.com/jesseduffield/lazygit/pkg/config" - . "github.com/jesseduffield/lazygit/pkg/integration/components" -) - -var One = NewIntegrationTest(NewIntegrationTestArgs{ - Description: "Begins an interactive rebase, then fixups, drops, and squashes some commits", - ExtraCmdArgs: "", - Skip: false, - SetupConfig: func(config *config.AppConfig) {}, - SetupRepo: func(shell *Shell) { - shell. - CreateNCommits(5) // these will appears at commit 05, 04, 04, down to 01 - }, - Run: func(t *TestDriver, keys config.KeybindingConfig) { - t.Views().Commits(). - Focus(). - Lines( - Contains("commit 05"), - Contains("commit 04"), - Contains("commit 03"), - Contains("commit 02"), - Contains("commit 01"), - ). - NavigateToListItem(Contains("commit 02")). - Press(keys.Universal.Edit). - Lines( - MatchesRegexp("pick.*commit 05"), - MatchesRegexp("pick.*commit 04"), - MatchesRegexp("pick.*commit 03"), - MatchesRegexp("YOU ARE HERE.*commit 02").IsSelected(), - Contains("commit 01"), - ). - SelectPreviousItem(). - Press(keys.Commits.MarkCommitAsFixup). - Lines( - MatchesRegexp("pick.*commit 05"), - MatchesRegexp("pick.*commit 04"), - MatchesRegexp("fixup.*commit 03").IsSelected(), - MatchesRegexp("YOU ARE HERE.*commit 02"), - Contains("commit 01"), - ). - SelectPreviousItem(). - Press(keys.Universal.Remove). - Lines( - MatchesRegexp("pick.*commit 05"), - MatchesRegexp("drop.*commit 04").IsSelected(), - MatchesRegexp("fixup.*commit 03"), - MatchesRegexp("YOU ARE HERE.*commit 02"), - Contains("commit 01"), - ). - SelectPreviousItem(). - Press(keys.Commits.SquashDown). - Lines( - MatchesRegexp("squash.*commit 05").IsSelected(), - MatchesRegexp("drop.*commit 04"), - MatchesRegexp("fixup.*commit 03"), - MatchesRegexp("YOU ARE HERE.*commit 02"), - Contains("commit 01"), - ). - Tap(func() { - t.Actions().ContinueRebase() - }). - Lines( - Contains("commit 02"), - Contains("commit 01"), - ) - }, -}) diff --git a/pkg/integration/tests/interactive_rebase/rebase.go b/pkg/integration/tests/interactive_rebase/rebase.go new file mode 100644 index 000000000..3951d7826 --- /dev/null +++ b/pkg/integration/tests/interactive_rebase/rebase.go @@ -0,0 +1,122 @@ +package interactive_rebase + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var Rebase = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Begins an interactive rebase, then fixups, drops, and squashes some commits", + ExtraCmdArgs: "", + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.EmptyCommit("initial commit") + shell.EmptyCommit("first commit to edit") + shell.EmptyCommit("commit to squash") + shell.EmptyCommit("second commit to edit") + shell.EmptyCommit("commit to drop") + + shell.CreateFileAndAdd("fixup-commit-file", "fixup-commit-file") + shell.Commit("commit to fixup") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("commit to fixup"), + Contains("commit to drop"), + Contains("second commit to edit"), + Contains("commit to squash"), + Contains("first commit to edit"), + Contains("initial commit"), + ). + NavigateToListItem(Contains("first commit to edit")). + Press(keys.Universal.Edit). + Lines( + MatchesRegexp("pick.*commit to fixup"), + MatchesRegexp("pick.*commit to drop"), + MatchesRegexp("pick.*second commit to edit"), + MatchesRegexp("pick.*commit to squash"), + MatchesRegexp("YOU ARE HERE.*first commit to edit").IsSelected(), + Contains("initial commit"), + ). + SelectPreviousItem(). + Press(keys.Commits.SquashDown). + Lines( + MatchesRegexp("pick.*commit to fixup"), + MatchesRegexp("pick.*commit to drop"), + MatchesRegexp("pick.*second commit to edit"), + MatchesRegexp("squash.*commit to squash").IsSelected(), + MatchesRegexp("YOU ARE HERE.*first commit to edit"), + Contains("initial commit"), + ). + SelectPreviousItem(). + Press(keys.Universal.Edit). + Lines( + MatchesRegexp("pick.*commit to fixup"), + MatchesRegexp("pick.*commit to drop"), + MatchesRegexp("edit.*second commit to edit").IsSelected(), + MatchesRegexp("squash.*commit to squash"), + MatchesRegexp("YOU ARE HERE.*first commit to edit"), + Contains("initial commit"), + ). + SelectPreviousItem(). + Press(keys.Universal.Remove). + Lines( + MatchesRegexp("pick.*commit to fixup"), + MatchesRegexp("drop.*commit to drop").IsSelected(), + MatchesRegexp("edit.*second commit to edit"), + MatchesRegexp("squash.*commit to squash"), + MatchesRegexp("YOU ARE HERE.*first commit to edit"), + Contains("initial commit"), + ). + SelectPreviousItem(). + Press(keys.Commits.MarkCommitAsFixup). + Lines( + MatchesRegexp("fixup.*commit to fixup").IsSelected(), + MatchesRegexp("drop.*commit to drop"), + MatchesRegexp("edit.*second commit to edit"), + MatchesRegexp("squash.*commit to squash"), + MatchesRegexp("YOU ARE HERE.*first commit to edit"), + Contains("initial commit"), + ). + Tap(func() { + t.Actions().ContinueRebase() + }). + Lines( + MatchesRegexp("fixup.*commit to fixup").IsSelected(), + MatchesRegexp("drop.*commit to drop"), + MatchesRegexp("YOU ARE HERE.*second commit to edit"), + MatchesRegexp("first commit to edit"), + Contains("initial commit"), + ). + Tap(func() { + t.Actions().ContinueRebase() + }). + Lines( + Contains("second commit to edit").IsSelected(), + Contains("first commit to edit"), + Contains("initial commit"), + ). + Tap(func() { + // commit 4 was squashed into 6 so we assert that their messages have been concatenated + t.Views().Main().Content( + Contains("second commit to edit"). + // file from fixup commit is present + Contains("fixup-commit-file"). + // but message is not (because it's a fixup, not a squash) + DoesNotContain("commit to fixup"), + ) + }). + SelectNextItem(). + Tap(func() { + // commit 4 was squashed into 6 so we assert that their messages have been concatenated + t.Views().Main().Content( + Contains("first commit to edit"). + // message from squashed commit has been concatenated with message other commit + Contains("commit to squash"), + ) + }) + }, +}) diff --git a/pkg/integration/tests/interactive_rebase/reword_first_commit.go b/pkg/integration/tests/interactive_rebase/reword_first_commit.go index 9e631da09..d4835fcd8 100644 --- a/pkg/integration/tests/interactive_rebase/reword_first_commit.go +++ b/pkg/integration/tests/interactive_rebase/reword_first_commit.go @@ -5,6 +5,9 @@ import ( . "github.com/jesseduffield/lazygit/pkg/integration/components" ) +// Rewording the first commit is tricky because you can't rebase from its parent commit, +// hence having a specific test for this + var RewordFirstCommit = NewIntegrationTest(NewIntegrationTestArgs{ Description: "Rewords the first commit, just to show that it's possible", ExtraCmdArgs: "", diff --git a/pkg/integration/tests/interactive_rebase/reword_last_commit.go b/pkg/integration/tests/interactive_rebase/reword_last_commit.go new file mode 100644 index 000000000..9a4329219 --- /dev/null +++ b/pkg/integration/tests/interactive_rebase/reword_last_commit.go @@ -0,0 +1,38 @@ +package interactive_rebase + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var RewordLastCommit = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Rewords the last (HEAD) commit", + ExtraCmdArgs: "", + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell. + CreateNCommits(2) + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("commit 02").IsSelected(), + Contains("commit 01"), + ). + Press(keys.Commits.RenameCommit). + Tap(func() { + t.ExpectPopup().Prompt(). + Title(Equals("reword commit")). + InitialText(Equals("commit 02")). + Clear(). + Type("renamed 02"). + Confirm() + }). + Lines( + Contains("renamed 02"), + Contains("commit 01"), + ) + }, +}) diff --git a/pkg/integration/tests/interactive_rebase/swap_in_rebase_with_conflict.go b/pkg/integration/tests/interactive_rebase/swap_in_rebase_with_conflict.go new file mode 100644 index 000000000..e177dd0cb --- /dev/null +++ b/pkg/integration/tests/interactive_rebase/swap_in_rebase_with_conflict.go @@ -0,0 +1,126 @@ +package interactive_rebase + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var SwapInRebaseWithConflict = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Via an edit-triggered rebase, swap two commits, causing a conflict. Then resolve the conflict and continue", + ExtraCmdArgs: "", + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.CreateFileAndAdd("myfile", "one") + shell.Commit("commit one") + shell.UpdateFileAndAdd("myfile", "two") + shell.Commit("commit two") + shell.UpdateFileAndAdd("myfile", "three") + shell.Commit("commit three") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("commit three").IsSelected(), + Contains("commit two"), + Contains("commit one"), + ). + NavigateToListItem(Contains("commit one")). + Press(keys.Universal.Edit). + Lines( + Contains("commit three"), + Contains("commit two"), + Contains("YOU ARE HERE").Contains("commit one").IsSelected(), + ). + SelectPreviousItem(). + Press(keys.Commits.MoveUpCommit). + Lines( + Contains("commit two").IsSelected(), + Contains("commit three"), + Contains("YOU ARE HERE").Contains("commit one"), + ). + Tap(func() { + t.Actions().ContinueRebase() + }) + + handleConflictsFromSwap(t) + }, +}) + +func handleConflictsFromSwap(t *TestDriver) { + continueMerge := func() { + t.ExpectPopup().Confirmation(). + Title(Equals("continue")). + Content(Contains("all merge conflicts resolved. Continue?")). + Confirm() + } + + acceptConflicts := func() { + t.ExpectPopup().Confirmation(). + Title(Equals("Auto-merge failed")). + Content(Contains("Conflicts!")). + Confirm() + } + + acceptConflicts() + + t.Views().Files(). + IsFocused(). + Lines( + Contains("UU myfile"), + ). + PressEnter() + + t.Views().MergeConflicts(). + IsFocused(). + TopLines( + Contains("<<<<<<< HEAD"), + Contains("one"), + Contains("======="), + Contains("three"), + Contains(">>>>>>>"), + ). + SelectNextItem(). + PressPrimaryAction() // pick "three" + + continueMerge() + + acceptConflicts() + + t.Views().Files(). + IsFocused(). + Lines( + Contains("UU myfile"), + ). + PressEnter() + + t.Views().MergeConflicts(). + IsFocused(). + TopLines( + Contains("<<<<<<< HEAD"), + Contains("three"), + Contains("======="), + Contains("two"), + Contains(">>>>>>>"), + ). + SelectNextItem(). + PressPrimaryAction() // pick "two" + + continueMerge() + + t.Views().Commits(). + Focus(). + Lines( + Contains("commit two").IsSelected(), + Contains("commit three"), + Contains("commit one"), + ). + Tap(func() { + t.Views().Main().Content(Contains("-three").Contains("+two")) + }). + SelectNextItem(). + Tap(func() { + t.Views().Main().Content(Contains("-one").Contains("+three")) + }) +} diff --git a/pkg/integration/tests/interactive_rebase/swap_with_conflict.go b/pkg/integration/tests/interactive_rebase/swap_with_conflict.go new file mode 100644 index 000000000..5f156a5c8 --- /dev/null +++ b/pkg/integration/tests/interactive_rebase/swap_with_conflict.go @@ -0,0 +1,33 @@ +package interactive_rebase + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var SwapWithConflict = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Directly swap two commits, causing a conflict. Then resolve the conflict and continue", + ExtraCmdArgs: "", + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.CreateFileAndAdd("myfile", "one") + shell.Commit("commit one") + shell.UpdateFileAndAdd("myfile", "two") + shell.Commit("commit two") + shell.UpdateFileAndAdd("myfile", "three") + shell.Commit("commit three") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("commit three").IsSelected(), + Contains("commit two"), + Contains("commit one"), + ). + Press(keys.Commits.MoveDownCommit) + + handleConflictsFromSwap(t) + }, +}) diff --git a/pkg/integration/tests/tests_gen.go b/pkg/integration/tests/tests_gen.go index 6a8e8e5af..6a7e36373 100644 --- a/pkg/integration/tests/tests_gen.go +++ b/pkg/integration/tests/tests_gen.go @@ -74,11 +74,16 @@ var tests = []*components.IntegrationTest{ interactive_rebase.EditFirstCommit, interactive_rebase.FixupFirstCommit, interactive_rebase.FixupSecondCommit, - interactive_rebase.One, + interactive_rebase.Move, + interactive_rebase.MoveInRebase, + interactive_rebase.Rebase, interactive_rebase.RewordFirstCommit, + interactive_rebase.RewordLastCommit, interactive_rebase.SquashDownFirstCommit, interactive_rebase.SquashDownSecondCommit, interactive_rebase.SquashFixupsAboveFirstCommit, + interactive_rebase.SwapInRebaseWithConflict, + interactive_rebase.SwapWithConflict, misc.ConfirmOnQuit, misc.InitialOpen, patch_building.CopyPatchToClipboard, |