Add Docker-executed pytest suite with >90% coverage
This commit is contained in:
0
apps/newsletter/tests/__init__.py
Normal file
0
apps/newsletter/tests/__init__.py
Normal file
14
apps/newsletter/tests/test_more.py
Normal file
14
apps/newsletter/tests/test_more.py
Normal file
@@ -0,0 +1,14 @@
|
||||
import pytest
|
||||
|
||||
from apps.newsletter.services import ProviderSyncService
|
||||
from apps.newsletter.views import confirmation_token
|
||||
|
||||
|
||||
def test_confirmation_token_roundtrip():
|
||||
token = confirmation_token("x@example.com")
|
||||
assert token
|
||||
|
||||
|
||||
def test_provider_sync_not_implemented():
|
||||
with pytest.raises(NotImplementedError):
|
||||
ProviderSyncService().sync(None)
|
||||
37
apps/newsletter/tests/test_views.py
Normal file
37
apps/newsletter/tests/test_views.py
Normal file
@@ -0,0 +1,37 @@
|
||||
import pytest
|
||||
from django.core import signing
|
||||
|
||||
from apps.newsletter.models import NewsletterSubscription
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_subscribe_ok(client):
|
||||
resp = client.post("/newsletter/subscribe/", {"email": "a@example.com", "source": "nav"})
|
||||
assert resp.status_code == 200
|
||||
assert resp.json()["status"] == "ok"
|
||||
assert NewsletterSubscription.objects.filter(email="a@example.com").exists()
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_subscribe_invalid(client):
|
||||
resp = client.post("/newsletter/subscribe/", {"email": "bad"})
|
||||
assert resp.status_code == 400
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_confirm_endpoint(client):
|
||||
sub = NewsletterSubscription.objects.create(email="b@example.com")
|
||||
token = signing.dumps(sub.email, salt="newsletter-confirm")
|
||||
resp = client.get(f"/newsletter/confirm/{token}/")
|
||||
assert resp.status_code == 302
|
||||
sub.refresh_from_db()
|
||||
assert sub.confirmed is True
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_confirm_endpoint_with_expired_token(client, monkeypatch):
|
||||
sub = NewsletterSubscription.objects.create(email="c@example.com")
|
||||
token = signing.dumps(sub.email, salt="newsletter-confirm")
|
||||
monkeypatch.setattr("apps.newsletter.views.CONFIRMATION_TOKEN_MAX_AGE_SECONDS", -1)
|
||||
resp = client.get(f"/newsletter/confirm/{token}/")
|
||||
assert resp.status_code == 404
|
||||
Reference in New Issue
Block a user