Answer 400 for a request value of the wrong type
A value such as chapter_ids that is not a list of numbers gave a 500.
This commit is contained in:
@@ -152,3 +152,37 @@ def test_unexpected_backend_error_returns_json(client, monkeypatch, caplog):
|
||||
assert response.status_code == 500
|
||||
assert response.json == {"error": "Bindery hit an unexpected error. The log has the details."}
|
||||
assert "RuntimeError: broken" in caplog.text
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("method", "path", "body", "error"),
|
||||
[
|
||||
("post", "stories", {"urls": 5}, "urls must be a list"),
|
||||
("post", "stories/{sid}/chapters", {"chapter_ids": 5}, "chapter_ids must be a list"),
|
||||
("post", "stories/{sid}/chapters/move", {"chapter_ids": [[1]]}, "chapter_ids must be a whole number"),
|
||||
("post", "stories/{sid}/chapters/move", {"chapter_ids": [1], "after": [2]}, "after must be a whole number"),
|
||||
("post", "stories/{sid}/chapters/delete", {"chapter_ids": "all"}, "chapter_ids must be a list"),
|
||||
("post", "stories/{sid}/download", {"mode": "recheck", "chapter_ids": ["x"]}, "chapter_ids must be a whole"),
|
||||
("post", "stories/{sid}/download", {"force_fields": "title"}, "force_fields must be a list"),
|
||||
("post", "stories/{sid}/download", {"force_fields": [["title"]]}, "force_fields must be a list of names"),
|
||||
("put", "stories/{sid}/settings", {"locked_fields": [{}]}, "locked_fields must be a list of names"),
|
||||
("put", "stories/{sid}/settings", {"recheck_days": [7]}, "recheck_days must be a whole number"),
|
||||
("put", "rules", {"rules": ["a"]}, "rules must be a list of rules"),
|
||||
("post", "rules/preview", {"rules": [], "chapter_id": None}, "chapter_id must be a whole number"),
|
||||
("post", "chapters/{cid}/revision", {"rev": {}}, "rev must be a whole number"),
|
||||
("post", "library/import", {"books": 7}, "books must be a list"),
|
||||
("post", "library/import", {"books": [{"id": "x"}]}, "id must be a whole number"),
|
||||
],
|
||||
)
|
||||
def test_a_value_of_the_wrong_type_is_a_bad_request(client, story, method, path, body, error):
|
||||
sid, cid = story
|
||||
response = getattr(client, method)("/api/" + path.format(sid=sid, cid=cid), json=body, headers=H)
|
||||
assert response.status_code == 400
|
||||
assert error in response.json["error"]
|
||||
|
||||
|
||||
def test_chapter_requests_without_ids_name_what_to_select(client, story):
|
||||
sid, _ = story
|
||||
for body in ({}, {"chapter_ids": None}):
|
||||
response = client.post(f"/api/stories/{sid}/chapters/delete", json=body, headers=H)
|
||||
assert (response.status_code, response.json["error"]) == (400, "Select the chapters to delete")
|
||||
|
||||
Reference in New Issue
Block a user