|
9 | 9 | handler, |
10 | 10 | ) |
11 | 11 | from nrlf.core.dynamodb.repository import DocumentPointer, DocumentPointerRepository |
12 | | -from nrlf.producer.fhir.r4.model import DocumentReference |
| 12 | +from nrlf.producer.fhir.r4.model import CodeableConcept, Coding, DocumentReference |
13 | 13 | from nrlf.tests.data import load_document_reference |
14 | 14 | from nrlf.tests.dynamodb import mock_repository |
15 | 15 | from nrlf.tests.events import ( |
@@ -478,7 +478,22 @@ def test_update_document_reference_immutable_fields(repository): |
478 | 478 | doc_pointer = DocumentPointer.from_document_reference(doc_ref) |
479 | 479 | repository.create(doc_pointer) |
480 | 480 |
|
481 | | - doc_ref.status = "draft" |
| 481 | + doc_ref.type = CodeableConcept( |
| 482 | + id=None, |
| 483 | + coding=[ |
| 484 | + Coding( |
| 485 | + id=None, |
| 486 | + system="http://snomed.info/sct", |
| 487 | + version=None, |
| 488 | + code="1213324", |
| 489 | + display="Some Code", |
| 490 | + userSelected=None, |
| 491 | + ) |
| 492 | + ], |
| 493 | + text=None, |
| 494 | + extension=None, |
| 495 | + ) |
| 496 | + |
482 | 497 | event = create_test_api_gateway_event( |
483 | 498 | headers=create_headers(), |
484 | 499 | path_parameters={"id": "Y05868-99999-99999-999999"}, |
@@ -511,7 +526,55 @@ def test_update_document_reference_immutable_fields(repository): |
511 | 526 | } |
512 | 527 | ] |
513 | 528 | }, |
514 | | - "diagnostics": "The field 'status' is immutable and cannot be updated", |
| 529 | + "diagnostics": "The field 'type' is immutable and cannot be updated", |
| 530 | + "expression": ["type"], |
| 531 | + } |
| 532 | + ], |
| 533 | + } |
| 534 | + |
| 535 | + |
| 536 | +@mock_aws |
| 537 | +@mock_repository |
| 538 | +def test_update_document_reference_cannot_change_status_to_not_current(repository): |
| 539 | + doc_ref = load_document_reference("Y05868-736253002-Valid") |
| 540 | + doc_pointer = DocumentPointer.from_document_reference(doc_ref) |
| 541 | + repository.create(doc_pointer) |
| 542 | + |
| 543 | + doc_ref.status = "somethingElse" |
| 544 | + |
| 545 | + event = create_test_api_gateway_event( |
| 546 | + headers=create_headers(), |
| 547 | + path_parameters={"id": "Y05868-99999-99999-999999"}, |
| 548 | + body=doc_ref.model_dump_json(exclude_none=True), |
| 549 | + ) |
| 550 | + |
| 551 | + result = handler(event, create_mock_context()) |
| 552 | + |
| 553 | + body = result.pop("body") |
| 554 | + |
| 555 | + assert result == { |
| 556 | + "statusCode": "400", |
| 557 | + "headers": default_response_headers(), |
| 558 | + "isBase64Encoded": False, |
| 559 | + } |
| 560 | + parsed_body = json.loads(body) |
| 561 | + |
| 562 | + assert parsed_body == { |
| 563 | + "resourceType": "OperationOutcome", |
| 564 | + "issue": [ |
| 565 | + { |
| 566 | + "severity": "error", |
| 567 | + "code": "invalid", |
| 568 | + "details": { |
| 569 | + "coding": [ |
| 570 | + { |
| 571 | + "code": "MESSAGE_NOT_WELL_FORMED", |
| 572 | + "display": "Message not well formed", |
| 573 | + "system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1", |
| 574 | + } |
| 575 | + ] |
| 576 | + }, |
| 577 | + "diagnostics": "Request body could not be parsed (status: String should match pattern '^current$')", |
515 | 578 | "expression": ["status"], |
516 | 579 | } |
517 | 580 | ], |
@@ -821,8 +884,6 @@ def test_update_document_reference_existing_invalid_json( |
821 | 884 | doc_pointer.document = "invalid json" |
822 | 885 | repository.create(doc_pointer) |
823 | 886 |
|
824 | | - doc_ref.status = "draft" |
825 | | - |
826 | 887 | event = create_test_api_gateway_event( |
827 | 888 | headers=create_headers(), |
828 | 889 | path_parameters={"id": "Y05868-99999-99999-999999"}, |
|
0 commit comments