Skip to content

Commit

Permalink
Refactor some update tests #342
Browse files Browse the repository at this point in the history
  • Loading branch information
joelvdavies committed Aug 6, 2024
1 parent a87e552 commit ccbfc7a
Show file tree
Hide file tree
Showing 5 changed files with 719 additions and 957 deletions.
102 changes: 58 additions & 44 deletions test/e2e/test_catalogue_category.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class CreateDSL:

test_client: TestClient

_post_response: Response
_post_response_catalogue_category: Response

unit_value_id_dict: dict[str, str]

Expand Down Expand Up @@ -89,9 +89,15 @@ def post_catalogue_category(self, catalogue_category_data: dict) -> Optional[str
catalogue_category_data, self.unit_value_id_dict
)

self._post_response = self.test_client.post("/v1/catalogue-categories", json=catalogue_category_data)
self._post_response_catalogue_category = self.test_client.post(
"/v1/catalogue-categories", json=catalogue_category_data
)

return self._post_response.json()["id"] if self._post_response.status_code == 201 else None
return (
self._post_response_catalogue_category.json()["id"]
if self._post_response_catalogue_category.status_code == 201
else None
)

def post_leaf_catalogue_category_with_allowed_values(
self, property_type: str, allowed_values_post_data: dict
Expand Down Expand Up @@ -128,8 +134,8 @@ def check_post_catalogue_category_success(self, expected_catalogue_category_get_
as would be required for a `CatalogueCategorySchema`.
"""

assert self._post_response.status_code == 201
assert self._post_response.json() == expected_catalogue_category_get_data
assert self._post_response_catalogue_category.status_code == 201
assert self._post_response_catalogue_category.json() == expected_catalogue_category_get_data

def check_post_catalogue_category_failed_with_detail(self, status_code: int, detail: str) -> None:
"""
Expand All @@ -140,8 +146,8 @@ def check_post_catalogue_category_failed_with_detail(self, status_code: int, det
:param detail: Expected detail given in the response.
"""

assert self._post_response.status_code == status_code
assert self._post_response.json()["detail"] == detail
assert self._post_response_catalogue_category.status_code == status_code
assert self._post_response_catalogue_category.json()["detail"] == detail

def check_post_catalogue_category_failed_with_validation_message(self, status_code: int, message: str) -> None:
"""
Expand All @@ -152,8 +158,8 @@ def check_post_catalogue_category_failed_with_validation_message(self, status_co
:param message: Expected validation error message given in the response.
"""

assert self._post_response.status_code == status_code
assert self._post_response.json()["detail"][0]["msg"] == message
assert self._post_response_catalogue_category.status_code == status_code
assert self._post_response_catalogue_category.json()["detail"][0]["msg"] == message


class TestCreate(CreateDSL):
Expand Down Expand Up @@ -379,7 +385,7 @@ def test_create_leaf_with_boolean_property_with_allowed_values_list(self):
class GetDSL(CreateDSL):
"""Base class for get tests."""

_get_response: Response
_get_response_catalogue_category: Response

def get_catalogue_category(self, catalogue_category_id: str) -> None:
"""
Expand All @@ -388,7 +394,9 @@ def get_catalogue_category(self, catalogue_category_id: str) -> None:
:param catalogue_category_id: ID of the catalogue category to be obtained.
"""

self._get_response = self.test_client.get(f"/v1/catalogue-categories/{catalogue_category_id}")
self._get_response_catalogue_category = self.test_client.get(
f"/v1/catalogue-categories/{catalogue_category_id}"
)

def check_get_catalogue_category_success(self, expected_catalogue_category_get_data: dict) -> None:
"""
Expand All @@ -398,8 +406,8 @@ def check_get_catalogue_category_success(self, expected_catalogue_category_get_d
be required for a `CatalogueCategorySchema`.
"""

assert self._get_response.status_code == 200
assert self._get_response.json() == expected_catalogue_category_get_data
assert self._get_response_catalogue_category.status_code == 200
assert self._get_response_catalogue_category.json() == expected_catalogue_category_get_data

def check_get_catalogue_category_failed_with_detail(self, status_code: int, detail: str) -> None:
"""
Expand All @@ -410,8 +418,8 @@ def check_get_catalogue_category_failed_with_detail(self, status_code: int, deta
:param detail: Expected detail given in the response.
"""

assert self._get_response.status_code == status_code
assert self._get_response.json()["detail"] == detail
assert self._get_response_catalogue_category.status_code == status_code
assert self._get_response_catalogue_category.json()["detail"] == detail


class TestGet(GetDSL):
Expand Down Expand Up @@ -441,7 +449,7 @@ def test_get_with_invalid_id(self):
class GetBreadcrumbsDSL(GetDSL):
"""Base class for breadcrumbs tests."""

_get_response: Response
_get_response_catalogue_category: Response

_posted_catalogue_categories_get_data: list[dict]

Expand All @@ -468,7 +476,7 @@ def post_nested_catalogue_categories(self, number: int) -> list[Optional[str]]:
"parent_id": parent_id,
}
)
self._posted_catalogue_categories_get_data.append(self._post_response.json())
self._posted_catalogue_categories_get_data.append(self._post_response_catalogue_category.json())
parent_id = catalogue_category_id

return [catalogue_category["id"] for catalogue_category in self._posted_catalogue_categories_get_data]
Expand All @@ -480,12 +488,14 @@ def get_catalogue_category_breadcrumbs(self, catalogue_category_id: str) -> None
:param catalogue_category_id: ID of the catalogue category to obtain the breadcrumbs of.
"""

self._get_response = self.test_client.get(f"/v1/catalogue-categories/{catalogue_category_id}/breadcrumbs")
self._get_response_catalogue_category = self.test_client.get(
f"/v1/catalogue-categories/{catalogue_category_id}/breadcrumbs"
)

def get_last_catalogue_category_breadcrumbs(self) -> None:
"""Gets the last catalogue category posted's breadcrumbs."""

self.get_catalogue_category_breadcrumbs(self._post_response.json()["id"])
self.get_catalogue_category_breadcrumbs(self._post_response_catalogue_category.json()["id"])

def check_get_catalogue_categories_breadcrumbs_success(
self, expected_trail_length: int, expected_full_trail: bool
Expand All @@ -498,8 +508,8 @@ def check_get_catalogue_categories_breadcrumbs_success(
:param expected_full_trail: Whether the expected trail is a full trail or not.
"""

assert self._get_response.status_code == 200
assert self._get_response.json() == {
assert self._get_response_catalogue_category.status_code == 200
assert self._get_response_catalogue_category.json() == {
"trail": [
[catalogue_category["id"], catalogue_category["name"]]
# When the expected trail length is < the number of systems posted, only use the last
Expand All @@ -518,8 +528,8 @@ def check_get_catalogue_categories_breadcrumbs_failed_with_detail(self, status_c
:param detail: Expected detail given in the response.
"""

assert self._get_response.status_code == status_code
assert self._get_response.json()["detail"] == detail
assert self._get_response_catalogue_category.status_code == status_code
assert self._get_response_catalogue_category.json()["detail"] == detail


class TestGetBreadcrumbs(GetBreadcrumbsDSL):
Expand Down Expand Up @@ -584,7 +594,7 @@ def get_catalogue_categories(self, filters: dict) -> None:
:param filters: Filters to use in the request.
"""

self._get_response = self.test_client.get("/v1/catalogue-categories", params=filters)
self._get_response_catalogue_category = self.test_client.get("/v1/catalogue-categories", params=filters)

def post_test_catalogue_category_with_child(self) -> list[dict]:
"""
Expand Down Expand Up @@ -614,8 +624,8 @@ def check_get_catalogue_categories_success(self, expected_catalogue_categories_g
returned as would be required for `CatalogueCategorySchema`'s.
"""

assert self._get_response.status_code == 200
assert self._get_response.json() == expected_catalogue_categories_get_data
assert self._get_response_catalogue_category.status_code == 200
assert self._get_response_catalogue_category.json() == expected_catalogue_categories_get_data


class TestList(ListDSL):
Expand Down Expand Up @@ -674,7 +684,7 @@ def test_list_with_invalid_parent_id_filter(self):
class UpdateDSL(ListDSL):
"""Base class for update tests."""

_patch_response: Response
_patch_response_catalogue_category: Response

def patch_catalogue_category(self, catalogue_category_id: str, catalogue_category_update_data: dict) -> None:
"""
Expand All @@ -691,7 +701,7 @@ def patch_catalogue_category(self, catalogue_category_id: str, catalogue_categor
catalogue_category_update_data, self.unit_value_id_dict
)

self._patch_response = self.test_client.patch(
self._patch_response_catalogue_category = self.test_client.patch(
f"/v1/catalogue-categories/{catalogue_category_id}", json=catalogue_category_update_data
)

Expand All @@ -701,13 +711,13 @@ def post_child_catalogue_category(self) -> None:
# pylint:disable=fixme
# TODO: Could change post_catalogue_category logic and use post_catalogue_category - right now a test like
# test_partial_update_non_leaf_all_valid_values_when_has_child_catalogue_category wont work with that as it
# will assert the created times based on the last _post_response which will be the child so have to bypass here
# will assert the created times based on the last _post_response_catalogue_category which will be the child so have to bypass here
# currently - may not be necessary if have custom test client instead & should be clearer after items
self.test_client.post(
"/v1/catalogue-categories",
json={
**CATALOGUE_CATEGORY_POST_DATA_NON_LEAF_NO_PARENT_NO_PROPERTIES_B,
"parent_id": self._post_response.json()["id"],
"parent_id": self._post_response_catalogue_category.json()["id"],
},
)

Expand All @@ -723,7 +733,7 @@ def post_child_catalogue_item(self) -> None:

catalogue_item_post = {
**CATALOGUE_ITEM_DATA_REQUIRED_VALUES_ONLY,
"catalogue_category_id": self._post_response.json()["id"],
"catalogue_category_id": self._post_response_catalogue_category.json()["id"],
"manufacturer_id": manufacturer_id,
}
self.test_client.post("/v1/catalogue-items", json=catalogue_item_post)
Expand All @@ -741,7 +751,7 @@ def patch_properties_with_property_with_allowed_values(
"""

self.patch_catalogue_category(
self._post_response.json()["id"],
self._post_response_catalogue_category.json()["id"],
{
"properties": [
{
Expand All @@ -763,10 +773,12 @@ def check_patch_catalogue_category_response_success(self, expected_catalogue_cat
be required for a `CatalogueCategorySchema`.
"""

assert self._patch_response.status_code == 200
assert self._patch_response.json() == expected_catalogue_category_get_data
assert self._patch_response_catalogue_category.status_code == 200
assert self._patch_response_catalogue_category.json() == expected_catalogue_category_get_data

E2ETestHelpers.check_created_and_modified_times_updated_correctly(self._post_response, self._patch_response)
E2ETestHelpers.check_created_and_modified_times_updated_correctly(
self._post_response_catalogue_category, self._patch_response_catalogue_category
)

def check_patch_catalogue_category_failed_with_detail(self, status_code: int, detail: str) -> None:
"""
Expand All @@ -777,8 +789,8 @@ def check_patch_catalogue_category_failed_with_detail(self, status_code: int, de
:param detail: Expected detail given in the response.
"""

assert self._patch_response.status_code == status_code
assert self._patch_response.json()["detail"] == detail
assert self._patch_response_catalogue_category.status_code == status_code
assert self._patch_response_catalogue_category.json()["detail"] == detail

def check_patch_catalogue_category_failed_with_validation_message(self, status_code: int, message: str) -> None:
"""
Expand All @@ -789,8 +801,8 @@ def check_patch_catalogue_category_failed_with_validation_message(self, status_c
:param message: Expected validation error message given in the response.
"""

assert self._patch_response.status_code == status_code
assert self._patch_response.json()["detail"][0]["msg"] == message
assert self._patch_response_catalogue_category.status_code == status_code
assert self._patch_response_catalogue_category.json()["detail"][0]["msg"] == message


class TestUpdate(UpdateDSL):
Expand Down Expand Up @@ -1245,7 +1257,7 @@ def test_partial_update_invalid_id(self):
class DeleteDSL(UpdateDSL):
"""Base class for delete tests."""

_delete_response: Response
_delete_response_catalogue_category: Response

def delete_catalogue_category(self, catalogue_category_id: str) -> None:
"""
Expand All @@ -1254,13 +1266,15 @@ def delete_catalogue_category(self, catalogue_category_id: str) -> None:
:param catalogue_category_id: ID of the catalogue category to be deleted.
"""

self._delete_response = self.test_client.delete(f"/v1/catalogue-categories/{catalogue_category_id}")
self._delete_response_catalogue_category = self.test_client.delete(
f"/v1/catalogue-categories/{catalogue_category_id}"
)

def check_delete_catalogue_category_success(self) -> None:
"""Checks that a prior call to `delete_catalogue_category` gave a successful response with the expected data
returned."""

assert self._delete_response.status_code == 204
assert self._delete_response_catalogue_category.status_code == 204

def check_delete_catalogue_category_failed_with_detail(self, status_code: int, detail: str) -> None:
"""
Expand All @@ -1271,8 +1285,8 @@ def check_delete_catalogue_category_failed_with_detail(self, status_code: int, d
:param detail: Expected detail given in the response.
"""

assert self._delete_response.status_code == status_code
assert self._delete_response.json()["detail"] == detail
assert self._delete_response_catalogue_category.status_code == status_code
assert self._delete_response_catalogue_category.json()["detail"] == detail


class TestDelete(DeleteDSL):
Expand Down
Loading

0 comments on commit ccbfc7a

Please sign in to comment.