diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 93243f29082a..052efceaa632 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -428,6 +428,7 @@ in cyrus-imap = runTest ./cyrus-imap.nix; dae = runTest ./dae.nix; darling-dmg = runTest ./darling-dmg.nix; + dashy = runTest ./web-apps/dashy.nix; davis = runTest ./davis.nix; db-rest = runTest ./db-rest.nix; dconf = runTest ./dconf.nix; diff --git a/nixos/tests/web-apps/dashy.nix b/nixos/tests/web-apps/dashy.nix new file mode 100644 index 000000000000..39454b5b8d8a --- /dev/null +++ b/nixos/tests/web-apps/dashy.nix @@ -0,0 +1,75 @@ +{ pkgs, lib, ... }: +let + + customSettings = { + pageInfo = { + title = "My Custom Dashy Title"; + }; + + sections = [ + { + name = "My Section"; + items = [ + { + name = "NixOS"; + url = "https://nixos.org"; + } + ]; + } + ]; + }; + + customSettingsYaml = (pkgs.formats.yaml_1_1 { }).generate "custom-conf.yaml" customSettings; +in +{ + name = "dashy"; + meta.maintainers = [ lib.maintainers.therealgramdalf ]; + + defaults = + { config, ... }: + { + services.dashy = { + enable = true; + virtualHost = { + enableNginx = true; + domain = "dashy.local"; + }; + }; + + networking.extraHosts = "127.0.0.1 dashy.local"; + + services.nginx.virtualHosts."${config.services.dashy.virtualHost.domain}".listen = [ + { + addr = "127.0.0.1"; + port = 80; + } + ]; + }; + nodes = { + machine = { }; + + machine-custom = { + services.dashy.settings = customSettings; + }; + }; + + testScript = '' + start_all() + machine.wait_for_unit("nginx.service") + machine.wait_for_open_port(80) + + actual = machine.succeed("curl -v --stderr - http://dashy.local/", timeout=10) + expected = "Dashy" + assert expected in actual, \ + f"unexpected reply from Dashy, expected: '{expected}' got: '{actual}'" + + machine_custom.wait_for_unit("nginx.service") + machine_custom.wait_for_open_port(80) + + actual_custom = machine_custom.succeed("curl -s --stderr - http://dashy.local/conf.yml", timeout=10).strip() + expected_custom = machine_custom.succeed("cat ${customSettingsYaml}").strip() + + assert expected_custom == actual_custom, \ + f"unexpected reply from Dashy, expected: '{expected_custom}' got: '{actual_custom}'" + ''; +} diff --git a/pkgs/by-name/da/dashy-ui/package.nix b/pkgs/by-name/da/dashy-ui/package.nix index 4ee12f18c20b..7ff42949d6d0 100644 --- a/pkgs/by-name/da/dashy-ui/package.nix +++ b/pkgs/by-name/da/dashy-ui/package.nix @@ -8,6 +8,7 @@ yarn, fixup-yarn-lock, prefetch-yarn-deps, + nixosTests, nodejs_20, nodejs-slim_20, remarshal_0_17, @@ -26,6 +27,11 @@ stdenv.mkDerivation (finalAttrs: { yarnLock = finalAttrs.src + "/yarn.lock"; hash = "sha256-r36w3Cz/V7E/xPYYpvfQsdk2QXfCVDYE9OxiFNyKP2s="; }; + + passthru.tests = { + dashy = nixosTests.dashy; + }; + # - If no settings are passed, use the default config provided by upstream # - Despite JSON being valid YAML (and the JSON passing the config validator), # there seem to be some issues with JSON in the final build - potentially due to