aboutsummaryrefslogtreecommitdiff
path: root/tests/test_views.py
diff options
context:
space:
mode:
authorDennis Fink2026-08-10 20:00:28 +0200
committerDennis Fink2026-08-10 20:00:28 +0200
commit5b39f70aa14cac635b6084170e9d0bd3f548b911 (patch)
treedaef3fddff0679efb23a42a58743e7c2a3597213 /tests/test_views.py
parent8350bef3e3baea6042ed3780a054cc65707e9f8d (diff)
downloadwebmentions-ssg-5b39f70aa14cac635b6084170e9d0bd3f548b911.tar.gz
webmentions-ssg-5b39f70aa14cac635b6084170e9d0bd3f548b911.zip
test: simplify mocks and localize test fixtures
Replace shared HTTPX and DNS fixtures with targeted unittest.mock patches close to the tests that need them. Keep conftest focused on application and client setup, while moving receiver-specific helpers into the receiver test module.
Diffstat (limited to '')
-rw-r--r--tests/test_views.py72
1 files changed, 31 insertions, 41 deletions
diff --git a/tests/test_views.py b/tests/test_views.py
index 70ed732..06e546c 100644
--- a/tests/test_views.py
+++ b/tests/test_views.py
@@ -1,7 +1,6 @@
import uuid
-from types import ModuleType
+from unittest.mock import Mock, call, patch
-import pytest
import sqlalchemy as sa
from flask import Flask
from flask.testing import FlaskClient
@@ -18,6 +17,10 @@ def test_endpoint_only_accepts_post(
assert response.status_code == 405
+@patch(
+ "webmentions_ssg.forms.validators.ensure_public_url",
+ new=lambda url: None,
+)
def test_endpoint_returns_form_errors(
client: FlaskClient,
) -> None:
@@ -37,21 +40,16 @@ def test_endpoint_returns_form_errors(
assert "target" in errors
+@patch(
+ "webmentions_ssg.forms.validators.ensure_public_url",
+ new=lambda url: None,
+)
+@patch("webmentions_ssg.views.verify_webmention")
def test_endpoint_creates_webmention(
+ verify_webmention: Mock,
app: Flask,
client: FlaskClient,
- views_module: ModuleType,
- monkeypatch: pytest.MonkeyPatch,
- public_dns: None,
) -> None:
- queued: list[uuid.UUID] = []
-
- monkeypatch.setattr(
- views_module,
- "verify_webmention",
- queued.append,
- )
-
source = "https://source.example/post"
target = "https://dennisfink.me/blog/example/"
@@ -77,28 +75,22 @@ def test_endpoint_creates_webmention(
identifier = webmention.uuid
assert response.headers["Location"].endswith(str(identifier))
-
- assert queued == [identifier]
+ verify_webmention.assert_called_once_with(identifier)
+@patch(
+ "webmentions_ssg.forms.validators.ensure_public_url",
+ new=lambda url: None,
+)
+@patch("webmentions_ssg.views.verify_webmention")
def test_endpoint_is_idempotent(
+ verify_webmention: Mock,
app: Flask,
client: FlaskClient,
- views_module: ModuleType,
- monkeypatch: pytest.MonkeyPatch,
- public_dns: None,
) -> None:
- queued: list[uuid.UUID] = []
-
- monkeypatch.setattr(
- views_module,
- "verify_webmention",
- queued.append,
- )
-
data = {
- "source": ("https://source.example/post"),
- "target": ("https://dennisfink.me/blog/example/"),
+ "source": "https://source.example/post",
+ "target": "https://dennisfink.me/blog/example/",
}
first_response = client.post(
@@ -112,7 +104,6 @@ def test_endpoint_is_idempotent(
assert first_response.status_code == 201
assert second_response.status_code == 201
-
assert first_response.headers["Location"] == second_response.headers["Location"]
with app.app_context():
@@ -129,25 +120,22 @@ def test_endpoint_is_idempotent(
identifier = webmention.uuid
- assert queued == [
- identifier,
- identifier,
+ assert verify_webmention.call_args_list == [
+ call(identifier),
+ call(identifier),
]
+@patch(
+ "webmentions_ssg.forms.validators.ensure_public_url",
+ new=lambda url: None,
+)
+@patch("webmentions_ssg.views.verify_webmention")
def test_resending_resets_failure_state(
+ verify_webmention: Mock,
app: Flask,
client: FlaskClient,
- views_module: ModuleType,
- monkeypatch: pytest.MonkeyPatch,
- public_dns: None,
) -> None:
- monkeypatch.setattr(
- views_module,
- "verify_webmention",
- lambda identifier: None,
- )
-
source = "https://source.example/post"
target = "https://dennisfink.me/blog/example/"
@@ -184,3 +172,5 @@ def test_resending_resets_failure_state(
assert webmention is not None
assert webmention.status == "received"
assert webmention.failure_reason is None
+
+ verify_webmention.assert_called_once_with(identifier)