From 415d4192571eb5ea8b6d58726c44842fca82a5d6 Mon Sep 17 00:00:00 2001
From: Benjamin Bertrand <benjamin.bertrand@esss.se>
Date: Sun, 5 Aug 2018 16:13:51 +0200
Subject: [PATCH] Update tests for flask >= 1.0

New get_json method on test client response.
See http://flask.pocoo.org/docs/1.0/testing/#testing-json-apis
---
 tests/functional/test_api.py | 188 +++++++++++++++++------------------
 tests/functional/test_web.py |  20 ++--
 2 files changed, 97 insertions(+), 111 deletions(-)

diff --git a/tests/functional/test_api.py b/tests/functional/test_api.py
index f47b8f3..731f62f 100644
--- a/tests/functional/test_api.py
+++ b/tests/functional/test_api.py
@@ -55,8 +55,6 @@ def get(client, url, token=None):
             "Authorization": f"Bearer {token}",
         },
     )
-    if response.headers["Content-Type"] == "application/json":
-        response.json = json.loads(response.data)
     return response
 
 
@@ -65,8 +63,6 @@ def post(client, url, data, token=None):
     if token is not None:
         headers["Authorization"] = f"Bearer {token}"
     response = client.post(url, data=json.dumps(data), headers=headers)
-    if response.headers["Content-Type"] == "application/json":
-        response.json = json.loads(response.data)
     return response
 
 
@@ -75,8 +71,6 @@ def patch(client, url, data, token=None):
     if token is not None:
         headers["Authorization"] = f"Bearer {token}"
     response = client.patch(url, data=json.dumps(data), headers=headers)
-    if response.headers["Content-Type"] == "application/json":
-        response.json = json.loads(response.data)
     return response
 
 
@@ -87,7 +81,7 @@ def login(client, username, password):
 
 def get_token(client, username, password):
     response = login(client, username, password)
-    return response.json["access_token"]
+    return response.get_json()["access_token"]
 
 
 @pytest.fixture()
@@ -113,7 +107,7 @@ def admin_token(client):
 def check_response_message(response, msg, status_code=400):
     assert response.status_code == status_code
     try:
-        data = response.json
+        data = response.get_json()
     except AttributeError:
         data = json.loads(response.data)
     try:
@@ -126,13 +120,13 @@ def check_response_message(response, msg, status_code=400):
 
 
 def check_names(response, names):
-    response_names = set(item["name"] for item in response.json)
+    response_names = set(item["name"] for item in response.get_json())
     assert set(names) == response_names
 
 
 def check_input_is_subset_of_response(response, inputs):
     # Sort the response by id to match the inputs order
-    response_elts = sorted(response.json, key=lambda d: d["id"])
+    response_elts = sorted(response.get_json(), key=lambda d: d["id"])
     for d1, d2 in zip(inputs, response_elts):
         for key, value in d1.items():
             if isinstance(value, datetime.datetime):
@@ -153,7 +147,7 @@ def test_login(client):
     check_response_message(response, "Invalid credentials", 401)
     response = login(client, "user_ro", "userro")
     assert response.status_code == 200
-    assert "access_token" in response.json
+    assert "access_token" in response.get_json()
 
 
 @pytest.mark.parametrize("endpoint", GENERIC_GET_ENDPOINTS)
@@ -171,7 +165,7 @@ def test_get_generic_model(endpoint, session, client, readonly_token):
     check_names(response, names)
     response = get(client, f"{API_URL}/{endpoint}", readonly_token)
     check_names(response, names)
-    for item in response.json:
+    for item in response.get_json():
         assert "qrcode" in item
 
 
@@ -194,8 +188,8 @@ def test_create_generic_model(endpoint, client, user_token):
     data = {"name": "Foo"}
     response = post(client, f"{API_URL}/{endpoint}", data=data, token=user_token)
     assert response.status_code == 201
