From 4ec41c441414adb8e1c43bae0a37001779e64a40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luka=20Marku=C5=A1i=C4=87?= Date: Sat, 27 Apr 2024 08:40:10 +0200 Subject: [PATCH] Add integration tests for skipping pre-commit hooks --- .../tests/commit/commit_skip_hook.go | 80 +++++++++++++++++++ pkg/integration/tests/test_list.go | 1 + 2 files changed, 81 insertions(+) create mode 100644 pkg/integration/tests/commit/commit_skip_hook.go diff --git a/pkg/integration/tests/commit/commit_skip_hook.go b/pkg/integration/tests/commit/commit_skip_hook.go new file mode 100644 index 000000000..cceec4acc --- /dev/null +++ b/pkg/integration/tests/commit/commit_skip_hook.go @@ -0,0 +1,80 @@ +package commit + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +const preCommitHook = `#!/bin/bash + +exit 1 +` + +var CommitSkipHook = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Commit with pre-commit hook and skip hook config option in various situations.", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(testConfig *config.AppConfig) { + testConfig.UserConfig.Git.SkipHookPrefix = "skip! " + + }, + SetupRepo: func(shell *Shell) { + shell.SetConfig("user.email", "Bill@example.com") + shell.SetConfig("user.name", "Bill Smith") + + shell.CreateFileAndAdd("initial file", "initial content") + shell.Commit("initial commit") + + shell.SetConfig("user.email", "John@example.com") + shell.SetConfig("user.name", "John Smith") + + shell.CreateFile(".git/hooks/pre-commit", preCommitHook) + shell.MakeExecutable(".git/hooks/pre-commit") + + shell.CreateFileAndAdd("testfile", "I'm just testing pre-commit hooks") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Files(). + Focus(). + Press(keys.Files.CommitChanges) + + // hook should trigger when creating a regular commit + t.ExpectPopup().CommitMessagePanel().Type("my commit message").Confirm() + t.ExpectPopup().Alert().Title(Equals("Error")).Content(Contains("Git command failed")).Confirm() + + t.Views().Files(). + Focus(). + Press(keys.Files.CommitChanges) + + // we should be able to skip hooks when creating a regular commit + t.ExpectPopup().CommitMessagePanel().Clear().Type("skip! my commit message").Confirm() + t.Views().Commits().Focus().Lines( + Contains("skip! my commit message"), + Contains("initial commit"), + ) + + // we should be able to skip hooks when rewording a commit + t.Views().Commits().Focus().Press(keys.Commits.RenameCommit) + t.ExpectPopup().CommitMessagePanel().Type(" (reworded)").Confirm() + + /* EXPECTED: + t.Views().Commits().IsFocused(). + Lines( + Contains("skip! my commit message (reworded)"), + Contains("initial commit"), + ) + ACTUAL: + */ + t.ExpectPopup().Alert().Title(Equals("Error")).Content(Contains("exit status 1")).Confirm() + + // we should be able to skip hooks when changing authors + t.Views().Commits().IsFocused().SelectedLine(Contains("CI").IsSelected()) + t.Views().Commits().Focus().Press(keys.Commits.ResetCommitAuthor) + /* EXPECTED: + t.Views().Commits().IsFocused().Lines(Contains("JS").IsSelected()) + ACTUAL: + */ + t.ExpectPopup().Alert().Title(Equals("Error")).Content(Contains("exit status 1")).Confirm() + + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index cdbcc7871..c81eb2d0f 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -71,6 +71,7 @@ var tests = []*components.IntegrationTest{ commit.Commit, commit.CommitMultiline, commit.CommitSwitchToEditor, + commit.CommitSkipHook, commit.CommitWipWithPrefix, commit.CommitWithPrefix, commit.CreateAmendCommit,