Skip to content

Commit

Permalink
Add r4b and r5 unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
360dgries committed Oct 1, 2024
1 parent 45644bd commit 8cbb557
Show file tree
Hide file tree
Showing 5 changed files with 344 additions and 15 deletions.
16 changes: 8 additions & 8 deletions lib/fhir_client/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -289,21 +289,21 @@ def try_conformance_formats(default_format)
rescue
@cached_capability_statement = nil
end
if @cached_capability_statement.nil?
if @cached_capability_statement.nil? || !@cached_capability_statement.fhirVersion.starts_with?('4.0')
use_r4b
begin
@cached_capability_statement = parse_reply(FHIR::R4B::CapabilityStatement, frmt, reply)
rescue
@cached_capability_statement = nil
end
unless @cached_capability_statement
if @cached_capability_statement.nil? || !@cached_capability_statement.fhirVersion.starts_with?('4')
use_r5
begin
@cached_capability_statement = parse_reply(FHIR::R5::CapabilityStatement, frmt, reply)
rescue
@cached_capability_statement = nil
end
unless @cached_capability_statement
if @cached_capability_statement.nil? || !@cached_capability_statement.fhirVersion.starts_with?('5')
use_stu3
begin
@cached_capability_statement = parse_reply(FHIR::STU3::CapabilityStatement, frmt, reply)
Expand Down Expand Up @@ -353,11 +353,11 @@ def parse_reply(klass, format, response)
else
FHIR::DSTU2::Json.from_json(response.body)
end
elsif(@fhir_version == :r4 || klass&.ancestors&.include?(FHIR::Model))
elsif(@fhir_version == :stu3 || klass&.ancestors&.include?(FHIR::STU3::Model))
if(format.include?('xml'))
FHIR::Xml.from_xml(response.body)
FHIR::STU3::Xml.from_xml(response.body)
else
FHIR::Json.from_json(response.body)
FHIR::STU3::Json.from_json(response.body)
end
elsif(@fhir_version == :r4b || klass&.ancestors&.include?(FHIR::R4B::Model))
if(format.include?('xml'))
Expand All @@ -373,9 +373,9 @@ def parse_reply(klass, format, response)
end
else
if(format.include?('xml'))
FHIR::STU3::Xml.from_xml(response.body)
FHIR::Xml.from_xml(response.body)
else
FHIR::STU3::Json.from_json(response.body)
FHIR::Json.from_json(response.body)
end
end
rescue => e
Expand Down
148 changes: 148 additions & 0 deletions test/fixtures/r4b_capabilitystatement.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
{
"resourceType" : "CapabilityStatement",
"id" : "example",
"text" : {
"status" : "generated",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n\t\t\t<p>The EHR Server supports the following transactions for the resource Person: read, vread, \n update, history, search(name,gender), create and updates.</p>\n\t\t\t<p>The EHR System supports the following message: admin-notify::Person.</p>\n\t\t\t<p>The EHR Application has a \n <a href=\"http://fhir.hl7.org/base/Profilebc054d23-75e1-4dc6-aca5-838b6b1ac81d/_history/b5fdd9fc-b021-4ea1-911a-721a60663796\">general document profile</a>.\n </p>\n\t\t</div>"
},
"url" : "urn:uuid:68d043b5-9ecf-4559-a57a-396e0d452311",
"version" : "20130510",
"name" : "ACME-EHR",
"title" : "ACME EHR capability statement",
"status" : "draft",
"experimental" : true,
"date" : "2012-01-04",
"publisher" : "ACME Corporation",
"contact" : [{
"name" : "System Administrator",
"telecom" : [{
"system" : "email",
"value" : "wile@acme.org"
}]
}],
"description" : "This is the FHIR capability statement for the main EHR at ACME for the private interface - it does not describe the public interface",
"useContext" : [{
"code" : {
"system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
"code" : "focus"
},
"valueCodeableConcept" : {
"coding" : [{
"system" : "http://terminology.hl7.org/CodeSystem/variant-state",
"code" : "positive"
}]
}
}],
"jurisdiction" : [{
"coding" : [{
"system" : "urn:iso:std:iso:3166",
"code" : "US",
"display" : "United States of America (the)"
}]
}],
"purpose" : "Main EHR capability statement, published for contracting and operational support",
"copyright" : "Copyright © Acme Healthcare and GoodCorp EHR Systems",
"kind" : "instance",
"instantiates" : ["http://ihe.org/fhir/CapabilityStatement/pixm-client"],
"software" : {
"name" : "EHR",
"version" : "0.00.020.2134",
"releaseDate" : "2012-01-04"
},
"implementation" : {
"description" : "main EHR at ACME",
"url" : "http://10.2.3.4/fhir"
},
"fhirVersion" : "4.3.0",
"format" : ["xml",
"json"],
"patchFormat" : ["application/xml-patch+xml",
"application/json-patch+json"],
"implementationGuide" : ["http://hl7.org/fhir/us/lab"],
"rest" : [{
"mode" : "server",
"documentation" : "Main FHIR endpoint for acem health",
"security" : {
"cors" : true,
"service" : [{
"coding" : [{
"system" : "http://terminology.hl7.org/CodeSystem/restful-security-service",
"code" : "SMART-on-FHIR"
}]
}],
"description" : "See Smart on FHIR documentation"
},
"resource" : [{
"type" : "Patient",
"profile" : "http://registry.fhir.org/r4/StructureDefinition/7896271d-57f6-4231-89dc-dcc91eab2416",
"supportedProfile" : ["http://registry.fhir.org/r4/StructureDefinition/00ab9e7a-06c7-4f77-9234-4154ca1e3347"],
"documentation" : "This server does not let the clients create identities.",
"interaction" : [{
"code" : "read"
},
{
"code" : "vread",
"documentation" : "Only supported for patient records since 12-Dec 2012"
},
{
"code" : "update"
},
{
"code" : "history-instance"
},
{
"code" : "create"
},
{
"code" : "history-type"
}],
"versioning" : "versioned-update",
"readHistory" : true,
"updateCreate" : false,
"conditionalCreate" : true,
"conditionalRead" : "full-support",
"conditionalUpdate" : false,
"conditionalDelete" : "not-supported",
"searchInclude" : ["Organization"],
"searchRevInclude" : ["Person"],
"searchParam" : [{
"name" : "identifier",
"definition" : "http://hl7.org/fhir/SearchParameter/Patient-identifier",
"type" : "token",
"documentation" : "Only supports search by institution MRN"
},
{
"name" : "general-practitioner",
"definition" : "http://hl7.org/fhir/SearchParameter/Patient-general-practitioner",
"type" : "reference"
}]
}],
"interaction" : [{
"code" : "transaction"
},
{
"code" : "history-system"
}],
"compartment" : ["http://hl7.org/fhir/CompartmentDefinition/patient"]
}],
"messaging" : [{
"endpoint" : [{
"protocol" : {
"system" : "http://terminology.hl7.org/CodeSystem/message-transport",
"code" : "mllp"
},
"address" : "mllp:10.1.1.10:9234"
}],
"reliableCache" : 30,
"documentation" : "ADT A08 equivalent for external system notifications",
"supportedMessage" : [{
"mode" : "receiver",
"definition" : "http://hl7.org/fhir/MessageDefinition/example"
}]
}],
"document" : [{
"mode" : "consumer",
"documentation" : "Basic rules for all documents in the EHR system",
"profile" : "http://fhir.hl7.org/base/Profilebc054d23-75e1-4dc6-aca5-838b6b1ac81d/_history/b5fdd9fc-b021-4ea1-911a-721a60663796"
}]
}
151 changes: 151 additions & 0 deletions test/fixtures/r5_capabilitystatement.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
{
"resourceType" : "CapabilityStatement",
"id" : "example",
"text" : {
"status" : "generated",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n\t\t\t\n <p>The EHR Server supports the following transactions for the resource Person: read, vread, \n update, history, search(name,gender), create and updates.</p>\n\t\t\t\n <p>The EHR System supports the following message: admin-notify::Person.</p>\n\t\t\t\n <p>The EHR Application has a \n \n <a href=\"http://fhir.hl7.org/base/Profilebc054d23-75e1-4dc6-aca5-838b6b1ac81d/_history/b5fdd9fc-b021-4ea1-911a-721a60663796\">general document profile</a>.\n \n </p>\n\t\t\n </div>"
},
"url" : "urn:uuid:68d043b5-9ecf-4559-a57a-396e0d452311",
"version" : "20130510",
"name" : "ACMEEHR",
"title" : "ACME EHR capability statement",
"status" : "draft",
"experimental" : true,
"date" : "2012-01-04",
"publisher" : "ACME Corporation",
"contact" : [{
"name" : "System Administrator",
"telecom" : [{
"system" : "email",
"value" : "wile@acme.org"
}]
}],
"description" : "This is the FHIR capability statement for the main EHR at ACME for the private interface - it does not describe the public interface",
"useContext" : [{
"code" : {
"system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
"code" : "focus"
},
"valueCodeableConcept" : {
"coding" : [{
"system" : "http://terminology.hl7.org/CodeSystem/variant-state",
"code" : "positive"
}]
}
}],
"jurisdiction" : [{
"coding" : [{
"system" : "urn:iso:std:iso:3166",
"code" : "US",
"display" : "United States of America (the)"
}]
}],
"purpose" : "Main EHR capability statement, published for contracting and operational support",
"copyright" : "Copyright © Acme Healthcare and GoodCorp EHR Systems",
"kind" : "instance",
"instantiates" : ["http://ihe.org/fhir/CapabilityStatement/pixm-client"],
"software" : {
"name" : "EHR",
"version" : "0.00.020.2134",
"releaseDate" : "2012-01-04"
},
"implementation" : {
"description" : "main EHR at ACME",
"url" : "http://10.2.3.4/fhir"
},
"fhirVersion" : "5.0.0",
"format" : ["xml",
"json"],
"patchFormat" : ["application/xml-patch+xml",
"application/json-patch+json"],
"acceptLanguage" : ["en",
"es"],
"implementationGuide" : ["http://example.org/fhir/us/lab"],
"rest" : [{
"mode" : "server",
"documentation" : "Main FHIR endpoint for acem health",
"security" : {
"cors" : true,
"service" : [{
"coding" : [{
"system" : "http://hl7.org/fhir/restful-security-service",
"code" : "SMART-on-FHIR"
}]
}],
"description" : "See Smart on FHIR documentation"
},
"resource" : [{
"type" : "Patient",
"profile" : "http://registry.fhir.org/r5/StructureDefinition/7896271d-57f6-4231-89dc-dcc91eab2416",
"supportedProfile" : ["http://registry.fhir.org/r5/StructureDefinition/00ab9e7a-06c7-4f77-9234-4154ca1e3347"],
"documentation" : "This server does not let the clients create identities.",
"interaction" : [{
"code" : "read"
},
{
"code" : "vread",
"documentation" : "Only supported for patient records since 12-Dec 2012"
},
{
"code" : "update"
},
{
"code" : "history-instance"
},
{
"code" : "create"
},
{
"code" : "history-type"
}],
"versioning" : "versioned-update",
"readHistory" : true,
"updateCreate" : false,
"conditionalCreate" : true,
"conditionalRead" : "full-support",
"conditionalUpdate" : false,
"conditionalPatch" : false,
"conditionalDelete" : "not-supported",
"searchInclude" : ["Patient:organization"],
"searchRevInclude" : ["Person:patient"],
"searchParam" : [{
"name" : "identifier",
"definition" : "http://hl7.org/fhir/SearchParameter/Patient-identifier",
"type" : "token",
"documentation" : "Only supports search by institution MRN"
},
{
"name" : "general-practitioner",
"definition" : "http://hl7.org/fhir/SearchParameter/Patient-general-practitioner",
"type" : "reference"
}]
}],
"interaction" : [{
"code" : "transaction"
},
{
"code" : "history-system"
}],
"compartment" : ["http://hl7.org/fhir/CompartmentDefinition/patient"]
}],
"messaging" : [{
"endpoint" : [{
"protocol" : {
"system" : "http://hl7.org/fhir/message-transport",
"code" : "mllp"
},
"address" : "mllp:10.1.1.10:9234"
}],
"reliableCache" : 30,
"documentation" : "ADT A08 equivalent for external system notifications",
"supportedMessage" : [{
"mode" : "receiver",
"definition" : "http://hl7.org/fhir/MessageDefinition/example"
}]
}],
"document" : [{
"mode" : "consumer",
"documentation" : "Basic rules for all documents in the EHR system",
"profile" : "http://fhir.hl7.org/base/Profilebc054d23-75e1-4dc6-aca5-838b6b1ac81d/_history/b5fdd9fc-b021-4ea1-911a-721a60663796"
}]
}
10 changes: 5 additions & 5 deletions test/unit/client_interface_sections/read_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def test_read
patient = FHIR::Patient.new({'gender'=>'female', 'active'=>true, 'deceasedBoolean'=>false})
stub_request(:get, /read-test/).to_return(status: 200, body: patient.to_json, headers: {'Content-Type'=>'application/fhir+json', 'ETag'=>'W/"foo"', 'Last-Modified'=>Time.now.strftime("%a, %e %b %Y %T %Z")})
temp = client
temp.use_stu3
temp.use_r4
temp.default_json
reply = temp.read(FHIR::Patient,'foo')
assert reply.resource.is_a?(FHIR::Patient)
Expand All @@ -29,7 +29,7 @@ def test_vread
patient = FHIR::Patient.new({'gender'=>'female', 'active'=>true, 'deceasedBoolean'=>false})
stub_request(:get, /read-test\/.*_history\/2/).to_return(status: 200, body: patient.to_json, headers: {'Content-Type'=>'application/fhir+json', 'ETag'=>'W/"foo"', 'Last-Modified'=>Time.now.strftime("%a, %e %b %Y %T %Z")})
temp = client
temp.use_stu3
temp.use_r4
temp.default_json
reply = temp.vread(FHIR::Patient,'foo', 2)
assert reply.resource.is_a?(FHIR::Patient)
Expand All @@ -46,7 +46,7 @@ def test_conditional_read_since
patient = FHIR::Patient.new({'gender'=>'female', 'active'=>true, 'deceasedBoolean'=>false})
stub_request(:get, /read-test/).with(headers: {'If-Modified-Since' => 'Wed, 21 Oct 2015 07:28:00 GMT'}).to_return(status: 200, body: patient.to_json, headers: {'Content-Type'=>'application/fhir+json', 'ETag'=>'W/"foo"', 'Last-Modified'=>Time.now.strftime("%a, %e %b %Y %T %Z")})
temp = client
temp.use_stu3
temp.use_r4
temp.default_json
reply = temp.conditional_read_since(FHIR::Patient,'foo', 'Wed, 21 Oct 2015 07:28:00 GMT')
assert reply.resource.is_a?(FHIR::Patient)
Expand All @@ -59,7 +59,7 @@ def test_conditional_read_version
patient = FHIR::Patient.new({'gender'=>'female', 'active'=>true, 'deceasedBoolean'=>false})
stub_request(:get, /read-test/).with(headers: {'If-None-Match' => 'W/ABC'}).to_return(status: 200, body: patient.to_json, headers: {'Content-Type'=>'application/fhir+json', 'ETag'=>'W/"foo"', 'Last-Modified'=>Time.now.strftime("%a, %e %b %Y %T %Z")})
temp = client
temp.use_stu3
temp.use_r4
temp.default_json
reply = temp.conditional_read_version(FHIR::Patient,'foo','ABC')
assert reply.resource.is_a?(FHIR::Patient)
Expand All @@ -77,7 +77,7 @@ def test_raw_read
'ETag'=>'W/"foo"',
'Last-Modified'=>Time.now.strftime("%a, %e %b %Y %T %Z")})
temp = client
temp.use_stu3
temp.use_r4
temp.default_json
options = {resource: FHIR::Patient, id: 'foo'}
reply = temp.raw_read(options)
Expand Down
Loading

0 comments on commit 8cbb557

Please sign in to comment.