-    assert {"id", "name"} <= set(response.json.keys())
-    assert response.json["name"] == "Foo"
+    assert {"id", "name"} <= set(response.get_json().keys())
+    assert response.get_json()["name"] == "Foo"
     response = post(client, f"{API_URL}/{endpoint}", data=data, token=user_token)
     check_response_message(
         response,
@@ -221,7 +215,7 @@ def test_create_generic_model(endpoint, client, user_token):
     data = {"name": "Bar", "description": "Bar description"}
     response = post(client, f"{API_URL}/{endpoint}", data=data, token=user_token)
     assert response.status_code == 201
-    assert response.json["description"] == "Bar description"
+    assert response.get_json()["description"] == "Bar description"
     model = ENDPOINT_MODEL[endpoint]
     assert model.query.count() == 2
     response = get(client, f"{API_URL}/{endpoint}", user_token)
@@ -270,8 +264,8 @@ def test_create_item(client, user_token):
         "created_at",
         "user",
         "comments",
-    } == set(response.json.keys())
-    assert response.json["serial_number"] == "123456"
+    } == set(response.get_json().keys())
+    assert response.get_json()["serial_number"] == "123456"
 
     # Check that serial_number doesn't have to be unique
     response = post(client, f"{API_URL}/inventory/items", data=data, token=user_token)
@@ -331,17 +325,17 @@ def test_get_item(client, status_factory, item_factory, readonly_token):
         client, f"{API_URL}/inventory/items/{item1.id}", token=readonly_token
     )
     assert response.status_code == 200
-    assert response.json["id"] == item1.id
-    assert response.json["serial_number"] == item1.serial_number
+    assert response.get_json()["id"] == item1.id
+    assert response.get_json()["serial_number"] == item1.serial_number
     # ...or ics_id
     response = get(
         client, f"{API_URL}/inventory/items/{item2.ics_id}", token=readonly_token
     )
     assert response.status_code == 200
-    assert response.json["id"] == item2.id
-    assert response.json["ics_id"] == item2.ics_id
-    assert response.json["serial_number"] == item2.serial_number
-    assert response.json["status"] == str(item2.status)
+    assert response.get_json()["id"] == item2.id
+    assert response.get_json()["ics_id"] == item2.ics_id
+    assert response.get_json()["serial_number"] == item2.serial_number
+    assert response.get_json()["status"] == str(item2.status)
 
 
 def test_patch_item_auth_fail(client, session, readonly_token):
@@ -405,19 +399,19 @@ def test_patch_item(client, status, item_factory, user_token):
         client, f"{API_URL}/inventory/items/{item1.id}", data=data, token=user_token
     )
     assert response.status_code == 200
-    assert response.json["id"] == item1.id
-    assert response.json["serial_number"] == item1.serial_number
-    assert response.json["ics_id"] == data["ics_id"]
+    assert response.get_json()["id"] == item1.id
+    assert response.get_json()["serial_number"] == item1.serial_number
+    assert response.get_json()["ics_id"] == data["ics_id"]
     # ...or ics_id
     data = {"status": status.name}
     response = patch(
         client, f"{API_URL}/inventory/items/{item2.ics_id}", data=data, token=user_token
     )
     assert response.status_code == 200
-    assert response.json["id"] == item2.id
-    assert response.json["ics_id"] == item2.ics_id
-    assert response.json["serial_number"] == item2.serial_number
-    assert response.json["status"] == data["status"]
+    assert response.get_json()["id"] == item2.id
+    assert response.get_json()["ics_id"] == item2.ics_id
+    assert response.get_json()["serial_number"] == item2.serial_number
+    assert response.get_json()["status"] == data["status"]
 
 
 def test_patch_item_integrity_error(client, user_token, item_factory):
@@ -462,12 +456,12 @@ def test_patch_item_parent(
         token=user_token,
     )
     assert response.status_code == 200
