The `BrowsableAPIRenderer` generates a form to test POST/PUT/... actions and fill the FK fields with unfiltered data. This issue has been spoted on visio and fixed https://github.com/suitenumerique/meet/pull/508
84 lines
2.5 KiB
Python
84 lines
2.5 KiB
Python
"""Tests for the mailbox_oauth2.views module."""
|
|
|
|
import datetime
|
|
|
|
from django.utils import timezone
|
|
|
|
import pytest
|
|
|
|
from core import factories as core_factories
|
|
|
|
from mailbox_manager import factories
|
|
|
|
pytestmark = pytest.mark.django_db
|
|
|
|
|
|
def test_login_view_options(client):
|
|
"""Test the OPTIONS method on the login view."""
|
|
response = client.options("/api/v1.0/login/")
|
|
|
|
assert response.status_code == 200
|
|
assert response.headers == {
|
|
"Content-Type": "application/json",
|
|
"Vary": "Authorization, origin, Accept-Language, Cookie",
|
|
"Allow": "POST, OPTIONS",
|
|
"Content-Length": "197",
|
|
"X-Frame-Options": "DENY",
|
|
"Content-Language": "en-us",
|
|
"X-Content-Type-Options": "nosniff",
|
|
"Referrer-Policy": "same-origin",
|
|
"Cross-Origin-Opener-Policy": "same-origin",
|
|
}
|
|
|
|
|
|
def test_login_view_authorize(client):
|
|
"""Test the login view with valid data."""
|
|
organization = core_factories.OrganizationFactory(with_registration_id=True)
|
|
domain = factories.MailDomainEnabledFactory(
|
|
organization=organization, name="example.com"
|
|
)
|
|
factories.MailboxEnabledFactory(domain=domain, local_part="user")
|
|
|
|
response = client.post(
|
|
"/api/v1.0/login/", {"email": "user@example.com", "password": "password"}
|
|
)
|
|
assert response.status_code == 200
|
|
|
|
# assert the user has a session
|
|
assert not client.session.is_empty()
|
|
assert client.session.get_expiry_date() < timezone.now() + datetime.timedelta(
|
|
minutes=1
|
|
)
|
|
|
|
assert response.headers == {
|
|
"Content-Type": "application/json",
|
|
"Vary": "Authorization, Cookie, origin, Accept-Language",
|
|
"Allow": "POST, OPTIONS",
|
|
"Content-Length": "36",
|
|
"X-Frame-Options": "DENY",
|
|
"Content-Language": "en-us",
|
|
"X-Content-Type-Options": "nosniff",
|
|
"Referrer-Policy": "same-origin",
|
|
"Cross-Origin-Opener-Policy": "same-origin",
|
|
}
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"email, password, status_code, response_json",
|
|
[
|
|
("", "password", 400, {"email": ["This field may not be blank."]}),
|
|
(
|
|
"email@test.com",
|
|
"",
|
|
400,
|
|
{"password": ["This field may not be blank."]},
|
|
),
|
|
],
|
|
)
|
|
def test_login_view_invalid_data(client, email, password, status_code, response_json):
|
|
"""Test the login view with invalid data."""
|
|
response = client.post("/api/v1.0/login/", {"email": email, "password": password})
|
|
|
|
assert response.status_code == status_code
|
|
assert response.json() == response_json
|