Example #1
0
def test_delete_all_helper(client):
    # starts empty
    resp = client.get(POTION_TYPE, as_response=True)
    assert resp.status_code == 200
    if resp.json['results']:
        delete_all()
        resp = client.get(POTION_TYPE, as_response=True)
        assert resp.status_code == 200

    assert resp.json['results'] == EMPTY

    # add some potions
    client.post(POTION_TYPE,
                headers=valid_token,
                json=[{
                    'related_stat': 'Health',
                    'color': 'red'
                }, {
                    'related_stat': 'Mana',
                    'color': 'blue'
                }])
    resp = client.get(POTION_TYPE, as_response=True)
    assert resp.status_code == 200
    assert len(resp.json['results']) == 2

    # use helper to delete from DB
    delete_all()

    # immediately run get again, should be empty
    resp = client.get(POTION_TYPE, as_response=True)
    assert resp.status_code == 200
    assert resp.json['results'] == EMPTY
def test_delete_foreign_key(client, url, key):
    prepopulate()

    # prepopulate should have created the thing
    response = client.get(url, as_response=True)
    assert response.status_code == 200
    # thing should be referenced as ForeignKey in Potions
    response = client.get(f'/v1/potions?{key}=1', as_response=True)
    assert response.status_code == 200
    assert len(response.json['results']) >= 1
    matched_potions = len(response.json['results'])

    # if you delete PotionType/Potency with Potion referencing it
    # should throw an error & not delete
    response = client.delete(url, headers=valid_token, as_response=True)
    assert response.status_code == 400

    # delete should not have removed the thing
    response = client.get(url, as_response=True)
    assert response.status_code == 200

    response = client.get(f'/v1/potions?{key}=1', as_response=True)
    assert response.status_code == 200
    assert len(response.json['results']) == matched_potions

    delete_all()
def test_search_multiple_keys(client):
    prepopulate()

    # prepopulate sets all Inventory.price = 15, so these are identical queries
    inventory1 = client.get(f'{INVENTORY}?price=15&limit=7')
    inventory2 = client.get(f'{INVENTORY}?limit=7')
    assert inventory1['results'] == inventory2['results']

    delete_all()
def test_describe_empty(client):
    response = client.get('/v1/potions/describe', as_response=True)
    assert response.status_code == 200
    assert response.json == None

    response = client.get('/v1/potions/describe/1', as_response=True)
    assert response.status_code == 404
    assert response.json[
        'description'] == 'Unable to find resource with given ID'
def test_search_for_bool(client, search, actual):
    prepopulate()
    all_inventory = client.get(INVENTORY)
    search_on_sale = client.get(f'{INVENTORY}?on_sale={search}')

    all_on_sale = [{'id':inv['id'] for inv in all_inventory['results'] if inv['on_sale'] == actual}]
    search_results = [{'id':inv['id'] for inv in search_on_sale['results']}]

    assert all_on_sale == search_results
    delete_all()
def test_search_for_number(client):
    prepopulate()
    # prepopulate sets all Inventory.price = 15

    search_partial = client.get(f'{INVENTORY}?price=1')
    assert search_partial['results'] == EMPTY

    search_good = client.get(f'{INVENTORY}?price=15')
    all_inventory = client.get(INVENTORY)
    assert search_good['results'] == all_inventory['results']

    delete_all()
def test_search_limit(client, limit):
    prepopulate()
    max_potions = len(client.get(POTIONS)['results'])

    if limit >= 0:
        resp = client.get(f'{POTIONS}?limit={limit}')
        assert len(resp['results']) == min(limit, max_potions)
    else:
        resp = client.get(f'{POTIONS}?limit={limit}', as_response=True)
        assert resp.status_code == 400
        assert resp.json['description'] == "Invalid value for 'limit' parameter."
    delete_all()
def test_search_for_bool_invalid(client):
    prepopulate()

    bad_search = client.get(f'{INVENTORY}?on_sale=badvalue')
    assert bad_search['results'] == EMPTY

    delete_all()
