Exercises the naming option which was previously untested. Verifies fields are applied to Sonarr via config/naming API and validates idempotency (second run reports 'already correct').
60 lines
2.3 KiB
Nix
60 lines
2.3 KiB
Nix
{ pkgs, lib, self }:
|
|
pkgs.testers.runNixOSTest {
|
|
name = "arr-init-naming";
|
|
nodes.machine = { pkgs, lib, ... }: {
|
|
imports = [ self.nixosModules.default ];
|
|
system.stateVersion = "24.11";
|
|
virtualisation.memorySize = 4096;
|
|
environment.systemPackages = with pkgs; [ curl jq gnugrep ];
|
|
|
|
services.sonarr = {
|
|
enable = true;
|
|
dataDir = "/var/lib/sonarr/.config/NzbDrone";
|
|
settings.server.port = lib.mkDefault 8989;
|
|
};
|
|
|
|
services.arrInit.sonarr = {
|
|
enable = true;
|
|
serviceName = "sonarr";
|
|
dataDir = "/var/lib/sonarr/.config/NzbDrone";
|
|
port = 8989;
|
|
healthChecks = false;
|
|
naming = {
|
|
renameEpisodes = true;
|
|
standardEpisodeFormat = "{Series Title} - S{season:00}E{episode:00} - {Episode Title} {Quality Full}";
|
|
seasonFolderFormat = "Season {season}";
|
|
};
|
|
};
|
|
};
|
|
testScript = ''
|
|
start_all()
|
|
machine.wait_for_unit("sonarr.service")
|
|
machine.wait_until_succeeds(
|
|
"API_KEY=$(grep -oP '(?<=<ApiKey>)[^<]+' /var/lib/sonarr/.config/NzbDrone/config.xml) && "
|
|
"curl -sf http://localhost:8989/api/v3/system/status -H \"X-Api-Key: $API_KEY\"",
|
|
timeout=120,
|
|
)
|
|
machine.succeed("systemctl restart sonarr-init.service")
|
|
machine.wait_for_unit("sonarr-init.service")
|
|
|
|
with subtest("Naming configuration was applied"):
|
|
machine.succeed(
|
|
"API_KEY=$(grep -oP '(?<=<ApiKey>)[^<]+' /var/lib/sonarr/.config/NzbDrone/config.xml) && "
|
|
"curl -sf http://localhost:8989/api/v3/config/naming -H \"X-Api-Key: $API_KEY\" | "
|
|
"jq -e '.renameEpisodes == true'"
|
|
)
|
|
machine.succeed(
|
|
"API_KEY=$(grep -oP '(?<=<ApiKey>)[^<]+' /var/lib/sonarr/.config/NzbDrone/config.xml) && "
|
|
"curl -sf http://localhost:8989/api/v3/config/naming -H \"X-Api-Key: $API_KEY\" | "
|
|
"jq -e '.seasonFolderFormat == \"Season {season}\"'"
|
|
)
|
|
|
|
with subtest("Naming idempotency - second run does not change anything"):
|
|
machine.succeed("systemctl restart sonarr-init.service")
|
|
machine.wait_for_unit("sonarr-init.service")
|
|
journal = machine.succeed("journalctl -u sonarr-init.service --no-pager")
|
|
assert "already correct" in journal.lower(), \
|
|
f"Expected 'already correct' on idempotent run, got: {journal[-500:]}"
|
|
'';
|
|
}
|