1{ pkgs, lib, ... }:
2let
3 journal = pkgs.writeText "test.journal" ''
4 2010/01/10 Loan
5 assets:cash 500$
6 income:loan -500$
7 2010/01/10 NixOS Foundation donation
8 expenses:donation 250$
9 assets:cash -250$
10 '';
11in
12rec {
13 name = "hledger-web";
14 meta.maintainers = with lib.maintainers; [ marijanp ];
15
16 nodes = rec {
17 server =
18 { config, pkgs, ... }:
19 {
20 services.hledger-web = {
21 host = "127.0.0.1";
22 port = 5000;
23 enable = true;
24 allow = "edit";
25 };
26 networking.firewall.allowedTCPPorts = [ config.services.hledger-web.port ];
27 systemd.services.hledger-web.preStart = ''
28 ln -s ${journal} /var/lib/hledger-web/.hledger.journal
29 '';
30 };
31 apiserver =
32 { ... }:
33 {
34 imports = [ server ];
35 services.hledger-web.serveApi = true;
36 };
37 };
38
39 testScript = ''
40 start_all()
41
42 server.wait_for_unit("hledger-web.service")
43 server.wait_for_open_port(5000)
44 with subtest("Check if web UI is accessible"):
45 page = server.succeed("curl -L http://127.0.0.1:5000")
46 assert ".hledger.journal" in page
47
48 apiserver.wait_for_unit("hledger-web.service")
49 apiserver.wait_for_open_port(5000)
50 with subtest("Check if the JSON API is served"):
51 transactions = apiserver.succeed("curl -L http://127.0.0.1:5000/transactions")
52 assert "NixOS Foundation donation" in transactions
53 '';
54}