1{ pkgs, ... }:
2
3{
4 name = "invoiceplane";
5 meta = with pkgs.lib.maintainers; {
6 maintainers = [
7 onny
8 ];
9 };
10
11 nodes = {
12 invoiceplane_caddy =
13 { ... }:
14 {
15 services.invoiceplane.webserver = "caddy";
16 services.invoiceplane.sites = {
17 "site1.local" = {
18 database.name = "invoiceplane1";
19 database.createLocally = true;
20 enable = true;
21 };
22 "site2.local" = {
23 database.name = "invoiceplane2";
24 database.createLocally = true;
25 enable = true;
26 };
27 };
28
29 networking.firewall.allowedTCPPorts = [ 80 ];
30 networking.hosts."127.0.0.1" = [
31 "site1.local"
32 "site2.local"
33 ];
34 };
35
36 invoiceplane_nginx =
37 { ... }:
38 {
39 services.invoiceplane.webserver = "nginx";
40 services.invoiceplane.sites = {
41 "site1.local" = {
42 database.name = "invoiceplane1";
43 database.createLocally = true;
44 enable = true;
45 };
46 "site2.local" = {
47 database.name = "invoiceplane2";
48 database.createLocally = true;
49 enable = true;
50 };
51 };
52
53 networking.firewall.allowedTCPPorts = [ 80 ];
54 networking.hosts."127.0.0.1" = [
55 "site1.local"
56 "site2.local"
57 ];
58 };
59 };
60
61 testScript = ''
62 start_all()
63
64 invoiceplane_caddy.wait_for_unit("caddy")
65 invoiceplane_nginx.wait_for_unit("nginx")
66
67 site_names = ["site1.local", "site2.local"]
68
69 machines = [invoiceplane_caddy, invoiceplane_nginx]
70
71 for machine in machines:
72 machine.wait_for_open_port(80)
73 machine.wait_for_open_port(3306)
74
75 for site_name in site_names:
76 machine.wait_for_unit(f"phpfpm-invoiceplane-{site_name}")
77
78 with subtest("Website returns welcome screen"):
79 assert "Please install InvoicePlane" in machine.succeed(f"curl -L {site_name}")
80
81 with subtest("Finish InvoicePlane setup"):
82 machine.succeed(
83 f"curl -sSfL --cookie-jar cjar {site_name}/setup/language"
84 )
85 csrf_token = machine.succeed(
86 "grep ip_csrf_cookie cjar | cut -f 7 | tr -d '\n'"
87 )
88 machine.succeed(
89 f"curl -sSfL --cookie cjar --cookie-jar cjar -d '_ip_csrf={csrf_token}&ip_lang=english&btn_continue=Continue' {site_name}/setup/language"
90 )
91 csrf_token = machine.succeed(
92 "grep ip_csrf_cookie cjar | cut -f 7 | tr -d '\n'"
93 )
94 machine.succeed(
95 f"curl -sSfL --cookie cjar --cookie-jar cjar -d '_ip_csrf={csrf_token}&btn_continue=Continue' {site_name}/setup/prerequisites"
96 )
97 csrf_token = machine.succeed(
98 "grep ip_csrf_cookie cjar | cut -f 7 | tr -d '\n'"
99 )
100 machine.succeed(
101 f"curl -sSfL --cookie cjar --cookie-jar cjar -d '_ip_csrf={csrf_token}&btn_continue=Continue' {site_name}/setup/configure_database"
102 )
103 csrf_token = machine.succeed(
104 "grep ip_csrf_cookie cjar | cut -f 7 | tr -d '\n'"
105 )
106 machine.succeed(
107 f"curl -sSfl --cookie cjar --cookie-jar cjar -d '_ip_csrf={csrf_token}&btn_continue=Continue' {site_name}/setup/install_tables"
108 )
109 csrf_token = machine.succeed(
110 "grep ip_csrf_cookie cjar | cut -f 7 | tr -d '\n'"
111 )
112 machine.succeed(
113 f"curl -sSfl --cookie cjar --cookie-jar cjar -d '_ip_csrf={csrf_token}&btn_continue=Continue' {site_name}/setup/upgrade_tables"
114 )
115 '';
116}