view tests/test_data_iterators.py @ 111:208c652551a3

Quick fix for making the server correctly update referenced pages. Disable the file-system cache for rendered segments when in server mode. We can bring this optimization back when we're actually using the baking record in the server too in order to know dependencies.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 16 Oct 2014 17:03:42 -0700
parents cd35d356ccce
children 4379d8f8f831
line wrap: on
line source

import mock
from piecrust.data.iterators 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.config = {'foo': value}  # `config` makes it look like a `Page`.

    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]], 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)]