diff --git a/pkg/integration/tests/submodule/discard_removed_submodule.go b/pkg/integration/tests/submodule/discard_removed_submodule.go new file mode 100644 index 000000000..514f01900 --- /dev/null +++ b/pkg/integration/tests/submodule/discard_removed_submodule.go @@ -0,0 +1,56 @@ +package submodule + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var DiscardRemovedSubmodule = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Discard the directory that a removed submodule leaves behind", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.EmptyCommit("first commit") + shell.CloneIntoSubmodule("sub", "modules/sub") + shell.Commit("add submodule") + + // This is what checking out a commit that removes the submodule does: + // the submodule is gone from the index and from .gitmodules, but git + // leaves its directory behind. + shell.RunCommand([]string{"git", "rm", "--cached", "modules/sub"}) + shell.RunCommand([]string{"git", "rm", ".gitmodules"}) + shell.Commit("remove submodule") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Files(). + IsFocused(). + Lines( + /* EXPECTED: + Equals("▼ modules").IsSelected(), + Equals(" ?? sub"), + ACTUAL: */ + Equals("▼ modules/sub").IsSelected(), + Equals(" ?? "), + ). + Press(keys.Universal.Remove). + Tap(func() { + t.ExpectPopup().Menu(). + Title(Equals("Discard changes")). + Select(Contains("Discard all changes")). + Confirm() + }). + /* EXPECTED: + IsFocused(). + ACTUAL: */ + Tap(func() { + t.ExpectPopup().Alert(). + Title(Equals("Error")). + Content(Equals("open modules/sub: no such file or directory")). + Confirm() + }). + IsEmpty() + + t.FileSystem().PathNotPresent("modules/sub") + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index 76b8b3357..9461fc2d3 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -569,6 +569,7 @@ var tests = []*components.IntegrationTest{ status.LogCmd, status.LogCmdStatusPanelAllBranchesLog, submodule.Add, + submodule.DiscardRemovedSubmodule, submodule.Enter, submodule.EnterFromDotfileBareRepo, submodule.EnterNested,