plan_executor 1.0.2

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 (337) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +44 -0
  3. data/.simplecov +16 -0
  4. data/.travis.yml +13 -0
  5. data/Gemfile +26 -0
  6. data/Gemfile.lock +197 -0
  7. data/LICENSE +201 -0
  8. data/README.md +126 -0
  9. data/Rakefile +25 -0
  10. data/fixtures/daf/conformance-daf-query-responder.xml +1471 -0
  11. data/fixtures/diagnostic_order/do-100.xml +64 -0
  12. data/fixtures/diagnostic_order/do-200.xml +121 -0
  13. data/fixtures/diagnostic_order/do-300.xml +91 -0
  14. data/fixtures/diagnostic_order/do-400.xml +88 -0
  15. data/fixtures/diagnostic_report/dr-100.xml +96 -0
  16. data/fixtures/diagnostic_report/dr-200.xml +125 -0
  17. data/fixtures/diagnostic_report/dr-300.xml +132 -0
  18. data/fixtures/diagnostic_report/dr-400.xml +121 -0
  19. data/fixtures/financial/claim-example-average.xml +168 -0
  20. data/fixtures/financial/claim-example-simple.xml +67 -0
  21. data/fixtures/observation/obs-100.xml +58 -0
  22. data/fixtures/observation/obs-101.xml +58 -0
  23. data/fixtures/observation/obs-200.xml +125 -0
  24. data/fixtures/observation/obs-300.xml +106 -0
  25. data/fixtures/observation/obs-301.xml +106 -0
  26. data/fixtures/observation/obs-302.xml +106 -0
  27. data/fixtures/observation/obs-303.xml +106 -0
  28. data/fixtures/observation/obs-304.xml +106 -0
  29. data/fixtures/observation/obs-400.xml +87 -0
  30. data/fixtures/observation/obs-401.xml +95 -0
  31. data/fixtures/observation/obs-402.xml +95 -0
  32. data/fixtures/observation/obs-403.xml +84 -0
  33. data/fixtures/observation/obs-404.xml +84 -0
  34. data/fixtures/observation/obs-405.xml +83 -0
  35. data/fixtures/observation/obs-406.xml +83 -0
  36. data/fixtures/observation/obs-407.xml +70 -0
  37. data/fixtures/observation/obs-408.xml +84 -0
  38. data/fixtures/observation/obs-uslab-example5.xml +102 -0
  39. data/fixtures/order/order-100.xml +61 -0
  40. data/fixtures/order/order-200.xml +61 -0
  41. data/fixtures/order/order-300.xml +61 -0
  42. data/fixtures/order/order-400.xml +61 -0
  43. data/fixtures/order_response/ordresp-100.xml +79 -0
  44. data/fixtures/order_response/ordresp-110.xml +79 -0
  45. data/fixtures/order_response/ordresp-200.xml +79 -0
  46. data/fixtures/order_response/ordresp-210.xml +79 -0
  47. data/fixtures/order_response/ordresp-300.xml +79 -0
  48. data/fixtures/order_response/ordresp-310.xml +79 -0
  49. data/fixtures/order_response/ordresp-400.xml +79 -0
  50. data/fixtures/order_response/ordresp-410.xml +79 -0
  51. data/fixtures/organization/org-uslab-example3.xml +49 -0
  52. data/fixtures/patient/patient-example-updated.xml +140 -0
  53. data/fixtures/patient/patient-example-us-extensions(us01).xml +81 -0
  54. data/fixtures/patient/patient-example.xml +132 -0
  55. data/fixtures/patient/patient-format-example.xml +101 -0
  56. data/fixtures/patient/patient-minimal.xml +9 -0
  57. data/fixtures/patient/patient-uslab-example1.xml +44 -0
  58. data/fixtures/practitioner/pract-uslab-example1.xml +18 -0
  59. data/fixtures/practitioner/pract-uslab-example3.xml +36 -0
  60. data/fixtures/record/condition-example-f201-fever.xml +63 -0
  61. data/fixtures/record/condition-example-f205-infection.xml +20 -0
  62. data/fixtures/record/diagnosticreport-example-f201-brainct.xml +18 -0
  63. data/fixtures/record/encounter-example-f201-20130404.xml +17 -0
  64. data/fixtures/record/encounter-example-f202-20130128.xml +17 -0
  65. data/fixtures/record/observation-example-f202-temperature.xml +60 -0
  66. data/fixtures/record/organization-example-f201-aumc.xml +5 -0
  67. data/fixtures/record/organization-example-f203-bumc.xml +5 -0
  68. data/fixtures/record/patient-example-f201-roel.xml +16 -0
  69. data/fixtures/record/practitioner-example-f201-ab.xml +14 -0
  70. data/fixtures/record/procedure-example-f201-tpf.xml +23 -0
  71. data/fixtures/scheduling/appointment-simple.xml +24 -0
  72. data/fixtures/scheduling/appointmentresponse-patient-simple.xml +12 -0
  73. data/fixtures/scheduling/appointmentresponse-practitioner-simple.xml +12 -0
  74. data/fixtures/scheduling/practitioner-simple.xml +10 -0
  75. data/fixtures/scheduling/schedule-simple.xml +12 -0
  76. data/fixtures/scheduling/slot-simple.xml +10 -0
  77. data/fixtures/specimen/spec-100.xml +65 -0
  78. data/fixtures/specimen/spec-400.xml +70 -0
  79. data/fixtures/specimen/spec-uslab-example1.xml +82 -0
  80. data/fixtures/validation/observation.profile.xml +2045 -0
  81. data/fixtures/validation/observations/observation-example(example).xml +50 -0
  82. data/lib/FHIR_structure.json +529 -0
  83. data/lib/daf_resource_generator.rb +94 -0
  84. data/lib/data/fhir_structure.rb +8 -0
  85. data/lib/data/resources.rb +138 -0
  86. data/lib/executor.rb +56 -0
  87. data/lib/ext/client.rb +27 -0
  88. data/lib/ext/client_reply.rb +19 -0
  89. data/lib/plan_executor.rb +31 -0
  90. data/lib/resource_generator.rb +656 -0
  91. data/lib/tasks/tasks.rake +329 -0
  92. data/lib/tasks/templates/summary.html.erb +163 -0
  93. data/lib/test_result.rb +69 -0
  94. data/lib/tests/assertions.rb +261 -0
  95. data/lib/tests/base_test.rb +117 -0
  96. data/lib/tests/suites/argonaut_resprint_1_test.rb +260 -0
  97. data/lib/tests/suites/argonaut_resprint_2_test.rb +369 -0
  98. data/lib/tests/suites/argonaut_resprint_3_test.rb +309 -0
  99. data/lib/tests/suites/argonaut_sprint_1_test.rb +187 -0
  100. data/lib/tests/suites/argonaut_sprint_2_test.rb +115 -0
  101. data/lib/tests/suites/argonaut_sprint_3_test.rb +208 -0
  102. data/lib/tests/suites/argonaut_sprint_4_test.rb +335 -0
  103. data/lib/tests/suites/argonaut_sprint_5_test.rb +196 -0
  104. data/lib/tests/suites/argonaut_sprint_6_test.rb +243 -0
  105. data/lib/tests/suites/argonaut_sprint_7_test.rb +161 -0
  106. data/lib/tests/suites/base_suite.rb +116 -0
  107. data/lib/tests/suites/connectathon_audit_track.rb +354 -0
  108. data/lib/tests/suites/connectathon_fetch_patient_record.rb +443 -0
  109. data/lib/tests/suites/connectathon_financial_track.rb +380 -0
  110. data/lib/tests/suites/connectathon_lab_order_track.rb +239 -0
  111. data/lib/tests/suites/connectathon_patient_track.rb +364 -0
  112. data/lib/tests/suites/connectathon_profile_validation.rb +101 -0
  113. data/lib/tests/suites/connectathon_scheduling_track.rb +266 -0
  114. data/lib/tests/suites/connectathon_terminology_track.rb +242 -0
  115. data/lib/tests/suites/daf_profiles_test.rb +431 -0
  116. data/lib/tests/suites/format_test.rb +453 -0
  117. data/lib/tests/suites/history_test.rb +311 -0
  118. data/lib/tests/suites/read_test.rb +104 -0
  119. data/lib/tests/suites/resource_test.rb +553 -0
  120. data/lib/tests/suites/search_test.rb +219 -0
  121. data/lib/tests/suites/search_test_robust.rb +172 -0
  122. data/lib/tests/suites/sprinkler_search_test.rb +660 -0
  123. data/lib/tests/suites/suite_engine.rb +114 -0
  124. data/lib/tests/suites/transaction_test.rb +571 -0
  125. data/lib/tests/testscripts/base_testscript.rb +480 -0
  126. data/lib/tests/testscripts/testscript_engine.rb +81 -0
  127. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-base-client-id-json.xml +348 -0
  128. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-base-client-id-xml.xml +348 -0
  129. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-bonus-client-id-json.xml +420 -0
  130. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-bonus-client-id-xml.xml +420 -0
  131. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/README.html +68 -0
  132. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-base-server-id-json.xml +352 -0
  133. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-base-server-id-xml.xml +352 -0
  134. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-bonus-server-id-json.xml +421 -0
  135. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-bonus-server-id-xml.xml +421 -0
  136. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/conformance/PatientConformance.xml +34 -0
  137. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-PeterChalmers-min.json +45 -0
  138. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-PeterChalmers-min.xml +26 -0
  139. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-PeterChalmers.json +100 -0
  140. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-PeterChalmers.xml +102 -0
  141. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-bonus-PeterChalmers-min.json +53 -0
  142. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-bonus-PeterChalmers-min.xml +30 -0
  143. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-bonus-PeterChalmers.json +108 -0
  144. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-bonus-PeterChalmers.xml +108 -0
  145. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-PeterChalmers-min.json +45 -0
  146. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-PeterChalmers-min.xml +26 -0
  147. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-PeterChalmers.json +100 -0
  148. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-PeterChalmers.xml +102 -0
  149. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus1-PeterChalmers-min.json +53 -0
  150. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus1-PeterChalmers-min.xml +30 -0
  151. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus1-PeterChalmers.json +108 -0
  152. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus1-PeterChalmers.xml +107 -0
  153. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus2-PeterChalmers-min.json +53 -0
  154. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus2-PeterChalmers-min.xml +31 -0
  155. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus2-PeterChalmers.json +108 -0
  156. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus2-PeterChalmers.xml +106 -0
  157. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/C-CDA_R2-1_CCD-ussg.xml +3414 -0
  158. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A1-empty-on-instance.xml +9 -0
  159. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A2-empty-by-ref.xml +15 -0
  160. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A3-empty-by-identifier.xml +13 -0
  161. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A4-empty-by-contained.xml +15 -0
  162. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B1-CCDA-on-instance.xml +15 -0
  163. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B2-CCDA-by-ref.xml +21 -0
  164. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B3-CCDA-by-identifier.xml +19 -0
  165. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B4-CCDA-by-contained.xml +21 -0
  166. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/questionnaire-sdc-profile-example-ussg-fht.xml +3905 -0
  167. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/questionnaireresponse-expected-ussg-fht-CCDA.xml +190 -0
  168. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/questionnaireresponse-expected-ussg-fht-empty.xml +177 -0
  169. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/track11-sdc-prepop-xml.xml +142 -0
  170. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Client Assigned Id/track2-ts-suite1-expand-client-id.xml +925 -0
  171. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Client Assigned Id/track2-ts-suite2-expand-filter-client-id.xml +930 -0
  172. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Server Assigned Id/track2-ts-suite1-expand-server-id.xml +953 -0
  173. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Server Assigned Id/track2-ts-suite2-expand-filter-server-id.xml +958 -0
  174. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Lookup/track2-ts-suite5-loinc-lookup-xml.xml +224 -0
  175. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Lookup/track2-ts-suite5-snomed-lookup-xml.xml +224 -0
  176. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/README.html +85 -0
  177. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Translate/track2-ts-suite6-translate-xml.xml +224 -0
  178. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Client Assigned Id/track2-ts-suite3-validate-code-client-id.xml +1807 -0
  179. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Client Assigned Id/track2-ts-suite4-validate-code-client-id.xml +714 -0
  180. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Server Assigned Id/track2-ts-suite3-validate-code-server-id.xml +1835 -0
  181. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Server Assigned Id/track2-ts-suite4-validate-code-server-id.xml +742 -0
  182. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ConceptMapSuite6Conformance.xml +11 -0
  183. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite1Conformance.xml +17 -0
  184. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite2Conformance.xml +17 -0
  185. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite3Conformance.xml +14 -0
  186. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite4Conformance.xml +14 -0
  187. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite5Conformance.xml +11 -0
  188. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-2-a.xml +11 -0
  189. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-2-b.xml +11 -0
  190. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-3-a.xml +13 -0
  191. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-3-b.xml +13 -0
  192. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-4-a.xml +15 -0
  193. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-4-b.xml +15 -0
  194. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-loinc-input-5-2.xml +10 -0
  195. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-loinc-input-5-3.xml +11 -0
  196. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-snomed-input-5-2.xml +10 -0
  197. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-snomed-input-5-3.xml +11 -0
  198. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/translate-conceptmap-input-6-2.xml +14 -0
  199. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/translate-conceptmap-input-6-3.xml +15 -0
  200. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-1-expand-min.xml +47 -0
  201. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-1-filter-min.xml +23 -0
  202. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-2-expand-min.xml +132 -0
  203. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-2-filter-min.xml +38 -0
  204. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-3-expand-min.xml +252 -0
  205. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-3-filter-min.xml +58 -0
  206. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-4-expand-min.xml +57 -0
  207. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-4-filter-min.xml +28 -0
  208. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-1-expand-min.xml +347 -0
  209. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-1-filter-min.xml +33 -0
  210. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-2-expand-min.xml +637 -0
  211. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-2-filter-min.xml +33 -0
  212. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-3-filter-min.xml +58 -0
  213. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/lookup-loinc-min.xml +11 -0
  214. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/lookup-snomed-min.xml +11 -0
  215. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite3-invalid-min.xml +10 -0
  216. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite3-valid-min.xml +7 -0
  217. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite4-invalid-min.xml +10 -0
  218. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite4-valid-min.xml +7 -0
  219. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/translate-conceptmap-min.xml +17 -0
  220. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-1.xml +55 -0
  221. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-2.xml +122 -0
  222. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-3.xml +222 -0
  223. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-4.xml +65 -0
  224. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/intensional-case-1.xml +31 -0
  225. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/intensional-case-2.xml +31 -0
  226. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/intensional-case-3.xml +31 -0
  227. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/translate-conceptmap-case-1.xml +145 -0
  228. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/conformance/DecisionSupportServiceModule-Evaluate.xml +17 -0
  229. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-incomplete-request-payload.xml +26 -0
  230. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-incomplete-response-min-payload.xml +7 -0
  231. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-incomplete-response-payload.xml +332 -0
  232. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-malformed-request-payload.xml +28 -0
  233. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-malformed-response-min-payload.xml +7 -0
  234. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-malformed-response-payload.xml +20 -0
  235. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-request-payload.xml +28 -0
  236. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-response-min-payload.xml +7 -0
  237. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-response-payload.xml +332 -0
  238. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-unauthorized-request-payload.xml +28 -0
  239. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-unauthorized-response-min-payload.xml +7 -0
  240. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-unauthorized-response-payload.xml +8 -0
  241. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/gao-assessment-request-payload.xml +176 -0
  242. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/gao-assessment-response-payload-min.xml +32 -0
  243. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/gao-assessment-response-payload.xml +80 -0
  244. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/track3-cds-evaluate-cdc-immunization.xml +290 -0
  245. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/track3-cds-evaluate-gao-profile.xml +110 -0
  246. data/lib/tests/testscripts/xml/Connectathon11/Track6-FHIR-Genomics/Client_Assigned_Id/TestScript_FHIR-Genomics.xml +170 -0
  247. data/lib/tests/testscripts/xml/Connectathon11/Track6-FHIR-Genomics/_reference/resources/sequence-example-1.xml +31 -0
  248. data/lib/tests/testscripts/xml/Connectathon11/Track6-FHIR-Genomics/_reference/resources/sequence-example-2.xml +31 -0
  249. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Actors.png +0 -0
  250. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder100-xml.xml +590 -0
  251. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder200-xml.xml +587 -0
  252. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder300-xml.xml +612 -0
  253. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder400-xml.xml +635 -0
  254. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Peer-to-Peer/track7-laborder100-peer2peer-xml.xml +752 -0
  255. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Thumbs.db +0 -0
  256. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/conformance/LabOrderLabReport-CreateDeleteReadUpdate.xml +187 -0
  257. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/conformance/html.xslt +45 -0
  258. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-100-update.xml +64 -0
  259. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-100.xml +64 -0
  260. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-200-update.xml +121 -0
  261. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-200.xml +121 -0
  262. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-300-update.xml +91 -0
  263. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-300.xml +91 -0
  264. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-400-update.xml +88 -0
  265. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-400.xml +88 -0
  266. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-100.xml +96 -0
  267. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-200.xml +125 -0
  268. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-300.xml +132 -0
  269. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-400.xml +121 -0
  270. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-100.xml +58 -0
  271. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-101.xml +58 -0
  272. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-200.xml +125 -0
  273. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-300.xml +106 -0
  274. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-301.xml +106 -0
  275. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-302.xml +106 -0
  276. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-303.xml +106 -0
  277. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-304.xml +106 -0
  278. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-400.xml +87 -0
  279. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-401.xml +95 -0
  280. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-402.xml +95 -0
  281. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-403.xml +84 -0
  282. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-404.xml +84 -0
  283. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-405.xml +83 -0
  284. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-406.xml +83 -0
  285. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-407.xml +70 -0
  286. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-408.xml +84 -0
  287. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-uslab-example5.xml +102 -0
  288. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-100.xml +61 -0
  289. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-200.xml +61 -0
  290. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-300.xml +61 -0
  291. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-400.xml +61 -0
  292. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-100.xml +79 -0
  293. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-110.xml +79 -0
  294. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-200.xml +79 -0
  295. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-210.xml +79 -0
  296. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-300.xml +79 -0
  297. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-310.xml +79 -0
  298. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-400.xml +79 -0
  299. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-410.xml +79 -0
  300. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Organization/org-uslab-example3.xml +49 -0
  301. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Patient/patient-uslab-example1.xml +44 -0
  302. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Practitioner/pract-uslab-example1.xml +18 -0
  303. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Practitioner/pract-uslab-example3.xml +36 -0
  304. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/Thumbs.db +0 -0
  305. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/spec-100.xml +65 -0
  306. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/spec-400.xml +70 -0
  307. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/spec-uslab-example1.xml +82 -0
  308. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 1 Document.txt +122 -0
  309. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 2 Document.txt +103 -0
  310. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 3 Document.txt +201 -0
  311. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 4 Document.txt +310 -0
  312. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/conformance/MedicationStatementCreate.xml +11 -0
  313. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/conformance/PatientSearchType.xml +15 -0
  314. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/resources/medicationstatement-create.json +39 -0
  315. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/resources/medicationstatement-patch.json +3 -0
  316. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/track9-patch-medicationstatement-json-if-match.xml +321 -0
  317. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/track9-patch-medicationstatement-json.xml +303 -0
  318. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/track9-patch-peer2peer-patient-json.xml +235 -0
  319. data/plan_executor.gemspec +14 -0
  320. data/test/fixtures/diagnostic_bundle.xml +51 -0
  321. data/test/fixtures/lab_results_bundle.xml +49 -0
  322. data/test/fixtures/observation_bundle.json +61 -0
  323. data/test/fixtures/testscript-example.xml +202 -0
  324. data/test/fixtures/testscript-history.xml +143 -0
  325. data/test/fixtures/testscript-readtest.xml +272 -0
  326. data/test/fixtures/testscript-search.xml +282 -0
  327. data/test/fixtures/testscript-update.xml +147 -0
  328. data/test/fixtures/vital_signs_bundle.xml +117 -0
  329. data/test/test_helper.rb +8 -0
  330. data/test/unit/argonaut_sprint6_test.rb +31 -0
  331. data/test/unit/argonaut_sprint7_test.rb +21 -0
  332. data/test/unit/basic_test.rb +27 -0
  333. data/test/unit/fetch_patient_record_test.rb +357 -0
  334. data/test/unit/financial_test.rb +41 -0
  335. data/test/unit/fixtures_test.rb +45 -0
  336. data/test/unit/metadata_test.rb +33 -0
  337. metadata +394 -0
