plan_executor 1.0.2 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
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