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.
Files changed (420) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +3 -2
  4. data/Gemfile +3 -6
  5. data/Gemfile.lock +52 -48
  6. data/README.md +2 -2
  7. data/fixtures/attachment/ccda_pdf.pdf +0 -0
  8. data/fixtures/attachment/ccda_pdf_base64.txt +2489 -0
  9. data/fixtures/attachment/ccda_structured.xml +1976 -0
  10. data/fixtures/attachment/ccda_unstructured.xml +2563 -0
  11. data/fixtures/daf/conformance-daf-query-responder.xml +2024 -193
  12. data/fixtures/diagnostic_report/diagnosticreport-familyhistory-create.xml +67 -0
  13. data/fixtures/diagnostic_report/diagnosticreport-hlatyping-create.xml +64 -0
  14. data/fixtures/diagnostic_report/diagnosticreport-pathologyreport-create.xml +312 -0
  15. data/fixtures/diagnostic_report/dr-100.xml +3 -3
  16. data/fixtures/diagnostic_report/dr-200.xml +5 -5
  17. data/fixtures/diagnostic_report/dr-300.xml +3 -3
  18. data/fixtures/diagnostic_report/dr-400.xml +3 -3
  19. data/fixtures/{diagnostic_order → diagnostic_request}/do-100.xml +57 -64
  20. data/fixtures/diagnostic_request/do-200.xml +73 -0
  21. data/fixtures/{diagnostic_order → diagnostic_request}/do-300.xml +73 -91
  22. data/{lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder → fixtures/diagnostic_request}/do-400.xml +74 -88
  23. data/fixtures/family_member_history/familymemberhistory-familyhistory-create.xml +27 -0
  24. data/fixtures/financial/claim-example-oral-average.xml +199 -0
  25. data/fixtures/financial/claim-example-oral-orthoplan.xml +298 -0
  26. data/fixtures/financial/claim-example.xml +98 -0
  27. data/fixtures/financial/eligibilityrequest-example.xml +40 -0
  28. data/fixtures/observation/obs-401.xml +7 -17
  29. data/fixtures/observation/obs-402.xml +7 -17
  30. data/fixtures/observation/obs-403.xml +4 -29
  31. data/fixtures/observation/obs-407.xml +4 -11
  32. data/fixtures/observation/observation-datawarehouse-create.xml +72 -0
  33. data/fixtures/observation/observation-familyhistory-create.xml +61 -0
  34. data/fixtures/observation/observation-germline-create.xml +72 -0
  35. data/fixtures/observation/observation-register-create.xml +72 -0
  36. data/fixtures/patch/medicationrequest-simple.xml +16 -0
  37. data/fixtures/patient/patient-example-updated.xml +1 -7
  38. data/fixtures/patient/patient-example-us-extensions.xml +119 -0
  39. data/fixtures/patient/patient-example.xml +46 -27
  40. data/fixtures/patient/patient-familyhistory-create.xml +45 -0
  41. data/fixtures/patient/patient-register-create.xml +47 -0
  42. data/fixtures/practitioner/practitioner-register-create.xml +32 -0
  43. data/fixtures/record/condition-example-f201-fever.xml +54 -49
  44. data/fixtures/record/condition-example-f205-infection.xml +16 -15
  45. data/fixtures/record/diagnosticreport-example-f201-brainct.xml +45 -18
  46. data/fixtures/record/encounter-example-f201-20130404.xml +42 -15
  47. data/fixtures/record/encounter-example-f202-20130128.xml +57 -15
  48. data/fixtures/record/observation-example-f202-temperature.xml +85 -60
  49. data/fixtures/record/organization-example-f201-aumc.xml +87 -4
  50. data/fixtures/record/organization-example-f203-bumc.xml +53 -4
  51. data/fixtures/record/patient-example-f201-roel.xml +108 -8
  52. data/fixtures/record/practitioner-example-f201-ab.xml +73 -14
  53. data/fixtures/record/procedure-example-f201-tpf.xml +39 -9
  54. data/fixtures/scheduling/slot-simple.xml +1 -1
  55. data/fixtures/sequence/sequence-register-create.xml +31 -0
  56. data/fixtures/specimen/spec-100.xml +8 -8
  57. data/fixtures/specimen/spec-400.xml +11 -11
  58. data/fixtures/specimen/spec-uslab-example1.xml +11 -11
  59. data/fixtures/specimen/specimen-familyhistory-create.xml +54 -0
  60. data/fixtures/specimen/specimen-register-create.xml +49 -0
  61. data/fixtures/terminology/codesystem-data-types.json +230 -0
  62. data/fixtures/terminology/codesystem-resource-types.json +482 -0
  63. data/fixtures/terminology/codesystem-simple.xml +129 -0
  64. data/fixtures/terminology/conceptmap-example.xml +141 -0
  65. data/fixtures/terminology/v2-codesystem.json +1297 -0
  66. data/fixtures/terminology/v2-valueset.json +16 -0
  67. data/fixtures/terminology/valueset-defined-types.json +25 -0
  68. data/fixtures/terminology/valueset-example.xml +111 -0
  69. data/fixtures/validation/observation.profile.xml +1534 -253
  70. data/fixtures/validation/observations/observation-example.xml +66 -0
  71. data/lib/FHIR_structure.json +129 -82
  72. data/lib/daf_resource_generator.rb +7 -7
  73. data/lib/data/resources.rb +50 -30
  74. data/lib/ext/client.rb +2 -2
  75. data/lib/plan_executor.rb +6 -1
  76. data/lib/resource_generator.rb +413 -212
  77. data/lib/tasks/tasks.rake +151 -20
  78. data/lib/tests/assertions.rb +24 -18
  79. data/lib/tests/base_test.rb +17 -3
  80. data/lib/tests/suites/argonaut_provider_connectathon_test.rb +234 -0
  81. data/lib/tests/suites/base_suite.rb +7 -3
  82. data/lib/tests/suites/connectathon_attachment_track_test.rb +124 -0
  83. data/lib/tests/suites/connectathon_audit_track.rb +113 -69
  84. data/lib/tests/suites/connectathon_care_plan_track.rb +237 -0
  85. data/lib/tests/suites/connectathon_fetch_patient_record.rb +40 -39
  86. data/lib/tests/suites/connectathon_financial_track.rb +231 -23
  87. data/lib/tests/suites/connectathon_genomics_track_test.rb +255 -0
  88. data/lib/tests/suites/connectathon_lab_order_track.rb +131 -104
  89. data/lib/tests/suites/connectathon_patch_track.rb +125 -0
  90. data/lib/tests/suites/connectathon_patient_track.rb +75 -68
  91. data/lib/tests/suites/connectathon_profile_validation.rb +9 -8
  92. data/lib/tests/suites/connectathon_scheduling_track.rb +127 -70
  93. data/lib/tests/suites/connectathon_terminology_track.rb +211 -34
  94. data/lib/tests/suites/daf_profiles_test.rb +112 -72
  95. data/lib/tests/suites/format_test.rb +113 -255
  96. data/lib/tests/suites/history_test.rb +72 -68
  97. data/lib/tests/suites/read_test.rb +31 -27
  98. data/lib/tests/suites/resource_test.rb +283 -85
  99. data/lib/tests/suites/search_test.rb +5 -3
  100. data/lib/tests/suites/search_test_robust.rb +8 -76
  101. data/lib/tests/suites/sprinkler_search_test.rb +104 -84
  102. data/lib/tests/suites/suite_engine.rb +17 -23
  103. data/lib/tests/suites/transaction_test.rb +117 -174
  104. data/lib/tests/testscripts/base_testscript.rb +425 -189
  105. data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/Client Assigned Id/connectathon-14-patient-base-client-id-json.xml +517 -0
  106. data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/Client Assigned Id/connectathon-14-patient-base-client-id-xml.xml +517 -0
  107. data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/Client Assigned Id/connectathon-14-patient-bonus-client-id-json.xml +648 -0
  108. data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/Client Assigned Id/connectathon-14-patient-bonus-client-id-xml.xml +648 -0
  109. data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/README.html +68 -0
  110. data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/Server Assigned Id/connectathon-14-patient-base-server-id-json.xml +515 -0
  111. data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/Server Assigned Id/connectathon-14-patient-base-server-id-xml.xml +515 -0
  112. data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/Server Assigned Id/connectathon-14-patient-bonus-server-id-json.xml +645 -0
  113. data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/Server Assigned Id/connectathon-14-patient-bonus-server-id-xml.xml +642 -0
  114. data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/_reference/capabilities/PatientCapabilityStatement.xml +43 -0
  115. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-create-PeterChalmers-min.json +1 -3
  116. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-create-PeterChalmers-min.xml +0 -0
  117. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-create-PeterChalmers.json +5 -10
  118. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-create-PeterChalmers.xml +5 -5
  119. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-create-bonus-PeterChalmers-min.json +1 -3
  120. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-create-bonus-PeterChalmers-min.xml +0 -0
  121. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-create-bonus-PeterChalmers.json +5 -10
  122. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-create-bonus-PeterChalmers.xml +4 -5
  123. data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/_reference/resources/patient-create-client-id-PeterChalmers.json +96 -0
  124. data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/_reference/resources/patient-create-client-id-PeterChalmers.xml +103 -0
  125. data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/_reference/resources/patient-create-client-id-bonus-PeterChalmers.json +104 -0
  126. data/lib/tests/testscripts/scripts/connectathon/Patient-01-Intro/_reference/resources/patient-create-client-id-bonus-PeterChalmers.xml +108 -0
  127. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-PeterChalmers-min.json +1 -3
  128. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-PeterChalmers-min.xml +0 -0
  129. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-PeterChalmers.json +6 -10
  130. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-PeterChalmers.xml +6 -5
  131. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-bonus1-PeterChalmers-min.json +1 -3
  132. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-bonus1-PeterChalmers-min.xml +0 -0
  133. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-bonus1-PeterChalmers.json +7 -11
  134. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-bonus1-PeterChalmers.xml +5 -5
  135. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-bonus2-PeterChalmers-min.json +2 -4
  136. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-bonus2-PeterChalmers-min.xml +1 -1
  137. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-bonus2-PeterChalmers.json +7 -11
  138. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient → scripts/connectathon/Patient-01-Intro}/_reference/resources/patient-update-bonus2-PeterChalmers.xml +8 -7
  139. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/01-RegisterPatient/connectathon-14-patient-fhirclient-01-register-client-id-xml.xml +306 -0
  140. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/01-RegisterPatient/connectathon-14-patient-fhirclient-01-register-server-id-xml.xml +317 -0
  141. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/02-PatientUpdate/connectathon-14-patient-fhirclient-02-update-client-id-xml.xml +346 -0
  142. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/02-PatientUpdate/connectathon-14-patient-fhirclient-02-update-server-id-xml.xml +385 -0
  143. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/capabilities/PatientCapabilityStatement.json +50 -0
  144. data/lib/tests/testscripts/{xml/Connectathon11/Track1-Patient/_reference/conformance/PatientConformance.xml → scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/capabilities/PatientCapabilityStatement.xml} +10 -2
  145. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/resources/patient-create-client-id.json +21 -0
  146. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/resources/patient-create-client-id.xml +15 -0
  147. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/resources/patient-create-server-id.json +20 -0
  148. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/resources/patient-create-server-id.xml +14 -0
  149. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/resources/patient-update-client-id.json +21 -0
  150. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/resources/patient-update-client-id.xml +15 -0
  151. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/resources/patient-update-server-id.json +20 -0
  152. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRClient/_reference/resources/patient-update-server-id.xml +14 -0
  153. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/01-RegisterPatient/connectathon-14-patient-fhirserver-01-register-client-id-json.xml +262 -0
  154. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/01-RegisterPatient/connectathon-14-patient-fhirserver-01-register-client-id-xml.xml +262 -0
  155. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/01-RegisterPatient/connectathon-14-patient-fhirserver-01-register-server-id-json.xml +273 -0
  156. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/01-RegisterPatient/connectathon-14-patient-fhirserver-01-register-server-id-xml.xml +273 -0
  157. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/02-PatientUpdate/connectathon-14-patient-fhirserver-02-update-client-id-json.xml +290 -0
  158. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/02-PatientUpdate/connectathon-14-patient-fhirserver-02-update-client-id-xml.xml +290 -0
  159. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/02-PatientUpdate/connectathon-14-patient-fhirserver-02-update-server-id-json.xml +326 -0
  160. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/02-PatientUpdate/connectathon-14-patient-fhirserver-02-update-server-id-xml.xml +326 -0
  161. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/03-PatientRead/connectathon-14-patient-fhirserver-03-read-client-id-json.xml +247 -0
  162. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/03-PatientRead/connectathon-14-patient-fhirserver-03-read-client-id-xml.xml +247 -0
  163. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/03-PatientRead/connectathon-14-patient-fhirserver-03-read-server-id-json.xml +282 -0
  164. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/03-PatientRead/connectathon-14-patient-fhirserver-03-read-server-id-xml.xml +281 -0
  165. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/04-PatientHistory/connectathon-14-patient-fhirserver-04-history-client-id-json.xml +330 -0
  166. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/04-PatientHistory/connectathon-14-patient-fhirserver-04-history-client-id-xml.xml +330 -0
  167. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/04-PatientHistory/connectathon-14-patient-fhirserver-04-history-server-id-json.xml +366 -0
  168. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/04-PatientHistory/connectathon-14-patient-fhirserver-04-history-server-id-xml.xml +366 -0
  169. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/05-PatientVRead/connectathon-14-patient-fhirserver-05-vread-client-id-json.xml +527 -0
  170. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/05-PatientVRead/connectathon-14-patient-fhirserver-05-vread-client-id-xml.xml +527 -0
  171. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/05-PatientVRead/connectathon-14-patient-fhirserver-05-vread-server-id-json.xml +519 -0
  172. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/05-PatientVRead/connectathon-14-patient-fhirserver-05-vread-server-id-xml.xml +519 -0
  173. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/06-PatientSearching/connectathon-14-patient-fhirserver-06-search-client-id-json.xml +290 -0
  174. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/06-PatientSearching/connectathon-14-patient-fhirserver-06-search-client-id-xml.xml +290 -0
  175. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/06-PatientSearching/connectathon-14-patient-fhirserver-06-search-server-id-json.xml +288 -0
  176. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/06-PatientSearching/connectathon-14-patient-fhirserver-06-search-server-id-xml.xml +288 -0
  177. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/07-PatientDeletion/connectathon-14-patient-fhirserver-07-delete-client-id-json.xml +252 -0
  178. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/07-PatientDeletion/connectathon-14-patient-fhirserver-07-delete-client-id-xml.xml +252 -0
  179. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/07-PatientDeletion/connectathon-14-patient-fhirserver-07-delete-server-id-json.xml +284 -0
  180. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/07-PatientDeletion/connectathon-14-patient-fhirserver-07-delete-server-id-xml.xml +284 -0
  181. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/99-PatientAll/connectathon-14-patient-fhirserver-99-all-client-id-json.xml +897 -0
  182. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/99-PatientAll/connectathon-14-patient-fhirserver-99-all-client-id-xml.xml +897 -0
  183. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/99-PatientAll/connectathon-14-patient-fhirserver-99-all-server-id-json.xml +963 -0
  184. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/99-PatientAll/connectathon-14-patient-fhirserver-99-all-server-id-xml.xml +963 -0
  185. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/capabilities/PatientCapabilityStatement.json +50 -0
  186. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/capabilities/PatientCapabilityStatement.xml +42 -0
  187. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/resources/patient-create-client-id.json +86 -0
  188. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/resources/patient-create-client-id.xml +62 -0
  189. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/resources/patient-create-server-id.json +85 -0
  190. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/resources/patient-create-server-id.xml +61 -0
  191. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/resources/patient-update-client-id.json +86 -0
  192. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/resources/patient-update-client-id.xml +62 -0
  193. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/resources/patient-update-server-id.json +86 -0
  194. data/lib/tests/testscripts/scripts/connectathon/Patient-02-Formal/FHIRServer/_reference/resources/patient-update-server-id.xml +62 -0
  195. data/lib/tests/testscripts/scripts/spec/_reference/resources/patient-example-update.json +145 -0
  196. data/lib/tests/testscripts/scripts/spec/_reference/resources/patient-example.json +146 -0
  197. data/lib/tests/testscripts/scripts/spec/testscript-example-history.xml +191 -0
  198. data/lib/tests/testscripts/scripts/spec/testscript-example-multisystem.xml +190 -0
  199. data/lib/tests/testscripts/scripts/spec/testscript-example-readtest.xml +178 -0
  200. data/lib/tests/testscripts/scripts/spec/testscript-example-rule.xml +266 -0
  201. data/lib/tests/testscripts/scripts/spec/testscript-example-search.xml +177 -0
  202. data/lib/tests/testscripts/scripts/spec/testscript-example-update.xml +163 -0
  203. data/lib/tests/testscripts/scripts/spec/testscript-example.xml +228 -0
  204. data/lib/tests/testscripts/testscript_engine.rb +36 -22
  205. data/logs/.keep +0 -0
  206. data/plan_executor.gemspec +11 -3
  207. data/test/test_helper.rb +3 -3
  208. data/test/unit/fixtures_test.rb +24 -24
  209. data/test/unit/metadata_test.rb +19 -9
  210. data/test/unit/resource_generator_test.rb +20 -0
  211. metadata +244 -249
  212. data/fixtures/diagnostic_order/do-200.xml +0 -121
  213. data/fixtures/diagnostic_order/do-400.xml +0 -88
  214. data/fixtures/financial/claim-example-average.xml +0 -168
  215. data/fixtures/financial/claim-example-simple.xml +0 -67
  216. data/fixtures/order/order-100.xml +0 -61
  217. data/fixtures/order/order-200.xml +0 -61
  218. data/fixtures/order/order-300.xml +0 -61
  219. data/fixtures/order/order-400.xml +0 -61
  220. data/fixtures/order_response/ordresp-100.xml +0 -79
  221. data/fixtures/order_response/ordresp-110.xml +0 -79
  222. data/fixtures/order_response/ordresp-200.xml +0 -79
  223. data/fixtures/order_response/ordresp-210.xml +0 -79
  224. data/fixtures/order_response/ordresp-300.xml +0 -79
  225. data/fixtures/order_response/ordresp-310.xml +0 -79
  226. data/fixtures/order_response/ordresp-400.xml +0 -79
  227. data/fixtures/order_response/ordresp-410.xml +0 -79
  228. data/fixtures/patient/patient-example-us-extensions(us01).xml +0 -81
  229. data/fixtures/patient/patient-format-example.xml +0 -101
  230. data/fixtures/validation/observations/observation-example(example).xml +0 -50
  231. data/lib/tests/suites/argonaut_resprint_1_test.rb +0 -260
  232. data/lib/tests/suites/argonaut_resprint_2_test.rb +0 -369
  233. data/lib/tests/suites/argonaut_resprint_3_test.rb +0 -309
  234. data/lib/tests/suites/argonaut_sprint_1_test.rb +0 -187
  235. data/lib/tests/suites/argonaut_sprint_2_test.rb +0 -115
  236. data/lib/tests/suites/argonaut_sprint_3_test.rb +0 -208
  237. data/lib/tests/suites/argonaut_sprint_4_test.rb +0 -335
  238. data/lib/tests/suites/argonaut_sprint_5_test.rb +0 -196
  239. data/lib/tests/suites/argonaut_sprint_6_test.rb +0 -243
  240. data/lib/tests/suites/argonaut_sprint_7_test.rb +0 -161
  241. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-base-client-id-json.xml +0 -348
  242. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-base-client-id-xml.xml +0 -348
  243. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-bonus-client-id-json.xml +0 -420
  244. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-bonus-client-id-xml.xml +0 -420
  245. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/README.html +0 -68
  246. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-base-server-id-json.xml +0 -352
  247. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-base-server-id-xml.xml +0 -352
  248. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-bonus-server-id-json.xml +0 -421
  249. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-bonus-server-id-xml.xml +0 -421
  250. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/C-CDA_R2-1_CCD-ussg.xml +0 -3414
  251. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A1-empty-on-instance.xml +0 -9
  252. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A2-empty-by-ref.xml +0 -15
  253. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A3-empty-by-identifier.xml +0 -13
  254. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A4-empty-by-contained.xml +0 -15
  255. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B1-CCDA-on-instance.xml +0 -15
  256. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B2-CCDA-by-ref.xml +0 -21
  257. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B3-CCDA-by-identifier.xml +0 -19
  258. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B4-CCDA-by-contained.xml +0 -21
  259. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/questionnaire-sdc-profile-example-ussg-fht.xml +0 -3905
  260. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/questionnaireresponse-expected-ussg-fht-CCDA.xml +0 -190
  261. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/questionnaireresponse-expected-ussg-fht-empty.xml +0 -177
  262. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/track11-sdc-prepop-xml.xml +0 -142
  263. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Client Assigned Id/track2-ts-suite1-expand-client-id.xml +0 -925
  264. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Client Assigned Id/track2-ts-suite2-expand-filter-client-id.xml +0 -930
  265. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Server Assigned Id/track2-ts-suite1-expand-server-id.xml +0 -953
  266. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Server Assigned Id/track2-ts-suite2-expand-filter-server-id.xml +0 -958
  267. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Lookup/track2-ts-suite5-loinc-lookup-xml.xml +0 -224
  268. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Lookup/track2-ts-suite5-snomed-lookup-xml.xml +0 -224
  269. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/README.html +0 -85
  270. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Translate/track2-ts-suite6-translate-xml.xml +0 -224
  271. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Client Assigned Id/track2-ts-suite3-validate-code-client-id.xml +0 -1807
  272. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Client Assigned Id/track2-ts-suite4-validate-code-client-id.xml +0 -714
  273. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Server Assigned Id/track2-ts-suite3-validate-code-server-id.xml +0 -1835
  274. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Server Assigned Id/track2-ts-suite4-validate-code-server-id.xml +0 -742
  275. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ConceptMapSuite6Conformance.xml +0 -11
  276. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite1Conformance.xml +0 -17
  277. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite2Conformance.xml +0 -17
  278. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite3Conformance.xml +0 -14
  279. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite4Conformance.xml +0 -14
  280. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite5Conformance.xml +0 -11
  281. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-2-a.xml +0 -11
  282. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-2-b.xml +0 -11
  283. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-3-a.xml +0 -13
  284. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-3-b.xml +0 -13
  285. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-4-a.xml +0 -15
  286. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-4-b.xml +0 -15
  287. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-loinc-input-5-2.xml +0 -10
  288. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-loinc-input-5-3.xml +0 -11
  289. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-snomed-input-5-2.xml +0 -10
  290. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-snomed-input-5-3.xml +0 -11
  291. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/translate-conceptmap-input-6-2.xml +0 -14
  292. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/translate-conceptmap-input-6-3.xml +0 -15
  293. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-1-expand-min.xml +0 -47
  294. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-1-filter-min.xml +0 -23
  295. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-2-expand-min.xml +0 -132
  296. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-2-filter-min.xml +0 -38
  297. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-3-expand-min.xml +0 -252
  298. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-3-filter-min.xml +0 -58
  299. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-4-expand-min.xml +0 -57
  300. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-4-filter-min.xml +0 -28
  301. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-1-expand-min.xml +0 -347
  302. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-1-filter-min.xml +0 -33
  303. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-2-expand-min.xml +0 -637
  304. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-2-filter-min.xml +0 -33
  305. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-3-filter-min.xml +0 -58
  306. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/lookup-loinc-min.xml +0 -11
  307. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/lookup-snomed-min.xml +0 -11
  308. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite3-invalid-min.xml +0 -10
  309. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite3-valid-min.xml +0 -7
  310. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite4-invalid-min.xml +0 -10
  311. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite4-valid-min.xml +0 -7
  312. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/translate-conceptmap-min.xml +0 -17
  313. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-1.xml +0 -55
  314. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-2.xml +0 -122
  315. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-3.xml +0 -222
  316. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-4.xml +0 -65
  317. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/intensional-case-1.xml +0 -31
  318. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/intensional-case-2.xml +0 -31
  319. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/intensional-case-3.xml +0 -31
  320. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/translate-conceptmap-case-1.xml +0 -145
  321. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/conformance/DecisionSupportServiceModule-Evaluate.xml +0 -17
  322. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-incomplete-request-payload.xml +0 -26
  323. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-incomplete-response-min-payload.xml +0 -7
  324. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-incomplete-response-payload.xml +0 -332
  325. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-malformed-request-payload.xml +0 -28
  326. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-malformed-response-min-payload.xml +0 -7
  327. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-malformed-response-payload.xml +0 -20
  328. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-request-payload.xml +0 -28
  329. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-response-min-payload.xml +0 -7
  330. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-response-payload.xml +0 -332
  331. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-unauthorized-request-payload.xml +0 -28
  332. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-unauthorized-response-min-payload.xml +0 -7
  333. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-unauthorized-response-payload.xml +0 -8
  334. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/gao-assessment-request-payload.xml +0 -176
  335. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/gao-assessment-response-payload-min.xml +0 -32
  336. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/gao-assessment-response-payload.xml +0 -80
  337. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/track3-cds-evaluate-cdc-immunization.xml +0 -290
  338. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/track3-cds-evaluate-gao-profile.xml +0 -110
  339. data/lib/tests/testscripts/xml/Connectathon11/Track6-FHIR-Genomics/Client_Assigned_Id/TestScript_FHIR-Genomics.xml +0 -170
  340. data/lib/tests/testscripts/xml/Connectathon11/Track6-FHIR-Genomics/_reference/resources/sequence-example-1.xml +0 -31
  341. data/lib/tests/testscripts/xml/Connectathon11/Track6-FHIR-Genomics/_reference/resources/sequence-example-2.xml +0 -31
  342. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Actors.png +0 -0
  343. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder100-xml.xml +0 -590
  344. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder200-xml.xml +0 -587
  345. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder300-xml.xml +0 -612
  346. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder400-xml.xml +0 -635
  347. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Peer-to-Peer/track7-laborder100-peer2peer-xml.xml +0 -752
  348. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Thumbs.db +0 -0
  349. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/conformance/LabOrderLabReport-CreateDeleteReadUpdate.xml +0 -187
  350. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/conformance/html.xslt +0 -45
  351. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-100-update.xml +0 -64
  352. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-100.xml +0 -64
  353. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-200-update.xml +0 -121
  354. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-200.xml +0 -121
  355. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-300-update.xml +0 -91
  356. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-300.xml +0 -91
  357. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-400-update.xml +0 -88
  358. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-100.xml +0 -96
  359. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-200.xml +0 -125
  360. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-300.xml +0 -132
  361. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-400.xml +0 -121
  362. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-100.xml +0 -58
  363. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-101.xml +0 -58
  364. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-200.xml +0 -125
  365. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-300.xml +0 -106
  366. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-301.xml +0 -106
  367. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-302.xml +0 -106
  368. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-303.xml +0 -106
  369. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-304.xml +0 -106
  370. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-400.xml +0 -87
  371. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-401.xml +0 -95
  372. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-402.xml +0 -95
  373. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-403.xml +0 -84
  374. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-404.xml +0 -84
  375. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-405.xml +0 -83
  376. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-406.xml +0 -83
  377. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-407.xml +0 -70
  378. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-408.xml +0 -84
  379. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-uslab-example5.xml +0 -102
  380. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-100.xml +0 -61
  381. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-200.xml +0 -61
  382. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-300.xml +0 -61
  383. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-400.xml +0 -61
  384. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-100.xml +0 -79
  385. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-110.xml +0 -79
  386. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-200.xml +0 -79
  387. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-210.xml +0 -79
  388. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-300.xml +0 -79
  389. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-310.xml +0 -79
  390. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-400.xml +0 -79
  391. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-410.xml +0 -79
  392. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Organization/org-uslab-example3.xml +0 -49
  393. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Patient/patient-uslab-example1.xml +0 -44
  394. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Practitioner/pract-uslab-example1.xml +0 -18
  395. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Practitioner/pract-uslab-example3.xml +0 -36
  396. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/Thumbs.db +0 -0
  397. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/spec-100.xml +0 -65
  398. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/spec-400.xml +0 -70
  399. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/spec-uslab-example1.xml +0 -82
  400. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 1 Document.txt +0 -122
  401. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 2 Document.txt +0 -103
  402. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 3 Document.txt +0 -201
  403. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 4 Document.txt +0 -310
  404. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/conformance/MedicationStatementCreate.xml +0 -11
  405. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/conformance/PatientSearchType.xml +0 -15
  406. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/resources/medicationstatement-create.json +0 -39
  407. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/resources/medicationstatement-patch.json +0 -3
  408. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/track9-patch-medicationstatement-json-if-match.xml +0 -321
  409. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/track9-patch-medicationstatement-json.xml +0 -303
  410. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/track9-patch-peer2peer-patient-json.xml +0 -235
  411. data/test/fixtures/testscript-example.xml +0 -202
  412. data/test/fixtures/testscript-history.xml +0 -143
  413. data/test/fixtures/testscript-readtest.xml +0 -272
  414. data/test/fixtures/testscript-search.xml +0 -282
  415. data/test/fixtures/testscript-update.xml +0 -147
  416. data/test/unit/argonaut_sprint6_test.rb +0 -31
  417. data/test/unit/argonaut_sprint7_test.rb +0 -21
  418. data/test/unit/basic_test.rb +0 -27
  419. data/test/unit/fetch_patient_record_test.rb +0 -357
  420. data/test/unit/financial_test.rb +0 -41
