84 lines
2.9 KiB
Python
84 lines
2.9 KiB
Python
from __future__ import absolute_import
|
|
|
|
import json
|
|
|
|
from django.conf import settings
|
|
from django.contrib.auth import get_user_model
|
|
from django.core import mail
|
|
from django.test.utils import override_settings
|
|
from django.urls import reverse
|
|
|
|
from allauth.account import app_settings
|
|
from allauth.tests import TestCase
|
|
|
|
|
|
class AjaxTests(TestCase):
|
|
def _send_post_request(self, **kwargs):
|
|
return self.client.post(
|
|
reverse("account_signup"),
|
|
{
|
|
"username": "johndoe",
|
|
"email": "john@example.org",
|
|
"email2": "john@example.org",
|
|
"password1": "johndoe",
|
|
"password2": "johndoe",
|
|
},
|
|
**kwargs,
|
|
)
|
|
|
|
def test_no_ajax_header(self):
|
|
resp = self._send_post_request()
|
|
self.assertEqual(302, resp.status_code)
|
|
self.assertRedirects(
|
|
resp, settings.LOGIN_REDIRECT_URL, fetch_redirect_response=False
|
|
)
|
|
|
|
def test_ajax_header_x_requested_with(self):
|
|
resp = self._send_post_request(HTTP_X_REQUESTED_WITH="XMLHttpRequest")
|
|
self.assertEqual(200, resp.status_code)
|
|
self.assertEqual(settings.LOGIN_REDIRECT_URL, resp.json()["location"])
|
|
|
|
def test_ajax_header_http_accept(self):
|
|
resp = self._send_post_request(HTTP_ACCEPT="application/json")
|
|
self.assertEqual(200, resp.status_code)
|
|
self.assertEqual(settings.LOGIN_REDIRECT_URL, resp.json()["location"])
|
|
|
|
def test_ajax_password_reset(self):
|
|
get_user_model().objects.create(
|
|
username="john", email="john@example.org", is_active=True
|
|
)
|
|
resp = self.client.post(
|
|
reverse("account_reset_password"),
|
|
data={"email": "john@example.org"},
|
|
HTTP_X_REQUESTED_WITH="XMLHttpRequest",
|
|
)
|
|
self.assertEqual(len(mail.outbox), 1)
|
|
self.assertEqual(mail.outbox[0].to, ["john@example.org"])
|
|
self.assertEqual(resp["content-type"], "application/json")
|
|
|
|
def test_ajax_login_fail(self):
|
|
resp = self.client.post(
|
|
reverse("account_login"),
|
|
{},
|
|
HTTP_X_REQUESTED_WITH="XMLHttpRequest",
|
|
)
|
|
self.assertEqual(resp.status_code, 400)
|
|
json.loads(resp.content.decode("utf8"))
|
|
# TODO: Actually test something
|
|
|
|
@override_settings(
|
|
ACCOUNT_EMAIL_VERIFICATION=app_settings.EmailVerificationMethod.OPTIONAL
|
|
)
|
|
def test_ajax_login_success(self):
|
|
user = get_user_model().objects.create(username="john", is_active=True)
|
|
user.set_password("doe")
|
|
user.save()
|
|
resp = self.client.post(
|
|
reverse("account_login"),
|
|
{"login": "john", "password": "doe"},
|
|
HTTP_X_REQUESTED_WITH="XMLHttpRequest",
|
|
)
|
|
self.assertEqual(resp.status_code, 200)
|
|
data = json.loads(resp.content.decode("utf8"))
|
|
self.assertEqual(data["location"], "/accounts/profile/")
|