You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.8 KiB
95 lines
2.8 KiB
import pytest |
|
|
|
from pyramid.httpexceptions import HTTPFound |
|
from pyramid.testing import DummyRequest, DummyResource |
|
|
|
from ordr.models.account import Role |
|
|
|
from ... import ( # noqa: F401 |
|
app_config, |
|
dbsession, |
|
get_example_user, |
|
get_post_request |
|
) |
|
|
|
|
|
def test_login(): |
|
''' test the view for the login form ''' |
|
from ordr.views.account import login |
|
|
|
context = DummyResource(nav_active=None) |
|
result = login(context, None) |
|
|
|
assert result == {'loginerror': False} |
|
assert context.nav_active == 'welcome' |
|
|
|
|
|
@pytest.mark.parametrize( # noqa: F811 |
|
'role', [Role.USER, Role.PURCHASER, Role.ADMIN] |
|
) |
|
def test_check_login_ok(dbsession, role): |
|
''' test the processing of the login form with valid credentials ''' |
|
from ordr.views.account import check_login |
|
|
|
user = get_example_user(role) |
|
dbsession.add(user) |
|
post_data = {'username': user.username, 'password': user.first_name} |
|
request = DummyRequest(dbsession=dbsession, POST=post_data) |
|
context = DummyResource(nav_active=None) |
|
result = check_login(context, request) |
|
|
|
assert isinstance(result, HTTPFound) |
|
assert result.location == 'http://example.com//' |
|
|
|
|
|
@pytest.mark.parametrize( # noqa: F811 |
|
'role', [Role.UNVALIDATED, Role.NEW, Role.INACTIVE] |
|
) |
|
def test_check_login_not_activated(dbsession, role): |
|
''' test the processing of the login form with an inactive user ''' |
|
from ordr.views.account import check_login |
|
|
|
user = get_example_user(role) |
|
dbsession.add(user) |
|
post_data = {'username': user.username, 'password': user.first_name} |
|
request = DummyRequest(dbsession=dbsession, POST=post_data) |
|
context = DummyResource(nav_active=None) |
|
result = check_login(context, request) |
|
|
|
assert result == {'loginerror': True} |
|
assert context.nav_active == 'welcome' |
|
|
|
|
|
@pytest.mark.parametrize( # noqa: F811 |
|
'username,password', [ |
|
('', ''), |
|
('TerryGilliam', ''), |
|
('', 'Terry'), |
|
('TerryGilliam', 'wrong password'), |
|
('wrong username', 'Terry'), |
|
] |
|
) |
|
def test_check_login_invalid_credentials(dbsession, username, password): |
|
''' test the processing of the login form with invalid credentials ''' |
|
from ordr.views.account import check_login |
|
|
|
user = get_example_user(Role.USER) |
|
dbsession.add(user) |
|
post_data = {'username': username, 'password': password} |
|
request = DummyRequest(dbsession=dbsession, POST=post_data) |
|
context = DummyResource(nav_active=None) |
|
result = check_login(context, request) |
|
|
|
assert result == {'loginerror': True} |
|
assert context.nav_active == 'welcome' |
|
|
|
|
|
def test_logout(): |
|
''' test the logout view ''' |
|
from ordr.views.account import logout |
|
|
|
request = DummyRequest() |
|
result = logout(None, request) |
|
|
|
assert isinstance(result, HTTPFound) |
|
assert result.location == 'http://example.com//'
|
|
|