def test_wrong_page_size(self, session, page_number, page_size):
        query = session.query(User)

        with pytest.raises(InvalidPage) as err:
            apply_pagination(query, page_number, page_size)

        expected_error = 'Page size should not be negative: {}'.format(
            page_size)
        assert error_value(err) == expected_error
    def test_wrong_page_number_with_no_results(self, session, page_number,
                                               page_size):
        query = session.query(User)

        with pytest.raises(InvalidPage) as err:
            apply_pagination(query, page_number, page_size)

        expected_error = 'Page number should be positive: {}'.format(
            page_number)
        assert error_value(err) == expected_error
    def test_page_size_zero(self, session, page_number):
        query = session.query(User)
        page_size = 0

        paginated_query, pagination = apply_pagination(query, page_number,
                                                       page_size)

        assert query != paginated_query
        assert Pagination(page_number=page_number,
                          page_size=0,
                          num_pages=0,
                          total_results=8) == pagination

        result = paginated_query.all()

        assert len(result) == 0
    def test_page_number_greater_than_one(self, session, page_number):
        query = session.query(User)
        page_size = None

        paginated_query, pagination = apply_pagination(query, page_number,
                                                       page_size)

        assert query != paginated_query
        assert Pagination(page_number=page_number,
                          page_size=8,
                          num_pages=1,
                          total_results=8) == pagination

        result = paginated_query.all()

        assert len(result) == 0
    def test_page_size_and_page_number_provided(self, session):
        query = session.query(User)
        page_size = 2
        page_number = 1

        paginated_query, pagination = apply_pagination(query, page_number,
                                                       page_size)

        assert query != paginated_query
        assert Pagination(page_number=1,
                          page_size=2,
                          num_pages=0,
                          total_results=0) == pagination

        result = paginated_query.all()

        assert len(result) == 0
    def test_get_individual_record(self, session):
        query = session.query(User)
        page_size = 1
        page_number = 5

        paginated_query, pagination = apply_pagination(query, page_number,
                                                       page_size)

        assert query != paginated_query
        assert Pagination(page_number=5,
                          page_size=1,
                          num_pages=8,
                          total_results=8) == pagination

        result = paginated_query.all()

        assert len(result) == 1
        assert result[0].id == 5
    def test_page_number_and_page_size_provided(self, session):
        query = session.query(User)
        page_size = 2
        page_number = 3

        paginated_query, pagination = apply_pagination(query, page_number,
                                                       page_size)
        assert query != paginated_query
        assert Pagination(page_number=3,
                          page_size=2,
                          num_pages=4,
                          total_results=8) == pagination

        result = paginated_query.all()

        assert len(result) == 2
        assert result[0].id == 5
        assert result[1].id == 6
    def test_get_first_page(self, session):
        query = session.query(User)
        page_size = 2
        page_number = 1

        paginated_query, pagination = apply_pagination(query, page_number,
                                                       page_size)

        assert query != paginated_query
        assert Pagination(page_number=1,
                          page_size=2,
                          num_pages=4,
                          total_results=8) == pagination

        result = paginated_query.all()

        assert len(result) == 2
        assert result[0].id == 1
        assert result[1].id == 2
    def test_first_page(self, session):
        query = session.query(User)
        page_size = None
        page_number = 1

        paginated_query, pagination = apply_pagination(query, page_number,
                                                       page_size)

        assert query != paginated_query
        assert Pagination(page_number=1,
                          page_size=8,
                          num_pages=1,
                          total_results=8) == pagination

        result = paginated_query.all()

        assert len(result) == 8
        for i in range(8):
            assert result[i].id == i + 1
    def test_last_incomplete_page(self, session):
        query = session.query(User)
        page_size = 5
        page_number = 2

        paginated_query, pagination = apply_pagination(query, page_number,
                                                       page_size)

        assert query != paginated_query
        assert Pagination(page_number=2,
                          page_size=5,
                          num_pages=2,
                          total_results=8) == pagination

        result = paginated_query.all()

        assert len(result) == 3
        assert result[0].id == 6
        assert result[1].id == 7
        assert result[2].id == 8