source: OpenRLabs-Git/deploy/rlabs-docker/web2py-rlabs/gluon/tests/test_authapi.py

main
Last change on this file was 42bd667, checked in by David Fuertes <dfuertes@…>, 4 years ago

Historial Limpio

  • Property mode set to 100755
File size: 7.5 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4""" Unit tests for authapi """
5import os
6import unittest
7from gluon.globals import Request, Response, Session
8from gluon.languages import TranslatorFactory
9from gluon.dal import DAL, Field
10from gluon.authapi import AuthAPI
11from gluon.storage import Storage
12from gluon._compat import to_bytes, to_native, add_charset
13
14DEFAULT_URI = os.getenv('DB', 'sqlite:memory')
15
16
17class TestAuthAPI(unittest.TestCase):
18
19    def setUp(self):
20        self.request = Request(env={})
21        self.request.application = 'a'
22        self.request.controller = 'c'
23        self.request.function = 'f'
24        self.request.folder = 'applications/admin'
25        self.response = Response()
26        self.session = Session()
27        T = TranslatorFactory('', 'en')
28        self.session.connect(self.request, self.response)
29        from gluon.globals import current
30        self.current = current
31        self.current.request = self.request
32        self.current.response = self.response
33        self.current.session = self.session
34        self.current.T = T
35        self.db = DAL(DEFAULT_URI, check_reserved=['all'])
36        self.auth = AuthAPI(self.db)
37        self.auth.define_tables(username=True, signature=False)
38        # Create a user
39        self.auth.table_user().validate_and_insert(first_name='Bart',
40                                                   last_name='Simpson',
41                                                   username='bart',
42                                                   email='bart@simpson.com',
43                                                   password='bart_password',
44                                                   registration_key='',
45                                                   registration_id=''
46                                                   )
47        self.db.commit()
48
49    def test_login(self):
50        result = self.auth.login(**{'username': 'bart', 'password': 'bart_password'})
51        self.assertTrue(self.auth.is_logged_in())
52        self.assertTrue(result['user']['email'] == 'bart@simpson.com')
53        self.auth.logout()
54        self.assertFalse(self.auth.is_logged_in())
55        self.auth.settings.username_case_sensitive = False
56        result = self.auth.login(**{'username': 'BarT', 'password': 'bart_password'})
57        self.assertTrue(self.auth.is_logged_in())
58
59    def test_logout(self):
60        self.auth.login(**{'username': 'bart', 'password': 'bart_password'})
61        self.assertTrue(self.auth.is_logged_in())
62        result = self.auth.logout()
63        self.assertTrue(not self.auth.is_logged_in())
64        self.assertTrue(result['user'] is None)
65
66    def test_register(self):
67        self.auth.settings.login_after_registration = True
68        result = self.auth.register(**{
69            'username': 'lisa',
70            'first_name': 'Lisa',
71            'last_name': 'Simpson',
72            'email': 'lisa@simpson.com',
73            'password': 'lisa_password'
74        })
75        self.assertTrue(result['user']['email'] == 'lisa@simpson.com')
76        self.assertTrue(self.auth.is_logged_in())
77        with self.assertRaises(AssertionError):  # Can't register if you're logged in
78            result = self.auth.register(**{
79                'username': 'lisa',
80                'first_name': 'Lisa',
81                'last_name': 'Simpson',
82                'email': 'lisa@simpson.com',
83                'password': 'lisa_password'
84            })
85        self.auth.logout()
86        self.auth.settings.login_after_registration = False
87        result = self.auth.register(**{
88            'username': 'barney',
89            'first_name': 'Barney',
90            'last_name': 'Gumble',
91            'email': 'barney@simpson.com',
92            'password': 'barney_password'
93        })
94        self.assertTrue(result['user']['email'] == 'barney@simpson.com')
95        self.assertFalse(self.auth.is_logged_in())
96        self.auth.settings.login_userfield = 'email'
97        result = self.auth.register(**{
98            'username': 'lisa',
99            'first_name': 'Lisa',
100            'last_name': 'Simpson',
101            'email': 'lisa@simpson.com',
102            'password': 'lisa_password'
103        })
104        self.assertTrue(result['errors']['email'] == self.auth.messages.email_taken)
105        self.assertTrue(result['user'] is None)
106        self.auth.settings.registration_requires_verification = True
107        result = self.auth.register(**{
108            'username': 'homer',
109            'first_name': 'Homer',
110            'last_name': 'Simpson',
111            'email': 'homer@simpson.com',
112            'password': 'homer_password'
113        })
114        self.assertTrue('key' in result['user'])
115
116    def test_profile(self):
117        with self.assertRaises(AssertionError):
118            # We are not logged in
119            self.auth.profile()
120        self.auth.login(**{'username': 'bart', 'password': 'bart_password'})
121        self.assertTrue(self.auth.is_logged_in())
122        result = self.auth.profile(email='bartolo@simpson.com')
123        self.assertTrue(result['user']['email'] == 'bartolo@simpson.com')
124        self.assertTrue(self.auth.table_user()[result['user']['id']].email == 'bartolo@simpson.com')
125
126    def test_change_password(self):
127        with self.assertRaises(AssertionError):
128            # We are not logged in
129            self.auth.change_password()
130        self.auth.login(**{'username': 'bart', 'password': 'bart_password'})
131        self.assertTrue(self.auth.is_logged_in())
132        self.auth.change_password(old_password='bart_password', new_password='1234', new_password2='1234')
133        self.auth.logout()
134        self.assertTrue(not self.auth.is_logged_in())
135        self.auth.login(username='bart', password='1234')
136        self.assertTrue(self.auth.is_logged_in())
137        result = self.auth.change_password(old_password='bart_password', new_password='1234', new_password2='5678')
138        self.assertTrue('new_password2' in result['errors'])
139        result = self.auth.change_password(old_password='bart_password', new_password='1234', new_password2='1234')
140        self.assertTrue('old_password' in result['errors'])
141        # Test the default 4 min_length is enforced on change password
142        result = self.auth.change_password(old_password='1234', new_password='123', new_password2='123')
143        self.assertTrue('new_password' in result['errors'])
144
145    def test_verify_key(self):
146        self.auth.settings.registration_requires_verification = True
147        result = self.auth.register(**{
148            'username': 'homer',
149            'first_name': 'Homer',
150            'last_name': 'Simpson',
151            'email': 'homer@simpson.com',
152            'password': 'homer_password'
153        })
154        self.assertTrue('key' in result['user'])
155        homer_id = result['user']['id']
156        homers_key = result['user']['key']
157        result = self.auth.verify_key(key=None)
158        self.assertTrue(result['errors'] is not None)
159        result = self.auth.verify_key(key='12345')
160        self.assertTrue(result['errors'] is not None)
161        result = self.auth.verify_key(key=homers_key)
162        self.assertTrue(result['errors'] is None)
163        self.assertEqual(self.auth.table_user()[homer_id].registration_key, '')
164        self.auth.settings.registration_requires_approval = True
165        result = self.auth.register(**{
166            'username': 'lisa',
167            'first_name': 'Lisa',
168            'last_name': 'Simpson',
169            'email': 'lisa@simpson.com',
170            'password': 'lisa_password'
171        })
172        lisa_id = result['user']['id']
173        result = self.auth.verify_key(key=result['user']['key'])
174        self.assertEqual(self.auth.table_user()[lisa_id].registration_key, 'pending')
Note: See TracBrowser for help on using the repository browser.