The `-q` flag makes grep close the pipe early, which curl doesn't handle gracefully, but exits with an error like "(23) Failed writing body".
82 lines
2.6 KiB
Nix
82 lines
2.6 KiB
Nix
import ./make-test-python.nix ({ pkgs, lib, ...}:
|
|
|
|
{
|
|
name = "shiori";
|
|
meta.maintainers = with lib.maintainers; [ minijackson ];
|
|
|
|
machine =
|
|
{ ... }:
|
|
{ services.shiori.enable = true; };
|
|
|
|
testScript = let
|
|
authJSON = pkgs.writeText "auth.json" (builtins.toJSON {
|
|
username = "shiori";
|
|
password = "gopher";
|
|
remember = 1; # hour
|
|
owner = true;
|
|
});
|
|
|
|
insertBookmark = {
|
|
url = "http://example.org";
|
|
title = "Example Bookmark";
|
|
};
|
|
|
|
insertBookmarkJSON = pkgs.writeText "insertBookmark.json" (builtins.toJSON insertBookmark);
|
|
in ''
|
|
import json
|
|
|
|
machine.wait_for_unit("shiori.service")
|
|
machine.wait_for_open_port(8080)
|
|
machine.succeed("curl --fail http://localhost:8080/")
|
|
machine.succeed("curl --fail --location http://localhost:8080/ | grep -i shiori")
|
|
|
|
with subtest("login"):
|
|
auth_json = machine.succeed(
|
|
"curl --fail --location http://localhost:8080/api/login "
|
|
"-X POST -H 'Content-Type:application/json' -d @${authJSON}"
|
|
)
|
|
auth_ret = json.loads(auth_json)
|
|
session_id = auth_ret["session"]
|
|
|
|
with subtest("bookmarks"):
|
|
with subtest("first use no bookmarks"):
|
|
bookmarks_json = machine.succeed(
|
|
(
|
|
"curl --fail --location http://localhost:8080/api/bookmarks "
|
|
"-H 'X-Session-Id:{}'"
|
|
).format(session_id)
|
|
)
|
|
|
|
if json.loads(bookmarks_json)["bookmarks"] != []:
|
|
raise Exception("Shiori have a bookmark on first use")
|
|
|
|
with subtest("insert bookmark"):
|
|
machine.succeed(
|
|
(
|
|
"curl --fail --location http://localhost:8080/api/bookmarks "
|
|
"-X POST -H 'X-Session-Id:{}' "
|
|
"-H 'Content-Type:application/json' -d @${insertBookmarkJSON}"
|
|
).format(session_id)
|
|
)
|
|
|
|
with subtest("get inserted bookmark"):
|
|
bookmarks_json = machine.succeed(
|
|
(
|
|
"curl --fail --location http://localhost:8080/api/bookmarks "
|
|
"-H 'X-Session-Id:{}'"
|
|
).format(session_id)
|
|
)
|
|
|
|
bookmarks = json.loads(bookmarks_json)["bookmarks"]
|
|
if len(bookmarks) != 1:
|
|
raise Exception("Shiori didn't save the bookmark")
|
|
|
|
bookmark = bookmarks[0]
|
|
if (
|
|
bookmark["url"] != "${insertBookmark.url}"
|
|
or bookmark["title"] != "${insertBookmark.title}"
|
|
):
|
|
raise Exception("Inserted bookmark doesn't have same URL or title")
|
|
'';
|
|
})
|