@@ -16,29 +16,37 @@ module Crucible
16
16
  end
17
17
 
18
18
  def setup
19
- @resources = Crucible::Generator::Resources.new
20
- @patient = @resources.minimal_patient
21
-
22
- @create_date = Time.now.utc
23
-
24
- @version = []
25
- result = @client.create(@patient)
26
- assert_response_ok(result)
27
- @id = result.id
28
- @version << result.version
29
-
30
- @patient.xmlId = @id
31
- @patient.telecom << FHIR::ContactPoint.new(system: 'email', value: 'foo@example.com')
32
-
33
- update_result = @client.update(@patient, @id)
34
- assert_response_ok(update_result)
35
- @version << update_result.version
36
- del_result = @client.destroy(FHIR::Patient, @id)
37
- assert_response_code(del_result,204)
38
-
39
- @entry_count = @version.length
40
- # add one for deletion
41
- @version_count = @entry_count + 1
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
- result = @client.resource_instance_history(FHIR::Patient,@id)
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.fhirType, "The bundle type is not correct"
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
- result = @client.resource_instance_history(FHIR::Patient,@id)
67
- assert_response_ok result
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(:method) == 'DELETE' }.size, 'Wrong number of DELETE transactions in the history bundle'
72
- assert_equal 1, entries.select{|entry| entry.request.try(:method) == 'PUT' }.size, 'Wrong number of PUT transactions in the history bundle'
73
- assert_equal 1, entries.select{|entry| entry.request.try(:method) == 'POST' }.size, 'Wrong number of POST transactions in the history bundle'
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 = @client.resource_instance_history(FHIR::Patient,@id)
94
+ all_history = FHIR::Patient.resource_instance_history(@patient.id)
88
95
 