@@ -0,0 +1,660 @@
1
+ module Crucible
2
+ module Tests
3
+ class SprinklerSearchTest < BaseSuite
4
+
5
+ attr_accessor :use_post
6
+
7
+ def id
8
+ 'Search001'
9
+ end
10
+
11
+ def description
12
+ 'Initial Sprinkler tests for testing search capabilities.'
13
+ end
14
+
15
+ def initialize(client1, client2=nil)
16
+ super(client1, client2)
17
+ @category = {id: 'core_functionality', title: 'Core Functionality'}
18
+ end
19
+
20
+ def setup
21
+ # Create a patient with gender:missing
22
+ @resources = Crucible::Generator::Resources.new
23
+ @patient = @resources.minimal_patient
24
+ @patient.identifier = [FHIR::Identifier.new]
25
+ @patient.identifier[0].value = SecureRandom.urlsafe_base64
26
+ result = @client.create(@patient)
27
+ @patient_id = result.id
28
+
29
+ # read all the patients
30
+ @read_entire_feed=true
31
+ @client.use_format_param = true
32
+ reply = @client.read_feed(FHIR::Patient)
33
+ @read_entire_feed=false if (!reply.nil? && reply.code!=200)
34
+ @total_count = 0
35
+ @entries = []
36
+
37
+ while reply != nil && !reply.resource.nil?
38
+ @total_count += reply.resource.entry.size
39
+ @entries += reply.resource.entry
40
+ reply = @client.next_page(reply)
41
+ @read_entire_feed=false if (!reply.nil? && reply.code!=200)
42
+ end
43
+
44
+ # create a condition matching the first patient
45
+ @condition = ResourceGenerator.generate(FHIR::Condition,1)
46
+ @condition['patient'] = ResourceGenerator.generate(FHIR::Reference)
47
+ @condition.patient.xmlId = @entries.try(:[],0).try(:resource).try(:xmlId)
48
+ options = {
49
+ :id => @entries.try(:[],0).try(:resource).try(:xmlId),
50
+ :resource => @entries.try(:[],0).try(:resource).try(:class)
51
+ }
52
+
53
+ temp = @client.use_format_param
54
+ @client.use_format_param = false
55
+ patient_url = @client.resource_url(options)
56
+ patient_url = patient_url[1..-1] if patient_url[0]=='/'
57
+ @condition.patient.reference = patient_url
58
+ @client.use_format_param = temp
59
+
60
+ reply = @client.create(@condition)
61
+ @condition_id = reply.id
62
+
63
+ # create some observations
64
+ @obs_a = create_observation(4.12345)
65
+ @obs_b = create_observation(4.12346)
66
+ @obs_c = create_observation(4.12349)
67
+ @obs_d = create_observation(5.12)
68
+ @obs_e = create_observation(6.12)
69
+ end
70
+
71
+ def create_observation(value)
72
+ observation = FHIR::Observation.new
73
+ observation.status = 'preliminary'
74
+ code = FHIR::Coding.new
75
+ code.system = 'http://loinc.org'
76
+ code.code = '2164-2'
77
+ observation.code = FHIR::CodeableConcept.new
78
+ observation.code.coding = [ code ]
79
+ observation.valueQuantity = FHIR::Quantity.new
80
+ observation.valueQuantity.system = 'http://unitofmeasure.org'
81
+ observation.valueQuantity.value = value
82
+ observation.valueQuantity.unit = 'mmol'
83
+ body = FHIR::Coding.new
84
+ body.system = 'http://snomed.info/sct'
85
+ body.code = '182756003'
86
+ observation.bodySite = FHIR::CodeableConcept.new
87
+ observation.bodySite.coding = [ body ]
88
+ reply = @client.create(observation)
89
+ reply.id
90
+ end
91
+
92
+ def teardown
93
+ @client.use_format_param = false
94
+ @client.destroy(FHIR::Patient, @patient_id) if @patient_id
95
+ @client.destroy(FHIR::Condition, @condition_id) if @condition_id
96
+ @client.destroy(FHIR::Observation, @obs_a) if @obs_a
97
+ @client.destroy(FHIR::Observation, @obs_b) if @obs_b
98
+ @client.destroy(FHIR::Observation, @obs_c) if @obs_c
99
+ @client.destroy(FHIR::Observation, @obs_d) if @obs_d
100
+ @client.destroy(FHIR::Observation, @obs_e) if @obs_e
101
+ end
102
+
103
+ [true,false].each do |flag|
104
+ action = 'GET'
105
+ action = 'POST' if flag
106
+
107
+ test "SE01#{action[0]}",'Search patients without criteria (except _count)' do
108
+ metadata {
109
+ links "#{REST_SPEC_LINK}#search"
110
+ links "#{BASE_SPEC_LINK}/search.html"
111
+ validates resource: "Patient", methods: ["search"]
112
+ }
113
+ options = {
114
+ :search => {
115
+ :flag => flag,
116
+ :compartment => nil,
117
+ :parameters => {
118
+ '_count' => '1'
119
+ }
120
+ }
121
+ }
122
+ reply = @client.search(FHIR::Patient, options)
123
+ assert_response_ok(reply)
124
+ assert_bundle_response(reply)
125
+ assert_equal 1, reply.resource.entry.size, 'The server did not return the correct number of results.'
126
+ end
127
+
128
+ test "SE02#{action[0]}", 'Search on non-existing resource' do
129
+ metadata {
130
+ links "#{REST_SPEC_LINK}#search"
131
+ links "#{BASE_SPEC_LINK}/search.html"
132
+ }
133
+ options = {
134
+ :resource => Crucible::Tests::SprinklerSearchTest,
135
+ :search => {
136
+ :flag => flag,
137
+ :compartment => nil,
138
+ :parameters => nil
139
+ }
140
+ }
141
+ reply = @client.search_all(options)
142
+ assert( (reply.code >= 400 && reply.code < 600), 'If the search fails, the return value should be status code 4xx or 5xx.', reply.body)
143
+ end
144
+
145
+ test "SE03#{action[0]}",'Search patient resource on partial family surname' do
146
+ metadata {
147
+ links "#{REST_SPEC_LINK}#search"
148
+ links "#{BASE_SPEC_LINK}/search.html"
149
+ links "#{BASE_SPEC_LINK}/patient.html#search"
150
+ validates resource: "Patient", methods: ["search"]
151
+ }
152
+ skip unless @read_entire_feed
153
+ search_string = @patient.name[0].family[0][0..2]
154
+ search_regex = Regexp.new(search_string)
155
+ # how many patients in the bundle have matching names?
156
+ expected = 0
157
+ @entries.each do |entry|
158
+ patient = entry.resource
159
+ isMatch = false
160
+ if !patient.nil? && !patient.name.nil?
161
+ patient.name.each do |name|
162
+ if !name.family.nil?
163
+ name.family.each do |family|
164
+ if !(family =~ search_regex).nil?
165
+ isMatch = true
166
+ end
167
+ end
168
+ end
169
+ end
170
+ end
171
+ expected += 1 if isMatch
172
+ end
173
+
174
+ options = {
175
+ :search => {
176
+ :flag => flag,
177
+ :compartment => nil,
178
+ :parameters => {
179
+ 'family' => search_string
180
+ }
181
+ }
182
+ }
183
+ reply = @client.search(FHIR::Patient, options)
184
+ assert_response_ok(reply)
185
+ assert_bundle_response(reply)
186
+ assert_equal expected, reply.resource.total, 'The server did not report the correct number of results.'
187
+ end
188
+
189
+ test "SE04#{action[0]}", 'Search patient resource on given name' do
190
+ metadata {
191
+ links "#{REST_SPEC_LINK}#search"
192
+ links "#{BASE_SPEC_LINK}/search.html"
193
+ links "#{BASE_SPEC_LINK}/patient.html#search"
194
+ validates resource: "Patient", methods: ["search"]
195
+ }
196
+ skip unless @read_entire_feed
197
+ search_string = @patient.name[0].given[0]
198
+ search_regex = Regexp.new(search_string)
199
+ # how many patients in the bundle have matching names?
200
+ expected = 0
201
+ @entries.each do |entry|
202
+ patient = entry.resource
203
+ isMatch = false
204
+ if !patient.nil? && !patient.name.nil?
205
+ patient.name.each do |name|
206
+ if !name.given.nil?
207
+ name.given.each do |given|
208
+ if !(given =~ search_regex).nil?
209
+ isMatch = true
210
+ end
211
+ end
212
+ end
213
+ end
214
+ end
215
+ expected += 1 if isMatch
216
+ end
217
+
218
+ options = {
219
+ :search => {
220
+ :flag => flag,
221
+ :compartment => nil,
222
+ :parameters => {
223
+ 'given' => search_string
224
+ }
225
+ }
226
+ }
227
+ reply = @client.search(FHIR::Patient, options)
228
+ assert_response_ok(reply)
229
+ assert_bundle_response(reply)
230
+ assert_equal expected, reply.resource.total, 'The server did not report the correct number of results.'
231
+ end
232
+
233
+ test "SE05.0#{action[0]}", 'Search condition by patient reference url (partial)' do
234
+ metadata {
235
+ links "#{REST_SPEC_LINK}#search"
236
+ links "#{BASE_SPEC_LINK}/search.html"
237
+ links "#{BASE_SPEC_LINK}/condition.html#search"
238
+ validates resource: "Condition", methods: ["search"]
239
+ }
240
+ skip unless @read_entire_feed
241
+ # pick some search parameters... we previously created
242
+ # a condition for the first (0-index) patient in the setup method.
243
+ options = {
244
+ :id => @entries[0].resource.xmlId,
245
+ :resource => @entries[0].resource.class
246
+ }
247
+ temp = @client.use_format_param
248
+ @client.use_format_param = false
249
+ patient_url = @client.resource_url(options)
250
+ patient_url = patient_url[1..-1] if patient_url[0]=='/'
251
+ @client.use_format_param = temp
252
+
253
+ # next, we're going execute a series of searches for conditions referencing the patient
254
+ options = {
255
+ :search => {
256
+ :flag => flag,
257
+ :compartment => nil,
258
+ :parameters => {
259
+ 'patient' => patient_url
260
+ }
261
+ }
262
+ }
263
+ reply = @client.search(FHIR::Condition, options)
264
+ assert_response_ok(reply)
265
+ assert_bundle_response(reply)
266
+ assert_equal 1, reply.resource.total, 'The server did not report the correct number of results.'
267
+ end
268
+
269
+ test "SE05.0F#{action[0]}", 'Search condition by patient reference url (full)' do
270
+ metadata {
271
+ links "#{REST_SPEC_LINK}#search"
272
+ links "#{BASE_SPEC_LINK}/search.html"
273
+ links "#{BASE_SPEC_LINK}/condition.html#search"
274
+ validates resource: "Condition", methods: ["search"]
275
+ }
276
+ skip unless @read_entire_feed
277
+ # pick some search parameters... we previously created
278
+ # a condition for the first (0-index) patient in the setup method.
279
+ options = {
280
+ :id => @entries[0].resource.xmlId,
281
+ :resource => @entries[0].resource.class
282
+ }
283
+ temp = @client.use_format_param
284
+ @client.use_format_param = false
285
+ patient_url = @client.full_resource_url(options)
286
+ @client.use_format_param = temp
287
+
288
+ # next, we're going execute a series of searches for conditions referencing the patient
289
+ options = {
290
+ :search => {
291
+ :flag => flag,
292
+ :compartment => nil,
293
+ :parameters => {
294
+ 'patient' => patient_url
295
+ }
296
+ }
297
+ }
298
+ reply = @client.search(FHIR::Condition, options)
299
+ assert_response_ok(reply)
300
+ assert_bundle_response(reply)
301
+ assert_equal 1, reply.resource.total, 'The server did not report the correct number of results.'
302
+ end
303
+
304
+ test "SE05.1#{action[0]}", 'Search condition by patient reference id' do
305
+ metadata {
306
+ links "#{REST_SPEC_LINK}#search"
307
+ links "#{BASE_SPEC_LINK}/search.html"
308
+ links "#{BASE_SPEC_LINK}/condition.html#search"
309
+ validates resource: "Condition", methods: ["search"]
310
+ }
311
+ skip unless @read_entire_feed
312
+ # pick some search parameters... we previously created
313
+ # a condition for the first (0-index) patient in the setup method.
314
+ patient_id = @entries[0].resource.xmlId
315
+
316
+ # next, we're going execute a series of searches for conditions referencing the patient
317
+ options = {
318
+ :search => {
319
+ :flag => flag,
320
+ :compartment => nil,
321
+ :parameters => {
322
+ 'patient' => patient_id
323
+ }
324
+ }
325
+ }
326
+ reply = @client.search(FHIR::Condition, options)
327
+ assert_response_ok(reply)
328
+ assert_bundle_response(reply)
329
+ assert_equal 1, reply.resource.total, 'The server did not report the correct number of results.'
330
+ end
331
+
332
+ test "SE05.2#{action[0]}", 'Search condition by patient:Patient reference url' do
333
+ metadata {
334
+ links "#{REST_SPEC_LINK}#search"
335
+ links "#{BASE_SPEC_LINK}/search.html"
336
+ links "#{BASE_SPEC_LINK}/condition.html#search"
337
+ validates resource: "Condition", methods: ["search"]
338
+ }
339
+ skip unless @read_entire_feed
340
+ # pick some search parameters... we previously created
341
+ # a condition for the first (0-index) patient in the setup method.
342
+ options = {
343
+ :id => @entries[0].resource.xmlId,
344
+ :resource => @entries[0].resource.class
345
+ }
346
+ temp = @client.use_format_param
347
+ @client.use_format_param = false
348
+ patient_url = @client.resource_url(options)
349
+ patient_url = patient_url[1..-1] if patient_url[0]=='/'
350
+ @client.use_format_param = temp
351
+
352
+ # next, we're going execute a series of searches for conditions referencing the patient
353
+ options = {
354
+ :search => {
355
+ :flag => flag,
356
+ :compartment => nil,
357
+ :parameters => {
358
+ 'patient:Patient' => patient_url
359
+ }
360
+ }
361
+ }
362
+ reply = @client.search(FHIR::Condition, options)
363
+ assert_response_ok(reply)
364
+ assert_bundle_response(reply)
365
+ assert_equal 1, reply.resource.total, 'The server did not report the correct number of results.'
366
+ end
367
+
368
+ test "SE05.3#{action[0]}", 'Search condition by patient:Patient reference id' do
369
+ metadata {
370
+ links "#{REST_SPEC_LINK}#search"
371
+ links "#{BASE_SPEC_LINK}/search.html"
372
+ links "#{BASE_SPEC_LINK}/condition.html#search"
373
+ validates resource: "Condition", methods: ["search"]
374
+ }
375
+ skip unless @read_entire_feed
376
+ # pick some search parameters... we previously created
377
+ # a condition for the first (0-index) patient in the setup method.
378
+ patient = @entries[0].resource
379
+ patient_id = @entries[0].resource.xmlId
380
+
381
+ # next, we're going execute a series of searches for conditions referencing the patient
382
+ options = {
383
+ :search => {
384
+ :flag => flag,
385
+ :compartment => nil,
386
+ :parameters => {
387
+ 'patient:Patient' => patient_id
388
+ }
389
+ }
390
+ }
391
+ reply = @client.search(FHIR::Condition, options)
392
+ assert_response_ok(reply)
393
+ assert_bundle_response(reply)
394
+ assert_equal 1, reply.resource.total, 'The server did not report the correct number of results.'
395
+ end
396
+
397
+ test "SE05.4#{action[0]}", 'Search condition by patient:_id reference' do
398
+ metadata {
399
+ links "#{REST_SPEC_LINK}#search"
400
+ links "#{BASE_SPEC_LINK}/search.html"
401
+ links "#{BASE_SPEC_LINK}/condition.html#search"
402
+ validates resource: "Condition", methods: ["search"]
403
+ }
404
+ skip unless @read_entire_feed
405
+ # pick some search parameters... we previously created
406
+ # a condition for the first (0-index) patient in the setup method.
407
+ patient_id = @entries[0].resource.xmlId
408
+
409
+ # next, we're going execute a series of searches for conditions referencing the patient
410
+ options = {
411
+ :search => {
412
+ :flag => flag,
413
+ :compartment => nil,
414
+ :parameters => {
415
+ 'patient._id' => patient_id
416
+ }
417
+ }
418
+ }
419
+ reply = @client.search(FHIR::Condition, options)
420
+ assert_response_ok(reply)
421
+ assert_bundle_response(reply)
422
+ assert_equal 1, reply.resource.total, 'The server did not report the correct number of results.'
423
+ end
424
+
425
+ test "SE05.5#{action[0]}", 'Search condition by patient:name reference' do
426
+ metadata {
427
+ links "#{REST_SPEC_LINK}#search"
428
+ links "#{BASE_SPEC_LINK}/search.html"
429
+ links "#{BASE_SPEC_LINK}/condition.html#search"
430
+ validates resource: "Condition", methods: ["search"]
431
+ }
432
+ skip unless @read_entire_feed
433
+ # pick some search parameters... we previously created
434
+ # a condition for the first (0-index) patient in the setup method.
435
+ patient_name = @patient.name[0].family[0]
436
+
437
+ # next, we're going execute a series of searches for conditions referencing the patient
438
+ options = {
439
+ :search => {
440
+ :flag => flag,
441
+ :compartment => nil,
442
+ :parameters => {
443
+ 'patient.name' => patient_name
444
+ }
445
+ }
446
+ }
447
+ reply = @client.search(FHIR::Condition, options)
448
+ assert_response_ok(reply)
449
+ assert_bundle_response(reply)
450
+ assert_equal 1, reply.resource.total, 'The server did not report the correct number of results.'
451
+ end
452
+
453
+ test "SE05.6#{action[0]}", 'Search condition by patient:identifier reference' do
454
+ metadata {
455
+ links "#{REST_SPEC_LINK}#search"
456
+ links "#{BASE_SPEC_LINK}/search.html"
457
+ links "#{BASE_SPEC_LINK}/condition.html#search"
458
+ validates resource: "Condition", methods: ["search"]
459
+ }
460
+ skip unless @patient_id
461
+ # pick some search parameters... we previously created
462
+ # a condition for the first (0-index) patient in the setup method.
463
+ patient_identifier = @patient.identifier[0].value
464
+
465
+ # next, we're going execute a series of searches for conditions referencing the patient
466
+ options = {
467
+ :search => {
468
+ :flag => flag,
469
+ :compartment => nil,
470
+ :parameters => {
471
+ 'patient.identifier' => patient_identifier
472
+ }
473
+ }
474
+ }
475
+ reply = @client.search(FHIR::Condition, options)
476
+ assert_response_ok(reply)
477
+ assert_bundle_response(reply)
478
+ assert_equal 1, reply.resource.total, 'The server did not report the correct number of results.'
479
+ end
480
+
481
+ test "SE06#{action[0]}", 'Search condition and _include' do
482
+ metadata {
483
+ links "#{REST_SPEC_LINK}#search"
484
+ links "#{BASE_SPEC_LINK}/search.html"
485
+ links "#{BASE_SPEC_LINK}/condition.html#search"
486
+ validates resource: "Condition", methods: ["search"]
487
+ }
488
+ skip unless @patient_id
489
+ # pick some search parameters... we previously created
490
+ # a condition for the first (0-index) patient in the setup method.
491
+ patient_identifier = @patient.identifier[0].value
492
+
493
+ # next, we're going execute a series of searches for conditions referencing the patient
494
+ options = {
495
+ :search => {
496
+ :flag => flag,
497
+ :compartment => nil,
498
+ :parameters => {
499
+ '_include' => 'Condition:patient'
500
+ }
501
+ }
502
+ }
503
+ reply = @client.search(FHIR::Condition, options)
504
+ assert_response_ok(reply)
505
+ assert_bundle_response(reply)
506
+ assert reply.resource.total > 0, 'The server should have Conditions that _include=Condition:patient.'
507
+ has_patient = false
508
+ reply.resource.entry.each do |entry|
509
+ has_patient = true if (entry.resourceType == 'Patient')
510
+ end
511
+ assert(has_patient,'The server did not include the Patient referenced in the Condition.', reply.body)
512
+ end
513
+
514
+ test "SE21#{action[0]}", 'Search for quantity (in observation) - precision tests' do
515
+ metadata {
516
+ links "#{REST_SPEC_LINK}#search"
517
+ links "#{BASE_SPEC_LINK}/search.html#quantity"
518
+ links "#{BASE_SPEC_LINK}/observation.html#search"
519
+ validates resource: "Observation", methods: ["search"]
520
+ }
521
+ skip unless (@obs_a && @obs_b && @obs_c)
522
+
523
+ options = {
524
+ :search => {
525
+ :flag => flag,
526
+ :compartment => nil,
527
+ :parameters => {
528
+ 'value-quantity' => '4.1234||mmol'
529
+ }
530
+ }
531
+ }
532
+ reply = @client.search(FHIR::Observation, options)
533
+ has_obs_a = has_obs_b = has_obs_c = false
534
+ while reply != nil
535
+ assert_response_ok(reply)
536
+ assert_bundle_response(reply)
537
+ has_obs_a = true if reply.resource.get_by_id(@obs_a)
538
+ has_obs_b = true if reply.resource.get_by_id(@obs_b)
539
+ has_obs_c = true if reply.resource.get_by_id(@obs_c)
540
+ reply = @client.next_page(reply)
541
+ end
542
+
543
+ assert has_obs_a, 'Search on quantity value 4.1234 should return 4.12345'
544
+ assert !has_obs_b, 'Search on quantity value 4.1234 should not return 4.12346'
545
+ assert !has_obs_c, 'Search on quantity value 4.1234 should not return 4.12349'
546
+ end
547
+
548
+ test "SE22#{action[0]}", 'Search for quantity (in observation) - operators' do
549
+ metadata {
550
+ links "#{REST_SPEC_LINK}#search"
551
+ links "#{BASE_SPEC_LINK}/search.html#quantity"
552
+ links "#{BASE_SPEC_LINK}/observation.html#search"
553
+ validates resource: "Observation", methods: ["search"]
554
+ }
555
+ skip unless (@obs_a && @obs_d && @obs_e)
556
+
557
+ options = {
558
+ :search => {
559
+ :flag => flag,
560
+ :compartment => nil,
561
+ :parameters => {
562
+ 'value-quantity' => 'gt5||mmol'
563
+ }
564
+ }
565
+ }
566
+ reply = @client.search(FHIR::Observation, options)
567
+ has_obs_a = has_obs_b = has_obs_c = false
568
+ while reply != nil
569
+ assert_response_ok(reply)
570
+ assert_bundle_response(reply)
571
+ has_obs_a = true if reply.resource.get_by_id(@obs_a)
572
+ has_obs_d = true if reply.resource.get_by_id(@obs_d)
573
+ has_obs_e = true if reply.resource.get_by_id(@obs_e)
574
+ reply = @client.next_page(reply)
575
+ end
576
+
577
+ assert !has_obs_a, 'Search greater than quantity should not return lesser value.'
578
+ assert has_obs_d, 'Search greater than quantity should return greater value.'
579
+ assert has_obs_e, 'Search greater than quantity should return greater value.'
580
+ end
581
+
582
+ test "SE23#{action[0]}", 'Search with quantifier :missing, on Patient.gender' do
583
+ metadata {
584
+ links "#{REST_SPEC_LINK}#search"
585
+ links "#{BASE_SPEC_LINK}/search.html"
586
+ links "#{BASE_SPEC_LINK}/patient.html#search"
587
+ validates resource: "Patient", methods: ["search"]
588
+ }
589
+ skip unless @read_entire_feed
590
+ # how many patients in the bundle have no gender?
591
+ expected = 0
592
+ @entries.each do |entry|
593
+ patient = entry.resource
594
+ expected += 1 if !patient.nil? && patient.gender.nil?
595
+ end
596
+
597
+ options = {
598
+ :search => {
599
+ :flag => flag,
600
+ :compartment => nil,
601
+ :parameters => {
602
+ 'gender:missing' => true
603
+ }
604
+ }
605
+ }
606
+ reply = @client.search(FHIR::Patient, options)
607
+ assert_response_ok(reply)
608
+ assert_bundle_response(reply)
609
+ assert_equal expected, reply.resource.total, 'The server did not report the correct number of results.'
610
+ end
611
+
612
+ test "SE24#{action[0]}", 'Search with non-existing parameter' do
613
+ metadata {
614
+ links "#{REST_SPEC_LINK}#search"
615
+ links "#{BASE_SPEC_LINK}/search.html"
616
+ links "#{BASE_SPEC_LINK}/patient.html#search"
617
+ validates resource: "Patient", methods: ["search"]
618
+ }
619
+ # non-existing parameters should be ignored
620
+ options = {
621
+ :search => {
622
+ :flag => flag,
623
+ :compartment => nil,
624
+ :parameters => {
625
+ 'bonkers' => 'foobar'
626
+ }
627
+ }
628
+ }
629
+ reply = @client.search(FHIR::Patient, options)
630
+ assert_response_ok(reply)
631
+ assert_bundle_response(reply)
632
+ end
633
+
634
+ test "SE25#{action[0]}", 'Search with malformed parameters' do
635
+ metadata {
636
+ links "#{REST_SPEC_LINK}#search"
637
+ links "#{BASE_SPEC_LINK}/search.html"
638
+ links "#{BASE_SPEC_LINK}/patient.html#search"
639
+ validates resource: "Patient", methods: ["search"]
640
+ }
641
+ # a malformed parameters are non-existing parameters, and they should be ignored
642
+ options = {
643
+ :search => {
644
+ :flag => flag,
645
+ :compartment => nil,
646
+ :parameters => {
647
+ '...' => 'foobar'
648
+ }
649
+ }
650
+ }
651
+ reply = @client.search(FHIR::Patient, options)
652
+ assert_response_ok(reply)
653
+ assert_bundle_response(reply)
654
+ end
655
+
656
+ end # EOF [true,false].each
657
+
658
+ end
659
+ end
660
+ end