feature/testing #6

Merged
MH.Dmitrii merged 2 commits from feature/testing into dev 2026-08-19 08:29:11 +00:00
2 changed files with 22 additions and 43 deletions
+11 -9
View File
@@ -28,22 +28,20 @@ class MySession(requests_async.AsyncSession):
return await super().request(method, url, **kwargs) return await super().request(method, url, **kwargs)
@pytest_asyncio.fixture(scope="function") @pytest_asyncio.fixture(scope="function")
async def auth_fixture(): async def auth_fixture(target_url:str):
payload = {"username": e2e_settings.TEST_USERNAME, "password": e2e_settings.TEST_PASSWORD} payload = {"username": e2e_settings.TEST_USERNAME, "password": e2e_settings.TEST_PASSWORD}
url = f'http://{e2e_settings.HOST}:{e2e_settings.PORT}'
async with MySession() as session: async with MySession() as session:
response = await session.post(url + "/protected/token", data=payload) response = await session.post(target_url + "/protected/token", data=payload)
response.raise_for_status() response.raise_for_status()
session.token = response.json()["access_token"] session.token = response.json()["access_token"]
yield session yield session
@pytest_asyncio.fixture(scope="function") @pytest_asyncio.fixture(scope="function")
async def test_user_fixture(request, auth_fixture: MySession): async def test_user_fixture(request, auth_fixture: MySession, target_url:str):
url=f"http://{e2e_settings.HOST}:{e2e_settings.PORT}"
test_id=uuid4() test_id=uuid4()
direct_permission_param, group_param = request.param direct_permission_param, group_param = request.param
@@ -57,7 +55,7 @@ async def test_user_fixture(request, auth_fixture: MySession):
"direct_permissions":direct_permission_param, "direct_permissions":direct_permission_param,
"group":group_param "group":group_param
} }
response=await auth_fixture.post(f"{url}/user/create_user", json=new_user_record) response=await auth_fixture.post(f"{target_url}/user/create_user", json=new_user_record)
response.raise_for_status() response.raise_for_status()
@@ -65,11 +63,15 @@ async def test_user_fixture(request, auth_fixture: MySession):
payload={"username": new_user_record.get("email"), "password": new_user_record.get("plain_password")} payload={"username": new_user_record.get("email"), "password": new_user_record.get("plain_password")}
response = await session.post(url + "/protected/token", data=payload) response = await session.post(target_url + "/protected/token", data=payload)
response.raise_for_status() response.raise_for_status()
session.token = response.json()["access_token"] session.token = response.json()["access_token"]
yield (session, new_user_record) yield (session, new_user_record)
response=await auth_fixture.post(f"{url}/user/delete_user_hard", params={"email":new_user_record.get("email")}) response=await auth_fixture.post(f"{target_url}/user/delete_user_hard", params={"email":new_user_record.get("email")})
response.raise_for_status() response.raise_for_status()
@pytest_asyncio.fixture()
async def target_url()->str:
return f"http://{e2e_settings.HOST}:{e2e_settings.PORT}"
+11 -34
View File
@@ -4,14 +4,14 @@ import allure
import pytest import pytest
from httpx import HTTPStatusError from httpx import HTTPStatusError
from tests.e2e.conftest import MySession, e2e_settings from tests.e2e.conftest import MySession
@pytest.mark.integra @pytest.mark.integra
class TestCrud: class TestCrud:
@pytest.mark.parametrize("test_user_fixture", [(["admin"], ["admin_group"])], indirect=True) @pytest.mark.parametrize("test_user_fixture", [(["admin"], ["admin_group"])], indirect=True)
async def test_get_user_by_email_positive(self,test_user_fixture)->None: async def test_get_user_by_email_positive(self,test_user_fixture, target_url:str)->None:
session, new_user_record=test_user_fixture session, new_user_record=test_user_fixture
@@ -19,7 +19,6 @@ class TestCrud:
email = new_user_record.get("email") #get email from the fixture in yield sector email = new_user_record.get("email") #get email from the fixture in yield sector
target_url=f"http://{e2e_settings.HOST}:{e2e_settings.PORT}"
response = await session.get(f"{target_url}/user/get_by_email",params={"email":email}) response = await session.get(f"{target_url}/user/get_by_email",params={"email":email})
response.raise_for_status() response.raise_for_status()
response=response.json() response=response.json()
@@ -40,10 +39,9 @@ class TestCrud:
pytest.param("test",404, id="wrong_email"), pytest.param("test",404, id="wrong_email"),
pytest.param("@d", 404, id="wrong_email") pytest.param("@d", 404, id="wrong_email")
]) ])
async def test_get_user_by_email_negative(self, email:str, expected_status:int, auth_fixture:MySession)->None: async def test_get_user_by_email_negative(self, email:str, expected_status:int, auth_fixture:MySession,target_url:str)->None:
with allure.step("Get user by email"): with allure.step("Get user by email"):
target_url = f"http://{e2e_settings.HOST}:{e2e_settings.PORT}"
with pytest.raises(HTTPStatusError) as exc_info: with pytest.raises(HTTPStatusError) as exc_info:
response = await auth_fixture.get(f"{target_url}/user/get_by_email", params={"email": email}) response = await auth_fixture.get(f"{target_url}/user/get_by_email", params={"email": email})
@@ -69,12 +67,8 @@ class TestCrud:
"direct_permissions":["WRONG_PERMISSIONS"], "direct_permissions":["WRONG_PERMISSIONS"],
"group":["WRONG_GROUP"]},id="Positive_wrong_permissions"), "group":["WRONG_GROUP"]},id="Positive_wrong_permissions"),
]) ])
async def test_create_delete_user_hard_positive(self, new_user_record:dict,auth_fixture:MySession)->None: async def test_create_delete_user_hard_positive(self, new_user_record:dict,auth_fixture:MySession, target_url:str)->None:
with allure.step("Setting target_url"):
target_url=f"http://{e2e_settings.HOST}:{e2e_settings.PORT}"
with allure.step("Create new test user and check for the new user"): with allure.step("Create new test user and check for the new user"):
response=await auth_fixture.post(f"{target_url}/user/create_user", json=new_user_record) response=await auth_fixture.post(f"{target_url}/user/create_user", json=new_user_record)
@@ -123,12 +117,11 @@ class TestCrud:
"plain_password":"Test1234!", "plain_password":"Test1234!",
},422,id="Not_all_the_fields"), },422,id="Not_all_the_fields"),
]) ])
async def test_create_user_negative(self, new_user_record:dict, auth_fixture:MySession, expected_status:int): async def test_create_user_negative(self, new_user_record:dict, auth_fixture:MySession, expected_status:int, target_url:str):
with allure.step("Preparing data to create new user negative"): with allure.step("Preparing data to create new user negative"):
user_created=False user_created=False
target_url=f"http://{e2e_settings.HOST}:{e2e_settings.PORT}"
try: try:
with allure.step("Create new test user and check for the new user"): with allure.step("Create new test user and check for the new user"):
@@ -162,10 +155,7 @@ class TestCrud:
"direct_permissions":[], "direct_permissions":[],
"group":[]}, id="Positive_user_delete_soft"), "group":[]}, id="Positive_user_delete_soft"),
]) ])
async def test_user_create_delete_soft_positive(self, new_user_record:dict, auth_fixture:MySession)->None: async def test_user_create_delete_soft_positive(self, new_user_record:dict, auth_fixture:MySession, target_url:str)->None:
with allure.step("Setting target_url"):
target_url=f"http://{e2e_settings.HOST}:{e2e_settings.PORT}"
with allure.step("Create new test user and check for the new user"): with allure.step("Create new test user and check for the new user"):
@@ -190,12 +180,10 @@ class TestCrud:
@pytest.mark.parametrize("email, expected_status, ",[ @pytest.mark.parametrize("email, expected_status, ",[
pytest.param("Test", 404,id="Wrong_email") pytest.param("Test", 404,id="Wrong_email")
]) ])
async def test_user_delete_soft_negative(self, email:str,expected_status:int, auth_fixture:MySession)->None: async def test_user_delete_soft_negative(self, email:str,expected_status:int, auth_fixture:MySession, target_url:str)->None:
with allure.step("Delete user soft"): with allure.step("Delete user soft"):
target_url=f"http://{e2e_settings.HOST}:{e2e_settings.PORT}"
with pytest.raises(HTTPStatusError) as exc_info: with pytest.raises(HTTPStatusError) as exc_info:
response=await auth_fixture.post(f"{target_url}/user/delete_user_soft", params={"email":email}) response=await auth_fixture.post(f"{target_url}/user/delete_user_soft", params={"email":email})
@@ -207,12 +195,10 @@ class TestCrud:
@pytest.mark.parametrize("email, expected_status, ",[ @pytest.mark.parametrize("email, expected_status, ",[
pytest.param("Test", 404,id="Wrong_email") pytest.param("Test", 404,id="Wrong_email")
]) ])
async def test_user_delete_hard_negative(self, email:str,expected_status:int, auth_fixture:MySession)->None: async def test_user_delete_hard_negative(self, email:str,expected_status:int, auth_fixture:MySession, target_url:str)->None:
with allure.step("Delete user hard"): with allure.step("Delete user hard"):
target_url=f"http://{e2e_settings.HOST}:{e2e_settings.PORT}"
with pytest.raises(HTTPStatusError) as exc_info: with pytest.raises(HTTPStatusError) as exc_info:
response=await auth_fixture.post(f"{target_url}/user/delete_user_soft", params={"email":email}) response=await auth_fixture.post(f"{target_url}/user/delete_user_soft", params={"email":email})
@@ -221,21 +207,16 @@ class TestCrud:
assert exc_info.value.response.status_code == expected_status assert exc_info.value.response.status_code == expected_status
@pytest.mark.parametrize("test_user_fixture", [ @pytest.mark.parametrize("test_user_fixture", [
(["admin"], ["admin_group"]) (["admin"], ["admin_group"])
], indirect=True) ], indirect=True)
@pytest.mark.parametrize("user_record_to_update",[ @pytest.mark.parametrize("user_record_to_update",[
pytest.param({"first_name": "Test_New"},id="Positive_user_update_partially") pytest.param({"first_name": "Test_New"},id="Positive_user_update_partially")
]) ])
async def test_user_update_partially_positive(self, test_user_fixture, user_record_to_update:dict)->None: async def test_user_update_partially_positive(self, test_user_fixture, user_record_to_update:dict, target_url:str)->None:
session, new_user_record=test_user_fixture session, new_user_record=test_user_fixture
with allure.step("Setting target_url"):
target_url=f"http://{e2e_settings.HOST}:{e2e_settings.PORT}"
with allure.step("Update user"): with allure.step("Update user"):
response= await session.patch(f"{target_url}/user/patch_user", json=user_record_to_update, params={"email":new_user_record["email"]}) response= await session.patch(f"{target_url}/user/patch_user", json=user_record_to_update, params={"email":new_user_record["email"]})
response.raise_for_status() response.raise_for_status()
@@ -267,14 +248,10 @@ class TestCrud:
pytest.param({"email": "Wrong_email"},HTTPStatusError,422,id="Wrong_email"), pytest.param({"email": "Wrong_email"},HTTPStatusError,422,id="Wrong_email"),
pytest.param({},HTTPStatusError, 400,id="Negative_user_update_nothing") pytest.param({},HTTPStatusError, 400,id="Negative_user_update_nothing")
]) ])
async def test_user_update_partially_negative(self, test_user_fixture, user_record_to_update:dict, expected_exception, expected_status:int)->None: async def test_user_update_partially_negative(self, test_user_fixture, user_record_to_update:dict, expected_exception, expected_status:int, target_url:str)->None:
session, new_user_record=test_user_fixture session, new_user_record=test_user_fixture
with allure.step("Setting target_url"):
target_url=f"http://{e2e_settings.HOST}:{e2e_settings.PORT}"
with allure.step("Update user"), pytest.raises(expected_exception) as exc_info: with allure.step("Update user"), pytest.raises(expected_exception) as exc_info:
response= await session.patch(f"{target_url}/user/patch_user", json=user_record_to_update, params={"email":new_user_record["email"]}) response= await session.patch(f"{target_url}/user/patch_user", json=user_record_to_update, params={"email":new_user_record["email"]})