-    assert response.json["id"] == item2.id
-    assert response.json["ics_id"] == item2.ics_id
-    assert response.json["serial_number"] == item2.serial_number
-    assert response.json["parent"] == item1.ics_id
-    assert response.json["status"] == str(item1.status)
-    assert response.json["location"] == str(item1.location)
+    assert response.get_json()["id"] == item2.id
+    assert response.get_json()["ics_id"] == item2.ics_id
+    assert response.get_json()["serial_number"] == item2.serial_number
+    assert response.get_json()["parent"] == item1.ics_id
+    assert response.get_json()["status"] == str(item1.status)
+    assert response.get_json()["location"] == str(item1.location)
 
     # updating a parent, modifies the status and location of all children
     # check location
@@ -479,15 +473,15 @@ def test_patch_item_parent(
         token=user_token,
     )
     assert response.status_code == 200
-    assert response.json["id"] == item1.id
-    assert response.json["ics_id"] == item1.ics_id
-    assert response.json["serial_number"] == item1.serial_number
-    assert response.json["status"] == str(item1.status)
-    assert response.json["location"] == data2["location"]
+    assert response.get_json()["id"] == item1.id
+    assert response.get_json()["ics_id"] == item1.ics_id
+    assert response.get_json()["serial_number"] == item1.serial_number
+    assert response.get_json()["status"] == str(item1.status)
+    assert response.get_json()["location"] == data2["location"]
     for ics_id in ("AAA002", "AAA003"):
         response = get(client, f"{API_URL}/inventory/items/{ics_id}", token=user_token)
-        assert response.json["location"] == data2["location"]
-        assert response.json["status"] == "In service"
+        assert response.get_json()["location"] == data2["location"]
+        assert response.get_json()["status"] == "In service"
     # check status
     data3 = {"status": "Stock"}
     response = patch(
@@ -497,11 +491,11 @@ def test_patch_item_parent(
         token=user_token,
     )
     assert response.status_code == 200
-    assert response.json["status"] == data3["status"]
+    assert response.get_json()["status"] == data3["status"]
     for ics_id in ("AAA002", "AAA003"):
         response = get(client, f"{API_URL}/inventory/items/{ics_id}", token=user_token)
-        assert response.json["location"] == data2["location"]
-        assert response.json["status"] == data3["status"]
+        assert response.get_json()["location"] == data2["location"]
+        assert response.get_json()["status"] == data3["status"]
 
     # manufacturer has no impact on children
     data4 = {"manufacturer": "HP"}
@@ -512,17 +506,17 @@ def test_patch_item_parent(
         token=user_token,
     )
     assert response.status_code == 200
-    assert response.json["manufacturer"] == "HP"
+    assert response.get_json()["manufacturer"] == "HP"
     # Manufacturer didn't change on children
     response = get(
         client, f"{API_URL}/inventory/items/{item2.ics_id}", token=user_token
     )
-    assert response.json["manufacturer"] == str(item2.manufacturer)
+    assert response.get_json()["manufacturer"] == str(item2.manufacturer)
     assert str(item2.manufacturer) != "HP"
     response = get(
         client, f"{API_URL}/inventory/items/{item3.ics_id}", token=user_token
     )
-    assert response.json["manufacturer"] == str(item3.manufacturer)
+    assert response.get_json()["manufacturer"] == str(item3.manufacturer)
     assert str(item3.manufacturer) != "HP"
 
 
@@ -535,7 +529,7 @@ def test_get_items(client, location_factory, item_factory, readonly_token):
 
     response = get(client, f"{API_URL}/inventory/items", token=readonly_token)
     assert response.status_code == 200
-    assert len(response.json) == 3
+    assert len(response.get_json()) == 3
     check_input_is_subset_of_response(
         response, (item1.to_dict(), item2.to_dict(), item3.to_dict())
     )
@@ -545,7 +539,7 @@ def test_get_items(client, location_factory, item_factory, readonly_token):
         client, f"{API_URL}/inventory/items?serial_number=234567", token=readonly_token
     )
     assert response.status_code == 200
-    assert len(response.json) == 1
+    assert len(response.get_json()) == 1
     check_input_is_subset_of_response(response, (item2.to_dict(),))
     # filtering on location_id works but not location (might want to change that)
     response = get(
@@ -554,7 +548,7 @@ def test_get_items(client, location_factory, item_factory, readonly_token):
         token=readonly_token,
     )
     assert response.status_code == 200
