diff --git a/src/organisation/router.py b/src/organisation/router.py index 8b09544..0f3e62b 100644 --- a/src/organisation/router.py +++ b/src/organisation/router.py @@ -92,17 +92,26 @@ async def get_org_by_id(org_model: org_model_root_claim_query_dependency): Returns organisation details including key member email addresses """ response = { - "id": org_model.id, + "organisation_id": org_model.id, "name": org_model.name, "status": org_model.status, - "owner_contact": org_model.owner_contact_rel.email, - "billing_contact": org_model.billing_contact_rel.email, - "security_contact": org_model.security_contact_rel.email, - "root_user": org_model.root_user_email, "intake_questionnaire": org_model.intake_questionnaire, + "root_user_email": org_model.root_user_email, + "billing_contact": { + "id": org_model.billing_contact_id, + "email": org_model.billing_contact_rel.email, + }, + "owner_contact": { + "id": org_model.owner_contact_id, + "email": org_model.owner_contact_rel.email, + }, + "security_contact": { + "id": org_model.security_contact_id, + "email": org_model.security_contact_rel.email, + }, } - return response + return {"organisations": [response]} @router.post( diff --git a/src/organisation/schemas.py b/src/organisation/schemas.py index 2d8c1b9..01085c5 100644 --- a/src/organisation/schemas.py +++ b/src/organisation/schemas.py @@ -22,11 +22,27 @@ class Questionnaire(CustomBaseModel): question_three: Optional[str] = None -class OrgSchema(CustomBaseModel): +class OrgSummary(CustomBaseModel): id: int name: str +class ContactSummary(CustomBaseModel): + id: int + email: Optional[EmailStr] = None + + +class OrgSchema(OrgIDMixin): + name: str + status: Status + root_user_email: EmailStr + intake_questionnaire: Optional[Questionnaire] = None + + billing_contact: ContactSummary + owner_contact: ContactSummary + security_contact: ContactSummary + + class OrgPostOrgRequest(CustomBaseModel): name: str intake_questionnaire: Optional[Questionnaire] = None @@ -93,7 +109,7 @@ class OrgPatchRootResponse(CustomBaseModel): class OrgGetUserResponse(CustomBaseModel): users: list[dict[str, str | int]] - organisation: OrgSchema + organisation: OrgSummary class OrgGetGroupResponse(CustomBaseModel): @@ -104,22 +120,15 @@ class OrgGetContactResponse(CustomBaseModel): model_config = ConfigDict(from_attributes=True, extra="ignore") contact: ContactModel - organisation: OrgSchema + organisation: OrgSummary class OrgPatchContactResponse(CustomBaseModel): model_config = ConfigDict(from_attributes=True, extra="ignore") contact: ContactModel - organisation: OrgSchema + organisation: OrgSummary class OrgGetOrgResponse(CustomBaseModel): - id: int - name: str - status: Status - root_user: Optional[str] = None - owner_contact: Optional[str] = None - billing_contact: Optional[str] = None - security_contact: Optional[str] = None - intake_questionnaire: Optional[Questionnaire] = None + organisations: list[OrgSchema] diff --git a/src/user/schemas.py b/src/user/schemas.py index 3fb1a6d..ddff869 100644 --- a/src/user/schemas.py +++ b/src/user/schemas.py @@ -5,27 +5,10 @@ Pydantic models for the user module from typing import Optional from pydantic import EmailStr -from src.organisation.constants import Status -from src.organisation.schemas import Questionnaire +from src.organisation.schemas import OrgSchema from src.schemas import CustomBaseModel, OrgIDMixin -class ContactModel(CustomBaseModel): - id: int - email: Optional[EmailStr] = None - - -class OrgSchema(OrgIDMixin): - name: str - status: Status - root_user_email: EmailStr - intake_questionnaire: Optional[Questionnaire] = None - - billing_contact: ContactModel - owner_contact: ContactModel - security_contact: ContactModel - - class OIDCClaims(CustomBaseModel): exp: int iat: int diff --git a/test/test_auth_general.py b/test/test_auth_general.py index 7ee2070..4cc9ba5 100644 --- a/test/test_auth_general.py +++ b/test/test_auth_general.py @@ -40,4 +40,4 @@ async def test_get_org_auth_root_su(default_client: AsyncClient, db_session): resp = await default_client.get("/org?org_id=2") assert resp.status_code != 422 assert resp.status_code == 200 - assert resp.json()["name"] == "Test Org Two" + assert resp.json()["organisations"][0]["name"] == "Test Org Two" diff --git a/test/test_organisation.py b/test/test_organisation.py index f852100..d63213f 100644 --- a/test/test_organisation.py +++ b/test/test_organisation.py @@ -21,15 +21,20 @@ async def test_get_org_success(default_client: AsyncClient): data = resp.json() assert resp.status_code == 200 - assert data["id"] == 1 - assert data["name"] == "Test Org" - assert data["status"] == "approved" - assert data["root_user"] == "admin@test.com" - assert data["billing_contact"] == "billing@test.org" - assert data["owner_contact"] == "owner@test.org" - assert data["security_contact"] == "security@test.org" - assert "intake_questionnaire" in data - assert isinstance(data["intake_questionnaire"], dict) + + org = data["organisations"][0] + + assert isinstance(org, dict) + assert org["organisation_id"] == 1 + assert org["name"] == "Test Org" + assert org["status"] == "approved" + assert org["root_user_email"] == "admin@test.com" + assert "intake_questionnaire" in org + assert isinstance(org["intake_questionnaire"], dict) + + assert org["billing_contact"]["email"] == "billing@test.org" + assert org["owner_contact"]["email"] == "owner@test.org" + assert org["security_contact"]["email"] == "security@test.org" @pytest.mark.parametrize(