plan_executor 1.0.2 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +3 -2
- data/Gemfile +3 -6
- data/Gemfile.lock +52 -48
- data/README.md +2 -2
- data/fixtures/attachment/ccda_pdf.pdf +0 -0
- data/fixtures/attachment/ccda_pdf_base64.txt +2489 -0
- data/fixtures/attachment/ccda_structured.xml +1976 -0
- data/fixtures/attachment/ccda_unstructured.xml +2563 -0
- data/fixtures/daf/conformance-daf-query-responder.xml +2024 -193
- data/fixtures/diagnostic_report/diagnosticreport-familyhistory-create.xml +67 -0
- data/fixtures/diagnostic_report/diagnosticreport-hlatyping-create.xml +64 -0
- data/fixtures/diagnostic_report/diagnosticreport-pathologyreport-create.xml +312 -0
- data/fixtures/diagnostic_report/dr-100.xml +3 -3
- data/fixtures/diagnostic_report/dr-200.xml +5 -5
- data/fixtures/diagnostic_report/dr-300.xml +3 -3
- data/fixtures/diagnostic_report/dr-400.xml +3 -3
- data/fixtures/{diagnostic_order → diagnostic_request}/do-100.xml +57 -64
- data/fixtures/diagnostic_request/do-200.xml +73 -0
- data/fixtures/{diagnostic_order → diagnostic_request}/do-300.xml +73 -91
- data/{lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder → fixtures/diagnostic_request}/do-400.xml +74 -88
- data/fixtures/family_member_history/familymemberhistory-familyhistory-create.xml +27 -0
- data/fixtures/financial/claim-example-oral-average.xml +199 -0
- data/fixtures/financial/claim-example-oral-orthoplan.xml +298 -0
- data/fixtures/financial/claim-example.xml +98 -0
- data/fixtures/financial/eligibilityrequest-example.xml +40 -0
- data/fixtures/observation/obs-401.xml +7 -17
- data/fixtures/observation/obs-402.xml +7 -17
- data/fixtures/observation/obs-403.xml +4 -29
- data/fixtures/observation/obs-407.xml +4 -11
- data/fixtures/observation/observation-datawarehouse-create.xml +72 -0
- data/fixtures/observation/observation-familyhistory-create.xml +61 -0
- data/fixtures/observation/observation-germline-create.xml +72 -0
- data/fixtures/observation/observation-register-create.xml +72 -0
- data/fixtures/patch/medicationrequest-simple.xml +16 -0
- data/fixtures/patient/patient-example-updated.xml +1 -7
- data/fixtures/patient/patient-example-us-extensions.xml +119 -0
- data/fixtures/patient/patient-example.xml +46 -27
- data/fixtures/patient/patient-familyhistory-create.xml +45 -0
- data/fixtures/patient/patient-register-create.xml +47 -0
- data/fixtures/practitioner/practitioner-register-create.xml +32 -0
- data/fixtures/record/condition-example-f201-fever.xml +54 -49
- data/fixtures/record/condition-example-f205-infection.xml +16 -15
- data/fixtures/record/diagnosticreport-example-f201-brainct.xml +45 -18
- data/fixtures/record/encounter-example-f201-20130404.xml +42 -15
- data/fixtures/record/encounter-example-f202-20130128.xml +57 -15
- data/fixtures/record/observation-example-f202-temperature.xml +85 -60
- data/fixtures/record/organization-example-f201-aumc.xml +87 -4
- data/fixtures/record/organization-example-f203-bumc.xml +53 -4
- data/fixtures/record/patient-example-f201-roel.xml +108 -8
- data/fixtures/record/practitioner-example-f201-ab.xml +73 -14
- data/fixtures/record/procedure-example-f201-tpf.xml +39 -9
- data/fixtures/scheduling/slot-simple.xml +1 -1
- data/fixtures/sequence/sequence-register-create.xml +31 -0
- data/fixtures/specimen/spec-100.xml +8 -8
- data/fixtures/specimen/spec-400.xml +11 -11
- data/fixtures/specimen/spec-uslab-example1.xml +11 -11
- data/fixtures/specimen/specimen-familyhistory-create.xml +54 -0
- data/fixtures/specimen/specimen-register-create.xml +49 -0
- data/fixtures/terminology/codesystem-data-types.json +230 -0
- data/fixtures/terminology/codesystem-resource-types.json +482 -0
- data/fixtures/terminology/codesystem-simple.xml +129 -0
- data/fixtures/terminology/conceptmap-example.xml +141 -0
- data/fixtures/terminology/v2-codesystem.json +1297 -0
- data/fixtures/terminology/v2-valueset.json +16 -0
- data/fixtures/terminology/valueset-defined-types.json +25 -0
- data/fixtures/terminology/valueset-example.xml +111 -0
- data/fixtures/validation/observation.profile.xml +1534 -253
- data/fixtures/validation/observations/observation-example.xml +66 -0
- data/lib/FHIR_structure.json +129 -82
- data/lib/daf_resource_generator.rb +7 -7
- data/lib/data/resources.rb +50 -30
- data/lib/ext/client.rb +2 -2
- data/lib/plan_executor.rb +6 -1
- data/lib/resource_generator.rb +413 -212
- data/lib/tasks/tasks.rake +151 -20
- data/lib/tests/assertions.rb +24 -18
- data/lib/tests/base_test.rb +17 -3
- data/lib/tests/suites/argonaut_provider_connectathon_test.rb +234 -0
- data/lib/tests/suites/base_suite.rb +7 -3
- data/lib/tests/suites/connectathon_attachment_track_test.rb +124 -0
- data/lib/tests/suites/connectathon_audit_track.rb +113 -69
- data/lib/tests/suites/connectathon_care_plan_track.rb +237 -0
- data/lib/tests/suites/connectathon_fetch_patient_record.rb +40 -39
- data/lib/tests/suites/connectathon_financial_track.rb +231 -23
- data/lib/tests/suites/connectathon_genomics_track_test.rb +255 -0
- data/lib/tests/suites/connectathon_lab_order_track.rb +131 -104
- data/lib/tests/suites/connectathon_patch_track.rb +125 -0
- data/lib/tests/suites/connectathon_patient_track.rb +75 -68
- data/lib/tests/suites/connectathon_profile_validation.rb +9 -8
- data/lib/tests/suites/connectathon_scheduling_track.rb +127 -70
- data/lib/tests/suites/connectathon_terminology_track.rb +211 -34
- data/lib/tests/suites/daf_profiles_test.rb +112 -72
- data/lib/tests/suites/format_test.rb +113 -255
- data/lib/tests/suites/history_test.rb +72 -68
- data/lib/tests/suites/read_test.rb +31 -27
- data/lib/tests/suites/resource_test.rb +283 -85
- data/lib/tests/suites/search_test.rb +5 -3
- data/lib/tests/suites/search_test_robust.rb +8 -76
- data/lib/tests/suites/sprinkler_search_test.rb +104 -84
- data/lib/tests/suites/suite_engine.rb +17 -23
- data/lib/tests/suites/transaction_test.rb +117 -174
- data/lib/tests/testscripts/base_testscript.rb +425 -189
- data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/Client Assigned Id/connectathon-14-patient-base-client-id-json.xml +517 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/Client Assigned Id/connectathon-14-patient-base-client-id-xml.xml +517 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/Client Assigned Id/connectathon-14-patient-bonus-client-id-json.xml +648 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/Client Assigned Id/connectathon-14-patient-bonus-client-id-xml.xml +648 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/README.html +68 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/Server Assigned Id/connectathon-14-patient-base-server-id-json.xml +515 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/Server Assigned Id/connectathon-14-patient-base-server-id-xml.xml +515 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/Server Assigned Id/connectathon-14-patient-bonus-server-id-json.xml +645 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/Server Assigned Id/connectathon-14-patient-bonus-server-id-xml.xml +642 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/_reference/capabilities/PatientCapabilityStatement.xml +43 -0
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-create-PeterChalmers-min.json +1 -3
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-create-PeterChalmers-min.xml +0 -0
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-create-PeterChalmers.json +5 -10
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-create-PeterChalmers.xml +5 -5
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-create-bonus-PeterChalmers-min.json +1 -3
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-create-bonus-PeterChalmers-min.xml +0 -0
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-create-bonus-PeterChalmers.json +5 -10
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-create-bonus-PeterChalmers.xml +4 -5
- data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/_reference/resources/patient-create-client-id-PeterChalmers.json +96 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/_reference/resources/patient-create-client-id-PeterChalmers.xml +103 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/_reference/resources/patient-create-client-id-bonus-PeterChalmers.json +104 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/_reference/resources/patient-create-client-id-bonus-PeterChalmers.xml +108 -0
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-PeterChalmers-min.json +1 -3
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-PeterChalmers-min.xml +0 -0
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-PeterChalmers.json +6 -10
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-PeterChalmers.xml +6 -5
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-bonus1-PeterChalmers-min.json +1 -3
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-bonus1-PeterChalmers-min.xml +0 -0
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-bonus1-PeterChalmers.json +7 -11
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-bonus1-PeterChalmers.xml +5 -5
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-bonus2-PeterChalmers-min.json +2 -4
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-bonus2-PeterChalmers-min.xml +1 -1
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-bonus2-PeterChalmers.json +7 -11
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-bonus2-PeterChalmers.xml +8 -7
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/01-RegisterPatient/connectathon-14-patient-fhirclient-01-register-client-id-xml.xml +306 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/01-RegisterPatient/connectathon-14-patient-fhirclient-01-register-server-id-xml.xml +317 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/02-PatientUpdate/connectathon-14-patient-fhirclient-02-update-client-id-xml.xml +346 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/02-PatientUpdate/connectathon-14-patient-fhirclient-02-update-server-id-xml.xml +385 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/capabilities/PatientCapabilityStatement.json +50 -0
- data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient/_reference/conformance/PatientConformance.xml → scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/capabilities/PatientCapabilityStatement.xml} +10 -2
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/resources/patient-create-client-id.json +21 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/resources/patient-create-client-id.xml +15 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/resources/patient-create-server-id.json +20 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/resources/patient-create-server-id.xml +14 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/resources/patient-update-client-id.json +21 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/resources/patient-update-client-id.xml +15 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/resources/patient-update-server-id.json +20 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/resources/patient-update-server-id.xml +14 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/01-RegisterPatient/connectathon-14-patient-fhirserver-01-register-client-id-json.xml +262 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/01-RegisterPatient/connectathon-14-patient-fhirserver-01-register-client-id-xml.xml +262 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/01-RegisterPatient/connectathon-14-patient-fhirserver-01-register-server-id-json.xml +273 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/01-RegisterPatient/connectathon-14-patient-fhirserver-01-register-server-id-xml.xml +273 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/02-PatientUpdate/connectathon-14-patient-fhirserver-02-update-client-id-json.xml +290 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/02-PatientUpdate/connectathon-14-patient-fhirserver-02-update-client-id-xml.xml +290 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/02-PatientUpdate/connectathon-14-patient-fhirserver-02-update-server-id-json.xml +326 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/02-PatientUpdate/connectathon-14-patient-fhirserver-02-update-server-id-xml.xml +326 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/03-PatientRead/connectathon-14-patient-fhirserver-03-read-client-id-json.xml +247 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/03-PatientRead/connectathon-14-patient-fhirserver-03-read-client-id-xml.xml +247 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/03-PatientRead/connectathon-14-patient-fhirserver-03-read-server-id-json.xml +282 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/03-PatientRead/connectathon-14-patient-fhirserver-03-read-server-id-xml.xml +281 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/04-PatientHistory/connectathon-14-patient-fhirserver-04-history-client-id-json.xml +330 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/04-PatientHistory/connectathon-14-patient-fhirserver-04-history-client-id-xml.xml +330 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/04-PatientHistory/connectathon-14-patient-fhirserver-04-history-server-id-json.xml +366 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/04-PatientHistory/connectathon-14-patient-fhirserver-04-history-server-id-xml.xml +366 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/05-PatientVRead/connectathon-14-patient-fhirserver-05-vread-client-id-json.xml +527 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/05-PatientVRead/connectathon-14-patient-fhirserver-05-vread-client-id-xml.xml +527 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/05-PatientVRead/connectathon-14-patient-fhirserver-05-vread-server-id-json.xml +519 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/05-PatientVRead/connectathon-14-patient-fhirserver-05-vread-server-id-xml.xml +519 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/06-PatientSearching/connectathon-14-patient-fhirserver-06-search-client-id-json.xml +290 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/06-PatientSearching/connectathon-14-patient-fhirserver-06-search-client-id-xml.xml +290 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/06-PatientSearching/connectathon-14-patient-fhirserver-06-search-server-id-json.xml +288 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/06-PatientSearching/connectathon-14-patient-fhirserver-06-search-server-id-xml.xml +288 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/07-PatientDeletion/connectathon-14-patient-fhirserver-07-delete-client-id-json.xml +252 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/07-PatientDeletion/connectathon-14-patient-fhirserver-07-delete-client-id-xml.xml +252 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/07-PatientDeletion/connectathon-14-patient-fhirserver-07-delete-server-id-json.xml +284 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/07-PatientDeletion/connectathon-14-patient-fhirserver-07-delete-server-id-xml.xml +284 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/99-PatientAll/connectathon-14-patient-fhirserver-99-all-client-id-json.xml +897 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/99-PatientAll/connectathon-14-patient-fhirserver-99-all-client-id-xml.xml +897 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/99-PatientAll/connectathon-14-patient-fhirserver-99-all-server-id-json.xml +963 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/99-PatientAll/connectathon-14-patient-fhirserver-99-all-server-id-xml.xml +963 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/capabilities/PatientCapabilityStatement.json +50 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/capabilities/PatientCapabilityStatement.xml +42 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/resources/patient-create-client-id.json +86 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/resources/patient-create-client-id.xml +62 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/resources/patient-create-server-id.json +85 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/resources/patient-create-server-id.xml +61 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/resources/patient-update-client-id.json +86 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/resources/patient-update-client-id.xml +62 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/resources/patient-update-server-id.json +86 -0
- data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/resources/patient-update-server-id.xml +62 -0
- data/lib/tests/testscripts/scripts/spec/_reference/resources/patient-example-update.json +145 -0
- data/lib/tests/testscripts/scripts/spec/_reference/resources/patient-example.json +146 -0
- data/lib/tests/testscripts/scripts/spec/testscript-example-history.xml +191 -0
- data/lib/tests/testscripts/scripts/spec/testscript-example-multisystem.xml +190 -0
- data/lib/tests/testscripts/scripts/spec/testscript-example-readtest.xml +178 -0
- data/lib/tests/testscripts/scripts/spec/testscript-example-rule.xml +266 -0
- data/lib/tests/testscripts/scripts/spec/testscript-example-search.xml +177 -0
- data/lib/tests/testscripts/scripts/spec/testscript-example-update.xml +163 -0
- data/lib/tests/testscripts/scripts/spec/testscript-example.xml +228 -0
- data/lib/tests/testscripts/testscript_engine.rb +36 -22
- data/logs/.keep +0 -0
- data/plan_executor.gemspec +11 -3
- data/test/test_helper.rb +3 -3
- data/test/unit/fixtures_test.rb +24 -24
- data/test/unit/metadata_test.rb +19 -9
- data/test/unit/resource_generator_test.rb +20 -0
- metadata +244 -249
- data/fixtures/diagnostic_order/do-200.xml +0 -121
- data/fixtures/diagnostic_order/do-400.xml +0 -88
- data/fixtures/financial/claim-example-average.xml +0 -168
- data/fixtures/financial/claim-example-simple.xml +0 -67
- data/fixtures/order/order-100.xml +0 -61
- data/fixtures/order/order-200.xml +0 -61
- data/fixtures/order/order-300.xml +0 -61
- data/fixtures/order/order-400.xml +0 -61
- data/fixtures/order_response/ordresp-100.xml +0 -79
- data/fixtures/order_response/ordresp-110.xml +0 -79
- data/fixtures/order_response/ordresp-200.xml +0 -79
- data/fixtures/order_response/ordresp-210.xml +0 -79
- data/fixtures/order_response/ordresp-300.xml +0 -79
- data/fixtures/order_response/ordresp-310.xml +0 -79
- data/fixtures/order_response/ordresp-400.xml +0 -79
- data/fixtures/order_response/ordresp-410.xml +0 -79
- data/fixtures/patient/patient-example-us-extensions(us01).xml +0 -81
- data/fixtures/patient/patient-format-example.xml +0 -101
- data/fixtures/validation/observations/observation-example(example).xml +0 -50
- data/lib/tests/suites/argonaut_resprint_1_test.rb +0 -260
- data/lib/tests/suites/argonaut_resprint_2_test.rb +0 -369
- data/lib/tests/suites/argonaut_resprint_3_test.rb +0 -309
- data/lib/tests/suites/argonaut_sprint_1_test.rb +0 -187
- data/lib/tests/suites/argonaut_sprint_2_test.rb +0 -115
- data/lib/tests/suites/argonaut_sprint_3_test.rb +0 -208
- data/lib/tests/suites/argonaut_sprint_4_test.rb +0 -335
- data/lib/tests/suites/argonaut_sprint_5_test.rb +0 -196
- data/lib/tests/suites/argonaut_sprint_6_test.rb +0 -243
- data/lib/tests/suites/argonaut_sprint_7_test.rb +0 -161
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-base-client-id-json.xml +0 -348
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-base-client-id-xml.xml +0 -348
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-bonus-client-id-json.xml +0 -420
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-bonus-client-id-xml.xml +0 -420
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/README.html +0 -68
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-base-server-id-json.xml +0 -352
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-base-server-id-xml.xml +0 -352
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-bonus-server-id-json.xml +0 -421
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-bonus-server-id-xml.xml +0 -421
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/C-CDA_R2-1_CCD-ussg.xml +0 -3414
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A1-empty-on-instance.xml +0 -9
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A2-empty-by-ref.xml +0 -15
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A3-empty-by-identifier.xml +0 -13
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A4-empty-by-contained.xml +0 -15
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B1-CCDA-on-instance.xml +0 -15
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B2-CCDA-by-ref.xml +0 -21
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B3-CCDA-by-identifier.xml +0 -19
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B4-CCDA-by-contained.xml +0 -21
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/questionnaire-sdc-profile-example-ussg-fht.xml +0 -3905
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/questionnaireresponse-expected-ussg-fht-CCDA.xml +0 -190
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/questionnaireresponse-expected-ussg-fht-empty.xml +0 -177
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/track11-sdc-prepop-xml.xml +0 -142
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Client Assigned Id/track2-ts-suite1-expand-client-id.xml +0 -925
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Client Assigned Id/track2-ts-suite2-expand-filter-client-id.xml +0 -930
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Server Assigned Id/track2-ts-suite1-expand-server-id.xml +0 -953
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Server Assigned Id/track2-ts-suite2-expand-filter-server-id.xml +0 -958
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Lookup/track2-ts-suite5-loinc-lookup-xml.xml +0 -224
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Lookup/track2-ts-suite5-snomed-lookup-xml.xml +0 -224
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/README.html +0 -85
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Translate/track2-ts-suite6-translate-xml.xml +0 -224
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Client Assigned Id/track2-ts-suite3-validate-code-client-id.xml +0 -1807
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Client Assigned Id/track2-ts-suite4-validate-code-client-id.xml +0 -714
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Server Assigned Id/track2-ts-suite3-validate-code-server-id.xml +0 -1835
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Server Assigned Id/track2-ts-suite4-validate-code-server-id.xml +0 -742
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ConceptMapSuite6Conformance.xml +0 -11
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite1Conformance.xml +0 -17
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite2Conformance.xml +0 -17
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite3Conformance.xml +0 -14
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite4Conformance.xml +0 -14
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite5Conformance.xml +0 -11
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-2-a.xml +0 -11
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-2-b.xml +0 -11
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-3-a.xml +0 -13
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-3-b.xml +0 -13
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-4-a.xml +0 -15
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-4-b.xml +0 -15
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-loinc-input-5-2.xml +0 -10
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-loinc-input-5-3.xml +0 -11
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-snomed-input-5-2.xml +0 -10
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-snomed-input-5-3.xml +0 -11
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/translate-conceptmap-input-6-2.xml +0 -14
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/translate-conceptmap-input-6-3.xml +0 -15
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-1-expand-min.xml +0 -47
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-1-filter-min.xml +0 -23
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-2-expand-min.xml +0 -132
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-2-filter-min.xml +0 -38
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-3-expand-min.xml +0 -252
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-3-filter-min.xml +0 -58
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-4-expand-min.xml +0 -57
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-4-filter-min.xml +0 -28
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-1-expand-min.xml +0 -347
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-1-filter-min.xml +0 -33
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-2-expand-min.xml +0 -637
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-2-filter-min.xml +0 -33
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-3-filter-min.xml +0 -58
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/lookup-loinc-min.xml +0 -11
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/lookup-snomed-min.xml +0 -11
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite3-invalid-min.xml +0 -10
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite3-valid-min.xml +0 -7
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite4-invalid-min.xml +0 -10
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite4-valid-min.xml +0 -7
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/translate-conceptmap-min.xml +0 -17
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-1.xml +0 -55
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-2.xml +0 -122
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-3.xml +0 -222
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-4.xml +0 -65
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/intensional-case-1.xml +0 -31
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/intensional-case-2.xml +0 -31
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/intensional-case-3.xml +0 -31
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/translate-conceptmap-case-1.xml +0 -145
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/conformance/DecisionSupportServiceModule-Evaluate.xml +0 -17
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-incomplete-request-payload.xml +0 -26
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-incomplete-response-min-payload.xml +0 -7
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-incomplete-response-payload.xml +0 -332
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-malformed-request-payload.xml +0 -28
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-malformed-response-min-payload.xml +0 -7
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-malformed-response-payload.xml +0 -20
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-request-payload.xml +0 -28
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-response-min-payload.xml +0 -7
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-response-payload.xml +0 -332
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-unauthorized-request-payload.xml +0 -28
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-unauthorized-response-min-payload.xml +0 -7
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-unauthorized-response-payload.xml +0 -8
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/gao-assessment-request-payload.xml +0 -176
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/gao-assessment-response-payload-min.xml +0 -32
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/gao-assessment-response-payload.xml +0 -80
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/track3-cds-evaluate-cdc-immunization.xml +0 -290
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/track3-cds-evaluate-gao-profile.xml +0 -110
- data/lib/tests/testscripts/xml/Connectathon11/Track6-FHIR-Genomics/Client_Assigned_Id/TestScript_FHIR-Genomics.xml +0 -170
- data/lib/tests/testscripts/xml/Connectathon11/Track6-FHIR-Genomics/_reference/resources/sequence-example-1.xml +0 -31
- data/lib/tests/testscripts/xml/Connectathon11/Track6-FHIR-Genomics/_reference/resources/sequence-example-2.xml +0 -31
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Actors.png +0 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder100-xml.xml +0 -590
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder200-xml.xml +0 -587
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder300-xml.xml +0 -612
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder400-xml.xml +0 -635
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Peer-to-Peer/track7-laborder100-peer2peer-xml.xml +0 -752
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Thumbs.db +0 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/conformance/LabOrderLabReport-CreateDeleteReadUpdate.xml +0 -187
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/conformance/html.xslt +0 -45
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-100-update.xml +0 -64
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-100.xml +0 -64
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-200-update.xml +0 -121
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-200.xml +0 -121
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-300-update.xml +0 -91
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-300.xml +0 -91
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-400-update.xml +0 -88
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-100.xml +0 -96
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-200.xml +0 -125
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-300.xml +0 -132
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-400.xml +0 -121
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-100.xml +0 -58
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-101.xml +0 -58
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-200.xml +0 -125
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-300.xml +0 -106
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-301.xml +0 -106
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-302.xml +0 -106
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-303.xml +0 -106
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-304.xml +0 -106
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-400.xml +0 -87
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-401.xml +0 -95
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-402.xml +0 -95
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-403.xml +0 -84
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-404.xml +0 -84
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-405.xml +0 -83
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-406.xml +0 -83
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-407.xml +0 -70
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-408.xml +0 -84
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-uslab-example5.xml +0 -102
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-100.xml +0 -61
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-200.xml +0 -61
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-300.xml +0 -61
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-400.xml +0 -61
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-100.xml +0 -79
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-110.xml +0 -79
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-200.xml +0 -79
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-210.xml +0 -79
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-300.xml +0 -79
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-310.xml +0 -79
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-400.xml +0 -79
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-410.xml +0 -79
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Organization/org-uslab-example3.xml +0 -49
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Patient/patient-uslab-example1.xml +0 -44
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Practitioner/pract-uslab-example1.xml +0 -18
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Practitioner/pract-uslab-example3.xml +0 -36
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/Thumbs.db +0 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/spec-100.xml +0 -65
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/spec-400.xml +0 -70
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/spec-uslab-example1.xml +0 -82
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 1 Document.txt +0 -122
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 2 Document.txt +0 -103
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 3 Document.txt +0 -201
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 4 Document.txt +0 -310
- data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/conformance/MedicationStatementCreate.xml +0 -11
- data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/conformance/PatientSearchType.xml +0 -15
- data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/resources/medicationstatement-create.json +0 -39
- data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/resources/medicationstatement-patch.json +0 -3
- data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/track9-patch-medicationstatement-json-if-match.xml +0 -321
- data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/track9-patch-medicationstatement-json.xml +0 -303
- data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/track9-patch-peer2peer-patient-json.xml +0 -235
- data/test/fixtures/testscript-example.xml +0 -202
- data/test/fixtures/testscript-history.xml +0 -143
- data/test/fixtures/testscript-readtest.xml +0 -272
- data/test/fixtures/testscript-search.xml +0 -282
- data/test/fixtures/testscript-update.xml +0 -147
- data/test/unit/argonaut_sprint6_test.rb +0 -31
- data/test/unit/argonaut_sprint7_test.rb +0 -21
- data/test/unit/basic_test.rb +0 -27
- data/test/unit/fetch_patient_record_test.rb +0 -357
- data/test/unit/financial_test.rb +0 -41
|
@@ -16,29 +16,37 @@ module Crucible
|
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def setup
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
19
|
+
begin
|
|
20
|
+
@resources = Crucible::Generator::Resources.new
|
|
21
|
+
response = @client.create(@resources.minimal_patient)
|
|
22
|
+
assert_response_ok(response)
|
|
23
|
+
@patient = response.resource
|
|
24
|
+
@patient_created = true
|
|
25
|
+
@create_date = Time.now.utc
|
|
26
|
+
|
|
27
|
+
@version = []
|
|
28
|
+
@version << @client.reply.version
|
|
29
|
+
|
|
30
|
+
@patient.telecom ||= []
|
|
31
|
+
@patient.telecom << FHIR::ContactPoint.new.from_hash(system: 'email', value: 'foo@example.com')
|
|
32
|
+
|
|
33
|
+
@patient.update
|
|
34
|
+
@version << @client.reply.version
|
|
35
|
+
@patient.destroy
|
|
36
|
+
assert_response_code(@client.reply,204)
|
|
37
|
+
|
|
38
|
+
@entry_count = @version.length
|
|
39
|
+
# add one for deletion
|
|
40
|
+
@version_count = @entry_count + 1
|
|
41
|
+
@patient_setup = true
|
|
42
|
+
rescue Exception => e
|
|
43
|
+
@patient_setup = false
|
|
44
|
+
@create_date = Time.now.utc
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def teardown
|
|
49
|
+
ignore_client_exception { @patient.destroy if @patient_created }
|
|
42
50
|
end
|
|
43
51
|
|
|
44
52
|
test 'HI01','History for specific resource' do
|
|
@@ -47,12 +55,11 @@ module Crucible
|
|
|
47
55
|
requires resource: "Patient", methods: ["create", "update", "delete"]
|
|
48
56
|
validates resource: "Patient", methods: ["history"]
|
|
49
57
|
}
|
|
58
|
+
skip unless @patient_setup
|
|
50
59
|
|
|
51
|
-
|
|
52
|
-
assert_response_ok result
|
|
53
|
-
bundle = result.resource
|
|
60
|
+
bundle = FHIR::Patient.resource_instance_history(@patient.id)
|
|
54
61
|
|
|
55
|
-
assert_equal "history", bundle.
|
|
62
|
+
assert_equal "history", bundle.type, "The bundle type is not correct"
|
|
56
63
|
assert_equal @version_count, bundle.total, "the number of returned versions is not correct"
|
|
57
64
|
check_sort_order(bundle.entry)
|
|
58
65
|
end
|
|
@@ -63,14 +70,13 @@ module Crucible
|
|
|
63
70
|
requires resource: "Patient", methods: ["create", "update", "delete"]
|
|
64
71
|
validates resource: "Patient", methods: ["history"]
|
|
65
72
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
bundle = result.resource
|
|
73
|
+
skip unless @patient_setup
|
|
74
|
+
bundle = FHIR::Patient.resource_instance_history(@patient.id)
|
|
69
75
|
entries = bundle.entry
|
|
70
76
|
|
|
71
|
-
assert_equal 1, entries.select{|entry| entry.request.try(:
|
|
72
|
-
assert_equal 1, entries.select{|entry| entry.request.try(:
|
|
73
|
-
assert_equal 1, entries.select{|entry| entry.request.try(:
|
|
77
|
+
assert_equal 1, entries.select{|entry| entry.request.try(:local_method) == 'DELETE' }.size, 'Wrong number of DELETE transactions in the history bundle'
|
|
78
|
+
assert_equal 1, entries.select{|entry| entry.request.try(:local_method) == 'PUT' }.size, 'Wrong number of PUT transactions in the history bundle'
|
|
79
|
+
assert_equal 1, entries.select{|entry| entry.request.try(:local_method) == 'POST' }.size, 'Wrong number of POST transactions in the history bundle'
|
|
74
80
|
|
|
75
81
|
end
|
|
76
82
|
|
|
@@ -80,24 +86,22 @@ module Crucible
|
|
|
80
86
|
requires resource: "Patient", methods: ["create", "update", "delete"]
|
|
81
87
|
validates resource: "Patient", methods: ["history"]
|
|
82
88
|
}
|
|
89
|
+
skip unless @patient_setup
|
|
83
90
|
|
|
84
91
|
before = @create_date - 1.minute
|
|
85
92
|
after = before + 1.hour
|
|
86
93
|
|
|
87
|
-
all_history =
|
|
94
|
+
all_history = FHIR::Patient.resource_instance_history(@patient.id)
|
|
88
95
|
|
|
89
|
-
|
|
90
|
-
assert_response_ok result
|
|
91
|
-
bundle = result.resource
|
|
96
|
+
bundle = FHIR::Patient.resource_instance_history_as_of(@patient.id,before)
|
|
92
97
|
|
|
93
98
|
assert_equal @version_count, bundle.total, "the number of returned versions since the creation date is not correct"
|
|
94
99
|
|
|
95
100
|
entry_ids_are_present(bundle.entry)
|
|
96
101
|
check_sort_order(bundle.entry)
|
|
97
102
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
assert_equal 0, result.resource.total, "there should not be any history one hour after the creation date"
|
|
103
|
+
bundle = FHIR::Patient.resource_instance_history_as_of(@patient.id,after)
|
|
104
|
+
assert_equal 0, bundle.total, "there should not be any history one hour after the creation date"
|
|
101
105
|
end
|
|
102
106
|
|
|
103
107
|
test "HI03", "individual history versions" do
|
|
@@ -106,24 +110,22 @@ module Crucible
|
|
|
106
110
|
requires resource: "Patient", methods: ["create", "update", "delete"]
|
|
107
111
|
validates resource: "Patient", methods: ["vread", "history"]
|
|
108
112
|
}
|
|
113
|
+
skip unless @patient_setup
|
|
109
114
|
|
|
110
|
-
|
|
111
|
-
assert_response_ok result
|
|
112
|
-
|
|
113
|
-
bundle = result.resource
|
|
115
|
+
bundle = FHIR::Patient.resource_instance_history(@patient.id)
|
|
114
116
|
|
|
115
117
|
active_entries(bundle.entry).each do |entry|
|
|
116
|
-
pulled =
|
|
117
|
-
assert_response_ok pulled
|
|
118
|
+
pulled = FHIR::Patient.vread(entry.resource.id, entry.resource.meta.versionId)
|
|
118
119
|
assert !pulled.nil?, "Cannot find version that was present in history"
|
|
119
120
|
end
|
|
120
121
|
|
|
121
122
|
deleted_entries(bundle.entry).each do |entry|
|
|
122
123
|
# FIXME: Should we parse the request URL or drop this assertion?
|
|
123
124
|
if entry.resource
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
assert_response_gone
|
|
125
|
+
|
|
126
|
+
ignore_client_exception { pulled = FHIR::Patient.vread(entry.resource.id, entry.resource.meta.versionId) }
|
|
127
|
+
assert_response_gone @client.reply
|
|
128
|
+
|
|
127
129
|
end
|
|
128
130
|
end
|
|
129
131
|
end
|
|
@@ -135,9 +137,9 @@ module Crucible
|
|
|
135
137
|
validates resource: "Patient", methods: ["history"]
|
|
136
138
|
}
|
|
137
139
|
|
|
138
|
-
|
|
139
|
-
assert_response_not_found
|
|
140
|
-
assert
|
|
140
|
+
ignore_client_exception { FHIR::Patient.resource_instance_history('3141592unlikely') }
|
|
141
|
+
assert_response_not_found @client.reply
|
|
142
|
+
assert @client.reply.resource.nil?, 'bad history request should not return a resource'
|
|
141
143
|
end
|
|
142
144
|
|
|
143
145
|
test "HI06", "all history for resource with since" do
|
|
@@ -150,17 +152,13 @@ module Crucible
|
|
|
150
152
|
before = @create_date - 1.minute
|
|
151
153
|
after = Time.now.utc + 1.hour
|
|
152
154
|
|
|
153
|
-
|
|
154
|
-
assert_response_ok result
|
|
155
|
-
bundle = result.resource
|
|
155
|
+
bundle = FHIR::Patient.resource_history_as_of(before)
|
|
156
156
|
|
|
157
157
|
entry_ids_are_present(bundle.entry)
|
|
158
158
|
check_sort_order(bundle.entry)
|
|
159
159
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
assert_response_ok result
|
|
163
|
-
assert_equal 0, result.resource.total, "Setting since to a future moment still returns history"
|
|
160
|
+
bundle = FHIR::Patient.resource_history_as_of(after)
|
|
161
|
+
assert_equal 0, bundle.total, "Setting since to a future moment still returns history"
|
|
164
162
|
|
|
165
163
|
end
|
|
166
164
|
|
|
@@ -178,14 +176,20 @@ module Crucible
|
|
|
178
176
|
assert_response_ok result
|
|
179
177
|
bundle = result.resource
|
|
180
178
|
entry_ids_are_present(bundle.entry)
|
|
181
|
-
check_sort_order(bundle.entry)
|
|
182
179
|
|
|
183
|
-
|
|
180
|
+
relevant_entries = bundle.entry.select{|x|x.request.try(:local_method)!='DELETE'}
|
|
181
|
+
relevant_entries.map!(&:resource).map!(&:meta).compact rescue assert(false, 'Unable to find meta for resources returned by the bundle')
|
|
182
|
+
relevant_entries.each_cons(2) do |left, right|
|
|
183
|
+
if !left.lastUpdated.nil? && !right.lastUpdated.nil?
|
|
184
|
+
assert (left.lastUpdated >= right.lastUpdated), 'Result contains entries in the wrong order.'
|
|
185
|
+
else
|
|
186
|
+
raise AssertionException.new 'Unable to determine if entries are in the correct order -- no meta.versionId or meta.lastUpdated'
|
|
187
|
+
end
|
|
188
|
+
end
|
|
184
189
|
|
|
185
190
|
result = @client.resource_history_as_of(FHIR::Patient,after)
|
|
186
191
|
assert_response_ok result
|
|
187
192
|
assert_equal 0, result.resource.total, "Setting since to a future moment still returns history"
|
|
188
|
-
|
|
189
193
|
end
|
|
190
194
|
|
|
191
195
|
|
|
@@ -209,7 +213,7 @@ module Crucible
|
|
|
209
213
|
page = @client.next_page(page)
|
|
210
214
|
end
|
|
211
215
|
|
|
212
|
-
assert
|
|
216
|
+
assert(forward_count > 2, "there should be at least 2 history entries") if @patient_setup
|
|
213
217
|
end
|
|
214
218
|
|
|
215
219
|
test "HI10", "resource history page backwards" do
|
|
@@ -255,7 +259,7 @@ module Crucible
|
|
|
255
259
|
|
|
256
260
|
history = @client.all_history
|
|
257
261
|
assert !history.resource.nil?, "A bundle was not returned from the history request."
|
|
258
|
-
assert
|
|
262
|
+
assert(history.resource.entry.size >= 3, "there should be at least 3 history entries") if @patient_setup
|
|
259
263
|
end
|
|
260
264
|
|
|
261
265
|
###
|
|
@@ -270,7 +274,7 @@ module Crucible
|
|
|
270
274
|
def deleted_entries(entries)
|
|
271
275
|
entries.select do |entry|
|
|
272
276
|
assert !entry.request.nil?, "history bundle entries do not have request elements, deleted entries cannot be distinguished"
|
|
273
|
-
entry.request.try(:
|
|
277
|
+
entry.request.try(:local_method) == "DELETE"
|
|
274
278
|
end
|
|
275
279
|
end
|
|
276
280
|
|
|
@@ -280,8 +284,8 @@ module Crucible
|
|
|
280
284
|
|
|
281
285
|
|
|
282
286
|
def entry_ids_are_present(entries)
|
|
283
|
-
relevant_entries = entries.select{|x|x.request.try(:
|
|
284
|
-
ids = relevant_entries.map(&:resource).map(&:
|
|
287
|
+
relevant_entries = entries.select{|x|x.request.try(:local_method)!='DELETE'}
|
|
288
|
+
ids = relevant_entries.map(&:resource).map(&:id).compact rescue assert(false, 'Unable to find IDs for resources returned by the bundle')
|
|
285
289
|
|
|
286
290
|
# check that we have ids and self links
|
|
287
291
|
assert_equal relevant_entries.length, ids.size, 'All PUT and POST entries must have an ID'
|
|
@@ -292,7 +296,7 @@ module Crucible
|
|
|
292
296
|
end
|
|
293
297
|
|
|
294
298
|
def check_sort_order(entries)
|
|
295
|
-
relevant_entries = entries.select{|x|x.request.try(:
|
|
299
|
+
relevant_entries = entries.select{|x|x.request.try(:local_method)!='DELETE'}
|
|
296
300
|
relevant_entries.map!(&:resource).map!(&:meta).compact rescue assert(false, 'Unable to find meta for resources returned by the bundle')
|
|
297
301
|
|
|
298
302
|
relevant_entries.each_cons(2) do |left, right|
|
|
@@ -16,18 +16,23 @@ module Crucible
|
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def setup
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
# try to find a patient
|
|
20
|
+
begin
|
|
21
|
+
response = @client.read_feed(FHIR::Patient)
|
|
22
|
+
@patient = response.resource.entry.first.resource
|
|
23
|
+
rescue
|
|
24
|
+
# try to create a patient
|
|
25
|
+
begin
|
|
26
|
+
@patient = FHIR::Patient.create(name: { family: 'Emerald', given: 'Caro' })
|
|
27
|
+
@patient_created = true
|
|
28
|
+
rescue
|
|
29
|
+
@patient = nil
|
|
30
|
+
end
|
|
31
|
+
end
|
|
23
32
|
end
|
|
24
33
|
|
|
25
34
|
def teardown
|
|
26
|
-
@
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def self.createPatient(family, given)
|
|
30
|
-
patient = FHIR::Patient.new(name: [FHIR::HumanName.new(family: [family], given: [given])])
|
|
35
|
+
ignore_client_exception { @patient.destroy if @patient_created }
|
|
31
36
|
end
|
|
32
37
|
|
|
33
38
|
# [SprinklerTest("R001", "Result headers on normal read")]
|
|
@@ -37,14 +42,14 @@ module Crucible
|
|
|
37
42
|
requires resource: "Patient", methods: ["create", "read", "delete"]
|
|
38
43
|
validates resource: "Patient", methods: ["read"]
|
|
39
44
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
assert_equal @id, reply.id, 'Server returned wrong patient.'
|
|
45
|
-
warning { assert_valid_resource_content_type_present(reply) }
|
|
46
|
-
warning { assert_etag_present(reply) }
|
|
47
|
-
warning { assert_last_modified_present(reply) }
|
|
45
|
+
skip if @patient.nil?
|
|
46
|
+
|
|
47
|
+
patient = FHIR::Patient.read(@patient.id)
|
|
48
|
+
|
|
49
|
+
assert_equal @patient.id, @client.reply.id, 'Server returned wrong patient.'
|
|
50
|
+
warning { assert_valid_resource_content_type_present(@client.reply) }
|
|
51
|
+
warning { assert_etag_present(@client.reply) }
|
|
52
|
+
warning { assert_last_modified_present(@client.reply) }
|
|
48
53
|
end
|
|
49
54
|
|
|
50
55
|
# [SprinklerTest("R002", "Read unknown resource type")]
|
|
@@ -54,8 +59,8 @@ module Crucible
|
|
|
54
59
|
links "#{REST_SPEC_LINK}#update"
|
|
55
60
|
}
|
|
56
61
|
|
|
57
|
-
|
|
58
|
-
|
|
62
|
+
ignore_client_exception { FHIR::Model.read('1') } #not a valid model
|
|
63
|
+
assert(([400,404].include?(@client.reply.code)), "An unknown resource type should be 404 or 400. The spec says 404 for an unknown resource, but does not define unknown type. Returned #{@client.reply.code}." )
|
|
59
64
|
end
|
|
60
65
|
|
|
61
66
|
# [SprinklerTest("R003", "Read non-existing resource id")]
|
|
@@ -66,8 +71,8 @@ module Crucible
|
|
|
66
71
|
validates resource: "Patient", methods: ["read"]
|
|
67
72
|
}
|
|
68
73
|
|
|
69
|
-
|
|
70
|
-
assert_response_not_found(reply)
|
|
74
|
+
ignore_client_exception { FHIR::Patient.read('Supercalifragilisticexpialidocious') }
|
|
75
|
+
assert_response_not_found(@client.reply)
|
|
71
76
|
end
|
|
72
77
|
|
|
73
78
|
# [SprinklerTest("R004", "Read bad formatted resource id")]
|
|
@@ -80,8 +85,8 @@ module Crucible
|
|
|
80
85
|
validates resource: "Patient", methods: ["read"]
|
|
81
86
|
}
|
|
82
87
|
|
|
83
|
-
|
|
84
|
-
|
|
88
|
+
ignore_client_exception { FHIR::Patient.read('Invalid-ID-Because_Of_!@$Special_Characters_and_Length_Over_Sixty_Four_Characters') }
|
|
89
|
+
assert_response_not_found(@client.reply)
|
|
85
90
|
end
|
|
86
91
|
|
|
87
92
|
test 'R005', 'Read _summary=text' do
|
|
@@ -92,11 +97,10 @@ module Crucible
|
|
|
92
97
|
requires resource: "Patient", methods: ["create", "read", "delete"]
|
|
93
98
|
validates resource: "Patient", methods: ["read"]
|
|
94
99
|
}
|
|
100
|
+
skip if @patient.nil?
|
|
95
101
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
assert_response_ok(reply)
|
|
99
|
-
assert(reply.try(:resource).try(:text), 'Requested summary narrative was not provided.', reply.body)
|
|
102
|
+
patient = FHIR::Patient.read_with_summary(@patient.id, "text")
|
|
103
|
+
assert(patient.text, 'Requested summary narrative was not provided.', @client.reply.body)
|
|
100
104
|
end
|
|
101
105
|
|
|
102
106
|
end
|
|
@@ -7,9 +7,14 @@ module Crucible
|
|
|
7
7
|
attr_accessor :history_bundle
|
|
8
8
|
|
|
9
9
|
attr_accessor :temp_resource
|
|
10
|
-
attr_accessor :temp_id
|
|
11
10
|
attr_accessor :temp_version
|
|
12
11
|
|
|
12
|
+
attr_accessor :conditional_create_resource_a
|
|
13
|
+
attr_accessor :conditional_create_resource_b
|
|
14
|
+
attr_accessor :conditional_create_resource_c
|
|
15
|
+
attr_accessor :conditional_update_resource_a
|
|
16
|
+
attr_accessor :conditional_update_resource_c
|
|
17
|
+
|
|
13
18
|
attr_accessor :preexisting_id
|
|
14
19
|
attr_accessor :preexisting_version
|
|
15
20
|
attr_accessor :preexisting
|
|
@@ -20,7 +25,7 @@ module Crucible
|
|
|
20
25
|
{"ResourceTest_#{@resource_class.name.demodulize}" => execute_test_methods}
|
|
21
26
|
else
|
|
22
27
|
results = {}
|
|
23
|
-
fhir_resources.each do | klass |
|
|
28
|
+
Crucible::Tests::BaseSuite.fhir_resources.each do | klass |
|
|
24
29
|
@resource_class = klass
|
|
25
30
|
results.merge!({"ResourceTest_#{@resource_class.name.demodulize}" => execute_test_methods})
|
|
26
31
|
end
|
|
@@ -56,6 +61,14 @@ module Crucible
|
|
|
56
61
|
"#{resource_class.name.demodulize}: #{desc}"
|
|
57
62
|
end
|
|
58
63
|
|
|
64
|
+
def teardown
|
|
65
|
+
ignore_client_exception { @temp_resource.destroy if @temp_resource }
|
|
66
|
+
ignore_client_exception { @conditional_create_resource_a.destroy if @conditional_create_resource_a }
|
|
67
|
+
ignore_client_exception { @conditional_create_resource_b.destroy if @conditional_create_resource_b }
|
|
68
|
+
ignore_client_exception { @conditional_create_resource_c.destroy if @conditional_create_resource_c }
|
|
69
|
+
ignore_client_exception { @conditional_create_resource_d.destroy if @conditional_create_resource_d }
|
|
70
|
+
end
|
|
71
|
+
|
|
59
72
|
#
|
|
60
73
|
# Get and read all the resources of this type. Result is an XML ATOM bundle.
|
|
61
74
|
#
|
|
@@ -64,9 +77,8 @@ module Crucible
|
|
|
64
77
|
define_metadata('read')
|
|
65
78
|
}
|
|
66
79
|
|
|
67
|
-
|
|
68
|
-
@
|
|
69
|
-
assert_bundle_response reply
|
|
80
|
+
@bundle = resource_class.search
|
|
81
|
+
assert_bundle_response @client.reply
|
|
70
82
|
assert !@bundle.nil?, 'Service did not respond with bundle.'
|
|
71
83
|
end
|
|
72
84
|
|
|
@@ -79,23 +91,92 @@ module Crucible
|
|
|
79
91
|
}
|
|
80
92
|
|
|
81
93
|
result = TestResult.new('X010',"Create new #{resource_class.name.demodulize}", nil, nil, nil)
|
|
82
|
-
@temp_resource = ResourceGenerator.generate(@resource_class,3)
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
@
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
if reply.code==201
|
|
89
|
-
result.update(STATUS[:pass], "New #{resource_class.name.demodulize} was created.", reply.body)
|
|
94
|
+
ignore_client_exception { @temp_resource = ResourceGenerator.generate(@resource_class,3).create }
|
|
95
|
+
@temp_version = @client.reply.version
|
|
96
|
+
|
|
97
|
+
if @client.reply.code==201
|
|
98
|
+
result.update(STATUS[:pass], "New #{resource_class.name.demodulize} was created.", @client.reply.body)
|
|
90
99
|
else
|
|
91
|
-
outcome = (self.parse_operation_outcome(reply.body) rescue nil)
|
|
100
|
+
outcome = (self.parse_operation_outcome(@client.reply.body) rescue nil)
|
|
92
101
|
if outcome.nil?
|
|
93
|
-
message = "Response code #{reply.code} with no OperationOutcome provided."
|
|
102
|
+
message = "Response code #{@client.reply.code} with no OperationOutcome provided."
|
|
94
103
|
else
|
|
95
104
|
message = self.build_messages(outcome)
|
|
96
105
|
end
|
|
97
|
-
result.update(STATUS[:fail], message, reply.body)
|
|
98
|
-
|
|
106
|
+
result.update(STATUS[:fail], message, @client.reply.body)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
result
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
test 'X012', 'Conditional Create (No Matches)' do
|
|
113
|
+
metadata {
|
|
114
|
+
define_metadata('conditional-create')
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
result = TestResult.new('X012',"Conditional Create #{resource_class.name.demodulize} (No Matches)", nil, nil, nil)
|
|
118
|
+
# chances are good that no resource has this ID
|
|
119
|
+
ifNoneExist = { '_id' => "#{(SecureRandom.uuid * 2)[0..63]}" }
|
|
120
|
+
ignore_client_exception { @conditional_create_resource_a = ResourceGenerator.generate(@resource_class,3).conditional_create(ifNoneExist) }
|
|
121
|
+
|
|
122
|
+
if @client.reply.code==201
|
|
123
|
+
result.update(STATUS[:pass], "New #{resource_class.name.demodulize} was created.", @client.reply.body)
|
|
124
|
+
else
|
|
125
|
+
outcome = (self.parse_operation_outcome(@client.reply.body) rescue nil)
|
|
126
|
+
if outcome.nil?
|
|
127
|
+
message = "Response code #{@client.reply.code} with no OperationOutcome provided."
|
|
128
|
+
else
|
|
129
|
+
message = self.build_messages(outcome)
|
|
130
|
+
end
|
|
131
|
+
result.update(STATUS[:fail], message, @client.reply.body)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
result
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
test 'X013', 'Conditional Create (One Match)' do
|
|
139
|
+
metadata {
|
|
140
|
+
define_metadata('conditional-create')
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
result = TestResult.new('X013',"Conditional Create #{resource_class.name.demodulize} (One Match)", nil, nil, nil)
|
|
144
|
+
# this ID should already exist if temp resource was created
|
|
145
|
+
if !@bundle.nil? && @bundle.is_a?(FHIR::Bundle) && @bundle.total && @bundle.total>0 && @bundle.entry && !@bundle.entry[0].nil? && !@bundle.entry[0].resource.nil?
|
|
146
|
+
@preexisting_id = @bundle.entry[0].resource.id
|
|
147
|
+
elsif !@temp_resource.nil? && !@temp_resource.id.nil?
|
|
148
|
+
@preexisting_id = @temp_resource.id
|
|
149
|
+
else
|
|
150
|
+
raise AssertionException.new("Preexisting #{resource_class.name.demodulize} unknown.", nil)
|
|
151
|
+
end
|
|
152
|
+
ifNoneExist = { '_id' => @preexisting_id }
|
|
153
|
+
ignore_client_exception { @conditional_create_resource_b = ResourceGenerator.generate(@resource_class,3).conditional_create(ifNoneExist) }
|
|
154
|
+
|
|
155
|
+
if @client.reply.code==200
|
|
156
|
+
result.update(STATUS[:pass], "Request was correctly ignored.", @client.reply.body)
|
|
157
|
+
@conditional_create_resource_b = nil
|
|
158
|
+
else
|
|
159
|
+
result.update(STATUS[:fail], "Request should have been ignored with HTTP 200.", @client.reply.body)
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
result
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
test 'X014', 'Conditional Create (Multiple Matches)' do
|
|
167
|
+
metadata {
|
|
168
|
+
define_metadata('conditional-create')
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
result = TestResult.new('X014',"Conditional Create #{resource_class.name.demodulize}", nil, nil, nil)
|
|
172
|
+
# this should match all resources
|
|
173
|
+
ifNoneExist = { '_lastUpdated' => 'gt1900-01-01' }
|
|
174
|
+
ignore_client_exception { @conditional_create_resource_c = ResourceGenerator.generate(@resource_class,3).conditional_create(ifNoneExist) }
|
|
175
|
+
|
|
176
|
+
if @client.reply.code==412
|
|
177
|
+
result.update(STATUS[:pass], "Request correctly failed.", @client.reply.body)
|
|
178
|
+
else
|
|
179
|
+
result.update(STATUS[:fail], "Request should have failed with HTTP 412.", @client.reply.body)
|
|
99
180
|
end
|
|
100
181
|
|
|
101
182
|
result
|
|
@@ -110,31 +191,30 @@ module Crucible
|
|
|
110
191
|
}
|
|
111
192
|
|
|
112
193
|
result = TestResult.new('X020',"Read existing #{resource_class.name.demodulize} by ID", nil, nil, nil)
|
|
113
|
-
if !@bundle.nil? && @bundle.total && @bundle.total>0 && @bundle.entry && !@bundle.entry[0].nil? && !@bundle.entry[0].resource.nil?
|
|
114
|
-
@preexisting_id = @bundle.entry[0].resource.
|
|
115
|
-
elsif !@temp_resource.nil?
|
|
116
|
-
@preexisting_id = @
|
|
194
|
+
if !@bundle.nil? && @bundle.is_a?(FHIR::Bundle) && @bundle.total && @bundle.total>0 && @bundle.entry && !@bundle.entry[0].nil? && !@bundle.entry[0].resource.nil?
|
|
195
|
+
@preexisting_id = @bundle.entry[0].resource.id
|
|
196
|
+
elsif !@temp_resource.nil? && !@temp_resource.id.nil?
|
|
197
|
+
@preexisting_id = @temp_resource.id
|
|
117
198
|
else
|
|
118
199
|
raise AssertionException.new("Preexisting #{resource_class.name.demodulize} unknown.", nil)
|
|
119
200
|
end
|
|
120
201
|
|
|
121
|
-
|
|
122
|
-
@preexisting = reply.resource
|
|
202
|
+
ignore_client_exception { @preexisting = @resource_class.read(@preexisting_id) }
|
|
123
203
|
|
|
124
204
|
if @preexisting.nil?
|
|
125
|
-
raise AssertionException.new("Failed to read preexisting #{resource_class.name.demodulize}: #{@preexisting_id}", reply.body)
|
|
205
|
+
raise AssertionException.new("Failed to read preexisting #{resource_class.name.demodulize}: #{@preexisting_id}", @client.reply.body)
|
|
126
206
|
else
|
|
127
207
|
begin
|
|
128
208
|
@preexisting.to_xml
|
|
129
209
|
rescue Exception
|
|
130
210
|
@preexisting = nil
|
|
131
|
-
raise AssertionException.new("Read preexisting #{resource_class.name.demodulize}, but it appears invalid.", reply.response)
|
|
211
|
+
raise AssertionException.new("Read preexisting #{resource_class.name.demodulize}, but it appears invalid.", @client.reply.response)
|
|
132
212
|
end
|
|
133
213
|
end
|
|
134
214
|
|
|
135
|
-
@preexisting_version = reply.version
|
|
215
|
+
@preexisting_version = @client.reply.version
|
|
136
216
|
|
|
137
|
-
result.update(STATUS[:pass], "Successfully read preexisting #{resource_class.name.demodulize}.", reply.response)
|
|
217
|
+
result.update(STATUS[:pass], "Successfully read preexisting #{resource_class.name.demodulize}.", @client.reply.response)
|
|
138
218
|
result
|
|
139
219
|
end
|
|
140
220
|
|
|
@@ -148,11 +228,11 @@ module Crucible
|
|
|
148
228
|
|
|
149
229
|
result = TestResult.new('X030',"Update existing #{resource_class.name.demodulize} by ID", nil, nil, nil)
|
|
150
230
|
|
|
151
|
-
if !@temp_resource.nil?
|
|
152
|
-
@preexisting_id = @
|
|
231
|
+
if !@temp_resource.nil? && !@temp_resource.id.nil?
|
|
232
|
+
@preexisting_id = @temp_resource.id
|
|
153
233
|
@preexisting = @temp_resource
|
|
154
|
-
elsif !@bundle.nil? && @bundle.total && @bundle.total>0 && @bundle.entry && !@bundle.entry[0].nil? && !@bundle.entry[0].resource.nil?
|
|
155
|
-
@preexisting_id = @bundle.entry[0].resource.
|
|
234
|
+
elsif !@bundle.nil? && @bundle.is_a?(FHIR::Bundle) && @bundle.total && @bundle.total>0 && @bundle.entry && !@bundle.entry[0].nil? && !@bundle.entry[0].resource.nil?
|
|
235
|
+
@preexisting_id = @bundle.entry[0].resource.id
|
|
156
236
|
@preexisting = @bundle.entry[0].resource
|
|
157
237
|
end
|
|
158
238
|
|
|
@@ -170,38 +250,145 @@ module Crucible
|
|
|
170
250
|
ResourceGenerator.set_fields!(@preexisting)
|
|
171
251
|
ResourceGenerator.apply_invariants!(@preexisting)
|
|
172
252
|
|
|
173
|
-
|
|
253
|
+
ignore_client_exception { @preexisting.update }
|
|
174
254
|
|
|
175
|
-
if reply.code==200
|
|
176
|
-
result.update(STATUS[:pass], "Updated existing #{resource_class.name.demodulize}.", reply.body)
|
|
177
|
-
elsif reply.code==201
|
|
255
|
+
if @client.reply.code==200
|
|
256
|
+
result.update(STATUS[:pass], "Updated existing #{resource_class.name.demodulize}.", @client.reply.body)
|
|
257
|
+
elsif @client.reply.code==201
|
|
178
258
|
# check created id -- see if it matches the one we used, or is new
|
|
179
|
-
resulting_id = reply.id
|
|
259
|
+
resulting_id = @client.reply.id
|
|
180
260
|
|
|
181
261
|
if(@preexisting_id != resulting_id)
|
|
182
|
-
result.update(STATUS[:fail], "Server created (201) new #{resource_class.name.demodulize} rather than update (200). A new ID (#{resulting_id}) was also created (was #{@preexisting_id}).", reply.body)
|
|
262
|
+
result.update(STATUS[:fail], "Server created (201) new #{resource_class.name.demodulize} rather than update (200). A new ID (#{resulting_id}) was also created (was #{@preexisting_id}).", @client.reply.body)
|
|
183
263
|
else
|
|
184
|
-
result.update(STATUS[:fail], "The #{resource_class.name.demodulize} was successfully updated, but the server responded with the wrong code (201, but should have been 200).", reply.body)
|
|
264
|
+
result.update(STATUS[:fail], "The #{resource_class.name.demodulize} was successfully updated, but the server responded with the wrong code (201, but should have been 200).", @client.reply.body)
|
|
185
265
|
end
|
|
186
266
|
|
|
187
|
-
resulting_version = reply.version
|
|
267
|
+
resulting_version = @client.reply.version
|
|
188
268
|
if(@preexisting_version == resulting_version)
|
|
189
|
-
result.update(STATUS[:fail], "The #{resource_class.name.demodulize} was successfully updated, but the server did not update the resource version number.", reply.body)
|
|
269
|
+
result.update(STATUS[:fail], "The #{resource_class.name.demodulize} was successfully updated, but the server did not update the resource version number.", @client.reply.body)
|
|
190
270
|
end
|
|
191
271
|
else
|
|
192
|
-
outcome = self.parse_operation_outcome(reply.body) rescue nil
|
|
272
|
+
outcome = self.parse_operation_outcome(@client.reply.body) rescue nil
|
|
193
273
|
if outcome.nil?
|
|
194
|
-
message = "Response code #{reply.code} with no OperationOutcome provided."
|
|
274
|
+
message = "Response code #{@client.reply.code} with no OperationOutcome provided."
|
|
195
275
|
else
|
|
196
276
|
message = self.build_messages(outcome)
|
|
197
277
|
end
|
|
198
|
-
result.update(STATUS[:fail], message, reply.body)
|
|
278
|
+
result.update(STATUS[:fail], message, @client.reply.body)
|
|
199
279
|
end
|
|
200
280
|
end
|
|
201
281
|
|
|
202
282
|
result
|
|
203
283
|
end
|
|
204
284
|
|
|
285
|
+
test 'X032', 'Conditional Update (No Matches)' do
|
|
286
|
+
metadata {
|
|
287
|
+
define_metadata('conditional-update')
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
result = TestResult.new('X032',"Conditional Update #{resource_class.name.demodulize} (No Matches)", nil, nil, nil)
|
|
291
|
+
|
|
292
|
+
searchParams = { '_id' => "#{(SecureRandom.uuid * 2)[0..63]}" }
|
|
293
|
+
ignore_client_exception { @conditional_update_resource_a = ResourceGenerator.generate(@resource_class,3).conditional_update(searchParams) }
|
|
294
|
+
# chances are good that no resource has this ID
|
|
295
|
+
|
|
296
|
+
if @client.reply.code==201
|
|
297
|
+
result.update(STATUS[:pass], "New #{resource_class.name.demodulize} was created.", @client.reply.body)
|
|
298
|
+
else
|
|
299
|
+
outcome = (self.parse_operation_outcome(@client.reply.body) rescue nil)
|
|
300
|
+
if outcome.nil?
|
|
301
|
+
message = "Response code #{@client.reply.code} with no OperationOutcome provided."
|
|
302
|
+
else
|
|
303
|
+
message = self.build_messages(outcome)
|
|
304
|
+
end
|
|
305
|
+
result.update(STATUS[:fail], message, @client.reply.body)
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
result
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
test 'X033', 'Conditional Update (One Match)' do
|
|
313
|
+
metadata {
|
|
314
|
+
define_metadata('conditional-update')
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
result = TestResult.new('X033',"Conditional Update #{resource_class.name.demodulize} (One Match)", nil, nil, nil)
|
|
318
|
+
if !@temp_resource.nil? && !@temp_resource.id.nil?
|
|
319
|
+
@preexisting_id = @temp_resource.id
|
|
320
|
+
@preexisting = @temp_resource
|
|
321
|
+
elsif !@bundle.nil? && @bundle.is_a?(FHIR::Bundle) && @bundle.total && @bundle.total>0 && @bundle.entry && !@bundle.entry[0].nil? && !@bundle.entry[0].resource.nil?
|
|
322
|
+
@preexisting_id = @bundle.entry[0].resource.id
|
|
323
|
+
@preexisting = @bundle.entry[0].resource
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
if !@preexisting.nil?
|
|
327
|
+
begin
|
|
328
|
+
@preexisting.to_xml
|
|
329
|
+
rescue Exception
|
|
330
|
+
@preexisting = nil
|
|
331
|
+
end
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
if @preexisting.nil?
|
|
335
|
+
result.update(STATUS[:skip], "Unable to update -- existing #{resource_class.name.demodulize} is not available or was not valid.", nil)
|
|
336
|
+
else
|
|
337
|
+
ResourceGenerator.set_fields!(@preexisting)
|
|
338
|
+
ResourceGenerator.apply_invariants!(@preexisting)
|
|
339
|
+
|
|
340
|
+
searchParams = { '_id' => @preexisting_id }
|
|
341
|
+
ignore_client_exception { @preexisting.conditional_update(searchParams) }
|
|
342
|
+
|
|
343
|
+
if @client.reply.code==200
|
|
344
|
+
result.update(STATUS[:pass], "Updated existing #{resource_class.name.demodulize}.", @client.reply.body)
|
|
345
|
+
elsif @client.reply.code==201
|
|
346
|
+
# check created id -- see if it matches the one we used, or is new
|
|
347
|
+
resulting_id = @client.reply.id
|
|
348
|
+
|
|
349
|
+
if(@preexisting_id != resulting_id)
|
|
350
|
+
result.update(STATUS[:fail], "Server created (201) new #{resource_class.name.demodulize} rather than update (200). A new ID (#{resulting_id}) was also created (was #{@preexisting_id}).", @client.reply.body)
|
|
351
|
+
else
|
|
352
|
+
result.update(STATUS[:fail], "The #{resource_class.name.demodulize} was successfully updated, but the server responded with the wrong code (201, but should have been 200).", @client.reply.body)
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
resulting_version = @client.reply.version
|
|
356
|
+
if(@preexisting_version == resulting_version)
|
|
357
|
+
result.update(STATUS[:fail], "The #{resource_class.name.demodulize} was successfully updated, but the server did not update the resource version number.", @client.reply.body)
|
|
358
|
+
end
|
|
359
|
+
else
|
|
360
|
+
outcome = self.parse_operation_outcome(@client.reply.body) rescue nil
|
|
361
|
+
if outcome.nil?
|
|
362
|
+
message = "Response code #{@client.reply.code} with no OperationOutcome provided."
|
|
363
|
+
else
|
|
364
|
+
message = self.build_messages(outcome)
|
|
365
|
+
end
|
|
366
|
+
result.update(STATUS[:fail], message, @client.reply.body)
|
|
367
|
+
end
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
result
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
test 'X034', 'Conditional Update (Multiple Matches)' do
|
|
375
|
+
metadata {
|
|
376
|
+
define_metadata('conditional-update')
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
result = TestResult.new('X034',"Conditional Update #{resource_class.name.demodulize}", nil, nil, nil)
|
|
380
|
+
searchParams = { '_lastUpdated' => 'gt1900-01-01' }
|
|
381
|
+
ignore_client_exception { @conditional_update_resource_c = ResourceGenerator.generate(@resource_class,3).conditional_update(searchParams) }
|
|
382
|
+
|
|
383
|
+
if @client.reply.code==412
|
|
384
|
+
result.update(STATUS[:pass], "Request correctly failed.", @client.reply.body)
|
|
385
|
+
@conditional_update_resource_c = nil
|
|
386
|
+
else
|
|
387
|
+
result.update(STATUS[:fail], "Request should have failed with HTTP 412.", @client.reply.body)
|
|
388
|
+
end
|
|
389
|
+
result
|
|
390
|
+
end
|
|
391
|
+
|
|
205
392
|
#
|
|
206
393
|
# Test if we can retrieve the history of a preexisting resource.
|
|
207
394
|
#
|
|
@@ -215,12 +402,11 @@ module Crucible
|
|
|
215
402
|
if @preexisting_id.nil?
|
|
216
403
|
result.update(STATUS[:skip], "Preexisting #{resource_class.name.demodulize} unknown.", nil)
|
|
217
404
|
else
|
|
218
|
-
|
|
219
|
-
@history_bundle = reply.resource
|
|
405
|
+
@history_bundle = @resource_class.resource_instance_history(@preexisting_id)
|
|
220
406
|
if @history_bundle.nil?
|
|
221
407
|
raise AssertionException.new('Service did not respond with bundle.', nil)
|
|
222
408
|
end
|
|
223
|
-
result.update(STATUS[:pass], 'Service responded with bundle.', reply.body)
|
|
409
|
+
result.update(STATUS[:pass], 'Service responded with bundle.', @client.reply.body)
|
|
224
410
|
end
|
|
225
411
|
result
|
|
226
412
|
end
|
|
@@ -237,11 +423,11 @@ module Crucible
|
|
|
237
423
|
|
|
238
424
|
if !@history_bundle.nil? && @history_bundle.total && @history_bundle.total>0 && @history_bundle.entry && !@history_bundle.entry[0].nil? && !@history_bundle.entry[0].resource.nil?
|
|
239
425
|
@preexisting = @history_bundle.entry[0].resource
|
|
240
|
-
@preexisting_id = @preexisting.
|
|
426
|
+
@preexisting_id = @preexisting.id
|
|
241
427
|
@preexisting_version = nil
|
|
242
428
|
@preexisting_version = @preexisting.meta.versionId if !@preexisting.meta.nil?
|
|
243
|
-
elsif !@temp_resource.nil?
|
|
244
|
-
@preexisting_id = @
|
|
429
|
+
elsif !@temp_resource.nil? && !@temp_resource.id.nil?
|
|
430
|
+
@preexisting_id = @temp_resource.id
|
|
245
431
|
@preexisting_version = @temp_version
|
|
246
432
|
@preexisting = @temp_resource
|
|
247
433
|
end
|
|
@@ -249,15 +435,16 @@ module Crucible
|
|
|
249
435
|
if @preexisting.nil?
|
|
250
436
|
result.update(STATUS[:skip], "Preexisting #{resource_class.name.demodulize} unknown.", nil)
|
|
251
437
|
else
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
438
|
+
vread_resource = nil
|
|
439
|
+
ignore_client_exception { vread_resource = @preexisting.vread(@preexisting_version) }
|
|
440
|
+
if vread_resource.nil?
|
|
441
|
+
raise AssertionException.new("Server failed to return preexisting #{resource_class.name.demodulize}.", @client.reply.body)
|
|
442
|
+
elsif @client.reply.code != 200
|
|
443
|
+
raise AssertionException.new("Server returned preexisting #{resource_class.name.demodulize}, but responded with HTTP#{@client.reply.code}.", nil)
|
|
444
|
+
elsif (@client.reply.id != @preexisting_id) and (@client.reply.version != @preexisting_version)
|
|
258
445
|
raise AssertionException.new("Server did not respond with correct information in the content-location header.", nil)
|
|
259
446
|
end
|
|
260
|
-
result.update(STATUS[:pass], "Read current version of preexisting #{resource_class.name.demodulize}.", reply.body)
|
|
447
|
+
result.update(STATUS[:pass], "Read current version of preexisting #{resource_class.name.demodulize}.", @client.reply.body)
|
|
261
448
|
end
|
|
262
449
|
result
|
|
263
450
|
end
|
|
@@ -274,7 +461,7 @@ module Crucible
|
|
|
274
461
|
|
|
275
462
|
if !@history_bundle.nil? && @history_bundle.total && @history_bundle.total>0 && @history_bundle.entry && !@history_bundle.entry[0].nil? && !@history_bundle.entry[0].resource.nil?
|
|
276
463
|
@preexisting = @history_bundle.entry[0].resource
|
|
277
|
-
@preexisting_id = @preexisting.
|
|
464
|
+
@preexisting_id = @preexisting.id
|
|
278
465
|
@preexisting_version = nil
|
|
279
466
|
@preexisting_version = @preexisting.meta.versionId if !@preexisting.meta.nil?
|
|
280
467
|
end
|
|
@@ -282,15 +469,16 @@ module Crucible
|
|
|
282
469
|
if @preexisting.nil?
|
|
283
470
|
result.update(STATUS[:skip],"Previous version of #{resource_class.name.demodulize} unavailable.", nil)
|
|
284
471
|
else
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
472
|
+
vread_resource = nil
|
|
473
|
+
ignore_client_exception { vread_resource = @resource_class.vread(@preexisting_id, @preexisting_version) }
|
|
474
|
+
if vread_resource.nil?
|
|
475
|
+
raise AssertionException.new("Server failed to return preexisting #{resource_class.name.demodulize}.", @client.reply.body)
|
|
476
|
+
elsif @client.reply.code != 200
|
|
477
|
+
raise AssertionException.new("Server returned preexisting #{resource_class.name.demodulize}, but responded with HTTP#{@client.reply.code}.", nil)
|
|
478
|
+
elsif (@client.reply.id != @preexisting_id) and (@client.reply.version != @preexisting_version)
|
|
291
479
|
raise AssertionException.new("Server did not respond with correct information in the content-location header.", nil)
|
|
292
480
|
end
|
|
293
|
-
result.update(STATUS[:pass], "Read previous version of preexisting #{resource_class.name.demodulize}.", reply.body)
|
|
481
|
+
result.update(STATUS[:pass], "Read previous version of preexisting #{resource_class.name.demodulize}.", @client.reply.body)
|
|
294
482
|
end
|
|
295
483
|
result
|
|
296
484
|
end
|
|
@@ -309,8 +497,8 @@ module Crucible
|
|
|
309
497
|
|
|
310
498
|
result = TestResult.new('X060',"Validate #{resource_class.name.demodulize}", nil, nil, nil)
|
|
311
499
|
|
|
312
|
-
|
|
313
|
-
reply = @client.validate
|
|
500
|
+
tres = ResourceGenerator.generate(@resource_class,3)
|
|
501
|
+
reply = @client.validate tres
|
|
314
502
|
if reply.code==200
|
|
315
503
|
result.update(STATUS[:pass], "#{resource_class.name.demodulize} was validated.", reply.body)
|
|
316
504
|
elsif reply.code==201
|
|
@@ -341,19 +529,26 @@ module Crucible
|
|
|
341
529
|
|
|
342
530
|
result = TestResult.new('X065',"Validate existing #{resource_class.name.demodulize}", nil, nil, nil)
|
|
343
531
|
|
|
344
|
-
if !@bundle.nil? && @bundle.total && @bundle.total>0 && @bundle.entry && !@bundle.entry[0].nil? && !@bundle.entry[0].resource.nil?
|
|
345
|
-
@preexisting_id = @bundle.entry[0].resource.
|
|
532
|
+
if !@bundle.nil? && @bundle.is_a?(FHIR::Bundle) && @bundle.total && @bundle.total>0 && @bundle.entry && !@bundle.entry[0].nil? && !@bundle.entry[0].resource.nil?
|
|
533
|
+
@preexisting_id = @bundle.entry[0].resource.id
|
|
346
534
|
@preexisting = @bundle.entry[0].resource
|
|
347
|
-
elsif !@temp_resource.nil?
|
|
348
|
-
@preexisting_id = @
|
|
535
|
+
elsif !@temp_resource.nil? && !@temp_resource.id.nil?
|
|
536
|
+
@preexisting_id = @temp_resource.id
|
|
349
537
|
@preexisting = @temp_resource
|
|
350
538
|
end
|
|
351
539
|
|
|
540
|
+
is_preexisting_valid = false
|
|
352
541
|
if !@preexisting.nil?
|
|
353
542
|
begin
|
|
354
543
|
@preexisting.to_xml
|
|
544
|
+
is_preexisting_valid = @preexisting.is_valid?
|
|
545
|
+
profile = FHIR::Definitions.get_resource_definition("#{resource_class.name.demodulize}")
|
|
546
|
+
if !profile.nil?
|
|
547
|
+
is_preexisting_valid &&= profile.validates_resource?(@preexisting)
|
|
548
|
+
end
|
|
355
549
|
rescue Exception
|
|
356
550
|
@preexisting = nil
|
|
551
|
+
is_preexisting_valid = false
|
|
357
552
|
end
|
|
358
553
|
end
|
|
359
554
|
|
|
@@ -369,7 +564,7 @@ module Crucible
|
|
|
369
564
|
result.update(STATUS[:pass], "Existing #{resource_class.name.demodulize} was validated.", reply.body)
|
|
370
565
|
elsif reply.code==201
|
|
371
566
|
result.update(STATUS[:fail], "Server created a #{resource_class.name.demodulize} with the ID `_validate` rather than validate the resource.", reply.body)
|
|
372
|
-
elsif reply.code
|
|
567
|
+
elsif (400..499).include?(reply.code)
|
|
373
568
|
outcome = self.parse_operation_outcome(reply.body) rescue nil
|
|
374
569
|
|
|
375
570
|
if outcome.nil?
|
|
@@ -381,12 +576,16 @@ module Crucible
|
|
|
381
576
|
security_codes = ['security','login','unknown','expired','forbidden','suppressed']
|
|
382
577
|
processing_codes = ['processing','not-supported','duplicate','not-found','too-long','code-invalid','extension','too-costly','business-rule','conflict','incomplete']
|
|
383
578
|
transient_codes = ['transient','lock-error','no-store','exception','timeout','throttled']
|
|
384
|
-
|
|
579
|
+
|
|
385
580
|
status = :pass
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
581
|
+
if is_preexisting_valid
|
|
582
|
+
outcome.issue.each do |issue|
|
|
583
|
+
if ['fatal','error'].include?(issue.severity)
|
|
584
|
+
status = :fail if security_codes.include?(issue.code) || transient_codes.include?(issue.code)
|
|
585
|
+
end
|
|
389
586
|
end
|
|
587
|
+
else
|
|
588
|
+
message = "Server correctly rejected invalid preexisting resource."
|
|
390
589
|
end
|
|
391
590
|
result.update(STATUS[status], message, reply.body)
|
|
392
591
|
end
|
|
@@ -429,8 +628,8 @@ module Crucible
|
|
|
429
628
|
|
|
430
629
|
result = TestResult.new('X067',"Validate #{resource_class.name.demodulize} against a profile", nil, nil, nil)
|
|
431
630
|
|
|
432
|
-
|
|
433
|
-
reply = @client.validate(
|
|
631
|
+
tres = ResourceGenerator.generate(@resource_class,3)
|
|
632
|
+
reply = @client.validate(tres,{profile_uri: profile_uri})
|
|
434
633
|
if reply.code==200
|
|
435
634
|
result.update(STATUS[:pass], "#{resource_class.name.demodulize} was validated.", reply.body)
|
|
436
635
|
elsif reply.code==201
|
|
@@ -464,12 +663,11 @@ module Crucible
|
|
|
464
663
|
@x070_success = false
|
|
465
664
|
result = TestResult.new('X070',"Delete existing #{resource_class.name.demodulize}", nil, nil, nil)
|
|
466
665
|
|
|
467
|
-
if !@temp_resource.nil?
|
|
468
|
-
@preexisting_id = @
|
|
666
|
+
if !@temp_resource.nil? && !@temp_resource.id.nil?
|
|
667
|
+
@preexisting_id = @temp_resource.id
|
|
469
668
|
@preexisting = @temp_resource
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
@preexisting_id = @bundle.entry[0].resource.xmlId
|
|
669
|
+
elsif @preexisting_id.nil? &&!@bundle.nil? && @bundle.is_a?(FHIR::Bundle) && @bundle.total && @bundle.total>0 && @bundle.entry && !@bundle.entry[0].nil? && !@bundle.entry[0].resource.nil?
|
|
670
|
+
@preexisting_id = @bundle.entry[0].resource.id
|
|
473
671
|
@preexisting = @bundle.entry[0].resource
|
|
474
672
|
end
|
|
475
673
|
|
|
@@ -513,12 +711,12 @@ module Crucible
|
|
|
513
711
|
|
|
514
712
|
result = TestResult.new('X075',"Get Deleted #{resource_class.name.demodulize}", nil, nil, nil)
|
|
515
713
|
|
|
516
|
-
if !@temp_resource.nil?
|
|
517
|
-
@preexisting_id = @
|
|
714
|
+
if !@temp_resource.nil? && !@temp_resource.id.nil?
|
|
715
|
+
@preexisting_id = @temp_resource.id
|
|
518
716
|
@preexisting = @temp_resource
|
|
519
717
|
end
|
|
520
718
|
if @preexisting_id.nil? &&!@bundle.nil? && @bundle.total && @bundle.total>0 && @bundle.entry && !@bundle.entry[0].nil? && !@bundle.entry[0].resource.nil?
|
|
521
|
-
@preexisting_id = @bundle.entry[0].resource.
|
|
719
|
+
@preexisting_id = @bundle.entry[0].resource.id
|
|
522
720
|
@preexisting = @bundle.entry[0].resource
|
|
523
721
|
end
|
|
524
722
|
|