CPI Ordering System (the old version)
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.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 
 
 
 

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)