Add API tests for mealie
Signed-off-by: Litchi Pi <litchi.pi@proton.me>
This commit is contained in:
+70
-2
@@ -15,6 +15,7 @@
|
||||
services.mealie = {
|
||||
enable = true;
|
||||
port = 9001;
|
||||
settings.ALLOW_SIGNUP = "true";
|
||||
};
|
||||
};
|
||||
postgres = {
|
||||
@@ -27,16 +28,83 @@
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
import json
|
||||
import urllib.parse
|
||||
|
||||
def api_get(node, path, qry={}, **headers):
|
||||
url = f"http://localhost:9001/api{path}"
|
||||
if len(qry) > 0:
|
||||
url += "?" + "&".join([f"{k}={urllib.parse.quote(v)}" for k, v in qry.items()])
|
||||
|
||||
headers = " ".join([f"-H '{k}: {str(v)}'" for k, v in headers.items()])
|
||||
|
||||
got = node.succeed(f"curl -s -X GET {headers} --fail {url}")
|
||||
print(f"* GET {path}\n{got}")
|
||||
return json.loads(got)
|
||||
|
||||
def api_post(node, path, method="POST", urlencode=False, body={}, qry={}, **headers):
|
||||
url = f"http://localhost:9001/api{path}"
|
||||
if len(qry) > 0:
|
||||
url += "?" + "&".join([f"{k}={urllib.parse.quote(v)}" for k, v in qry.items()])
|
||||
|
||||
if urlencode:
|
||||
headers["Content-Type"] = "application/x-www-form-urlencoded"
|
||||
print("BODY", body)
|
||||
body = "&".join([f"{k}={urllib.parse.quote(str(v))}" for k, v in body.items()])
|
||||
else:
|
||||
headers["Content-Type"] = "application/json"
|
||||
body = json.dumps(body)
|
||||
|
||||
headers["Accept"] = "application/json"
|
||||
headers = " ".join([f"-H '{k}: {str(v)}'" for k, v in headers.items()])
|
||||
|
||||
got = node.succeed(f"curl -v --fail -X {method} {url} {headers} -d '{body}'")
|
||||
print(f"* POST {path}\n{got}")
|
||||
return json.loads(got)
|
||||
|
||||
def test_mealie(node):
|
||||
node.wait_for_unit("mealie.service")
|
||||
node.wait_for_open_port(9001)
|
||||
node.succeed("curl --fail http://localhost:9001")
|
||||
|
||||
got = api_get(node, "/app/about")
|
||||
assert got["version"] == "v${pkgs.mealie.version}"
|
||||
|
||||
new_user = dict(
|
||||
email=node.name + ".nomail@no.mail",
|
||||
username="noname-" + node.name,
|
||||
fullName="No Name" + node.name,
|
||||
password="SuperSecure" + node.name,
|
||||
passwordConfirm="SuperSecure" + node.name,
|
||||
group="mygroup" + node.name,
|
||||
)
|
||||
got = api_post(node, "/users/register", body=new_user)
|
||||
got = api_post(node, "/auth/token", urlencode=True, body={
|
||||
"username": new_user["username"],
|
||||
"password": new_user["password"],
|
||||
"remember_me": False,
|
||||
})
|
||||
assert "access_token" in got
|
||||
token = "Bearer " + got["access_token"]
|
||||
|
||||
got = api_get(node, "/recipes", authorization=token)
|
||||
assert got["total"] == 0
|
||||
|
||||
slug = api_post(node, "/recipes", body={"name": "TestRecipe"}, authorization=token)
|
||||
recipe = { "description": "Test recipe" }
|
||||
got = api_post(node, f"/recipes/{slug}", body=recipe, method="PATCH", authorization=token)
|
||||
got = api_get(node, "/recipes", authorization=token)
|
||||
assert got["total"] > 0
|
||||
assert got["items"][0]["description"] == recipe["description"]
|
||||
|
||||
postgres.start()
|
||||
test_mealie(postgres)
|
||||
postgres.send_monitor_command("quit")
|
||||
postgres.wait_for_shutdown()
|
||||
|
||||
sqlite.start()
|
||||
test_mealie(sqlite)
|
||||
sqlite.send_monitor_command("quit")
|
||||
sqlite.wait_for_shutdown()
|
||||
test_mealie(postgres)
|
||||
'';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user