def test_get_many_uses_query_string(self, flask_client): for _ in range(10): create_user(flask_client) response = flask_client.get( url_for("flump.user", _method="GET"), query_string="other_param=test&page[number]=2&page[size]=3" ) base_url = "http://localhost/tester/user" assert response.status_code == 200 assert response.json == { "meta": {"total_count": 10, "extra": {"size": 3, "page": 2}}, "data": [ {"attributes": {"name": "Carl", "age": 26}, "id": "4", "type": "user", "meta": {"etag": ANY}}, {"attributes": {"name": "Carl", "age": 26}, "id": "5", "type": "user", "meta": {"etag": ANY}}, {"attributes": {"name": "Carl", "age": 26}, "id": "6", "type": "user", "meta": {"etag": ANY}}, ], "links": { "self": base_url + "?other_param=test&page[number]=2&page[size]=3", "first": base_url + "?other_param=test&page%5Bnumber%5D=1&page%5Bsize%5D=3", "last": base_url + "?other_param=test&page%5Bnumber%5D=4&page%5Bsize%5D=3", "prev": base_url + "?other_param=test&page%5Bnumber%5D=1&page%5Bsize%5D=3", "next": base_url + "?other_param=test&page%5Bnumber%5D=3&page%5Bsize%5D=3", }, }
def test_post(flask_client): response = create_user(flask_client) assert response.status_code == 201 assert response.json == { 'data': { 'attributes': { 'name': 'Carl', 'age': 26 }, 'type': 'user', 'id': '1', 'meta': { 'etag': ANY } }, 'links': { 'self': 'http://localhost/tester/user/1' } } assert response.headers['Location'] == url_for( 'flump.user', entity_id=response.json['data']['id'], _method='GET', _scheme='http') assert response.headers['Etag']
def create_user(test_client, data=None, mimetype=MIMETYPE): data = data or { 'data': {'type': 'user', 'attributes': {'name': 'Carl', 'age': 26}} } return test_client.post( url_for('flump.user', _method='POST'), data=json.dumps(data), headers=[('Content-Type', mimetype)] )
def get_user(test_client, entity_id, etag=None): headers = [] if etag: headers.append(('If-Match', etag)) return test_client.get(url_for('flump.user', entity_id=entity_id, _method='GET'), headers=headers)
def test_invalid_page_size(self, flask_client): response = flask_client.get( url_for('flump.user', _method='GET'), query_string='other_param=test&page[number]=1&page[size]=0') assert response.status_code == 400 assert response.json == { 'message': 'Both page[number] and page[size] must be at least 1' }
def get_user(test_client, entity_id, etag=None): headers = [] if etag: headers.append(('If-Match', etag)) return test_client.get( url_for('flump.user', entity_id=entity_id, _method='GET'), headers=headers )
def test_get_when_none_exist(self, flask_client): response = flask_client.get(url_for("flump.user", _method="GET")) assert response.status_code == 200 assert response.json == { "meta": {"total_count": 0}, "data": [], "links": {"self": "http://localhost/tester/user"}, }
def patch_user(test_client, entity_id, data=None, etag=None, mimetype=MIMETYPE): url = url_for('flump.user', entity_id=entity_id, _method='PATCH') headers = [('Content-Type', mimetype)] if etag: headers.append(('If-Match', etag)) data = data or { 'data': {'type': 'user', 'id': entity_id, 'attributes': {'name': 'Carly', 'age': 27}} } return test_client.patch(url, data=json.dumps(data), headers=headers)
def test_no_redirect_with_trailing_slash(flask_client): data = { 'data': {'type': 'user', 'attributes': {'name': 'Carl', 'age': 26}} } url = url_for('flump.user', _method='POST') assert url[-1] != '/' url = url + '/' response = flask_client.post( url, data=json.dumps(data), headers=[('Content-Type', 'application/json')] ) assert response.status_code == 201
def test_get_when_none_exist(self, flask_client): response = flask_client.get(url_for('flump.user', _method='GET')) assert response.status_code == 200 assert response.json == { 'meta': { 'total_count': 0 }, 'data': [], 'links': { 'self': 'http://localhost/tester/user' } }
def create_user(test_client, data=None, mimetype=MIMETYPE): data = data or { 'data': { 'type': 'user', 'attributes': { 'name': 'Carl', 'age': 26 } } } return test_client.post(url_for('flump.user', _method='POST'), data=json.dumps(data), headers=[('Content-Type', mimetype)])
def test_post_only_view_works(flask_client): response = flask_client.post(url_for('post_only_blueprint.user', _method='POST'), data=json.dumps({ 'data': { 'type': 'user', 'attributes': { 'name': 'Graeme', 'age': 100 } } }), headers=[('Content-Type', 'application/json') ]) assert response.status_code == 201
def test_post(flask_client): response = create_user(flask_client) assert response.status_code == 201 assert response.json == { 'data': { 'attributes': {'name': 'Carl', 'age': 26}, 'type': 'user', 'id': '1', 'meta': {'etag': ANY} }, 'links': {'self': 'http://localhost/tester/user/1'} } assert response.headers['Location'] == url_for( 'flump.user', entity_id=response.json['data']['id'], _method='GET', _scheme='http' ) assert response.headers['Etag']
def test_get_many(self, flask_client): create_user(flask_client) create_user(flask_client) create_user(flask_client) response = flask_client.get(url_for('flump.user', _method='GET')) assert response.status_code == 200 assert response.json == { 'meta': { 'total_count': 3 }, 'data': [{ 'attributes': { 'name': 'Carl', 'age': 26 }, 'id': '1', 'type': 'user', 'meta': { 'etag': ANY } }, { 'attributes': { 'name': 'Carl', 'age': 26 }, 'id': '2', 'type': 'user', 'meta': { 'etag': ANY } }, { 'attributes': { 'name': 'Carl', 'age': 26 }, 'id': '3', 'type': 'user', 'meta': { 'etag': ANY } }], 'links': { 'self': 'http://localhost/tester/user' } }
def test_get_many(self, flask_client): create_user(flask_client) create_user(flask_client) create_user(flask_client) response = flask_client.get(url_for("flump.user", _method="GET")) assert response.status_code == 200 assert response.json == { "meta": {"total_count": 3}, "data": [ {"attributes": {"name": "Carl", "age": 26}, "id": "1", "type": "user", "meta": {"etag": ANY}}, {"attributes": {"name": "Carl", "age": 26}, "id": "2", "type": "user", "meta": {"etag": ANY}}, {"attributes": {"name": "Carl", "age": 26}, "id": "3", "type": "user", "meta": {"etag": ANY}}, ], "links": {"self": "http://localhost/tester/user"}, }
def test_no_redirect_with_trailing_slash(flask_client): data = { 'data': { 'type': 'user', 'attributes': { 'name': 'Carl', 'age': 26 } } } url = url_for('flump.user', _method='POST') assert url[-1] != '/' url = url + '/' response = flask_client.post(url, data=json.dumps(data), headers=[('Content-Type', 'application/json') ]) assert response.status_code == 201
def patch_user(test_client, entity_id, data=None, etag=None, mimetype=MIMETYPE): url = url_for('flump.user', entity_id=entity_id, _method='PATCH') headers = [('Content-Type', mimetype)] if etag: headers.append(('If-Match', etag)) data = data or { 'data': { 'type': 'user', 'id': entity_id, 'attributes': { 'name': 'Carly', 'age': 27 } } } return test_client.patch(url, data=json.dumps(data), headers=headers)
def test_get_many(self, flask_client): create_user(flask_client) create_user(flask_client) create_user(flask_client) response = flask_client.get(url_for("flump.user", _method="GET")) base_url = "http://localhost/tester/user" assert response.status_code == 200 assert response.json == { "meta": {"total_count": 3, "extra": {"size": 2, "page": 1}}, "data": [ {"attributes": {"name": "Carl", "age": 26}, "id": "1", "type": "user", "meta": {"etag": ANY}}, {"attributes": {"name": "Carl", "age": 26}, "id": "2", "type": "user", "meta": {"etag": ANY}}, ], "links": { "self": base_url, "first": base_url + "?page%5Bnumber%5D=1&page%5Bsize%5D=2", "last": base_url + "?page%5Bnumber%5D=2&page%5Bsize%5D=2", "prev": None, "next": base_url + "?page%5Bnumber%5D=2&page%5Bsize%5D=2", }, } url, query_string = response.json["links"]["next"].split("?") response = flask_client.get(url, query_string=query_string) assert response.status_code == 200 assert response.json == { "meta": {"total_count": 3, "extra": {"size": 2, "page": 2}}, "data": [{"attributes": {"name": "Carl", "age": 26}, "id": "3", "type": "user", "meta": {"etag": ANY}}], "links": { "self": base_url + "?page[number]=2&page[size]=2", "first": base_url + "?page%5Bnumber%5D=1&page%5Bsize%5D=2", "last": base_url + "?page%5Bnumber%5D=2&page%5Bsize%5D=2", "next": None, "prev": base_url + "?page%5Bnumber%5D=1&page%5Bsize%5D=2", }, }
def delete_user(test_client, entity_id, etag=None): url = url_for('flump.user', entity_id=entity_id, _method='DELETE') headers = [] if etag: headers.append(('If-Match', etag)) return test_client.delete(url, headers=headers)
def test_get_many(self, flask_client): create_user(flask_client) create_user(flask_client) create_user(flask_client) response = flask_client.get(url_for('flump.user', _method='GET')) base_url = 'http://localhost/tester/user' assert response.status_code == 200 assert response.json == { 'meta': { 'total_count': 3, 'extra': { 'size': 2, 'page': 1 } }, 'data': [{ 'attributes': { 'name': 'Carl', 'age': 26 }, 'id': '1', 'type': 'user', 'meta': { 'etag': ANY } }, { 'attributes': { 'name': 'Carl', 'age': 26 }, 'id': '2', 'type': 'user', 'meta': { 'etag': ANY } }], 'links': { 'self': base_url, 'first': base_url + '?page%5Bnumber%5D=1&page%5Bsize%5D=2', 'last': base_url + '?page%5Bnumber%5D=2&page%5Bsize%5D=2', 'prev': None, 'next': base_url + '?page%5Bnumber%5D=2&page%5Bsize%5D=2', } } url, query_string = response.json['links']['next'].split('?') response = flask_client.get(url, query_string=query_string) assert response.status_code == 200 assert response.json == { 'meta': { 'total_count': 3, 'extra': { 'size': 2, 'page': 2 } }, 'data': [{ 'attributes': { 'name': 'Carl', 'age': 26 }, 'id': '3', 'type': 'user', 'meta': { 'etag': ANY } }], 'links': { 'self': base_url + '?page[number]=2&page[size]=2', 'first': base_url + '?page%5Bnumber%5D=1&page%5Bsize%5D=2', 'last': base_url + '?page%5Bnumber%5D=2&page%5Bsize%5D=2', 'next': None, 'prev': base_url + '?page%5Bnumber%5D=1&page%5Bsize%5D=2', } }
def test_get_many_uses_query_string(self, flask_client): for _ in range(10): create_user(flask_client) response = flask_client.get( url_for('flump.user', _method='GET'), query_string='other_param=test&page[number]=2&page[size]=3') base_url = 'http://localhost/tester/user' assert response.status_code == 200 assert response.json == { 'meta': { 'total_count': 10, 'extra': { 'size': 3, 'page': 2 } }, 'data': [{ 'attributes': { 'name': 'Carl', 'age': 26 }, 'id': '4', 'type': 'user', 'meta': { 'etag': ANY } }, { 'attributes': { 'name': 'Carl', 'age': 26 }, 'id': '5', 'type': 'user', 'meta': { 'etag': ANY } }, { 'attributes': { 'name': 'Carl', 'age': 26 }, 'id': '6', 'type': 'user', 'meta': { 'etag': ANY } }], 'links': { 'self': base_url + '?other_param=test&page[number]=2&page[size]=3', 'first': base_url + '?other_param=test&page%5Bnumber%5D=1&page%5Bsize%5D=3', 'last': base_url + '?other_param=test&page%5Bnumber%5D=4&page%5Bsize%5D=3', 'prev': base_url + '?other_param=test&page%5Bnumber%5D=1&page%5Bsize%5D=3', 'next': base_url + '?other_param=test&page%5Bnumber%5D=3&page%5Bsize%5D=3' } }