feat: patch questionnaire doesn't overwrite with none

This commit is contained in:
Chris Milne 2026-06-03 09:29:06 +01:00
parent c9cd75a7ad
commit 7833386350
2 changed files with 12 additions and 3 deletions

View file

@ -39,7 +39,7 @@ from src.organisation.schemas import OrgPostOrgRequest, OrgPatchQuestionnaireReq
OrgPatchContactRequest, \ OrgPatchContactRequest, \
OrgPostUserRequest, OrgGetUserResponse, OrgGetContactResponse, OrgGetOrgResponse, OrgPatchRootRequest, \ OrgPostUserRequest, OrgGetUserResponse, OrgGetContactResponse, OrgGetOrgResponse, OrgPatchRootRequest, \
OrgGetGroupResponse, OrgDeleteUserRequest, OrgDeleteOrgRequest, OrgPostOrgResponse, OrgPatchQuestionnaireResponse, \ OrgGetGroupResponse, OrgDeleteUserRequest, OrgDeleteOrgRequest, OrgPostOrgResponse, OrgPatchQuestionnaireResponse, \
OrgPatchStatusResponse, OrgPostUserResponse, OrgPatchRootResponse OrgPatchStatusResponse, OrgPostUserResponse, OrgPatchRootResponse, Questionnaire
router = APIRouter( router = APIRouter(
prefix="/org", prefix="/org",
@ -131,12 +131,21 @@ async def update_questionnaire(db: db_dependency, org_model: org_model_root_clai
The partial bool allows for submission of partially completed questionnaire and/or The partial bool allows for submission of partially completed questionnaire and/or
final "are you sure" check before setting the org to be in "submitted" status, awaiting admin approval. final "are you sure" check before setting the org to be in "submitted" status, awaiting admin approval.
""" """
org_model.intake_questionnaire = request_model.intake_questionnaire.model_dump() update_data = request_model.intake_questionnaire.model_dump(exclude_none=True)
questionnaire_model = Questionnaire(**org_model.intake_questionnaire)
for key, value in update_data.items():
if hasattr(questionnaire_model, key):
setattr(questionnaire_model, key, value)
else:
if key == "partial" or key == "organisation_id":
continue
raise UnprocessableContentException("Invalid keys in update request")
# Allows for partially completed questionnaires to be saved without being submitted for review # Allows for partially completed questionnaires to be saved without being submitted for review
if not request_model.partial: if not request_model.partial:
org_model.status = "submitted" org_model.status = "submitted"
org_model.intake_questionnaire = questionnaire_model.model_dump()
db.flush() db.flush()
response = OrgPatchQuestionnaireResponse(**org_model.__dict__) response = OrgPatchQuestionnaireResponse(**org_model.__dict__)
db.commit() db.commit()

View file

@ -76,7 +76,7 @@ async def test_patch_org_questionnaire_partial_success(client: AsyncClient, db_s
assert data["name"] == "Test Org" assert data["name"] == "Test Org"
assert data["intake_questionnaire"]["question_one"] == "new answer one" assert data["intake_questionnaire"]["question_one"] == "new answer one"
assert data["status"] == "partial" assert data["status"] == "partial"
# assert type(data["intake_questionnaire"]["question_two"]) == str assert data["intake_questionnaire"]["question_two"] == "answer two"
assert data["intake_questionnaire"]["question_three"] is None assert data["intake_questionnaire"]["question_three"] is None