diff options
| author | Dennis Fink | 2026-08-10 20:00:28 +0200 |
|---|---|---|
| committer | Dennis Fink | 2026-08-10 20:00:28 +0200 |
| commit | 5b39f70aa14cac635b6084170e9d0bd3f548b911 (patch) | |
| tree | daef3fddff0679efb23a42a58743e7c2a3597213 /tests/test_views.py | |
| parent | 8350bef3e3baea6042ed3780a054cc65707e9f8d (diff) | |
| download | webmentions-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.py | 72 |
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) |
