From c440a208a67e20d0d5a52a58b7880ce7c59ea1ef Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Tue, 1 Jul 2025 14:52:54 +0200 Subject: [PATCH] Add tests for applying a patch when there's a modified file The tests show that this currently fails with the confusing error message "does not match index", regardless of whether the patch conflicts with the modifications or not. We'll improve this in the next commit. I don't bother adding tests for reverting a patch, as the code is basically the same as for apply. --- .../apply_with_modified_file_conflict.go | 60 +++++++++++++++++++ .../apply_with_modified_file_no_conflict.go | 60 +++++++++++++++++++ pkg/integration/tests/test_list.go | 2 + 3 files changed, 122 insertions(+) create mode 100644 pkg/integration/tests/patch_building/apply_with_modified_file_conflict.go create mode 100644 pkg/integration/tests/patch_building/apply_with_modified_file_no_conflict.go diff --git a/pkg/integration/tests/patch_building/apply_with_modified_file_conflict.go b/pkg/integration/tests/patch_building/apply_with_modified_file_conflict.go new file mode 100644 index 000000000..42d4802b7 --- /dev/null +++ b/pkg/integration/tests/patch_building/apply_with_modified_file_conflict.go @@ -0,0 +1,60 @@ +package patch_building + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var ApplyWithModifiedFileConflict = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Apply a custom patch, with a modified file in the working tree that conflicts with the patch", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.NewBranch("branch-a") + shell.CreateFileAndAdd("file1", "1\n2\n3\n") + shell.Commit("first commit") + + shell.NewBranch("branch-b") + shell.UpdateFileAndAdd("file1", "11\n2\n3\n") + shell.Commit("update") + + shell.Checkout("branch-a") + shell.UpdateFile("file1", "111\n2\n3\n") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Branches(). + Focus(). + Lines( + Contains("branch-a").IsSelected(), + Contains("branch-b"), + ). + Press(keys.Universal.NextItem). + PressEnter() + + t.Views().SubCommits(). + IsFocused(). + Lines( + Contains("update").IsSelected(), + Contains("first commit"), + ). + PressEnter() + + t.Views().CommitFiles(). + IsFocused(). + Lines( + Equals("M file1").IsSelected(), + ). + PressPrimaryAction() + + t.Views().Information().Content(Contains("Building patch")) + + t.Views().Secondary().Content(Contains("-1\n+11\n")) + + t.Common().SelectPatchOption(MatchesRegexp(`Apply patch$`)) + + t.ExpectPopup().Alert().Title(Equals("Error")). + Content(Equals("error: file1: does not match index")). + Confirm() + }, +}) diff --git a/pkg/integration/tests/patch_building/apply_with_modified_file_no_conflict.go b/pkg/integration/tests/patch_building/apply_with_modified_file_no_conflict.go new file mode 100644 index 000000000..20d54e03e --- /dev/null +++ b/pkg/integration/tests/patch_building/apply_with_modified_file_no_conflict.go @@ -0,0 +1,60 @@ +package patch_building + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var ApplyWithModifiedFileNoConflict = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Apply a custom patch, with a modified file in the working tree that does not conflict with the patch", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.NewBranch("branch-a") + shell.CreateFileAndAdd("file1", "1\n2\n3\n") + shell.Commit("first commit") + + shell.NewBranch("branch-b") + shell.UpdateFileAndAdd("file1", "1\n2\n3\n4\n") + shell.Commit("update") + + shell.Checkout("branch-a") + shell.UpdateFile("file1", "11\n2\n3\n") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Branches(). + Focus(). + Lines( + Contains("branch-a").IsSelected(), + Contains("branch-b"), + ). + Press(keys.Universal.NextItem). + PressEnter() + + t.Views().SubCommits(). + IsFocused(). + Lines( + Contains("update").IsSelected(), + Contains("first commit"), + ). + PressEnter() + + t.Views().CommitFiles(). + IsFocused(). + Lines( + Equals("M file1").IsSelected(), + ). + PressPrimaryAction() + + t.Views().Information().Content(Contains("Building patch")) + + t.Views().Secondary().Content(Contains("3\n+4")) + + t.Common().SelectPatchOption(MatchesRegexp(`Apply patch$`)) + + t.ExpectPopup().Alert().Title(Equals("Error")). + Content(Equals("error: file1: does not match index")). + Confirm() + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index 7d7bcf901..fa5aff628 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -300,6 +300,8 @@ var tests = []*components.IntegrationTest{ patch_building.Apply, patch_building.ApplyInReverse, patch_building.ApplyInReverseWithConflict, + patch_building.ApplyWithModifiedFileConflict, + patch_building.ApplyWithModifiedFileNoConflict, patch_building.EditLineInPatchBuildingPanel, patch_building.MoveRangeToIndex, patch_building.MoveToEarlierCommit,