1{ lib, ... }:
2let
3 nodes = {
4
5 "drupal_nginx" = _: {
6 services.drupal.webserver = "nginx";
7 services.drupal.enable = true;
8 services.drupal.sites = {
9 "site1.local" = {
10 database.tablePrefix = "site1_";
11 enable = true;
12 };
13 "site2.local" = {
14 database.tablePrefix = "site2_";
15 enable = true;
16 };
17 };
18
19 networking.firewall.allowedTCPPorts = [ 80 ];
20 networking.hosts."127.0.0.1" = [
21 "site1.local"
22 "site2.local"
23 ];
24 };
25
26 "drupal_caddy" = _: {
27 services.drupal.enable = true;
28 services.drupal.webserver = "caddy";
29 services.drupal.sites = {
30 "site1.local" = {
31 enable = true;
32 database.tablePrefix = "site1_";
33 };
34 "site2.local" = {
35 enable = true;
36 database.tablePrefix = "site2_";
37 };
38 };
39
40 networking.firewall.allowedTCPPorts = [
41 80
42 443
43 ];
44 networking.hosts."127.0.0.1" = [
45 "site1.local"
46 "site2.local"
47 ];
48 };
49 };
50in
51{
52 name = "drupal";
53 meta.maintainers = [
54 lib.maintainers.OulipianSummer
55 ];
56
57 inherit nodes;
58
59 testScript = ''
60 start_all()
61
62 ${lib.concatStrings (
63 lib.mapAttrsToList (name: value: ''
64 ${name}.wait_for_unit("${(value null).services.drupal.webserver}")
65 '') nodes
66 )}
67
68 site_names = ["site1.local", "site2.local"]
69
70 for machine in (${lib.concatStringsSep ", " (builtins.attrNames nodes)}):
71 for site_name in site_names:
72 machine.wait_for_unit(f"phpfpm-drupal-{site_name}")
73
74 with subtest("website returns welcome screen"):
75 assert "Choose language" in machine.succeed(f"curl -k -L {site_name}")
76
77 with subtest("website is installable"):
78 assert "Database configuration" in machine.succeed(f"curl -k -L \"{site_name}/core/install.php?langcode=en&profile=standard\"")
79
80 with subtest("drupal-state-init went through"):
81 info = machine.get_unit_info(f"drupal-state-init-{site_name}")
82 assert info["Result"] == "success"
83 '';
84}