1{ ... }:
2{
3 name = "taskchampion-sync-server";
4
5 nodes = {
6 server = {
7 services.taskchampion-sync-server.enable = true;
8 services.taskchampion-sync-server.host = "0.0.0.0";
9 services.taskchampion-sync-server.openFirewall = true;
10 };
11 client =
12 { pkgs, ... }:
13 {
14 environment.systemPackages = [ pkgs.taskwarrior3 ];
15 };
16 };
17 testScript =
18 { nodes, ... }:
19 let
20 cfg = nodes.server.services.taskchampion-sync-server;
21 port = builtins.toString cfg.port;
22 # Generated with uuidgen
23 uuid = "bf01376e-04a4-435a-9263-608567531af3";
24 password = "nixos-test";
25 in
26 ''
27 # Explicitly start the VMs so that we don't accidentally start newServer
28 server.start()
29 client.start()
30
31 server.wait_for_unit("taskchampion-sync-server.service")
32 server.wait_for_open_port(${port})
33
34 # See man task-sync(5)
35 client.succeed("mkdir ~/.task")
36 client.succeed("touch ~/.taskrc")
37 client.succeed("echo sync.server.origin=http://server:${port} >> ~/.taskrc")
38 client.succeed("echo sync.server.client_id=${uuid} >> ~/.taskrc")
39 client.succeed("echo sync.encryption_secret=${password} >> ~/.taskrc")
40 client.succeed("task add hello world")
41 client.succeed("task sync")
42
43 # Useful for debugging
44 client.copy_from_vm("/root/.task", "client")
45 server.copy_from_vm("${cfg.dataDir}", "server")
46 '';
47}