aboutsummaryrefslogtreecommitdiffstats
path: root/tests/by-name/ta/taskchampion-sync/test.nix
blob: 38781674b2f020726e099e2a7032ef30ea7eff41 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
{
  nixos-lib,
  pkgsUnstable,
  nixpkgs-unstable,
  vhackPackages,
  pkgs,
  extraModules,
  nixLib,
  vhack,
  ...
}:
vhack.runTest {
  name = "taskchampion-sync";

  serverDomains = [
    {server = "taskchampion.server";}
  ];

  nodes = let
    taskwarriorPackage = pkgs.taskwarrior3.overrideAttrs (final: prev: {
      cmakeFlags = (prev.cmakeFlags or []) ++ ["-DENABLE_TLS_NATIVE_ROOTS=true"];
    });
  in {
    server = {config, ...}: {
      imports =
        extraModules
        ++ [
          ../../../../modules
        ];

      vhack = {
        persist.enable = true;
        nginx.enable = true;
        taskchampion-sync = {
          enable = true;
          fqdn = "taskchampion.server";
        };
      };
    };

    task_client1 = {config, ...}: {
      environment.systemPackages = [
        taskwarriorPackage
      ];
    };
    task_client2 = {config, ...}: {
      environment.systemPackages = [
        taskwarriorPackage
      ];
    };
  };

  services = [
    {server = "taskchampion-sync-server.service";}
  ];

  testScript = {nodes, ...}: let
    # Generated with uuidgen
    uuid = "bf01376e-04a4-435a-9263-608567531af3";
    password = "nixos-test";

    mkSyncConfig = path:
      pkgs.writeShellScript "setup-config-file" ''
        set -xe

        mkdir --parents "$(dirname "${path}")"
        echo 'sync.server.url=https://taskchampion.server' >> "${path}"
        echo 'sync.server.client_id=${uuid}' >> "${path}"
        echo 'sync.encryption_secret=${password}' >> "${path}"
      '';
  in
    # Python
    ''
      server.wait_for_open_port(443)

      with subtest("Setup task syncing"):
          for task in [task_client1, task_client2]:
            # See man task-sync(5)
            task.succeed("mkdir ~/.task")
            task.succeed("${mkSyncConfig "$HOME/.taskrc"}")

      with subtest("Can create tasks"):
          task_client1.succeed("task add 'First task -- task_client1'")
          task_client2.succeed("task add 'First task -- task_client2'")

      # Wait for the server to acquire the acme certificate
      task_client1.wait_until_succeeds("curl https://taskchampion.server")

      with subtest("Can sync tasks"):
          for task in [task_client1, task_client2]:
            task.succeed("task sync")
          task_client1.succeed("task sync")


      with subtest("Have correct tasks"):
          count1 = task_client1.succeed("task count")
          count2 = task_client2.succeed("task count")

          assert int(count1) == 2, f"We don't have exactly 2 tasks, but {count1}"
          assert count1 == count2, f"The clients don't have the same amount of tasks, client1: {count1}, client2: {count2}"
    '';
}