-    assert len(response.json) == 1
+    assert len(response.get_json()) == 1
     check_input_is_subset_of_response(response, (item1.to_dict(),))
     response = get(
         client, f"{API_URL}/inventory/items?location=ESS", token=readonly_token
@@ -579,7 +573,7 @@ def test_get_networks(client, network_factory, readonly_token):
 
     response = get(client, f"{API_URL}/network/networks", token=readonly_token)
     assert response.status_code == 200
-    assert len(response.json) == 3
+    assert len(response.get_json()) == 3
     check_input_is_subset_of_response(
         response, (network1.to_dict(), network2.to_dict(), network3.to_dict())
     )
@@ -591,7 +585,7 @@ def test_get_networks(client, network_factory, readonly_token):
         token=readonly_token,
     )
     assert response.status_code == 200
-    assert len(response.json) == 1
+    assert len(response.get_json()) == 1
     check_input_is_subset_of_response(response, (network2.to_dict(),))
 
 
@@ -673,13 +667,13 @@ def test_create_network(client, admin_token, network_scope_factory):
         "created_at",
         "updated_at",
         "user",
-    } == set(response.json.keys())
-    assert response.json["vlan_name"] == "network1"
-    assert response.json["vlan_id"] == 1600
-    assert response.json["address"] == "172.16.1.0/24"
-    assert response.json["first_ip"] == "172.16.1.10"
-    assert response.json["last_ip"] == "172.16.1.250"
-    assert response.json["netmask"] == "255.255.255.0"
+    } == set(response.get_json().keys())
+    assert response.get_json()["vlan_name"] == "network1"
+    assert response.get_json()["vlan_id"] == 1600
+    assert response.get_json()["address"] == "172.16.1.0/24"
+    assert response.get_json()["first_ip"] == "172.16.1.10"
+    assert response.get_json()["last_ip"] == "172.16.1.250"
+    assert response.get_json()["netmask"] == "255.255.255.0"
 
     # Check that address and name shall be unique
     response = post(client, f"{API_URL}/network/networks", data=data, token=admin_token)
@@ -729,7 +723,7 @@ def test_create_network(client, admin_token, network_scope_factory):
         client, f"{API_URL}/network/networks", data=data2, token=admin_token
     )
     assert response.status_code == 201
-    assert response.json["description"] == "long description"
+    assert response.get_json()["description"] == "long description"
 
     # check all items that were created
     assert models.Network.query.count() == 2
