diff --git a/pkg/integration/tests/file/discard_all_dir_changes_when_filtering.go b/pkg/integration/tests/file/discard_all_dir_changes_when_filtering.go new file mode 100644 index 000000000..6b3ae906e --- /dev/null +++ b/pkg/integration/tests/file/discard_all_dir_changes_when_filtering.go @@ -0,0 +1,69 @@ +package file + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var DiscardAllDirChangesWhenFiltering = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Discarding changes in a directory when filtering by path", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) { + }, + SetupRepo: func(shell *Shell) { + shell.CreateDir("dir") + shell.CreateFileAndAdd("dir/file-one", "original content\n") + shell.CreateFileAndAdd("dir/file-two", "original content\n") + + shell.Commit("first commit") + + shell.UpdateFileAndAdd("dir/file-one", "original content\nnew content\n") + shell.UpdateFileAndAdd("dir/file-two", "original content\nnew content\n") + shell.UpdateFile("dir/file-one", "original content\nnew content\neven newer content\n") + shell.UpdateFile("dir/file-two", "original content\nnew content\neven newer content\n") + + shell.CreateFile("dir/unstaged-file-one", "unstaged file") + shell.CreateFile("dir/unstaged-file-two", "unstaged file") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Files(). + IsFocused(). + Lines( + Equals("▼ dir").IsSelected(), + Equals(" MM file-one"), + Equals(" MM file-two"), + Equals(" ?? unstaged-file-one"), + Equals(" ?? unstaged-file-two"), + ). + Press(keys.Universal.StartSearch). + Tap(func() { + t.ExpectSearch(). + Type("one"). + Confirm() + }). + Lines( + Equals("▼ dir").IsSelected(), + Equals(" MM file-one"), + Equals(" ?? unstaged-file-one"), + ). + Press(keys.Universal.Remove). + Tap(func() { + t.ExpectPopup().Menu(). + Title(Equals("Discard changes")). + Select(Contains("Discard all changes")). + Confirm() + }). + Press(keys.Universal.Return). // Cancel filtering + Lines( + Equals("▼ dir").IsSelected(), + Equals(" MM file-two"), + Equals(" ?? unstaged-file-two"), + ) + + t.FileSystem().FileContent("dir/file-one", Equals("original content\n")) + t.FileSystem().FileContent("dir/file-two", Equals("original content\nnew content\neven newer content\n")) + t.FileSystem().PathNotPresent("dir/unstaged-file-one") + t.FileSystem().FileContent("dir/unstaged-file-two", Equals("unstaged file")) + }, +}) diff --git a/pkg/integration/tests/file/discard_unstaged_dir_changes_when_filtering.go b/pkg/integration/tests/file/discard_unstaged_dir_changes_when_filtering.go new file mode 100644 index 000000000..4996f699e --- /dev/null +++ b/pkg/integration/tests/file/discard_unstaged_dir_changes_when_filtering.go @@ -0,0 +1,79 @@ +package file + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var DiscardUnstagedDirChangesWhenFiltering = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Discarding unstaged changes in a directory when filtering by path", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) { + }, + SetupRepo: func(shell *Shell) { + shell.CreateDir("dir") + shell.CreateFileAndAdd("dir/file-one", "original content\n") + shell.CreateFileAndAdd("dir/file-two", "original content\n") + + shell.Commit("first commit") + + shell.UpdateFileAndAdd("dir/file-one", "original content\nnew content\n") + shell.UpdateFileAndAdd("dir/file-two", "original content\nnew content\n") + shell.UpdateFile("dir/file-one", "original content\nnew content\neven newer content\n") + shell.UpdateFile("dir/file-two", "original content\nnew content\neven newer content\n") + + shell.CreateFile("dir/unstaged-file-one", "unstaged file") + shell.CreateFile("dir/unstaged-file-two", "unstaged file") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Files(). + IsFocused(). + Lines( + Equals("▼ dir").IsSelected(), + Equals(" MM file-one"), + Equals(" MM file-two"), + Equals(" ?? unstaged-file-one"), + Equals(" ?? unstaged-file-two"), + ). + Press(keys.Universal.StartSearch). + Tap(func() { + t.ExpectSearch(). + Type("one"). + Confirm() + }). + Lines( + Equals("▼ dir").IsSelected(), + Equals(" MM file-one"), + Equals(" ?? unstaged-file-one"), + ). + Press(keys.Universal.Remove). + Tap(func() { + t.ExpectPopup().Menu(). + Title(Equals("Discard changes")). + Select(Contains("Discard unstaged changes")). + Confirm() + }). + Press(keys.Universal.Return). // Cancel filtering + Lines( + /* EXPECTED: + Equals("▼ dir").IsSelected(), + Equals(" M file-one"), + Equals(" MM file-two"), + Equals(" ?? unstaged-file-two"), + ACTUAL: */ + Equals("▼ dir").IsSelected(), + Equals(" M file-one"), + Equals(" M file-two"), + Equals(" ?? unstaged-file-two"), + ) + + t.FileSystem().FileContent("dir/file-one", Equals("original content\nnew content\n")) + /* EXPECTED: + t.FileSystem().FileContent("dir/file-two", Equals("original content\nnew content\neven newer content\n")) + ACTUAL: */ + t.FileSystem().FileContent("dir/file-two", Equals("original content\nnew content\n")) + t.FileSystem().PathNotPresent("dir/unstaged-file-one") + t.FileSystem().FileContent("dir/unstaged-file-two", Equals("unstaged file")) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index 85183406b..3d8edfb56 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -215,9 +215,11 @@ var tests = []*components.IntegrationTest{ file.CopyMenu, file.DirWithUntrackedFile, file.DiscardAllDirChanges, + file.DiscardAllDirChangesWhenFiltering, file.DiscardRangeSelect, file.DiscardStagedChanges, file.DiscardUnstagedDirChanges, + file.DiscardUnstagedDirChangesWhenFiltering, file.DiscardUnstagedFileChanges, file.DiscardUnstagedRangeSelect, file.DiscardVariousChanges,