Exemplo n.º 1
0
def test_put_authorized_not_owned_valid_data(client):
    # Init data
    category_id = 1

    user = _create_user(client)
    user2 = _create_user(client)

    headers = create_headers(
        access_token=generate_access_token(user['id'])
    )
    headers2 = create_headers(
        access_token=generate_access_token(user2['id'])
    )

    item = _create_item_in_category(client, headers, category_id)
    item_id = item['id']

    data = {
        'name': 'New Item Name ({})'.format(random_string(10))
    }

    # Update item
    response = client.put(
        '/categories/{}/items/{}'.format(category_id, item_id),
        headers=headers2,
        data=json.dumps(data)
    )

    # Check if server returns 403
    assert response.status_code == 403
Exemplo n.º 2
0
def test_put_unauthorized_valid_data(client):
    # Init data
    category_id = 1

    user = _create_user(client)

    headers = create_headers(
        access_token=generate_access_token(user['id'])
    )
    headers2 = create_headers()

    item = _create_item_in_category(client, headers, category_id)
    item_id = item['id']

    data = {
        'name': 'New Item Name ({})'.format(random_string(10))
    }

    # Update item
    response = client.put(
        '/categories/{}/items/{}'.format(category_id, item_id),
        headers=headers2,
        data=json.dumps(data)
    )

    resp = json_response(response)

    # Check if server returns 401
    assert response.status_code == 401

    # Check if each dict contains these keys
    assert all(
        key in resp
        for key in ['error_code', 'message']
    ) is True
Exemplo n.º 3
0
def test_put_authorized_duplicated(client):
    # Init data
    category_id = 1

    user = _create_user(client)
    headers = create_headers(
        access_token=generate_access_token(user['id'])
    )
    item = _create_item_in_category(client, headers, category_id)
    item2 = _create_item_in_category(client, headers, category_id)

    item_id = item['id']

    data = {
        'name': item2['name']
    }

    # Update item
    response = client.put(
        '/categories/{}/items/{}'.format(category_id, item_id),
        headers=headers,
        data=json.dumps(data)
    )

    resp = json_response(response)

    # Check if server returns 400
    assert response.status_code == 400

    # Check if each dict contains these keys
    assert all(
        key in resp
        for key in ['error_code', 'message']
    ) is True
Exemplo n.º 4
0
def test_post_authorized_unrecognized_field(client):
    # Init data
    user = _create_user(client)
    headers = create_headers(
        access_token=generate_access_token(user['id'])
    )

    category_id = 1
    data = {
        'id': 100,
        'name': 'My Item {}'.format(random_string(10))
    }

    # Create item
    response = client.post(
        '/categories/{}/items'.format(category_id),
        headers=headers,
        data=json.dumps(data)
    )

    resp = json_response(response)

    # Check if server returns 400
    assert response.status_code == 400

    # Check if each dict contains these keys
    assert all(
        key in resp
        for key in ['error_code', 'message']
    ) is True
Exemplo n.º 5
0
def test_post_duplicated_email(client):
    credential = {
        'username': '******',
        'password': '******',
        'name': 'Thinh Nguyen',
        'email': '*****@*****.**'
    }

    response = client.post(
        '/users',
        headers=create_headers(),
        data=json.dumps(credential)
    )

    resp = json_response(response)

    # Check if server returns 400
    assert response.status_code == 400

    # Check if these keys exists in response
    assert all(
        key in resp
        for key in ['error_code', 'message']
    ) is True

    # Check if only email error
    assert 'email' in resp['errors']
    assert 'username' not in resp['errors']
Exemplo n.º 6
0
def test_post_no_name_field(client):
    # Init data
    user = _create_user(client)
    headers = create_headers(
        access_token=generate_access_token(user['id'])
    )

    category_id = 1
    data = {
        'description': 'Hello testing'
    }

    # Create item
    response = client.post(
        '/categories/{}/items'.format(category_id),
        headers=headers,
        data=json.dumps(data)
    )

    resp = json_response(response)

    # Check if server returns 400
    assert response.status_code == 400

    # Check if each dict contains these keys
    assert all(
        key in resp
        for key in ['error_code', 'message']
    ) is True