@@ -852,7 +846,7 @@ def test_get_interfaces(client, network_factory, interface_factory, readonly_tok
 
     response = get(client, f"{API_URL}/network/interfaces", token=readonly_token)
     assert response.status_code == 200
-    assert len(response.json) == 3
+    assert len(response.get_json()) == 3
     check_input_is_subset_of_response(
         response, (interface1.to_dict(), interface2.to_dict(), interface3.to_dict())
     )
@@ -864,7 +858,7 @@ def test_get_interfaces(client, network_factory, interface_factory, readonly_tok
         token=readonly_token,
     )
     assert response.status_code == 200
-    assert len(response.json) == 1
+    assert len(response.get_json()) == 1
     check_input_is_subset_of_response(response, (interface3.to_dict(),))
 
 
@@ -899,7 +893,7 @@ def test_get_interfaces_by_domain(
         token=readonly_token,
     )
     assert response.status_code == 200
-    assert len(response.json) == 2
+    assert len(response.get_json()) == 2
     check_input_is_subset_of_response(
         response, (interface1.to_dict(), interface2.to_dict())
     )
@@ -910,7 +904,7 @@ def test_get_interfaces_by_domain(
         token=readonly_token,
     )
     assert response.status_code == 200
-    assert len(response.json) == 1
+    assert len(response.get_json()) == 1
     check_input_is_subset_of_response(response, (interface3.to_dict(),))
 
 
@@ -941,7 +935,7 @@ def test_get_interfaces_by_network(
         client, f"{API_URL}/network/interfaces?network=MyNetwork1", token=readonly_token
     )
     assert response.status_code == 200
-    assert len(response.json) == 2
+    assert len(response.get_json()) == 2
     check_input_is_subset_of_response(
         response, (interface1.to_dict(), interface2.to_dict())
     )
@@ -950,7 +944,7 @@ def test_get_interfaces_by_network(
         client, f"{API_URL}/network/interfaces?network=MyNetwork2", token=readonly_token
     )
     assert response.status_code == 200
-    assert len(response.json) == 1
+    assert len(response.get_json()) == 1
     check_input_is_subset_of_response(response, (interface3.to_dict(),))
 
 
@@ -962,7 +956,7 @@ def test_get_interfaces_with_model(
     item_factory(model=model1, host_id=host1.id)
     interface_factory(host_id=host1.id)
     response = get(client, f"{API_URL}/network/interfaces", token=readonly_token)
-    assert response.json[0]["model"] == "EX3400"
+    assert response.get_json()[0]["model"] == "EX3400"
 
 
 def test_create_interface(client, network_factory, user_token):
@@ -1007,10 +1001,10 @@ def test_create_interface(client, network_factory, user_token):
         "created_at",
         "updated_at",
         "user",
-    } == set(response.json.keys())
-    assert response.json["network"] == network.vlan_name
-    assert response.json["ip"] == "192.168.1.20"
-    assert response.json["name"] == "interface1"
+    } == set(response.get_json().keys())
+    assert response.get_json()["network"] == network.vlan_name
+    assert response.get_json()["ip"] == "192.168.1.20"
+    assert response.get_json()["name"] == "interface1"
 
     # Check that IP and name shall be unique
     response = post(
@@ -1099,7 +1093,7 @@ def test_get_macs(client, mac_factory, readonly_token):
 
     response = get(client, f"{API_URL}/network/macs", token=readonly_token)
     assert response.status_code == 200
-    assert len(response.json) == 2
+    assert len(response.get_json()) == 2
     check_input_is_subset_of_response(response, (mac1.to_dict(), mac2.to_dict()))
 
 
@@ -1112,8 +1106,8 @@ def test_create_mac(client, item_factory, user_token):
     data = {"address": "b5:4b:7d:a4:23:43"}
     response = post(client, f"{API_URL}/network/macs", data=data, token=user_token)
     assert response.status_code == 201
-    assert {"id", "address", "item", "interfaces"} == set(response.json.keys())
-    assert response.json["address"] == data["address"]
+    assert {"id", "address", "item", "interfaces"} == set(response.get_json().keys())
+    assert response.get_json()["address"] == data["address"]
 
     # Check that address shall be unique
     response = post(client, f"{API_URL}/network/macs", data=data, token=user_token)
@@ -1147,7 +1141,7 @@ def test_get_ansible_groups(client, ansible_group_factory, readonly_token):
     group2 = ansible_group_factory()
     response = get(client, f"{API_URL}/network/groups", token=readonly_token)
     assert response.status_code == 200
-    assert len(response.json) == 2
+    assert len(response.get_json()) == 2
     check_input_is_subset_of_response(response, (group1.to_dict(), group2.to_dict()))
 
 
@@ -1169,8 +1163,8 @@ def test_create_ansible_group(client, admin_token):
         "created_at",
         "updated_at",
         "user",
-    } == set(response.json.keys())
-    assert response.json["name"] == data["name"]
+    } == set(response.get_json().keys())
+    assert response.get_json()["name"] == data["name"]
 
     # Check that name shall be unique
     response = post(client, f"{API_URL}/network/groups", data=data, token=admin_token)
@@ -1185,7 +1179,7 @@ def test_create_ansible_group_with_vars(client, admin_token):
     data = {"name": "mygroup", "vars": {"foo": "hello", "mylist": [1, 2, 3]}}
     response = post(client, f"{API_URL}/network/groups", data=data, token=admin_token)
     assert response.status_code == 201
