def test_page_links(app, indexed_records, search_url): """Test Link HTTP header on multi-page searches.""" with app.test_client() as client: # Limit records res = client.get(search_url, query_string=dict(size=1, page=1)) assert_hits_len(res, 1) def parse_link_header(response): """Parses the links from a REST response's HTTP header.""" return { k: v for (k, v) in map( lambda s: re.findall(r'<(.*)>; rel="(.*)"', s)[0][::-1], [x for x in res.headers['Link'].split(', ')]) } links = parse_link_header(res) data = get_json(res)['links'] assert 'self' in data \ and 'self' in links \ and data['self'] == links['self'] assert 'next' in data \ and 'next' in links \ and data['next'] == links['next'] assert 'prev' not in data \ and 'prev' not in links # Assert next URL before calling it first_url = links['self'] next_url = links['next'] parsed_url = parse_url(next_url) assert parsed_url['qs']['size'] == ['1'] assert parsed_url['qs']['page'] == ['2'] # Access next URL res = client.get(to_relative_url(next_url)) assert_hits_len(res, 1) links = parse_link_header(res) assert links['self'] == next_url assert 'next' in links assert 'prev' in links and links['prev'] == first_url
def test_item_get(app, test_records): """Test record retrieval.""" with app.test_client() as client: pid, record = test_records[0] res = client.get(record_url(pid)) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(record.revision_id) # Check metadata data = get_json(res) for k in ['id', 'created', 'updated', 'metadata', 'links']: assert k in data assert data['id'] == int(pid.pid_value) assert data['metadata'] == record.dumps() # Check self links client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res)
def test_item_get(app, test_records): """Test record retrieval.""" with app.test_client() as client: pid, record = test_records[0] res = client.get(record_url(pid)) assert res.status_code == 200 assert res.headers["ETag"] == '"{}"'.format(record.revision_id) # Check metadata data = get_json(res) for k in ["id", "created", "updated", "metadata", "links"]: assert k in data assert data["id"] == int(pid.pid_value) assert data["metadata"] == record.dumps() # Check self links client.get(to_relative_url(data["links"]["self"])) assert res.status_code == 200 assert data == get_json(res)
def test_page_links(app, indexed_records, search_url): """Test Link HTTP header on multi-page searches.""" with app.test_client() as client: # Limit records res = client.get(search_url, query_string=dict(size=1, page=1)) assert_hits_len(res, 1) def parse_link_header(response): """Parse the links from a REST response's HTTP header.""" return { k: v for (k, v) in map(lambda s: re.findall(r'<(.*)>; rel="(.*)"', s)[0][::-1], [x for x in res.headers['Link'].split(', ')]) } links = parse_link_header(res) data = get_json(res)['links'] assert 'self' in data \ and 'self' in links \ and data['self'] == links['self'] assert 'next' in data \ and 'next' in links \ and data['next'] == links['next'] assert 'prev' not in data \ and 'prev' not in links # Assert next URL before calling it first_url = links['self'] next_url = links['next'] parsed_url = parse_url(next_url) assert parsed_url['qs']['size'] == ['1'] assert parsed_url['qs']['page'] == ['2'] # Access next URL res = client.get(to_relative_url(next_url)) assert_hits_len(res, 1) links = parse_link_header(res) assert links['self'] == next_url assert 'next' in links assert 'prev' in links and links['prev'] == first_url
def test_page_links(app, indexed_records, search_url): """Test Link HTTP header on multi-page searches.""" with app.test_client() as client: # Limit records res = client.get(search_url, query_string=dict(size=1, page=1)) assert_hits_len(res, 1) def parse_link_header(response): """Parses the links from a REST response's HTTP header.""" return { k: v for (k, v) in map( lambda s: re.findall(r'<(.*)>; rel="(.*)"', s)[0][::-1], [x for x in res.headers["Link"].split(", ")], ) } links = parse_link_header(res) data = get_json(res)["links"] assert "self" in data and "self" in links and data["self"] == links["self"] assert "next" in data and "next" in links and data["next"] == links["next"] assert "prev" not in data and "prev" not in links # Assert next URL before calling it first_url = links["self"] next_url = links["next"] parsed_url = parse_url(next_url) assert parsed_url["qs"]["size"] == ["1"] assert parsed_url["qs"]["page"] == ["2"] # Access next URL res = client.get(to_relative_url(next_url)) assert_hits_len(res, 1) links = parse_link_header(res) assert links["self"] == next_url assert "next" in links assert "prev" in links and links["prev"] == first_url
def test_pagination(app, indexed_records, search_url): """Test pagination.""" with app.test_client() as client: # Limit records res = client.get(search_url, query_string=dict(size=1, page=1)) assert_hits_len(res, 1) data = get_json(res) assert 'self' in data['links'] assert 'next' in data['links'] assert 'prev' not in data['links'] # Assert next URL before calling it next_url = get_json(res)['links']['next'] parsed_url = parse_url(next_url) assert parsed_url['qs']['size'] == ['1'] assert parsed_url['qs']['page'] == ['2'] # Access next URL res = client.get(to_relative_url(next_url)) assert_hits_len(res, 1) data = get_json(res) assert data['links']['self'] == next_url assert 'next' in data['links'] assert 'prev' in data['links']
def test_pagination(app, indexed_records, search_url): """Test pagination.""" with app.test_client() as client: # Limit records res = client.get(search_url, query_string=dict(size=1, page=1)) assert_hits_len(res, 1) data = get_json(res) assert "self" in data["links"] assert "next" in data["links"] assert "prev" not in data["links"] # Assert next URL before calling it next_url = get_json(res)["links"]["next"] parsed_url = parse_url(next_url) assert parsed_url["qs"]["size"] == ["1"] assert parsed_url["qs"]["page"] == ["2"] # Access next URL res = client.get(to_relative_url(next_url)) assert_hits_len(res, 1) data = get_json(res) assert data["links"]["self"] == next_url assert "next" in data["links"] assert "prev" in data["links"]