diff tests/test_dataproviders_pageiterator.py @ 974:72f17534d58e

tests: First pass on making unit tests work again. - Fix all imports - Add more helper functions to work with mock file-systems - Simplify some code by running chef directly on the mock FS - Fix a couple tests
author Ludovic Chabant <ludovic@chabant.com>
date Tue, 17 Oct 2017 01:07:30 -0700
parents
children 45ad976712ec
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_dataproviders_pageiterator.py	Tue Oct 17 01:07:30 2017 -0700
@@ -0,0 +1,89 @@
+import mock
+from piecrust.dataproviders.pageiterator import PageIterator
+from piecrust.page import Page, PageConfiguration
+
+
+def test_skip():
+    it = PageIterator(range(12))
+    it.skip(5)
+    assert it.total_count == 12
+    assert len(it) == 7
+    assert list(it) == list(range(5, 12))
+
+
+def test_limit():
+    it = PageIterator(range(12))
+    it.limit(4)
+    assert it.total_count == 12
+    assert len(it) == 4
+    assert list(it) == list(range(4))
+
+
+def test_slice():
+    it = PageIterator(range(12))
+    it.slice(3, 4)
+    assert it.total_count == 12
+    assert len(it) == 4
+    assert list(it) == list(range(3, 7))
+
+
+def test_natural_sort():
+    it = PageIterator([4, 3, 1, 2, 0])
+    it.sort()
+    assert it.total_count == 5
+    assert len(it) == 5
+    assert list(it) == list(range(5))
+
+
+def test_natural_sort_reversed():
+    it = PageIterator([4, 3, 1, 2, 0])
+    it.sort(reverse=True)
+    assert it.total_count == 5
+    assert len(it) == 5
+    assert list(it) == list(reversed(range(5)))
+
+
+class TestItem(object):
+    def __init__(self, value):
+        self.name = str(value)
+        self.foo = value
+
+    def __eq__(self, other):
+        return other.name == self.name
+
+
+def test_setting_sort():
+    it = PageIterator([TestItem(v) for v in [4, 3, 1, 2, 0]])
+    it.sort('foo')
+    assert it.total_count == 5
+    assert len(it) == 5
+    assert list(it) == [TestItem(v) for v in range(5)]
+
+
+def test_setting_sort_reversed():
+    it = PageIterator([TestItem(v) for v in [4, 3, 1, 2, 0]])
+    it.sort('foo', reverse=True)
+    assert it.total_count == 5
+    assert len(it) == 5
+    assert list(it) == [TestItem(v) for v in reversed(range(5))]
+
+
+def test_filter():
+    page = mock.MagicMock(spec=Page)
+    page.config = PageConfiguration()
+    page.config.set('threes', {'is_foo': 3})
+    it = PageIterator([TestItem(v) for v in [3, 2, 3, 1, 4, 3]],
+                      current_page=page)
+    it.filter('threes')
+    assert it.total_count == 3
+    assert len(it) == 3
+    assert list(it) == [TestItem(3), TestItem(3), TestItem(3)]
+
+
+def test_magic_filter():
+    it = PageIterator([TestItem(v) for v in [3, 2, 3, 1, 4, 3]])
+    it.is_foo(3)
+    assert it.total_count == 3
+    assert len(it) == 3
+    assert list(it) == [TestItem(3), TestItem(3), TestItem(3)]
+