-    assert response.json["vars"] == data["vars"]
+    assert response.get_json()["vars"] == data["vars"]
     group = models.AnsibleGroup.query.filter_by(name="mygroup").first()
     assert group.vars == data["vars"]
 
@@ -1196,7 +1190,7 @@ def test_get_hosts(client, host_factory, readonly_token):
     host2 = host_factory()
     response = get(client, f"{API_URL}/network/hosts", token=readonly_token)
     assert response.status_code == 200
-    assert len(response.json) == 2
+    assert len(response.get_json()) == 2
     check_input_is_subset_of_response(response, (host1.to_dict(), host2.to_dict()))
 
 
@@ -1205,7 +1199,7 @@ def test_get_hosts_with_ansible_vars(client, host_factory, readonly_token):
     host_factory(ansible_vars=vars)
     response = get(client, f"{API_URL}/network/hosts", token=readonly_token)
     assert response.status_code == 200
-    assert response.json[0]["ansible_vars"] == vars
+    assert response.get_json()[0]["ansible_vars"] == vars
 
 
 def test_get_hosts_with_model(
@@ -1216,14 +1210,14 @@ def test_get_hosts_with_model(
     item_factory(model=model1, host_id=host1.id)
     response = get(client, f"{API_URL}/network/hosts", token=readonly_token)
     assert response.status_code == 200
-    assert response.json[0]["model"] == "EX3400"
+    assert response.get_json()[0]["model"] == "EX3400"
 
 
 def test_get_hosts_with_no_model(client, host_factory, readonly_token):
     host_factory()
     response = get(client, f"{API_URL}/network/hosts", token=readonly_token)
     assert response.status_code == 200
-    assert response.json[0]["model"] is None
+    assert response.get_json()[0]["model"] is None
 
 
 def test_create_host(client, device_type_factory, user_token):
@@ -1259,8 +1253,8 @@ def test_create_host(client, device_type_factory, user_token):
         "created_at",
         "updated_at",
         "user",
-    } == set(response.json.keys())
-    assert response.json["name"] == data["name"]
+    } == set(response.get_json().keys())
+    assert response.get_json()["name"] == data["name"]
 
     # Check that name shall be unique
     response = post(client, f"{API_URL}/network/hosts", data=data, token=user_token)
@@ -1300,7 +1294,7 @@ def test_create_host_with_ansible_vars(client, device_type_factory, user_token):
     }
     response = post(client, f"{API_URL}/network/hosts", data=data, token=user_token)
     assert response.status_code == 201
-    assert response.json["ansible_vars"] == data["ansible_vars"]
+    assert response.get_json()["ansible_vars"] == data["ansible_vars"]
     host = models.Host.query.filter_by(name="my-host").first()
     assert host.ansible_vars == data["ansible_vars"]
 
@@ -1336,7 +1330,7 @@ def test_create_host_as_consultant(
 def test_get_user_profile(client, readonly_token):
     response = get(client, f"{API_URL}/user/profile", token=readonly_token)
     assert response.status_code == 200
-    user = response.json
+    user = response.get_json()
     assert {"id", "username", "groups", "email", "display_name"} == set(user.keys())
     assert user["username"] == "user_ro"
     assert user["display_name"] == "User RO"
@@ -1349,7 +1343,7 @@ def test_get_domains(client, domain_factory, readonly_token):
     domain2 = domain_factory()
     response = get(client, f"{API_URL}/network/domains", token=readonly_token)
     assert response.status_code == 200
-    assert len(response.json) == 2
+    assert len(response.get_json()) == 2
     check_input_is_subset_of_response(response, (domain1.to_dict(), domain2.to_dict()))
 
 
@@ -1369,8 +1363,8 @@ def test_create_domain(client, admin_token):
         "created_at",
         "updated_at",
         "user",
-    } == set(response.json.keys())
-    assert response.json["name"] == data["name"]
+    } == set(response.get_json().keys())
+    assert response.get_json()["name"] == data["name"]
 
     # Check that name shall be unique
     response = post(client, f"{API_URL}/network/domains", data=data, token=admin_token)