Exemplo n.º 7
0
def test_put_authorized_valid_data(client):
    # Init data
    category_id = 1

    user = _create_user(client)
    headers = create_headers(
        access_token=generate_access_token(user['id'])
    )
    item = _create_item_in_category(client, headers, category_id)
    item_id = item['id']

    data = {
        'name': 'New Item Name ({})'.format(random_string(10))
    }

    # Update item
    response = client.put(
        '/categories/{}/items/{}'.format(category_id, item_id),
        headers=headers,
        data=json.dumps(data)
    )

    resp = json_response(response)

    # Check if server returns 200
    assert response.status_code == 200

    # Check if each dict contains these keys
    assert all(
        key in resp
        for key in ['id', 'name', 'description', 'updated', 'created']
    ) is True

    # Check if new name matches
    assert resp['name'] == data['name']
Exemplo n.º 8
0
def test_post_authorized_invalid_input(client):
    # Init data
    user = _create_user(client)
    headers = create_headers(
        access_token=generate_access_token(user['id'])
    )

    category_id = 1
    combine_data = {
        'name': [None, '', '{}'.format(random_string(100))],
        'description': [None, '', 'ABC']
    }

    combinations = itertools.product(*combine_data.values())

    num_valid_combine = 0
    for combination in combinations:
        data = dict((k, v) for k, v in zip(combine_data.keys(), combination))

        # Create item
        response = client.post(
            '/categories/{}/items'.format(category_id),
            headers=headers,
            data=json.dumps(data)
        )

        num_valid_combine += 1 if response.status_code != 400 else 0

        # Check if valid combination counter always equals to 0 (all cases are invalid)
        assert num_valid_combine <= 1
Exemplo n.º 9
0
def test_post_unauthorized(client):
    headers = create_headers()

    category_id = 1
    data = {
        'name': 'My Item ({})'.format(random_string(10))
    }

    # Create item
    response = client.post(
        '/categories/{}/items'.format(category_id),
        headers=headers,
        data=json.dumps(data)
    )

    resp = json_response(response)

    # Check if server returns 401
    assert response.status_code == 401

    # Check if each dict contains these keys
    assert all(
        key in resp
        for key in ['message', 'error_code']
    ) is True
Exemplo n.º 10
0
def test_get_unauthorized(client):
    for category_id in range(1, 4):
        response = client.get('/categories/{}/items'.format(category_id),
                              headers=create_headers())

        resp = json_response(response)

        # Check if server returns 200
        assert response.status_code == 200

        # Check if pagination is correct
        assert all(
            key in resp
            for key in ['items', 'total_pages', 'page', 'total', 'per_page'
                        ]) is True

        # Check if each dict contains these keys
        for res in resp['items']:
            assert all(
                key in res
                for key in ['id', 'name', 'description', 'updated', 'created'
                            ]) is True

        # Check if is_owner not in item
        for res in resp['items']:
            assert 'is_owner' not in res
Exemplo n.º 11
0
def test_post_authorized(client):
    # Init data
    user = _create_user(client)
    headers = create_headers(
        access_token=generate_access_token(user['id'])
    )

    category_id = 1
    data = {
        'name': 'My Item {}'.format(random_string(10))
    }

    # Create item
    response = client.post(
        '/categories/{}/items'.format(category_id),
        headers=headers,
        data=json.dumps(data)
    )

    resp = json_response(response)

    # Check if server returns 200
    assert response.status_code == 200

    # Check if each dict contains these keys
    assert all(
        key in resp
        for key in ['id', 'name', 'description', 'updated', 'created']
    ) is True

    # Check if newly created item is has the same name
    assert resp['name'] == data['name']
    assert resp['description'] == ''
Exemplo n.º 12
0
def test_post_correct_input(client):
    credential = {
        'username': '******',
        'password': '******',
        'name': 'Thinh Nguyen',
        'email': '*****@*****.**'
    }

    response = client.post(
        '/users',
        headers=create_headers(),
        data=json.dumps(credential)
    )

    resp = json_response(response)

    # Check if server returns 200
    assert response.status_code == 200

    # Check if these keys exists in response
    assert all(
        key in resp
        for key in ['id', 'username', 'name', 'created', 'updated']
    ) is True

    # Check if password not in response
    assert 'password' not in resp.keys()
