From ef3e899f5ba5733814056b7c0c523f618283b509 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Mon, 25 Aug 2025 15:56:39 +0200 Subject: [PATCH] Add test demonstrating problem with dropping stashes in filtering mode As can be seen from the test, it deletes the wrong stashes in this case, because it assumes the selection is contiguous. --- .../stash/drop_multiple_in_filtered_mode.go | 81 +++++++++++++++++++ pkg/integration/tests/test_list.go | 1 + 2 files changed, 82 insertions(+) create mode 100644 pkg/integration/tests/stash/drop_multiple_in_filtered_mode.go diff --git a/pkg/integration/tests/stash/drop_multiple_in_filtered_mode.go b/pkg/integration/tests/stash/drop_multiple_in_filtered_mode.go new file mode 100644 index 000000000..c7dc9ee32 --- /dev/null +++ b/pkg/integration/tests/stash/drop_multiple_in_filtered_mode.go @@ -0,0 +1,81 @@ +package stash + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var DropMultipleInFilteredMode = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Drop multiple stash entries when filtering by path", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.EmptyCommit("initial commit") + shell.CreateFileAndAdd("file1", "content1") + shell.Stash("stash one") + shell.CreateFileAndAdd("file2", "content2a") + shell.Stash("stash two-a") + shell.CreateFileAndAdd("file3", "content3") + shell.Stash("stash three") + shell.CreateFileAndAdd("file2", "content2b") + shell.Stash("stash two-b") + shell.CreateFileAndAdd("file4", "content4") + shell.Stash("stash four") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Stash(). + Lines( + Contains("stash four"), + Contains("stash two-b"), + Contains("stash three"), + Contains("stash two-a"), + Contains("stash one"), + ) + + t.GlobalPress(keys.Universal.FilteringMenu) + t.ExpectPopup().Menu(). + Title(Equals("Filtering")). + Select(Contains("Enter path to filter by")). + Confirm() + + t.ExpectPopup().Prompt(). + Title(Equals("Enter path:")). + Type("file2"). + Confirm() + + t.Views().Stash(). + Focus(). + Lines( + Contains("stash two-b").IsSelected(), + Contains("stash two-a"), + ). + Press(keys.Universal.RangeSelectDown). + Press(keys.Universal.Remove). + Tap(func() { + t.ExpectPopup().Confirmation(). + Title(Equals("Stash drop")). + Content(Contains("Are you sure you want to drop the selected stash entry(ies)?")). + Confirm() + }). + /* EXPECTED: + IsEmpty() + ACTUAL: */ + Lines( + Contains("stash two-a"), + ) + + t.GlobalPress(keys.Universal.Return) // cancel filtering mode + t.Views().Stash(). + Lines( + /* EXPECTED: + Contains("stash four"), + Contains("stash three"), + Contains("stash one"), + ACTUAL: */ + Contains("stash four"), + Contains("stash two-a"), + Contains("stash one"), + ) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index bd352d38e..a292227b3 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -358,6 +358,7 @@ var tests = []*components.IntegrationTest{ stash.CreateBranch, stash.Drop, stash.DropMultiple, + stash.DropMultipleInFilteredMode, stash.FilterByPath, stash.Pop, stash.PreventDiscardingFileChanges,