def test_search_for_bool_invalid(client):
    prepopulate()

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

    delete_all()
def test_potion_type_duplicate_color(client):
    prepopulate()

    response = client.post('/v1/potions/types', headers=valid_token, json={'related_stat':'sleep', 'color':'red'}, as_response=True)
    assert response.status_code == 400

    delete_all()
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_methods_without_params(client, url):
    prepopulate()

    response = client.put(f'{url}/1', headers=valid_token, as_response=True)
    assert response.status_code == 400

    response = client.post(url, headers=valid_token, as_response=True)
    assert response.status_code == 400
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_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()
def test_invalid_value_type(client, url, bad_value):
    prepopulate()

    response = client.put(f'{url}/1', headers=valid_token, json=bad_value, as_response=True)
    assert response.status_code in [400,404]

    response = client.post(url, headers=valid_token, json=bad_value, as_response=True)
    assert response.status_code in [400,404]

    delete_all()
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_put_bad_json(client, url):
    prepopulate()

    # invalid json
    response = client.put(f'{url}/1', headers=valid_token, json=1, as_response=True)
    assert response.status_code == 400
    # invalid key
    response = client.put(f'{url}/1', headers=valid_token, json={'invalid':'invalid'}, as_response=True)
    assert response.status_code == 404

    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_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_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()
Beispiel #13
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()
Beispiel #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()
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_post_unknown_foreign_key(client):
    prepopulate()
    # can't create a valid potion if the potency/type don't exist!
    response = client.post('/v1/potions', headers=valid_token, json={'potency_id':9000, 'type_id':9000}, as_response=True)
    assert response.status_code == 400
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()