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.
212 lines
6.0 KiB
212 lines
6.0 KiB
''' Tests for ordr2.resources.base ''' |
|
|
|
import pytest |
|
from pyramid.testing import DummyRequest, DummyResource |
|
|
|
|
|
# test for base resources |
|
|
|
def test_base_resource_init(): |
|
''' test __init__ function of base resource ''' |
|
from ordr2.resources import BaseResource, RootResource |
|
|
|
root = RootResource('request object') |
|
resource = BaseResource('resource name', root, 'model instance') |
|
|
|
assert resource.__name__ == 'resource name' |
|
assert resource.__parent__ == root |
|
assert resource.request == 'request object' |
|
assert resource.model == 'model instance' |
|
|
|
|
|
def test_base_resource_acl(): |
|
''' test __acl__ function of base resource ''' |
|
from ordr2.resources import BaseResource, RootResource |
|
from pyramid.security import DENY_ALL |
|
|
|
root = RootResource('request object') |
|
resource = BaseResource('resource name', root, 'model instance') |
|
|
|
with pytest.raises(NotImplementedError): |
|
assert resource.__acl__() |
|
|
|
|
|
def test_base_resource_getitem_ok(): |
|
''' test the __getitem__ function of base resource ''' |
|
from ordr2.resources import BaseResource, RootResource |
|
|
|
root = RootResource('request object') |
|
root.nodes = {'known': BaseResource} |
|
resource = root['known'] |
|
|
|
assert resource.__name__ == 'known' |
|
assert resource.__parent__ == root |
|
assert resource.request == 'request object' |
|
|
|
|
|
def test_base_resource_getitem_raises_key_error(): |
|
''' test the __getitem__ function of base resource ''' |
|
from ordr2.resources import BaseResource, RootResource |
|
|
|
root = RootResource('request object') |
|
root.nodes = {'known': BaseResource} |
|
|
|
with pytest.raises(KeyError): |
|
resource = root['unknown'] |
|
|
|
|
|
# tests for pagination class |
|
|
|
def test_pagination_init(): |
|
''' test object creation of Pagination class with zero total items''' |
|
from ordr2.resources.base import Pagination |
|
|
|
pages = Pagination(1, 0, 25, 7) |
|
|
|
assert pages.count == 0 |
|
assert pages.items_per_page == 25 |
|
assert pages.first is None |
|
assert pages.current is None |
|
assert pages.last is None |
|
assert pages.previous is None |
|
assert pages.next is None |
|
assert pages.window == [] |
|
|
|
|
|
def test_pagination_init_auto_calc(): |
|
''' test object creation with more then zero total items''' |
|
from ordr2.resources.base import Pagination |
|
|
|
pages = Pagination(1, 1, 25, 7) |
|
|
|
assert pages.count == 1 |
|
assert pages.items_per_page == 25 |
|
assert pages.first is not None |
|
assert pages.current is not None |
|
assert pages.last is not None |
|
|
|
|
|
@pytest.mark.parametrize( |
|
'count, page, items, expected', [ |
|
(1, 1, 3, [1, None, 1, None, 1]), |
|
(2, 1, 3, [1, None, 1, None, 1]), |
|
(3, 1, 3, [1, None, 1, None, 1]), |
|
(4, 1, 3, [1, None, 1, 2, 2]), |
|
(5, 1, 3, [1, None, 1, 2, 2]), |
|
(6, 1, 3, [1, None, 1, 2, 2]), |
|
(7, 1, 3, [1, None, 1, 2, 3]), |
|
(1, 1, 10, [1, None, 1, None, 1]), |
|
(2, 1, 10, [1, None, 1, None, 1]), |
|
(9, 1, 10, [1, None, 1, None, 1]), |
|
(10, 1, 10, [1, None, 1, None, 1]), |
|
(11, 1, 10, [1, None, 1, 2, 2]), |
|
(11, 2, 10, [1, 1, 2, None, 2]), |
|
(20, 2, 10, [1, 1, 2, None, 2]), |
|
(21, 2, 10, [1, 1, 2, 3, 3]), |
|
(100, 5, 10, [1, 4, 5, 6, 10]), |
|
(10, 5, 10, [1, None, 1, None, 1]), |
|
] |
|
) |
|
def test_pagination_calculate_page_numbers(count, page, items, expected): |
|
''' calculation of related pages ''' |
|
from ordr2.resources.base import Pagination |
|
|
|
pages = Pagination(None, 0, items, None) |
|
pages.count = count |
|
pages.calculate(page, 7) |
|
|
|
result = [ |
|
pages.first, |
|
pages.previous, |
|
pages.current, |
|
pages.next, |
|
pages.last |
|
] |
|
assert result == expected |
|
|
|
|
|
@pytest.mark.parametrize( |
|
'count, page, size, expected', [ |
|
(100, 1, 7, [1, 2, 3, 4]), |
|
(100, 2, 7, [1, 2, 3, 4, 5]), |
|
(100, 3, 7, [1, 2, 3, 4, 5, 6]), |
|
(100, 4, 7, [1, 2, 3, 4, 5, 6, 7]), |
|
(100, 5, 7, [2, 3, 4, 5, 6, 7, 8]), |
|
(100, 6, 7, [3, 4, 5, 6, 7, 8, 9]), |
|
(100, 7, 7, [4, 5, 6, 7, 8, 9, 10]), |
|
(100, 8, 7, [5, 6, 7, 8, 9, 10]), |
|
(100, 9, 7, [6, 7, 8, 9, 10]), |
|
(100, 10, 7, [7, 8, 9, 10]), |
|
(100, 1, 5, [1, 2, 3]), |
|
(100, 2, 5, [1, 2, 3, 4]), |
|
(100, 3, 5, [1, 2, 3, 4, 5]), |
|
(100, 4, 5, [2, 3, 4, 5, 6]), |
|
(100, 5, 5, [3, 4, 5, 6, 7]), |
|
(100, 6, 5, [4, 5, 6, 7, 8]), |
|
(100, 7, 5, [5, 6, 7, 8, 9]), |
|
(100, 8, 5, [6, 7, 8, 9, 10]), |
|
(100, 9, 5, [7, 8, 9, 10]), |
|
(100, 10, 5, [8, 9, 10]), |
|
] |
|
) |
|
def test_pagination_calculate_window(count, page, size, expected): |
|
''' calculation of related pages ''' |
|
from ordr2.resources.base import Pagination |
|
|
|
pages = Pagination(None, 0, 10, None) |
|
pages.count = count |
|
pages.calculate(page, size) |
|
|
|
assert pages.window == expected |
|
|
|
|
|
@pytest.mark.parametrize( |
|
'first, last, check, expected', [ |
|
(1, 1, 0, None), |
|
(1, 1, 1, 1), |
|
(1, 1, 2, None), |
|
(2, 4, 1, None), |
|
(2, 4, 2, 2), |
|
(2, 4, 3, 3), |
|
(2, 4, 4, 4), |
|
(2, 4, 5, None), |
|
] |
|
) |
|
def test_pagination_is_valid(first, last, check, expected): |
|
''' check is_valid function without default value ''' |
|
from ordr2.resources.base import Pagination |
|
|
|
pages = Pagination(None, 0, 10, None) |
|
pages.count = True |
|
pages.first = first |
|
pages.last = last |
|
|
|
assert pages.is_valid(check) == expected |
|
|
|
|
|
def test_pagination_is_valid_returns_default(): |
|
''' check is_valid function with default value ''' |
|
from ordr2.resources.base import Pagination |
|
|
|
pages = Pagination(None, 0, 10, None) |
|
pages.count = True |
|
pages.first = 1 |
|
pages.last = 1 |
|
|
|
assert pages.is_valid(2, 'default') == 'default' |
|
|
|
|
|
# test BaseListResource |
|
|
|
def test_base_list_init(): |
|
''' Test object creation of base class |
|
|
|
all other tests must be implemented in a child class of BaseListResource |
|
''' |
|
from ordr2.resources.base import BaseListResource |
|
|
|
request = DummyRequest() |
|
parent = DummyResource(request=request) |
|
|
|
with pytest.raises(NotImplementedError): |
|
resource = BaseListResource('John Cleese', parent)
|
|
|