This commit is contained in:
+56
-40
@@ -98,23 +98,38 @@ async def test_invalid_signature_precedes_parsing_and_event_filtering(event: str
|
||||
assert repository.accepted == []
|
||||
|
||||
|
||||
async def test_signed_unsupported_event_is_ignored_without_parsing() -> None:
|
||||
repository = FakeRepository()
|
||||
|
||||
response = await post_webhook(repository, b"not-json", event="push")
|
||||
|
||||
assert response.status_code == 204
|
||||
assert repository.accepted == []
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("command", "requester"),
|
||||
[("ordinary discussion", "alice"), ("/agent plan", "AgentCI")],
|
||||
("body", "event"),
|
||||
[
|
||||
pytest.param(
|
||||
b"not-json",
|
||||
"push",
|
||||
id="unsupported-event-before-parsing",
|
||||
),
|
||||
pytest.param(
|
||||
encoded(payload("ordinary discussion")),
|
||||
"issue_comment",
|
||||
id="non-command",
|
||||
),
|
||||
pytest.param(
|
||||
encoded(payload("/agent plan", requester="AgentCI")),
|
||||
"issue_comment",
|
||||
id="bot-author",
|
||||
),
|
||||
pytest.param(
|
||||
encoded({"action": "edited"}),
|
||||
"issue_comment",
|
||||
id="non-created-before-payload",
|
||||
),
|
||||
],
|
||||
)
|
||||
async def test_non_command_and_bot_comment_are_ignored(command: str, requester: str) -> None:
|
||||
async def test_authenticated_irrelevant_webhooks_are_ignored(
|
||||
body: bytes,
|
||||
event: str,
|
||||
) -> None:
|
||||
repository = FakeRepository()
|
||||
|
||||
response = await post_webhook(repository, encoded(payload(command, requester=requester)))
|
||||
response = await post_webhook(repository, body, event=event)
|
||||
|
||||
assert response.status_code == 204
|
||||
assert repository.accepted == []
|
||||
@@ -130,40 +145,41 @@ async def test_duplicate_delivery_returns_ok() -> None:
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"body",
|
||||
("body", "delivery", "detail"),
|
||||
[
|
||||
b"{",
|
||||
encoded([]),
|
||||
encoded({"action": "created"}),
|
||||
encoded({"action": "created", "comment": {}}),
|
||||
pytest.param(b"{", "delivery", "Invalid webhook payload", id="invalid-json"),
|
||||
pytest.param(encoded([]), "delivery", "Invalid webhook payload", id="non-object"),
|
||||
pytest.param(
|
||||
encoded({"action": "created"}),
|
||||
"delivery",
|
||||
"Invalid webhook payload",
|
||||
id="missing-comment",
|
||||
),
|
||||
pytest.param(
|
||||
encoded({"action": "created", "comment": {}}),
|
||||
"delivery",
|
||||
"Invalid webhook payload",
|
||||
id="incomplete-comment",
|
||||
),
|
||||
pytest.param(
|
||||
encoded(payload("/agent plan")),
|
||||
None,
|
||||
"Missing X-Gitea-Delivery",
|
||||
id="missing-delivery",
|
||||
),
|
||||
],
|
||||
)
|
||||
async def test_malformed_json_and_payload_contract_return_bad_request(body: bytes) -> None:
|
||||
async def test_authenticated_bad_requests_are_rejected_without_persistence(
|
||||
body: bytes,
|
||||
delivery: str | None,
|
||||
detail: str,
|
||||
) -> None:
|
||||
repository = FakeRepository()
|
||||
|
||||
response = await post_webhook(repository, body)
|
||||
response = await post_webhook(repository, body, delivery=delivery)
|
||||
|
||||
assert response.status_code == 400
|
||||
assert response.json() == {"detail": "Invalid webhook payload"}
|
||||
assert repository.accepted == []
|
||||
|
||||
|
||||
async def test_command_requires_delivery_header() -> None:
|
||||
repository = FakeRepository()
|
||||
|
||||
response = await post_webhook(repository, encoded(payload("/agent plan")), delivery=None)
|
||||
|
||||
assert response.status_code == 400
|
||||
assert response.json() == {"detail": "Missing X-Gitea-Delivery"}
|
||||
assert repository.accepted == []
|
||||
|
||||
|
||||
async def test_non_created_comment_is_ignored_without_nested_payload() -> None:
|
||||
repository = FakeRepository()
|
||||
|
||||
response = await post_webhook(repository, encoded({"action": "edited"}))
|
||||
|
||||
assert response.status_code == 204
|
||||
assert response.json() == {"detail": detail}
|
||||
assert repository.accepted == []
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user