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/conftest.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 'tests/conftest.py')
| -rw-r--r-- | tests/conftest.py | 122 |
1 files changed, 1 insertions, 121 deletions
diff --git a/tests/conftest.py b/tests/conftest.py index f1ef4b5..45658b4 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,8 +1,5 @@ -import uuid -from collections.abc import Callable, Iterator -from types import ModuleType +from collections.abc import Iterator -import httpx import pytest from flask import Flask from flask.testing import FlaskClient @@ -10,29 +7,10 @@ from flask.testing import FlaskClient from webmentions_ssg import DATABASE as db from webmentions_ssg import create_app from webmentions_ssg.config import TestingConfig -from webmentions_ssg.models import ReceivedWebmention - -HTTPHandler = Callable[ - [httpx.Request], - httpx.Response, -] - - -class FakeHostAnswers: - def __init__(self, *addresses: str): - self._addresses = addresses - - def addresses(self): - return iter(self._addresses) @pytest.fixture def app() -> Iterator[Flask]: - """ - Create a new Flask application and in-memory database - for every test. - """ - application = create_app(TestingConfig) with application.app_context(): @@ -49,101 +27,3 @@ def app() -> Iterator[Flask]: @pytest.fixture def client(app: Flask) -> FlaskClient: return app.test_client() - - -@pytest.fixture -def receiver_module(app: Flask) -> ModuleType: - """ - Ensure the application and Huey extension are initialized - before retrieving the tasks module. - """ - - from webmentions_ssg.tasks import receiver - - return receiver - - -@pytest.fixture -def views_module(app: Flask) -> ModuleType: - from webmentions_ssg import views - - return views - - -@pytest.fixture -def make_webmention( - app: Flask, -) -> Callable[..., uuid.UUID]: - def create( - *, - source: str = "https://source.example/post", - target: str = ("https://dennisfink.me/blog/example/"), - status: str = "received", - failure_reason: str | None = None, - ) -> uuid.UUID: - identifier = uuid.uuid7() - - with app.app_context(): - webmention = ReceivedWebmention( - uuid=identifier, - source=source, - target=target, - status=status, - failure_reason=failure_reason, - ) - - db.session.add(webmention) - db.session.commit() - - return identifier - - return create - - -@pytest.fixture -def install_httpx_mock( - monkeypatch: pytest.MonkeyPatch, - receiver_module: ModuleType, -) -> Callable[[HTTPHandler], None]: - """ - Replace the HTTPX transport without replacing HTTPX itself. - """ - - monkeypatch.setattr( - receiver_module, - "ensure_public_url", - lambda url: None, - ) - - real_client = httpx.Client - - def install(handler: HTTPHandler) -> None: - transport = httpx.MockTransport(handler) - - def create_client( - *args, - **kwargs, - ) -> httpx.Client: - return real_client( - *args, - transport=transport, - **kwargs, - ) - - monkeypatch.setattr( - receiver_module.httpx, - "Client", - create_client, - ) - - return install - - -@pytest.fixture -def public_dns( - monkeypatch: pytest.MonkeyPatch, -) -> None: - monkeypatch.setattr( - "webmentions_ssg.url_security.dns.resolver.resolve_name", - lambda hostname: FakeHostAnswers("93.184.216.34"), - ) |
