You've already forked RekomenciBackend
144 lines
4.6 KiB
Python
144 lines
4.6 KiB
Python
from typing import Any
|
|
|
|
from httpx import AsyncClient, Response
|
|
|
|
|
|
def make_auth_headers(access_token: str | None) -> dict[str, Any]:
|
|
return {} if access_token is None else {"Authorization": f"Bearer {access_token}"}
|
|
|
|
|
|
class TestApiGateway:
|
|
def __init__(self, client: AsyncClient) -> None:
|
|
self._client = client
|
|
|
|
async def sign_up_email(self, email: str, password: str) -> Response:
|
|
return await self._client.post(
|
|
"/auth/sign_up/email",
|
|
json={"email": email, "password": password},
|
|
)
|
|
|
|
async def sign_in_email(self, email: str, password: str) -> Response:
|
|
return await self._client.post(
|
|
"/auth/sign_in/email",
|
|
json={"email": email, "password": password},
|
|
)
|
|
|
|
async def get_profile(self, access_token: str | None) -> Response:
|
|
return await self._client.get(
|
|
"/profile",
|
|
headers=make_auth_headers(access_token),
|
|
)
|
|
|
|
async def patch_profile(
|
|
self,
|
|
access_token: str | None = None,
|
|
display_name: str | None = None,
|
|
first_name: str | None = None,
|
|
last_name: str | None = None,
|
|
avatar_url: str | None = None,
|
|
phone: str | None = None,
|
|
) -> Response:
|
|
return await self._client.patch(
|
|
"/profile",
|
|
json={
|
|
key: value
|
|
for key, value in {
|
|
"display_name": display_name,
|
|
"first_name": first_name,
|
|
"last_name": last_name,
|
|
"avatar_url": avatar_url,
|
|
"phone": phone,
|
|
}.items()
|
|
if value is not None
|
|
},
|
|
headers=make_auth_headers(access_token),
|
|
)
|
|
|
|
async def create_resume(
|
|
self,
|
|
access_token: str,
|
|
position: str,
|
|
location: str,
|
|
about_me: str,
|
|
key_skills: list[str],
|
|
experience_type: str,
|
|
experience: list[dict[str, Any]] | None = None,
|
|
education: list[dict[str, Any]] | None = None,
|
|
projects: list[dict[str, Any]] | None = None,
|
|
) -> Response:
|
|
json_data: dict[str, Any] = {
|
|
"position": position,
|
|
"location": location,
|
|
"about_me": about_me,
|
|
"key_skills": key_skills,
|
|
"experience_type": experience_type,
|
|
}
|
|
if experience is not None:
|
|
json_data["experience"] = experience
|
|
if education is not None:
|
|
json_data["education"] = education
|
|
if projects is not None:
|
|
json_data["projects"] = projects
|
|
return await self._client.post(
|
|
"/resume",
|
|
json=json_data,
|
|
headers=make_auth_headers(access_token),
|
|
)
|
|
|
|
async def get_resume(self, access_token: str, resume_id: str) -> Response:
|
|
return await self._client.get(
|
|
f"/resume/{resume_id}",
|
|
headers=make_auth_headers(access_token),
|
|
)
|
|
|
|
async def edit_resume(
|
|
self,
|
|
access_token: str,
|
|
resume_id: str,
|
|
position: str | None = None,
|
|
location: str | None = None,
|
|
about_me: str | None = None,
|
|
key_skills: list[str] | None = None,
|
|
experience_type: str | None = None,
|
|
experience: list[dict[str, Any]] | None = None,
|
|
education: list[dict[str, Any]] | None = None,
|
|
projects: list[dict[str, Any]] | None = None,
|
|
) -> Response:
|
|
json_data: dict[str, Any] = {}
|
|
if position is not None:
|
|
json_data["position"] = position
|
|
if location is not None:
|
|
json_data["location"] = location
|
|
if about_me is not None:
|
|
json_data["about_me"] = about_me
|
|
if key_skills is not None:
|
|
json_data["key_skills"] = key_skills
|
|
if experience_type is not None:
|
|
json_data["experience_type"] = experience_type
|
|
if experience is not None:
|
|
json_data["experience"] = experience
|
|
if education is not None:
|
|
json_data["education"] = education
|
|
if projects is not None:
|
|
json_data["projects"] = projects
|
|
return await self._client.patch(
|
|
f"/resume/{resume_id}",
|
|
json=json_data,
|
|
headers=make_auth_headers(access_token),
|
|
)
|
|
|
|
async def add_key_skill(
|
|
self,
|
|
key_skills: list[str],
|
|
) -> Response:
|
|
return await self._client.post(
|
|
"/key_skills",
|
|
json={"key_skills": key_skills},
|
|
)
|
|
|
|
async def search_key_skills(self, query: str) -> Response:
|
|
return await self._client.get(
|
|
"/key_skills",
|
|
params={"query": query},
|
|
)
|