52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
import pytest
|
|
from django.core.cache import cache
|
|
from django.test import override_settings
|
|
from django.urls import reverse
|
|
|
|
|
|
@pytest.mark.integration
|
|
@pytest.mark.django_db
|
|
def test_today_requires_login(client):
|
|
response = client.get(reverse("dashboard:today"))
|
|
assert response.status_code == 302
|
|
assert reverse("login") in response.url
|
|
|
|
|
|
@pytest.mark.integration
|
|
@pytest.mark.django_db
|
|
def test_today_loads_for_user(client, user, profile):
|
|
client.force_login(user)
|
|
response = client.get(reverse("dashboard:today"))
|
|
assert response.status_code == 200
|
|
assert "Vandaag" in response.content.decode()
|
|
|
|
|
|
@pytest.mark.integration
|
|
@pytest.mark.django_db
|
|
@override_settings(
|
|
AUTH_LOGIN_RATE_LIMIT_MAX_ATTEMPTS=2,
|
|
AUTH_LOGIN_RATE_LIMIT_WINDOW_SECONDS=120,
|
|
AUTH_LOGIN_RATE_LIMIT_BLOCK_SECONDS=300,
|
|
)
|
|
def test_login_view_rate_limits_failed_attempts(client, user):
|
|
cache.clear()
|
|
|
|
response = client.post(
|
|
reverse("login"),
|
|
{"username": user.username, "password": "wrong"},
|
|
)
|
|
assert response.status_code == 200
|
|
|
|
response = client.post(
|
|
reverse("login"),
|
|
{"username": user.username, "password": "wrong"},
|
|
)
|
|
body = response.content.decode("utf-8")
|
|
assert "Te veel inlogpogingen" in body
|
|
|
|
response = client.post(
|
|
reverse("login"),
|
|
{"username": user.username, "password": "wrong"},
|
|
)
|
|
assert "Te veel inlogpogingen" in response.content.decode("utf-8")
|