1from django.test import TestCase, override_settings
2from django.urls import reverse
3
4from wagtail.core.models import Page
5from wagtail.tests.utils import WagtailTestUtils
6
7
8class TestLoginView(TestCase, WagtailTestUtils):
9    fixtures = ['test.json']
10
11    def setUp(self):
12        self.user = self.create_test_user()
13        self.homepage = Page.objects.get(url_path='/home/')
14
15    def test_success_redirect(self):
16        response = self.client.post(reverse('wagtailadmin_login'), {
17            'username': 'test@email.com',
18            'password': 'password',
19        })
20        self.assertRedirects(response, reverse('wagtailadmin_home'))
21
22    def test_success_redirect_honour_redirect_get_parameter(self):
23        homepage_admin_url = reverse('wagtailadmin_pages:edit', args=[self.homepage.pk])
24        login_url = reverse('wagtailadmin_login') + '?next={}'.format(homepage_admin_url)
25        response = self.client.post(login_url, {
26            'username': 'test@email.com',
27            'password': 'password',
28        })
29        self.assertRedirects(response, homepage_admin_url)
30
31    def test_success_redirect_honour_redirect_post_parameter(self):
32        homepage_admin_url = reverse('wagtailadmin_pages:edit', args=[self.homepage.pk])
33        response = self.client.post(reverse('wagtailadmin_login'), {
34            'username': 'test@email.com',
35            'password': 'password',
36            'next': homepage_admin_url,
37        })
38        self.assertRedirects(response, homepage_admin_url)
39
40    def test_already_authenticated_redirect(self):
41        self.login(username='test@email.com', password='password')
42
43        response = self.client.get(reverse('wagtailadmin_login'))
44        self.assertRedirects(response, reverse('wagtailadmin_home'))
45
46    def test_already_authenticated_redirect_honour_redirect_get_parameter(self):
47        self.login(username='test@email.com', password='password')
48
49        homepage_admin_url = reverse('wagtailadmin_pages:edit', args=[self.homepage.pk])
50        login_url = reverse('wagtailadmin_login') + '?next={}'.format(homepage_admin_url)
51        response = self.client.get(login_url)
52        self.assertRedirects(response, homepage_admin_url)
53
54    @override_settings(LANGUAGE_CODE='de')
55    def test_language_code(self):
56        response = self.client.get(reverse('wagtailadmin_login'))
57        self.assertContains(response, '<html class="no-js" lang="de" dir="ltr">')
58
59    @override_settings(LANGUAGE_CODE='he')
60    def test_bidi_language_changes_dir_attribute(self):
61        response = self.client.get(reverse('wagtailadmin_login'))
62        self.assertContains(response, '<html class="no-js" lang="he" dir="rtl">')
63