diff --git a/tests/modules/programs/difftastic/default.nix b/tests/modules/programs/difftastic/default.nix new file mode 100644 index 000000000..e85dd67d6 --- /dev/null +++ b/tests/modules/programs/difftastic/default.nix @@ -0,0 +1,7 @@ +{ + difftastic-basic = ./difftastic-basic.nix; + difftastic-with-git-integration = ./difftastic-with-git-integration.nix; + difftastic-with-git-external-diff = ./difftastic-with-git-external-diff.nix; + difftastic-with-git-difftool = ./difftastic-with-git-difftool.nix; + difftastic-migration = ./difftastic-migration.nix; +} diff --git a/tests/modules/programs/difftastic/difftastic-basic.nix b/tests/modules/programs/difftastic/difftastic-basic.nix new file mode 100644 index 000000000..96f701874 --- /dev/null +++ b/tests/modules/programs/difftastic/difftastic-basic.nix @@ -0,0 +1,18 @@ +{ + programs.difftastic = { + enable = true; + options = { + color = "always"; + display = "side-by-side"; + }; + }; + programs.git.enable = true; + + nmt.script = '' + # Git config should NOT contain difftastic configuration since git.enable is false by default + assertFileExists home-files/.config/git/config + assertFileNotRegex home-files/.config/git/config 'external = .*/difft' + assertFileNotRegex home-files/.config/git/config 'tool = "difftastic"' + assertFileNotRegex home-files/.config/git/config '\[difftool "difftastic"\]' + ''; +} diff --git a/tests/modules/programs/difftastic/difftastic-migration.nix b/tests/modules/programs/difftastic/difftastic-migration.nix new file mode 100644 index 000000000..a51c19601 --- /dev/null +++ b/tests/modules/programs/difftastic/difftastic-migration.nix @@ -0,0 +1,31 @@ +{ + lib, + options, + ... +}: + +{ + programs.git = { + enable = true; + difftastic = { + enable = true; + options = { + color = "always"; + display = "side-by-side"; + }; + }; + }; + + test.asserts.warnings.expected = [ + "The option `programs.git.difftastic.options' defined in ${lib.showFiles options.programs.git.difftastic.options.files} has been renamed to `programs.difftastic.options'." + "The option `programs.git.difftastic.enable' defined in ${lib.showFiles options.programs.git.difftastic.enable.files} has been renamed to `programs.difftastic.enable'." + "`programs.difftastic.git.enable` automatic enablement is deprecated. Please explicitly set `programs.difftastic.git.enable = true`." + ]; + + nmt.script = '' + # Git config should contain difftastic configuration (backward compatibility) + assertFileExists home-files/.config/git/config + assertFileContains home-files/.config/git/config '[diff]' + assertFileRegex home-files/.config/git/config 'external = .*/difft.*--color.*--display' + ''; +} diff --git a/tests/modules/programs/difftastic/difftastic-with-git-difftool.nix b/tests/modules/programs/difftastic/difftastic-with-git-difftool.nix new file mode 100644 index 000000000..ac6c7ec9c --- /dev/null +++ b/tests/modules/programs/difftastic/difftastic-with-git-difftool.nix @@ -0,0 +1,25 @@ +{ + programs.difftastic = { + enable = true; + git = { + enable = true; + diffToolMode = true; + }; + options = { + color = "always"; + display = "side-by-side"; + }; + }; + + programs.git.enable = true; + + nmt.script = '' + assertFileExists home-files/.config/git/config + assertFileContains home-files/.config/git/config '[diff]' + # Should have BOTH diff.external AND difftool config when diffToolMode is true + assertFileRegex home-files/.config/git/config 'external = .*/difft.*--color.*--display' + assertFileRegex home-files/.config/git/config 'tool = "difftastic"' + assertFileContains home-files/.config/git/config '[difftool "difftastic"]' + assertFileRegex home-files/.config/git/config 'cmd = .*/difft.*--color.*--display.*\$LOCAL \$REMOTE' + ''; +} diff --git a/tests/modules/programs/difftastic/difftastic-with-git-external-diff.nix b/tests/modules/programs/difftastic/difftastic-with-git-external-diff.nix new file mode 100644 index 000000000..82c872e0a --- /dev/null +++ b/tests/modules/programs/difftastic/difftastic-with-git-external-diff.nix @@ -0,0 +1,25 @@ +{ + programs.difftastic = { + enable = true; + git = { + enable = true; + diffToolMode = false; + }; + options = { + color = "always"; + display = "side-by-side"; + }; + }; + + programs.git.enable = true; + + nmt.script = '' + assertFileExists home-files/.config/git/config + assertFileContains home-files/.config/git/config '[diff]' + # Should have diff.external set + assertFileRegex home-files/.config/git/config 'external = .*/difft.*--color.*--display' + # Should NOT have difftool config when diffToolMode is explicitly false + assertFileNotRegex home-files/.config/git/config 'tool = "difftastic"' + assertFileNotRegex home-files/.config/git/config '\[difftool "difftastic"\]' + ''; +} diff --git a/tests/modules/programs/difftastic/difftastic-with-git-integration.nix b/tests/modules/programs/difftastic/difftastic-with-git-integration.nix new file mode 100644 index 000000000..1d05636b2 --- /dev/null +++ b/tests/modules/programs/difftastic/difftastic-with-git-integration.nix @@ -0,0 +1,22 @@ +{ + programs.difftastic = { + enable = true; + git.enable = true; + options = { + color = "always"; + display = "side-by-side"; + }; + }; + + programs.git.enable = true; + + nmt.script = '' + assertFileExists home-files/.config/git/config + assertFileContains home-files/.config/git/config '[diff]' + # Should have diff.external set + assertFileRegex home-files/.config/git/config 'external = .*/difft.*--color.*--display' + # Should NOT have difftool config since diffToolMode is false + assertFileNotRegex home-files/.config/git/config 'tool = "difftastic"' + assertFileNotRegex home-files/.config/git/config '\[difftool "difftastic"\]' + ''; +}