diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 71a18ed9e343..247bc1c6fdd0 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -623,6 +623,7 @@ in flannel = runTestOn [ "x86_64-linux" ] ./flannel.nix; flap-alerted = runTest ./flap-alerted.nix; flaresolverr = runTest ./flaresolverr.nix; + flarum = runTest ./flarum.nix; flood = runTest ./flood.nix; fluent-bit = runTest ./fluent-bit.nix; fluentd = runTest ./fluentd.nix; diff --git a/nixos/tests/flarum.nix b/nixos/tests/flarum.nix new file mode 100644 index 000000000000..17c7df02f44c --- /dev/null +++ b/nixos/tests/flarum.nix @@ -0,0 +1,52 @@ +{ lib, ... }: +{ + name = "flarum"; + + meta = { + maintainers = with lib.maintainers; [ + fsagbuya + jasonodoom + ]; + }; + + nodes.machine = + { ... }: + { + # Flarum installs and migrates the database on first boot and runs a + # MariaDB server alongside PHP-FPM and nginx, so give the VM some headroom. + virtualisation.memorySize = 2048; + + services.flarum = { + enable = true; + forumTitle = "NixOS Flarum Test Forum"; + domain = "localhost"; + baseUrl = "http://localhost"; + + # Run `flarum install` against the locally provisioned MariaDB. Safe here + # because the VM always starts from a fresh, empty database. + createDatabaseLocally = true; + + adminUser = "admin"; + adminEmail = "admin@example.com"; + # Flarum rejects admin passwords shorter than 8 characters. + initialAdminPassword = "flarum-admin-password"; + }; + }; + + testScript = '' + start_all() + + # PHP-FPM is ordered after the oneshot installer (Type=oneshot, no + # RemainAfterExit), so waiting on it implies the install/migrate finished. + machine.wait_for_unit("phpfpm-flarum.service") + machine.wait_for_unit("nginx.service") + machine.wait_for_open_port(80) + + # The forum front page is server-rendered and embeds the configured title. + machine.wait_until_succeeds("curl -sf http://localhost/ -o /dev/null") + machine.succeed("curl -sf http://localhost/ | grep -F 'NixOS Flarum Test Forum'") + + # The admin API endpoint should respond, confirming the app booted cleanly. + machine.succeed("curl -sf http://localhost/api -o /dev/null") + ''; +} diff --git a/pkgs/by-name/fl/flarum/package.nix b/pkgs/by-name/fl/flarum/package.nix index 227eb5b395fe..d79a26a5bb34 100644 --- a/pkgs/by-name/fl/flarum/package.nix +++ b/pkgs/by-name/fl/flarum/package.nix @@ -2,6 +2,7 @@ lib, php, fetchFromGitHub, + nixosTests, }: php.buildComposerProject2 (finalAttrs: { @@ -19,6 +20,8 @@ php.buildComposerProject2 (finalAttrs: { composerStrictValidation = false; vendorHash = "sha256-EHl+Mr6y5A51EpLPAWUGtiPkLOky6KvsSY4JWHeyO28="; + passthru.tests.module = nixosTests.flarum; + meta = { changelog = "https://github.com/flarum/framework/blob/main/CHANGELOG.md"; description = "Delightfully simple discussion platform for your website";