38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
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
|