diff --git a/CHANGELOG.md b/CHANGELOG.md index 33606d4..f349aa7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ All notable changes to this project will be documented in this file. +## 1.1.0 + +- Added headers to testing + ## 1.0.0 - Bumped dependencies diff --git a/README.md b/README.md index 53eec29..0b1ac62 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ print(LanguageEnum.EN) # Output: LanguageEnum.EN print(LanguageEnum.EN.value) # Output: English ``` - ## TODO - Add async support for database connection +- Add version without postgresql dependency diff --git a/creyPY/fastapi/testing.py b/creyPY/fastapi/testing.py index 72b1df0..21194d1 100644 --- a/creyPY/fastapi/testing.py +++ b/creyPY/fastapi/testing.py @@ -6,26 +6,31 @@ from fastapi.testclient import TestClient class GenericClient(TestClient): def __init__(self, client): self.c = TestClient(client) + self.default_headers = {} def get(self, url: str, r_code: int = 200, parse_json=True): - re = self.c.get(url) + re = self.c.get(url, headers=self.default_headers) if re.status_code != r_code: print(re.content) assert r_code == re.status_code return re.json() if parse_json else re.content def delete(self, url: str, r_code: int = 204): - re = self.c.delete(url) + re = self.c.delete(url, headers=self.default_headers) if re.status_code != r_code: print(re.content) assert r_code == re.status_code return re.json() if r_code != 204 else None def post( - self, url: str, obj: dict = {}, r_code: int = 201, raw_response=False, *args, **kwargs + self, url: str, obj: dict | str = {}, r_code: int = 201, raw_response=False, *args, **kwargs ): re = self.c.post( - url, data=json.dumps(obj), headers={"Content-Type": "application/json"}, *args, **kwargs + url, + data=json.dumps(obj) if type(obj) == dict else obj, + headers=self.default_headers | {"Content-Type": "application/json"}, + *args, + **kwargs, ) if re.status_code != r_code: print(re.content) @@ -33,28 +38,41 @@ class GenericClient(TestClient): return re.json() if not raw_response else re def post_file(self, url: str, file, r_code: int = 201, raw_response=False, *args, **kwargs): - re = self.c.post(url, files={"file": file}, *args, **kwargs) - if re.status_code != r_code: - print(re.content) - assert r_code == re.status_code - return re.json() if not raw_response else re - - def patch( - self, url: str, obj: dict = {}, r_code: int = 200, raw_response=False, *args, **kwargs - ): - re = self.c.patch( - url, data=json.dumps(obj), headers={"Content-Type": "application/json"}, *args, **kwargs + re = self.c.post( + url, + files={"file": file}, + headers=self.default_headers | {"Content-Type": "application/json"}, + *args, + **kwargs, ) if re.status_code != r_code: print(re.content) assert r_code == re.status_code return re.json() if not raw_response else re - def put(self, url: str, obj: dict = {}, r_code: int = 200, raw_response=False, *args, **kwargs): + def patch( + self, url: str, obj: dict | str = {}, r_code: int = 200, raw_response=False, *args, **kwargs + ): + re = self.c.patch( + url, + data=json.dumps(obj) if type(obj) == dict else obj, + headers=self.default_headers | {"Content-Type": "application/json"}, + *args, + **kwargs, + ) + if re.status_code != r_code: + print(re.content) + assert r_code == re.status_code + return re.json() if not raw_response else re + + def put( + self, url: str, obj: dict | str = {}, r_code: int = 200, raw_response=False, *args, **kwargs + ): re = self.c.put( url, - data=json.dumps(obj), - headers={ + data=json.dumps(obj) if type(obj) == dict else obj, + headers=self.default_headers + | { "Content-Type": "application/json", "accept": "application/json", }, @@ -66,7 +84,14 @@ class GenericClient(TestClient): assert r_code == re.status_code return re.json() if not raw_response else re - def obj_lifecycle(self, input_obj: dict, url: str, pagination: bool = True): + def obj_lifecycle( + self, + input_obj: dict, + url: str, + pagination: bool = True, + id_field: str = "id", + created_at_check: bool = True, + ): # GET LIST re = self.get(url) if pagination: @@ -77,15 +102,18 @@ class GenericClient(TestClient): # CREATE re = self.post(url, obj=input_obj) - assert "id" in re - assert re["id"] is not None - assert re["created_at"] is not None + assert id_field in re + assert re[id_field] is not None - obj_id = str(re["id"]) + if created_at_check: + assert "created_at" in re + assert re["created_at"] is not None + + obj_id = str(re[id_field]) # GET re = self.get(f"{url}{obj_id}/") - assert re["id"] == obj_id + assert re[id_field] == obj_id # GET LIST re = self.get(url)