cubicweb/pyramid/test/test_login.py
author Philippe Pepiot <philippe.pepiot@logilab.fr>
Wed, 22 Mar 2017 14:18:54 +0100
branch3.25
changeset 12088 477a59a45786
parent 11929 fcbd6b251d81
permissions -rw-r--r--
[pyramid] disable bwcompat by default in PyramidCWTest To avoid cubicweb exceptions handling.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11816
6392f34fcdad [pyramid] Fix login error message language
Florent Cayré <florent.cayre@logilab.fr>
parents: 11631
diff changeset
     1
from os.path import join
6392f34fcdad [pyramid] Fix login error message language
Florent Cayré <florent.cayre@logilab.fr>
parents: 11631
diff changeset
     2
from shutil import rmtree
6392f34fcdad [pyramid] Fix login error message language
Florent Cayré <florent.cayre@logilab.fr>
parents: 11631
diff changeset
     3
11631
faf279e33298 Merge with pyramid-cubicweb
Yann Voté <yann.vote@logilab.fr>
parents: 11628
diff changeset
     4
from cubicweb.pyramid.test import PyramidCWTest
11559
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
     5
11929
fcbd6b251d81 Merge 3.24.4 into default branch
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11924
diff changeset
     6
11924
4c949c28ce59 [pyramid] fix login route with language-mode = url-prefix
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11816
diff changeset
     7
class LoginTestLangUrlPrefix(PyramidCWTest):
4c949c28ce59 [pyramid] fix login route with language-mode = url-prefix
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11816
diff changeset
     8
4c949c28ce59 [pyramid] fix login route with language-mode = url-prefix
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11816
diff changeset
     9
    @classmethod
4c949c28ce59 [pyramid] fix login route with language-mode = url-prefix
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11816
diff changeset
    10
    def setUpClass(cls):
4c949c28ce59 [pyramid] fix login route with language-mode = url-prefix
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11816
diff changeset
    11
        super(LoginTestLangUrlPrefix, cls).setUpClass()
4c949c28ce59 [pyramid] fix login route with language-mode = url-prefix
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11816
diff changeset
    12
        cls.config.global_set_option('language-mode', 'url-prefix')
4c949c28ce59 [pyramid] fix login route with language-mode = url-prefix
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11816
diff changeset
    13
4c949c28ce59 [pyramid] fix login route with language-mode = url-prefix
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11816
diff changeset
    14
    def test_login_password_login_lang_prefix(self):
4c949c28ce59 [pyramid] fix login route with language-mode = url-prefix
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11816
diff changeset
    15
        res = self.webapp.post('/fr/login', {
4c949c28ce59 [pyramid] fix login route with language-mode = url-prefix
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11816
diff changeset
    16
            '__login': self.admlogin, '__password': self.admpassword})
4c949c28ce59 [pyramid] fix login route with language-mode = url-prefix
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11816
diff changeset
    17
        self.assertEqual(res.status_int, 303)
4c949c28ce59 [pyramid] fix login route with language-mode = url-prefix
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11816
diff changeset
    18
4c949c28ce59 [pyramid] fix login route with language-mode = url-prefix
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11816
diff changeset
    19
        res = self.webapp.get('/fr/login')
4c949c28ce59 [pyramid] fix login route with language-mode = url-prefix
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11816
diff changeset
    20
        self.assertEqual(res.status_int, 303)
4c949c28ce59 [pyramid] fix login route with language-mode = url-prefix
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11816
diff changeset
    21
4c949c28ce59 [pyramid] fix login route with language-mode = url-prefix
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11816
diff changeset
    22
11559
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    23
class LoginTest(PyramidCWTest):
12088
477a59a45786 [pyramid] disable bwcompat by default in PyramidCWTest
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11929
diff changeset
    24
    settings = {'cubicweb.bwcompat': True}
11924
4c949c28ce59 [pyramid] fix login route with language-mode = url-prefix
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11816
diff changeset
    25
11559
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    26
    def test_login_form(self):
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    27
        res = self.webapp.get('/login')
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    28
        self.assertIn('__login', res.text)
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    29
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    30
    def test_login_password_login(self):
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    31
        res = self.webapp.post('/login', {
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    32
            '__login': self.admlogin, '__password': self.admpassword})
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    33
        self.assertEqual(res.status_int, 303)
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    34
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    35
        res = self.webapp.get('/login')
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    36
        self.assertEqual(res.status_int, 303)
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    37
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    38
    def test_login_password_login_cookie_expires(self):
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    39
        res = self.webapp.post('/login', {
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    40
            '__login': self.admlogin, '__password': self.admpassword})
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    41
        self.assertEqual(res.status_int, 303)
11562
a49f08423f02 [auth] Use a second authtkt policy for 'rememberme'
Christophe de Vienne <christophe@unlish.com>
parents: 11559
diff changeset
    42
a49f08423f02 [auth] Use a second authtkt policy for 'rememberme'
Christophe de Vienne <christophe@unlish.com>
parents: 11559
diff changeset
    43
        cookies = self.webapp.cookiejar._cookies['localhost.local']['/']
a49f08423f02 [auth] Use a second authtkt policy for 'rememberme'
Christophe de Vienne <christophe@unlish.com>
parents: 11559
diff changeset
    44
        self.assertNotIn('pauth_tkt', cookies)
a49f08423f02 [auth] Use a second authtkt policy for 'rememberme'
Christophe de Vienne <christophe@unlish.com>
parents: 11559
diff changeset
    45
        self.assertIn('auth_tkt', cookies)
