示例#1
0
def test_no_resources_imply_no_links_to_other_searches(first_search, link_name):
    if len(first_search.resources) != 0:
        pytest.skip("Need something with no resources")
    first_search.response["links"][link_name] = \
        first_search.response["links"]["self"]["href"]
    print(first_search.response)
    assertServerReplyIsWrong(first_search.request())
示例#2
0
def test_search_with_offset_too_high_can_not_have_links(high_offset_search, first_search, link_name):
    """If a search requests an offset too high,
    the prev and the next link can not be set.
    """
    high_offset_search.response["links"][link_name] = \
        first_search.response["links"]["self"]["href"]
    assertServerReplyIsWrong(high_offset_search.request())
示例#3
0
def test_first_implies_prev_link_for_all_but_first_request(second_search):
    """If the first link is given, also a prev link must be given.
    
    This is only valid, if we did not request an offset which is out of range.
    """
    assert second_search.response["links"]["first"], "precondition for the test"
    second_search.response["links"]["prev"] = None
    assertServerReplyIsWrong(second_search.request())
示例#4
0
def test_requests_beyond_the_last_must_not_have_objects(
        first_search, second_search):
    """A request beyond the last link, there shall be no objects to return.
    
    Make the second search look like the last.
    """
    second_search.response["links"]["next"] = None
    second_search.response["links"]["prev"] = None
    second_search.response["links"]["last"] = first_search.response["links"]["first"]
    assertServerReplyIsWrong(second_search.request())
示例#5
0
def test_relative_links_are_not_allowed(second_search, third_search, link_name):
    """Test that the links must start with http or https."""
    existing_link = second_search.response["links"][link_name]
    START = "http://"
    if isinstance(existing_link, str):
        assert existing_link.startswith(START)
        new_link = existing_link[len(START):]
        second_search.response["links"][link_name] = new_link
    if isinstance(existing_link, dict):
        assert existing_link['href'].startswith(START)
        new_link = existing_link['href'][len(START):]
        existing_link['href'] = new_link
    assertServerReplyIsWrong(second_search.request())
示例#6
0
def test_count_must_equal_limit_for_links_in_between(not_last_search):
    """If a search is not the last, the count must be equal to the limit.
    
    Test that
    - last last link is self
    """
    response = not_last_search.response
    response["data"].pop()
    links = response["links"]
    meta = links["self"]["meta"]
    meta["count"] -= 1
    links["next"] = None
    assert links["self"]["href"] != links["last"], "precondition for the test"
    assertServerReplyIsWrong(not_last_search.request())
示例#7
0
def test_next_link_of_last_request_must_be_null(last_search):
    """If the next link is set in the last request, it is an error."""
    last_search.response["links"]["next"] = \
        last_search.response["links"]["self"]["href"]
    print('last_search.response["links"]:', last_search.response["links"])
    assertServerReplyIsWrong(last_search.request())
示例#8
0
def test_count_can_not_be_greater_than_the_limit(first_search):
    """We reduce the limit so it is smaller than the count. This must be wrong."""
    first_search.response["links"]["self"]["meta"]["limit"] = \
        first_search.response["links"]["self"]["meta"]["count"] - 1
    assertServerReplyIsWrong(first_search.request())
示例#9
0
def test_count_does_not_match(first_search):
    """count must be equal t the number of objects."""
    first_search.response["links"]["self"]["meta"]["count"] += 1
    assertServerReplyIsWrong(first_search.request())
示例#10
0
def test_the_limit_can_not_be_increased_by_the_server(second_search):
    """The server may not increase the limit."""
    second_search.response["links"]["self"]["meta"]["limit"] += 1
    assertServerReplyIsWrong(second_search.request())
示例#11
0
def test_the_first_response_must_have_the_offest_0(linked_search):
    """The first request is done without specifying an offset.
    The offset 0 is implied."""
    linked_search[0].response["links"]["self"]["meta"]["offset"] = 1
    assertServerReplyIsWrong(linked_search[0].request())
示例#12
0
def test_prev_link_does_not_skip_objects(second_search, third_search):
    """The prev link must precede directly."""
    third_search.response["links"]["prev"] = second_search.response["links"]["prev"]
    assertServerReplyIsWrong(third_search.request())
示例#13
0
def test_next_link_does_not_skip_objects(first_search, second_search):
    """The next link must follow directly."""
    first_search.response["links"]["next"] = second_search.response["links"]["next"]
    assertServerReplyIsWrong(first_search.request())
示例#14
0
def test_last_link_implies_next_link_for_all_but_last_request(
        not_last_search):
    """A last link is given: we test that the next link must exist."""
    assert not_last_search.response["links"]["last"], "precondition for the test"
    not_last_search.response["links"]["next"] = None
    assertServerReplyIsWrong(not_last_search.request())