@@ -1387,7 +1381,7 @@ def test_get_cnames(client, cname_factory, readonly_token):
     cname2 = cname_factory()
     response = get(client, f"{API_URL}/network/cnames", token=readonly_token)
     assert response.status_code == 200
-    assert len(response.json) == 2
+    assert len(response.get_json()) == 2
     check_input_is_subset_of_response(response, (cname1.to_dict(), cname2.to_dict()))
 
 
@@ -1414,12 +1408,12 @@ def test_get_cnames_by_domain(
     cname_b2 = cname_factory(interface=interface_b1)
     response = get(client, f"{API_URL}/network/cnames", token=readonly_token)
     assert response.status_code == 200
-    assert len(response.json) == 5
+    assert len(response.get_json()) == 5
     response = get(
         client, f"{API_URL}/network/cnames?domain=a.esss.lu.se", token=readonly_token
     )
     assert response.status_code == 200
-    assert len(response.json) == 3
+    assert len(response.get_json()) == 3
     check_input_is_subset_of_response(
         response, (cname_a1.to_dict(), cname_a2.to_dict(), cname_a3.to_dict())
     )
@@ -1427,7 +1421,7 @@ def test_get_cnames_by_domain(
         client, f"{API_URL}/network/cnames?domain=b.esss.lu.se", token=readonly_token
     )
     assert response.status_code == 200
-    assert len(response.json) == 2
+    assert len(response.get_json()) == 2
     check_input_is_subset_of_response(
         response, (cname_b1.to_dict(), cname_b2.to_dict())
     )
@@ -1453,9 +1447,9 @@ def test_create_cname(client, interface, admin_token):
     response = post(client, f"{API_URL}/network/cnames", data=data, token=admin_token)
     assert response.status_code == 201
     assert {"id", "name", "interface", "created_at", "updated_at", "user"} == set(
-        response.json.keys()
+        response.get_json().keys()
     )
-    assert response.json["name"] == data["name"]
+    assert response.get_json()["name"] == data["name"]
 
     # Check that name shall be unique
     response = post(client, f"{API_URL}/network/cnames", data=data, token=admin_token)
diff --git a/tests/functional/test_web.py b/tests/functional/test_web.py
index f4bb959..12878b0 100644
--- a/tests/functional/test_web.py
+++ b/tests/functional/test_web.py
@@ -9,18 +9,10 @@ This module defines basic web tests.
 :license: BSD 2-Clause, see LICENSE for more details.
 
 """
-import json
 import pytest
 import re
 
 
-def get(client, url):
-    response = client.get(url)
-    if response.headers["Content-Type"] == "application/json":
-        response.json = json.loads(response.data)
-    return response
-
-
 def login(client, username, password):
     data = {"username": username, "password": password}
     return client.post("/user/login", data=data, follow_redirects=True)
@@ -67,19 +59,19 @@ def test_protected_url(url, client):
 
 
 def test_retrieve_items(logged_client, item_factory):
-    response = get(logged_client, "/inventory/_retrieve_items")
-    assert response.json["data"] == []
+    response = logged_client.get("/inventory/_retrieve_items")
+    assert response.get_json()["data"] == []
     serial_numbers = ("12345", "45678")
     for sn in serial_numbers:
         item_factory(serial_number=sn)
-    response = get(logged_client, "/inventory/_retrieve_items")
-    items = response.json["data"]
+    response = logged_client.get("/inventory/_retrieve_items")
+    items = response.get_json()["data"]
     assert set(serial_numbers) == set(item[4] for item in items)
     assert len(items[0]) == 11
 
 
 def test_generate_random_mac(logged_client):
-    response = get(logged_client, "/network/_generate_random_mac")
-    mac = response.json["data"]["mac"]
+    response = logged_client.get("/network/_generate_random_mac")
+    mac = response.get_json()["data"]["mac"]
     assert re.match("^(?:[0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$", mac) is not None
     assert mac.startswith("02:42:42")
-- 
GitLab