import ./make-test-python.nix ({ pkgs, lib, ... }:
let
  journal = pkgs.writeText "test.journal" ''
    2010/01/10 Loan
        assets:cash                 500$
        income:loan                -500$
    2010/01/10 NixOS Foundation donation
        expenses:donation           250$
        assets:cash                -250$
  '';
in
rec {
  name = "hledger-web";
  meta.maintainers = with lib.maintainers; [ marijanp ];

  nodes = {
    server = { config, pkgs, ... }: rec {
      services.hledger-web = {
        host = "127.0.0.1";
        port = 5000;
        enable = true;
        journalFile = journal;
      };
      networking.firewall.allowedTCPPorts = [ services.hledger-web.port ];
    };
    apiserver = { config, pkgs, ... }: rec {
      services.hledger-web = {
        host = "127.0.0.1";
        port = 5000;
        enable = true;
        serveApi = true;
        journalFile = journal;
      };
      networking.firewall.allowedTCPPorts = [ services.hledger-web.port ];
    };
  };

  testScript = ''
    start_all()

    server.wait_for_unit("hledger-web.service")
    server.wait_for_open_port(5000)
    with subtest("Check if web UI is accessible"):
        page = server.succeed("curl -L http://127.0.0.1:5000")
        assert "test.journal" in page

    apiserver.wait_for_unit("hledger-web.service")
    apiserver.wait_for_open_port(5000)
    with subtest("Check if the JSON API is served"):
        transactions = apiserver.succeed("curl -L http://127.0.0.1:5000/transactions")
        assert "NixOS Foundation donation" in transactions
  '';
})