def test_not_found(client):
    response = client.post(
        '/not-found',
        headers=create_headers()
    )

    # Check if server returns 404
    assert response.status_code == 404
def test_method_not_allowed(client):
    response = client.get(
        '/authentication',
        headers=create_headers()
    )

    # Check if server returns 405
    assert response.status_code == 405
Exemplo n.º 15
0
def test_get_authorized_exceeded_pagination(client):
    for category_id in range(1, 4):
        response = client.get(
            '/categories/{}/items?page=10'.format(category_id),
            headers=create_headers(access_token=generate_access_token(1)))

        # Check if server returns 400
        assert response.status_code == 400
Exemplo n.º 16
0
def test_post_invalid_json(client):
    response = client.post(
        '/users',
        headers=create_headers(),
        data="{"
    )

    # Check if server returns 400
    assert response.status_code == 400
Exemplo n.º 17
0
def test_get_invalid_category_id(client):
    for category_id in range(5, 7):
        response = client.get('/categories/{}/items'.format(category_id),
                              headers=create_headers())

        # Check if server returns 404
        assert response.status_code == 404

        # Check if these keys exists in response
        assert all(key in json_response(response).keys()
                   for key in ['message', 'error_code']) is True
def test_post_correct_credentials(client):
    credential = {'username': '******', 'password': '******'}

    response = client.post('/authentication',
                           headers=create_headers(),
                           data=json.dumps(credential))

    # Check if server returns 200
    assert response.status_code == 200

    # Check if the server return an access_token
    assert 'access_token' in json_response(response).keys()
def test_post_invalid_credentials(client):
    credential = {'username': '******', 'password': '******'}

    response = client.post('/authentication',
                           headers=create_headers(),
                           data=json.dumps(credential))

    # Check if server returns 401
    assert response.status_code == 401

    # Check if these keys exists in response
    assert all(key in json_response(response).keys()
               for key in ['message', 'error_code']) is True
Exemplo n.º 20
0
def test_get_valid_category(client):
    for category_id in range(1, 4):
        response = client.get(
            '/categories/{}'.format(category_id),
            headers=create_headers()
        )

        # Check if server returns 200
        assert response.status_code == 200

        # Check if these keys exists in response
        assert all(
            key in json_response(response).keys()
            for key in ['id', 'name', 'description', 'updated', 'created']
        ) is True
Exemplo n.º 21
0
def test_get_unauthorized_valid_category(client):
    category_id = 1

    for item_id in range(1, 3):
        response = client.get('/categories/{}/items/{}'.format(
            category_id, item_id),
                              headers=create_headers())

        resp = json_response(response)

        # Check if server returns 200
        assert response.status_code == 200

        # Check if each dict contains these keys
        assert all(key in resp for key in
                   ['id', 'name', 'description', 'updated', 'created']) is True
Exemplo n.º 22
0
def test_get_authorized_valid_pagination(client):
    response = client.get(
        '/categories/{}/items?page=1&per_page=1'.format(1),
        headers=create_headers(access_token=generate_access_token(1)))

    resp = json_response(response)

    # Check if server returns 200
    assert response.status_code == 200

    # Check if pagination is correct
    assert all(key in resp for key in
               ['items', 'total_pages', 'page', 'total', 'per_page']) is True

    # Check if it has 3 pages
    assert resp['total_pages'] == 3

    # Check if number of items is correct
    assert len(resp['items']) == 1
Exemplo n.º 23
0
def test_get_categories(client):
    response = client.get(
        '/categories',
        headers=create_headers()
    )

    resp = json_response(response)

    # Check if server returns 200
    assert response.status_code == 200

    # Check if number of categories equals to 4
    assert len(resp) == 4

    # Check if each dict contains these keys
    for res in resp:
        assert all(
            key in res
            for key in ['id', 'name', 'description', 'updated', 'created']
        ) is True