Example #9
0
def test_valid_no_auth_routes(client, url):
    delete_all()
    # valid header
    response = client.get(
        url,
        headers={'Authorization': create_token(token, adjust_times=True)},
        as_response=True)
    assert response.status_code == 200
    # invalid header
    response = client.get(url,
                          headers={'Authorization': 'notvalid'},
                          as_response=True)
    assert response.status_code == 200
    # no header
    response = client.get(url, as_response=True)
    assert response.status_code == 200
def test_search_for_string(client):
    prepopulate()
    search_exact = client.get(f'{POTION_TYPE}?color=red')
    assert len(search_exact['results']) == 1

    search_partial = client.get(f'{POTION_TYPE}?color=r')
    assert search_exact == search_partial

    # prepopulate colors = red,blue,green = all have 'e'
    # but none should show up when you search for 'e' because
    # search is a startswith() based search
    search_middle = client.get(f'{POTION_TYPE}?color=e')
    assert search_middle['results'] == EMPTY

    # search should be case-insensitive
    search_case = client.get(f'{POTION_TYPE}?color=RED')
    assert search_case == search_exact

    delete_all()
def test_put_unknown_foreign_key(client):
    prepopulate()

    potion_exists = client.get('/v1/potions/1', as_response=True)
    assert potion_exists.status_code == 200

    response = client.put('/v1/potions/1', headers=valid_token, json={'potency_id':9000, 'type_id':9000}, as_response=True)
    assert response.status_code == 404

    delete_all()
Example #12
0
def test_put_multiple(client):
    # an error in a previous version of the update code in base.py
    # would cause all items to be updated instead of only the item
    # with the given id
    prepopulate()

    resp = client.get(POTION_TYPE)
    assert len(resp['results']) == 3

    client.put(f'{POTION_TYPE}/1',
               headers=valid_token,
               json={'color': 'purple'})

    resp = client.get(POTION_TYPE)
    assert len(resp['results']) == 3

    colors = set(r['color'] for r in resp['results'])
    assert set(['purple', 'blue', 'green']) == colors

    delete_all()
Example #13
0
    def value_equals(route, should_equal):
        response = client.get(route)

        if len(response['results']) > 0:
            assert len(response['results']) == 1
            results = response['results'][0]
            # create a copy of should_equal with all fields
            expected = copy.copy(should_equal)
            expected['id'] = 1
            assert results == expected
        else:
            assert should_equal == EMPTY
            assert response['results'] == EMPTY
Example #14
0
def test_prepopulate_helper(client):
    prepopulate()

    resp = client.get(POTION_TYPE, as_response=True)
    assert resp.status_code == 200
    assert len(resp.json['results']) == 3

    resp = client.get(POTENCY, as_response=True)
    assert resp.status_code == 200
    assert len(resp.json['results']) == 3

    resp = client.get(POTIONS, as_response=True)
    assert resp.status_code == 200
    assert len(resp.json['results']) == 9

    resp = client.get(INVENTORY, as_response=True)
    assert resp.status_code == 200
    assert len(resp.json['results']) == 9

    delete_all()

    resp = client.get(POTION_TYPE, as_response=True)
    assert resp.status_code == 200
    assert resp.json['results'] == EMPTY

    resp = client.get(POTENCY, as_response=True)
    assert resp.status_code == 200
    assert resp.json['results'] == EMPTY

    resp = client.get(POTIONS, as_response=True)
    assert resp.status_code == 200
    assert resp.json['results'] == EMPTY

    resp = client.get(INVENTORY, as_response=True)
    assert resp.status_code == 200
    assert resp.json['results'] == EMPTY
def test_describe_all(client):
    prepopulate()
    response = client.get('/v1/potions/describe')
    assert response == descriptions
    delete_all()
Example #16
0
 def delete(route):
     client.delete(f'{route}/1',
                   headers=valid_token,
                   expected_statuses=[204])
     response = client.get(route)
     assert len(response['results']) == 0
def test_describe_one(client, index):
    prepopulate()
    # index for DB starts with 1, index for python list starts with 0
    response = client.get(f'/v1/potions/describe/{index}')
    assert response == descriptions[index - 1]
    delete_all()
def test_search_invalid_key(client):
    prepopulate()
    resp = client.get(f'{POTIONS}?invalidkey=bad', as_response=True)
    assert resp.status_code == 400
    assert resp.json['description'] == "Unsupported search parameters: {'invalidkey'}"
    delete_all()