vscode-extensions.sas.sas-lsp: 1.12.0 -> 1.13.0 (#367941)
[NixPkgs.git] / nixos / tests / web-apps / weblate.nix
blob40d60f7e5f99619427e8d80714aecc846e02d081
1 import ../make-test-python.nix (
2   { pkgs, ... }:
4   let
5     certs = import ../common/acme/server/snakeoil-certs.nix;
7     serverDomain = certs.domain;
9     admin = {
10       username = "admin";
11       password = "snakeoilpass";
12     };
13     # An API token that we manually insert into the db as a valid one.
14     apiToken = "OVJh65sXaAfQMZ4NTcIGbFZIyBZbEZqWTi7azdDf";
15   in
16   {
17     name = "weblate";
18     meta.maintainers = with pkgs.lib.maintainers; [ erictapen ];
20     nodes.server =
21       { pkgs, lib, ... }:
22       {
23         virtualisation.memorySize = 2048;
25         services.weblate = {
26           enable = true;
27           localDomain = "${serverDomain}";
28           djangoSecretKeyFile = pkgs.writeText "weblate-django-secret" "thisissnakeoilsecretwithmorethan50characterscorrecthorsebatterystaple";
29           extraConfig = ''
30             # Weblate tries to fetch Avatars from the network
31             ENABLE_AVATARS = False
32           '';
33         };
35         services.nginx.virtualHosts."${serverDomain}" = {
36           enableACME = lib.mkForce false;
37           sslCertificate = certs."${serverDomain}".cert;
38           sslCertificateKey = certs."${serverDomain}".key;
39         };
41         security.pki.certificateFiles = [ certs.ca.cert ];
43         networking.hosts."::1" = [ "${serverDomain}" ];
44         networking.firewall.allowedTCPPorts = [
45           80
46           443
47         ];
49         users.users.weblate.shell = pkgs.bashInteractive;
50       };
52     nodes.client =
53       { pkgs, nodes, ... }:
54       {
55         environment.systemPackages = [ pkgs.wlc ];
57         environment.etc."xdg/weblate".text = ''
58           [weblate]
59           url = https://${serverDomain}/api/
60           key = ${apiToken}
61         '';
63         networking.hosts."${nodes.server.networking.primaryIPAddress}" = [ "${serverDomain}" ];
65         security.pki.certificateFiles = [ certs.ca.cert ];
66       };
68     testScript = ''
69       import json
71       start_all()
72       server.wait_for_unit("weblate.socket")
73       server.wait_until_succeeds("curl -f https://${serverDomain}/")
74       server.succeed("sudo -iu weblate -- weblate createadmin --username ${admin.username} --password ${admin.password} --email weblate@example.org")
76       # It's easier to replace the generated API token with a predefined one than
77       # to extract it at runtime.
78       server.succeed("sudo -iu weblate -- psql -d weblate -c \"UPDATE authtoken_token SET key = '${apiToken}' WHERE user_id = (SELECT id FROM weblate_auth_user WHERE username = 'admin');\"")
80       client.wait_for_unit("multi-user.target")
82       # Test the official Weblate client wlc.
83       client.wait_until_succeeds("REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt wlc --debug list-projects")
85       def call_wl_api(arg):
86           (rv, result) = client.execute("curl -H \"Content-Type: application/json\" -H \"Authorization: Token ${apiToken}\" https://${serverDomain}/api/{}".format(arg))
87           assert rv == 0
88           print(result)
90       call_wl_api("users/ --data '{}'".format(
91         json.dumps(
92           {"username": "test1",
93             "full_name": "test1",
94             "email": "test1@example.org"
95           })))
97       # TODO: Check sending and receiving email.
98       # server.wait_for_unit("postfix.service")
100       # TODO: The goal is for this to succeed, but there are still some checks failing.
101       # server.succeed("sudo -iu weblate -- weblate check --deploy")
102     '';
103   }