diff options
Diffstat (limited to 'tests/test_views.py')
| -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) |
