예제 #1
0
    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",
            },
        }
예제 #2
0
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']
예제 #3
0
파일: helpers.py 프로젝트: rolepoint/flump
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)]
    )
예제 #4
0
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)
예제 #5
0
 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'
     }
예제 #6
0
파일: helpers.py 프로젝트: rolepoint/flump
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
    )
예제 #7
0
    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"},
        }
예제 #8
0
파일: helpers.py 프로젝트: rolepoint/flump
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)
예제 #9
0
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
예제 #10
0
    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'
            }
        }
예제 #11
0
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)])
예제 #12
0
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
예제 #13
0
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']
예제 #14
0
    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'
            }
        }
예제 #15
0
    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"},
        }
예제 #16
0
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
예제 #17
0
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)
예제 #18
0
    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",
            },
        }
예제 #19
0
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)
예제 #20
0
    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',
            }
        }
예제 #21
0
파일: helpers.py 프로젝트: rolepoint/flump
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)
예제 #22
0
    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'
            }
        }