1{ lib, pkgs, ... }:
2{
3
4 name = "artalk";
5
6 meta = {
7 maintainers = with lib.maintainers; [ moraxyc ];
8 };
9
10 nodes.machine =
11 { pkgs, ... }:
12 {
13 environment.systemPackages = [
14 pkgs.curl
15 pkgs.artalk
16 pkgs.sudo
17 ];
18 services.artalk = {
19 enable = true;
20 settings = {
21 cache.enabled = true;
22 admin_users = [
23 {
24 name = "admin";
25 email = "admin@example.org";
26 # md5 for 'password'
27 password = "(md5)5F4DCC3B5AA765D61D8327DEB882CF99";
28 }
29 ];
30 };
31 };
32 };
33
34 testScript = ''
35 import json
36 machine.wait_for_unit("artalk.service")
37
38 machine.wait_for_open_port(23366)
39
40 assert '${pkgs.artalk.version}' in machine.succeed("curl --fail --max-time 10 http://127.0.0.1:23366/api/v2/version")
41
42 # Get token
43 result = json.loads(machine.succeed("""
44 curl --fail -X POST --json '{
45 "email": "admin@example.org",
46 "password": "password"
47 }' 'http://127.0.0.1:23366/api/v2/auth/email/login'
48 """))
49 token = result['token']
50
51 # Test admin
52 machine.succeed(f"""
53 curl --fail -X POST --header 'Authorization: {token}' 'http://127.0.0.1:23366/api/v2/cache/flush'
54 """)
55 '';
56}