mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-03-19 21:28:28 +02:00
118 lines
3.7 KiB
Go
118 lines
3.7 KiB
Go
package interactive_rebase
|
|
|
|
import (
|
|
"github.com/jesseduffield/lazygit/pkg/config"
|
|
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
|
)
|
|
|
|
var QuickStart = NewIntegrationTest(NewIntegrationTestArgs{
|
|
Description: "Quick-starts an interactive rebase in several contexts",
|
|
ExtraCmdArgs: []string{},
|
|
Skip: false,
|
|
SetupConfig: func(config *config.AppConfig) {},
|
|
SetupRepo: func(shell *Shell) {
|
|
// we're going to test the following:
|
|
// * quick start from main fails
|
|
// * quick start from feature branch starts from main
|
|
// * quick start from branch with merge commit starts from merge commit
|
|
|
|
shell.NewBranch("main")
|
|
shell.EmptyCommit("initial commit")
|
|
shell.EmptyCommit("last main commit")
|
|
|
|
shell.NewBranch("feature-branch")
|
|
shell.NewBranch("branch-to-merge")
|
|
shell.NewBranch("branch-with-merge-commit")
|
|
|
|
shell.Checkout("feature-branch")
|
|
shell.EmptyCommit("feature-branch one")
|
|
shell.EmptyCommit("feature-branch two")
|
|
|
|
shell.Checkout("branch-to-merge")
|
|
shell.EmptyCommit("branch-to-merge one")
|
|
shell.EmptyCommit("branch-to-merge two")
|
|
|
|
shell.Checkout("branch-with-merge-commit")
|
|
shell.EmptyCommit("branch-with-merge one")
|
|
shell.EmptyCommit("branch-with-merge two")
|
|
|
|
shell.Merge("branch-to-merge")
|
|
|
|
shell.EmptyCommit("branch-with-merge three")
|
|
|
|
shell.Checkout("main")
|
|
},
|
|
Run: func(t *TestDriver, keys config.KeybindingConfig) {
|
|
t.Views().Commits().
|
|
Focus().
|
|
Lines(
|
|
Contains("last main commit"),
|
|
Contains("initial commit"),
|
|
).
|
|
// Verify we can't quick start from main
|
|
Press(keys.Commits.StartInteractiveRebase)
|
|
|
|
t.ExpectPopup().Alert().
|
|
Title(Equals("Error")).
|
|
Content(Equals("Cannot start interactive rebase: the HEAD commit is a merge commit or is present on the main branch, so there is no appropriate base commit to start the rebase from. You can start an interactive rebase from a specific commit by selecting the commit and pressing `e`.")).
|
|
Confirm()
|
|
|
|
t.Views().Branches().
|
|
Focus().
|
|
NavigateToLine(Contains("feature-branch")).
|
|
Press(keys.Universal.Select)
|
|
|
|
t.Views().Commits().
|
|
Focus().
|
|
Lines(
|
|
Contains("feature-branch two").IsSelected(),
|
|
Contains("feature-branch one"),
|
|
Contains("last main commit"),
|
|
Contains("initial commit"),
|
|
).
|
|
// Verify quick start picks the last commit on the main branch
|
|
Press(keys.Commits.StartInteractiveRebase).
|
|
Lines(
|
|
Contains("feature-branch two").IsSelected(),
|
|
Contains("feature-branch one"),
|
|
Contains("last main commit").Contains("YOU ARE HERE"),
|
|
Contains("initial commit"),
|
|
).
|
|
// Try again, verify we fail because we're already rebasing
|
|
Press(keys.Commits.StartInteractiveRebase)
|
|
|
|
t.ExpectToast(Equals("Disabled: Can't perform this action during a rebase"))
|
|
t.Common().AbortRebase()
|
|
|
|
// Verify if a merge commit is present on the branch we start from there
|
|
t.Views().Branches().
|
|
Focus().
|
|
NavigateToLine(Contains("branch-with-merge-commit")).
|
|
Press(keys.Universal.Select)
|
|
|
|
t.Views().Commits().
|
|
Focus().
|
|
Lines(
|
|
Contains("branch-with-merge three").IsSelected(),
|
|
Contains("Merge branch 'branch-to-merge'"),
|
|
Contains("branch-to-merge two"),
|
|
Contains("branch-to-merge one"),
|
|
Contains("branch-with-merge two"),
|
|
Contains("branch-with-merge one"),
|
|
Contains("last main commit"),
|
|
Contains("initial commit"),
|
|
).
|
|
Press(keys.Commits.StartInteractiveRebase).
|
|
Lines(
|
|
Contains("branch-with-merge three").IsSelected(),
|
|
Contains("Merge branch 'branch-to-merge'").Contains("YOU ARE HERE"),
|
|
Contains("branch-to-merge two"),
|
|
Contains("branch-to-merge one"),
|
|
Contains("branch-with-merge two"),
|
|
Contains("branch-with-merge one"),
|
|
Contains("last main commit"),
|
|
Contains("initial commit"),
|
|
)
|
|
},
|
|
})
|