about summary refs log tree commit diff
path: root/nixpkgs/nixos/tests/tiddlywiki.nix
blob: 4a2014a4ec9187683ce82efe8e1b69bf99e36536 (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
import ./make-test.nix ({ ... }: {
  name = "tiddlywiki";
  nodes = {
    default = {
      services.tiddlywiki.enable = true;
    };
    configured = {
      boot.postBootCommands = ''
        echo "username,password
        somelogin,somesecret" > /var/lib/wikiusers.csv
      '';
      services.tiddlywiki = {
        enable = true;
        listenOptions = {
          port = 3000;
          credentials="../wikiusers.csv";
          readers="(authenticated)";
        };
      };
    };
  };

  testScript = ''
    startAll;

    subtest "by default works without configuration", sub {
      $default->waitForUnit("tiddlywiki.service");
    };

    subtest "by default available on port 8080 without auth", sub {
      $default->waitForUnit("tiddlywiki.service");
      $default->waitForOpenPort(8080);
      $default->succeed("curl --fail 127.0.0.1:8080");
    };

    subtest "by default creates empty wiki", sub {
      $default->succeed("test -f /var/lib/tiddlywiki/tiddlywiki.info");
    };

    subtest "configured on port 3000 with basic auth", sub {
      $configured->waitForUnit("tiddlywiki.service");
      $configured->waitForOpenPort(3000);
      $configured->fail("curl --fail 127.0.0.1:3000");
      $configured->succeed("curl --fail 127.0.0.1:3000 --user somelogin:somesecret");
    };

    subtest "configured with different wikifolder", sub {
      $configured->succeed("test -f /var/lib/tiddlywiki/tiddlywiki.info");
    };

    subtest "restart preserves changes", sub {
      # given running wiki
      $default->waitForUnit("tiddlywiki.service");
      # with some changes
      $default->succeed("curl --fail --request PUT --header 'X-Requested-With:TiddlyWiki' --data '{ \"title\": \"title\", \"text\": \"content\" }' --url 127.0.0.1:8080/recipes/default/tiddlers/somepage ");
      $default->succeed("sleep 2"); # server syncs to filesystem on timer

      # when wiki is cycled
      $default->systemctl("restart tiddlywiki.service");
      $default->waitForUnit("tiddlywiki.service");
      $default->waitForOpenPort(8080);

      # the change is preserved
      $default->succeed("curl --fail 127.0.0.1:8080/recipes/default/tiddlers/somepage");
    };
  '';
})