diff options
author | Robert Hensing <roberth@users.noreply.github.com> | 2024-02-05 19:24:36 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-05 19:24:36 +0100 |
commit | 5d7125e01ef1e3c817e60a0cdd534e41c80ce579 (patch) | |
tree | c8193873ee3d4ad7ec0d72bc9074b9c0366e7eea /lib/tests | |
parent | f71965932f959e4e246c455938fc6b0b098fd8cd (diff) | |
parent | 29c7665003cdcfe3319c969a9846f594dfeae550 (diff) |
Merge pull request #285612 from hercules-ci/doRename-condition
lib.modules.doRename: Add condition parameter
Diffstat (limited to 'lib/tests')
-rwxr-xr-x | lib/tests/modules.sh | 3 | ||||
-rw-r--r-- | lib/tests/modules/doRename-condition-enable.nix | 10 | ||||
-rw-r--r-- | lib/tests/modules/doRename-condition-migrated.nix | 10 | ||||
-rw-r--r-- | lib/tests/modules/doRename-condition-no-enable.nix | 9 | ||||
-rw-r--r-- | lib/tests/modules/doRename-condition.nix | 42 |
5 files changed, 74 insertions, 0 deletions
diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh index 0755670c5987a..072b92b383658 100755 --- a/lib/tests/modules.sh +++ b/lib/tests/modules.sh @@ -465,6 +465,9 @@ checkConfigOutput '^1234$' config.c.d.e ./doRename-basic.nix checkConfigOutput '^"The option `a\.b. defined in `.*/doRename-warnings\.nix. has been renamed to `c\.d\.e.\."$' \ config.result \ ./doRename-warnings.nix +checkConfigOutput "^true$" config.result ./doRename-condition.nix ./doRename-condition-enable.nix +checkConfigOutput "^true$" config.result ./doRename-condition.nix ./doRename-condition-no-enable.nix +checkConfigOutput "^true$" config.result ./doRename-condition.nix ./doRename-condition-migrated.nix # Anonymous modules get deduplicated by key checkConfigOutput '^"pear"$' config.once.raw ./merge-module-with-key.nix diff --git a/lib/tests/modules/doRename-condition-enable.nix b/lib/tests/modules/doRename-condition-enable.nix new file mode 100644 index 0000000000000..e6eabfa6f89ae --- /dev/null +++ b/lib/tests/modules/doRename-condition-enable.nix @@ -0,0 +1,10 @@ +{ config, lib, ... }: +{ + config = { + services.foo.enable = true; + services.foo.bar = "baz"; + result = + assert config.services.foos == { "" = { bar = "baz"; }; }; + true; + }; +} diff --git a/lib/tests/modules/doRename-condition-migrated.nix b/lib/tests/modules/doRename-condition-migrated.nix new file mode 100644 index 0000000000000..8d21610e8ec6a --- /dev/null +++ b/lib/tests/modules/doRename-condition-migrated.nix @@ -0,0 +1,10 @@ +{ config, lib, ... }: +{ + config = { + services.foos."".bar = "baz"; + result = + assert config.services.foos == { "" = { bar = "baz"; }; }; + assert config.services.foo.bar == "baz"; + true; + }; +} diff --git a/lib/tests/modules/doRename-condition-no-enable.nix b/lib/tests/modules/doRename-condition-no-enable.nix new file mode 100644 index 0000000000000..66ec004d31470 --- /dev/null +++ b/lib/tests/modules/doRename-condition-no-enable.nix @@ -0,0 +1,9 @@ +{ config, lib, options, ... }: +{ + config = { + result = + assert config.services.foos == { }; + assert ! options.services.foo.bar.isDefined; + true; + }; +} diff --git a/lib/tests/modules/doRename-condition.nix b/lib/tests/modules/doRename-condition.nix new file mode 100644 index 0000000000000..c08b3035be6f7 --- /dev/null +++ b/lib/tests/modules/doRename-condition.nix @@ -0,0 +1,42 @@ +/* + Simulate a migration from a single-instance `services.foo` to a multi instance + `services.foos.<name>` module, where `name = ""` serves as the legacy / + compatibility instance. + + - No instances must exist, unless one is defined in the multi-instance module, + or if the legacy enable option is set to true. + - The legacy instance options must be renamed to the new instance, if it exists. + + The relevant scenarios are tested in separate files: + - ./doRename-condition-enable.nix + - ./doRename-condition-no-enable.nix + */ +{ config, lib, ... }: +let + inherit (lib) mkOption mkEnableOption types doRename; +in +{ + options = { + services.foo.enable = mkEnableOption "foo"; + services.foos = mkOption { + type = types.attrsOf (types.submodule { + options = { + bar = mkOption { type = types.str; }; + }; + }); + default = { }; + }; + result = mkOption {}; + }; + imports = [ + (doRename { + from = [ "services" "foo" "bar" ]; + to = [ "services" "foos" "" "bar" ]; + visible = true; + warn = false; + use = x: x; + withPriority = true; + condition = config.services.foo.enable; + }) + ]; +} |