feat: user invite response models
All checks were successful
ci / lint_and_test (push) Successful in 13s

This commit is contained in:
Chris Milne 2026-06-11 14:14:31 +01:00
parent 8925280f96
commit bcdef91dd0
3 changed files with 38 additions and 4 deletions

View file

@ -17,6 +17,8 @@ from src.user.schemas import (
UserPostInvitationRequest, UserPostInvitationRequest,
UserPostInvitationAcceptRequest, UserPostInvitationAcceptRequest,
UserGetSelfOrgsResponse, UserGetSelfOrgsResponse,
UserPostInvitationResponse,
UserPostInvitationAcceptResponse,
) )
from src.user.dependencies import ( from src.user.dependencies import (
user_model_claims_dependency, user_model_claims_dependency,
@ -153,6 +155,7 @@ async def get_user_orgs(user_model: user_model_claims_dependency):
"/invitation", "/invitation",
summary="Send an email invitation for a user to join an org", summary="Send an email invitation for a user to join an org",
status_code=status.HTTP_200_OK, status_code=status.HTTP_200_OK,
response_model=UserPostInvitationResponse,
) )
async def invitation( async def invitation(
background_tasks: BackgroundTasks, background_tasks: BackgroundTasks,
@ -167,13 +170,19 @@ async def invitation(
send_invitation, org_id=org_id, org_name=org_name, user_email=user_email send_invitation, org_id=org_id, org_name=org_name, user_email=user_email
) )
return "Invitation sent" response = {
"organisation": org_model,
"invited_email": user_email,
}
return response
@router.post( @router.post(
"/invitation/accept", "/invitation/accept",
summary="Accept email invitation to join an org", summary="Accept email invitation to join an org",
status_code=status.HTTP_200_OK, status_code=status.HTTP_200_OK,
response_model=UserPostInvitationAcceptResponse,
) )
async def accept_invitation( async def accept_invitation(
db: db_dependency, db: db_dependency,
@ -189,6 +198,13 @@ async def accept_invitation(
raise OrgNotFoundException() raise OrgNotFoundException()
org_model.user_rel.append(user_model) org_model.user_rel.append(user_model)
db.flush()
response = {
"organisation": org_model,
"user": user_model,
}
db.commit() db.commit()
return "Invitation accepted" return response

View file

@ -6,7 +6,7 @@ from typing import Optional
from pydantic import EmailStr from pydantic import EmailStr
from src.organisation.schemas import OrgSchema from src.organisation.schemas import OrgSchema
from src.schemas import CustomBaseModel, OrgIDMixin from src.schemas import CustomBaseModel, OrgIDMixin, OrgSummary, UserSummary
class OIDCClaims(CustomBaseModel): class OIDCClaims(CustomBaseModel):
@ -60,3 +60,13 @@ class UserPostInvitationAcceptRequest(CustomBaseModel):
class UserGetSelfOrgsResponse(CustomBaseModel): class UserGetSelfOrgsResponse(CustomBaseModel):
organisations: list[OrgSchema] organisations: list[OrgSchema]
class UserPostInvitationResponse(CustomBaseModel):
organisation: OrgSummary
invited_email: EmailStr
class UserPostInvitationAcceptResponse(CustomBaseModel):
organisation: OrgSummary
user: UserSummary

View file

@ -70,7 +70,15 @@ async def test_post_user_invitation_success(default_client: AsyncClient):
resp = await default_client.post("/user/invitation", json=body) resp = await default_client.post("/user/invitation", json=body)
assert resp.status_code == 200 assert resp.status_code == 200
assert resp.json() == "Invitation sent" data = resp.json()
assert "organisation" in data
assert isinstance(data["organisation"], dict)
assert data["organisation"]["id"] == 1
assert data["organisation"]["name"] == "Test Org"
assert "invited_email" in data
assert isinstance(data["invited_email"], str)
assert data["invited_email"] == "admin@test.com"
@pytest.mark.parametrize( @pytest.mark.parametrize(