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.
108 lines
3.4 KiB
108 lines
3.4 KiB
''' Tests for the account resources ''' |
|
|
|
import pytest |
|
|
|
from datetime import datetime, timedelta |
|
from pyramid.testing import DummyRequest, DummyResource |
|
|
|
from .. import app_config, dbsession, get_example_user # noqa: F401 |
|
|
|
|
|
def test_registration_token_acl(): |
|
from pyramid.security import Allow, Everyone, DENY_ALL |
|
from ordr.resources.account import RegistrationTokenResource |
|
|
|
parent = DummyResource(request='request') |
|
resource = RegistrationTokenResource('name', parent) |
|
|
|
assert resource.__acl__() == [(Allow, Everyone, 'view'), DENY_ALL] |
|
|
|
|
|
def test_registration_acl(): |
|
from pyramid.security import Allow, Everyone, DENY_ALL |
|
from ordr.resources.account import RegistrationResource |
|
|
|
parent = DummyResource(request='request') |
|
resource = RegistrationResource('a name', parent) |
|
|
|
assert resource.__acl__() == [(Allow, Everyone, 'view'), DENY_ALL] |
|
|
|
|
|
def test_registration_get_registration_form(): |
|
from pyramid.security import Allow, Everyone, DENY_ALL |
|
from ordr.resources.account import RegistrationResource |
|
import deform |
|
|
|
request = DummyRequest() |
|
parent = DummyResource(request=request) |
|
resource = RegistrationResource('a name', parent) |
|
form = resource.get_registration_form() |
|
|
|
assert isinstance(form, deform.Form) |
|
assert len(form.buttons) == 2 |
|
assert form.buttons[0].title == 'Create Account' |
|
assert form.buttons[1].title == 'Cancel' |
|
|
|
|
|
def test_registration_getitem_found(dbsession): # noqa: F811 |
|
from ordr.models.account import Role, TokenSubject |
|
from ordr.resources.account import ( |
|
RegistrationResource, |
|
RegistrationTokenResource |
|
) |
|
|
|
request = DummyRequest(dbsession=dbsession) |
|
|
|
user = get_example_user(Role.NEW) |
|
token = user.issue_token(request, TokenSubject.REGISTRATION) |
|
dbsession.add(user) |
|
dbsession.flush() |
|
|
|
parent = DummyResource(request=request) |
|
resource = RegistrationResource('a name', parent) |
|
result = resource[token.hash] |
|
|
|
assert isinstance(result, RegistrationTokenResource) |
|
assert result.__name__ == token.hash |
|
assert result.__parent__ == resource |
|
assert result.model == token |
|
|
|
|
|
def test_registration_getitem_not_found(dbsession): # noqa: F811 |
|
from ordr.models.account import Role, TokenSubject |
|
from ordr.resources.account import RegistrationResource |
|
|
|
request = DummyRequest(dbsession=dbsession) |
|
|
|
user = get_example_user(Role.NEW) |
|
user.issue_token(request, TokenSubject.REGISTRATION) |
|
dbsession.add(user) |
|
dbsession.flush() |
|
|
|
parent = DummyResource(request=request) |
|
resource = RegistrationResource('a name', parent) |
|
|
|
with pytest.raises(KeyError): |
|
resource['unknown hash'] |
|
|
|
|
|
def test_registration_getitem_expired(dbsession): # noqa: F811 |
|
from ordr.models.account import Role, Token, TokenSubject |
|
from ordr.resources.account import RegistrationResource |
|
|
|
request = DummyRequest(dbsession=dbsession) |
|
|
|
user = get_example_user(Role.NEW) |
|
token = user.issue_token(request, TokenSubject.REGISTRATION) |
|
token.expires = datetime.utcnow() - timedelta(weeks=1) |
|
dbsession.add(user) |
|
dbsession.flush() |
|
|
|
parent = DummyResource(request=request) |
|
resource = RegistrationResource('a name', parent) |
|
|
|
with pytest.raises(KeyError): |
|
resource[token.hash] |
|
|
|
dbsession.flush() |
|
assert dbsession.query(Token).count() == 0
|
|
|