1{ pkgs, ... }:
2{
3 name = "davis";
4
5 meta.maintainers = pkgs.davis.meta.maintainers;
6
7 nodes.machine =
8 { config, ... }:
9 {
10 virtualisation = {
11 memorySize = 512;
12 };
13
14 services.davis = {
15 enable = true;
16 hostname = "davis.example.com";
17 database = {
18 driver = "postgresql";
19 };
20 mail = {
21 dsnFile = "${pkgs.writeText "davisMailDns" "smtp://username:password@example.com:25"}";
22 inviteFromAddress = "dav@example.com";
23 };
24 adminLogin = "admin";
25 appSecretFile = "${pkgs.writeText "davisAppSecret" "52882ef142066e09ab99ce816ba72522e789505caba224"}";
26 adminPasswordFile = "${pkgs.writeText "davisAdminPass" "nixos"}";
27 nginx = { };
28 };
29 };
30
31 testScript = ''
32 start_all()
33 machine.wait_for_unit("postgresql.service")
34 machine.wait_for_unit("davis-env-setup.service")
35 machine.wait_for_unit("davis-db-migrate.service")
36 machine.wait_for_unit("nginx.service")
37 machine.wait_for_unit("phpfpm-davis.service")
38
39 with subtest("welcome screen loads"):
40 machine.succeed(
41 "curl -sSfL --resolve davis.example.com:80:127.0.0.1 http://davis.example.com/ | grep '<title>Davis</title>'"
42 )
43
44 with subtest("login works"):
45 csrf_token = machine.succeed(
46 "curl -c /tmp/cookies -sSfL --resolve davis.example.com:80:127.0.0.1 http://davis.example.com/login | grep '_csrf_token' | sed -E 's,.*value=\"(.*)\".*,\\1,g'"
47 )
48 r = machine.succeed(
49 f"curl -b /tmp/cookies --resolve davis.example.com:80:127.0.0.1 http://davis.example.com/login -X POST -F _username=admin -F _password=nixos -F _csrf_token={csrf_token.strip()} -D headers"
50 )
51 print(r)
52 machine.succeed(
53 "[[ $(grep -i 'location: ' headers | cut -d: -f2- | xargs echo) == /dashboard* ]]"
54 )
55 '';
56}