89
- result = @client.resource_instance_history_as_of(FHIR::Patient,@id,before)
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
- result = @client.resource_instance_history_as_of(FHIR::Patient,@id,after)
99
- assert_response_ok result
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
- result = @client.resource_instance_history(FHIR::Patient,@id)
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 = @client.vread(FHIR::Patient, entry.resource.xmlId, entry.resource.meta.versionId)
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
- pulled = @client.vread(FHIR::Patient, entry.resource.xmlId, entry.resource.meta.versionId)
125
- assert pulled.resource.nil?, "resource should not be found since it was deleted"
126
- assert_response_gone pulled
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
- result = @client.resource_instance_history(FHIR::Patient,'3141592unlikely')
139
- assert_response_not_found result
140
- assert result.resource.nil?, 'bad history request should not return a resource'
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
- result = @client.resource_history_as_of(FHIR::Patient,before)
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
- result = @client.resource_history_as_of(FHIR::Patient,after)
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
- warning { assert_navigation_links(bundle) }
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 forward_count > 2, "there should be at least 2 history entries"
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 history.resource.entry.size >= 3, "there should be at least 3 history entries"
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(:method) == "DELETE"
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(:method)!='DELETE'}
284
- ids = relevant_entries.map(&:resource).map(&:xmlId).compact rescue assert(false, 'Unable to find IDs for resources returned by the bundle')
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(:method)!='DELETE'}
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
- @patient = ReadTest.createPatient('Emerald', 'Caro')
20
- reply = @client.create(@patient)
21
- @id = reply.id
22
- @body = reply.body
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
- @client.destroy(FHIR::Patient, @id)
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
- assert(@id, 'Setup was unable to create a patient.',@body)
42
- reply = @client.read(FHIR::Patient, @id)
43
- assert_response_ok(reply)
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
- reply = @client.read(Crucible::Tests::ReadTest, @id)
58
- assert_response_not_found(reply)
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
- reply = @client.read(FHIR::Patient, 'Supercalifragilisticexpialidocious')
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
- reply = @client.read(FHIR::Patient, 'Invalid-ID-Because_Of_!@$Special_Characters_and_Length_Over_Sixty_Four_Characters')
84
- assert_response_bad(reply)
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
- assert(@id, 'Setup was unable to create a patient.', @body)
97
- reply = @client.read(FHIR::Patient, @id, @client.default_format, 'text')
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
- reply = @client.read_feed(@resource_class)
68
- @bundle = reply.resource
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
- reply = @client.create @temp_resource
84
- @temp_id = reply.id
85
- @temp_resource.xmlId = (reply.resource.try(:xmlId) || reply.id)
86
- @temp_version = reply.version
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
- @temp_resource = nil
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.xmlId
115
- elsif !@temp_resource.nil?
116
- @preexisting_id = @temp_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
- reply = @client.read(@resource_class, @preexisting_id)
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 = @temp_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.xmlId
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
- reply = @client.update @preexisting, @preexisting_id
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
- reply = @client.resource_instance_history(@resource_class, @preexisting_id)
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.xmlId
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 = @temp_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
- reply = @client.vread(@resource_class, @preexisting_id, @preexisting_version)
253
- if reply.resource.nil?
254
- raise AssertionException.new("Server failed to return preexisting #{resource_class.name.demodulize}.", reply.body)
255
- elsif reply.code != 200
256
- raise AssertionException.new("Server returned preexisting #{resource_class.name.demodulize}, but responded with HTTP#{reply.code}.", nil)
257
- elsif (reply.id != @preexisting_id) and (reply.version != @preexisting_version)
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.xmlId
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
- reply = @client.vread(@resource_class, @preexisting_id, @preexisting_version)
286
- if reply.resource.nil?
287
- raise AssertionException.new("Server failed to return preexisting #{resource_class.name.demodulize}.", reply.body)
288
- elsif reply.code != 200
289
- raise AssertionException.new("Server returned preexisting #{resource_class.name.demodulize}, but responded with HTTP#{reply.code}.", nil)
290
- elsif (reply.id != @preexisting_id) and (reply.version != @preexisting_version)
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
- @temp_resource = ResourceGenerator.generate(@resource_class,3)
313
- reply = @client.validate @temp_resource
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.xmlId
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 = @temp_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==400
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
- outcome.issue.each do |issue|
387
- if ['fatal','error'].include?(issue.severity)
388
- status = :fail if security_codes.include?(issue.code) || transient_codes.include?(issue.code)
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
- @temp_resource = ResourceGenerator.generate(@resource_class,3)
433
- reply = @client.validate(@temp_resource,{profile_uri: profile_uri})
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 = @temp_id
666
+ if !@temp_resource.nil? && !@temp_resource.id.nil?
667
+ @preexisting_id = @temp_resource.id
469
668
  @preexisting = @temp_resource
470
- end
471
- if @preexisting_id.nil? &&!@bundle.nil? && @bundle.total && @bundle.total>0 && @bundle.entry && !@bundle.entry[0].nil? && !@bundle.entry[0].resource.nil?
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 = @temp_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.xmlId
719
+ @preexisting_id = @bundle.entry[0].resource.id
522
720
  @preexisting = @bundle.entry[0].resource
523
721
  end
524
722