a49f08423f02 [auth] Use a second authtkt policy for 'rememberme'
Christophe de Vienne <christophe@unlish.com>
parents: 11559
diff changeset
    46
        self.assertIsNone(cookies['auth_tkt'].expires)
11559
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    47
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    48
        res = self.webapp.get('/logout')
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    49
        self.assertEqual(res.status_int, 303)
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    50
11562
a49f08423f02 [auth] Use a second authtkt policy for 'rememberme'
Christophe de Vienne <christophe@unlish.com>
parents: 11559
diff changeset
    51
        self.assertNotIn('auth_tkt', cookies)
a49f08423f02 [auth] Use a second authtkt policy for 'rememberme'
Christophe de Vienne <christophe@unlish.com>
parents: 11559
diff changeset
    52
        self.assertNotIn('pauth_tkt', cookies)
a49f08423f02 [auth] Use a second authtkt policy for 'rememberme'
Christophe de Vienne <christophe@unlish.com>
parents: 11559
diff changeset
    53
11559
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    54
        res = self.webapp.post('/login', {
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    55
            '__login': self.admlogin, '__password': self.admpassword,
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    56
            '__setauthcookie': 1})
136dd873dca2 [login] Test the login views
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    57
        self.assertEqual(res.status_int, 303)
11562
a49f08423f02 [auth] Use a second authtkt policy for 'rememberme'
Christophe de Vienne <christophe@unlish.com>
parents: 11559
diff changeset
    58
a49f08423f02 [auth] Use a second authtkt policy for 'rememberme'
Christophe de Vienne <christophe@unlish.com>
parents: 11559
diff changeset
    59
        cookies = self.webapp.cookiejar._cookies['localhost.local']['/']
a49f08423f02 [auth] Use a second authtkt policy for 'rememberme'
Christophe de Vienne <christophe@unlish.com>
parents: 11559
diff changeset
    60
        self.assertNotIn('auth_tkt', cookies)
a49f08423f02 [auth] Use a second authtkt policy for 'rememberme'
Christophe de Vienne <christophe@unlish.com>
parents: 11559
diff changeset
    61
        self.assertIn('pauth_tkt', cookies)
a49f08423f02 [auth] Use a second authtkt policy for 'rememberme'
Christophe de Vienne <christophe@unlish.com>
parents: 11559
diff changeset
    62
        self.assertIsNotNone(cookies['pauth_tkt'].expires)
11611
9d2bb6bdb5c8 [tests] add a __main__ handler
David Douard <david.douard@logilab.fr>
parents: 11562
diff changeset
    63
11628
0f12ee84f30a Test and fix status code and content of the login form on authentication error
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11611
diff changeset
    64
    def test_login_bad_password(self):
11816
6392f34fcdad [pyramid] Fix login error message language
Florent Cayré <florent.cayre@logilab.fr>
parents: 11631
diff changeset
    65
        self.config.i18ncompile(['en', 'fr'])
6392f34fcdad [pyramid] Fix login error message language
Florent Cayré <florent.cayre@logilab.fr>
parents: 11631
diff changeset
    66
        try:
6392f34fcdad [pyramid] Fix login error message language
Florent Cayré <florent.cayre@logilab.fr>
parents: 11631
diff changeset
    67
            self.config._gettext_init()
6392f34fcdad [pyramid] Fix login error message language
Florent Cayré <florent.cayre@logilab.fr>
parents: 11631
diff changeset
    68
            res = self.webapp.post(
6392f34fcdad [pyramid] Fix login error message language
Florent Cayré <florent.cayre@logilab.fr>
parents: 11631
diff changeset
    69
                '/login',
6392f34fcdad [pyramid] Fix login error message language
Florent Cayré <florent.cayre@logilab.fr>
parents: 11631
diff changeset
    70
                {'__login': self.admlogin, '__password': 'empty'},
6392f34fcdad [pyramid] Fix login error message language
Florent Cayré <florent.cayre@logilab.fr>
parents: 11631
diff changeset
    71
                headers={'Accept-Language': 'fr'},
6392f34fcdad [pyramid] Fix login error message language
Florent Cayré <florent.cayre@logilab.fr>
parents: 11631
diff changeset
    72
                status=403)
6392f34fcdad [pyramid] Fix login error message language
Florent Cayré <florent.cayre@logilab.fr>
parents: 11631
diff changeset
    73
        finally:
6392f34fcdad [pyramid] Fix login error message language
Florent Cayré <florent.cayre@logilab.fr>
parents: 11631
diff changeset
    74
            rmtree(join(self.config.apphome, 'i18n'))
6392f34fcdad [pyramid] Fix login error message language
Florent Cayré <florent.cayre@logilab.fr>
parents: 11631
diff changeset
    75
        self.assertIn(u"\xc9chec de l'authentification", res.text)
11628
0f12ee84f30a Test and fix status code and content of the login form on authentication error
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11611
diff changeset
    76
11611
9d2bb6bdb5c8 [tests] add a __main__ handler
David Douard <david.douard@logilab.fr>
parents: 11562
diff changeset
    77
9d2bb6bdb5c8 [tests] add a __main__ handler
David Douard <david.douard@logilab.fr>
parents: 11562
diff changeset
    78
if __name__ == '__main__':
9d2bb6bdb5c8 [tests] add a __main__ handler
David Douard <david.douard@logilab.fr>
parents: 11562
diff changeset
    79
    from unittest import main
9d2bb6bdb5c8 [tests] add a __main__ handler
David Douard <david.douard@logilab.fr>
parents: 11562
diff changeset
    80
    main()