Serenity BDD Report
Home > Requirements > Stufe5 > Terminplanung > Testing search parameters against the appointment resource (@appointment-search)
Report generated 01-09-2026 07:09

Feature: Testing search parameters against the appointment resource (@appointment-search)

Scenarios

Given the Test Description: "The system under test MUST find the previously created resource when searched using the parameter and return it in the search results (SEARCH)."

Given the Preconditions: - The Appointment-Read test case must have been executed successfully beforehand.

Then Get FHIR resource at "http://fhirserver/metadata" with content type "json"

And CapabilityStatement contains interaction "search-type" for resource "Appointment"

And CapabilityStatement contains definition of search parameter "{searchParamValue}" of type "{searchParamType}" for resource "Appointment"

Examples:

searchParamValuesearchParamType
_idtoken
_tagtoken
_countnumber
statustoken
service-typetoken
specialtytoken
datedate
slotreference
actorreference

Then Get FHIR resource at "http://fhirserver/Appointment/?_id=${data.appointment-read-id}" with content type "xml"

And response bundle contains resource with ID "${data.appointment-read-id}" with error message "The requested appointment ${data.appointment-read-id} is not contained in the response bundle"

And Check if current response of resource "Appointment" is valid isik5 resource and conforms to profile "https://gematik.de/fhir/isik/StructureDefinition/ISiKTermin"

When Get FHIR resource at "http://fhirserver/Appointment/?_tag=${data.tag-system}%7C${data.tag-value}&_id=${data.appointment-read-id}" with content type "xml"

And FHIR current response body evaluates the FHIRPath 'entry.resource.count() } 0' with error message 'No search results were found'

And FHIR current response body evaluates the FHIRPath "entry.resource.all(meta.tag.where(code='${data.tag-value}').exists())" with error message 'There are search results, but they do not fully match the search criteria'

And response bundle contains resource with ID "${data.appointment-read-id}" with error message "The requested appointment ${data.appointment-read-id} is not contained in the response bundle"

When Get FHIR resource at "http://fhirserver/Appointment/?_count=1" with content type "xml"

And FHIR current response body evaluates the FHIRPath 'entry.resource.count() } 0 and entry.resource.count() {= 1' with error message 'The _count parameter was not applied as expected'

Then Get FHIR resource at "http://fhirserver/Appointment/?status=cancelled&actor=Patient/${data.appointment-patient-id}" with content type "json"

And FHIR current response body evaluates the FHIRPath 'entry.resource.ofType(Appointment).count() } 0' with error message 'No search results were found'

And FHIR current response body evaluates the FHIRPath "entry.resource.ofType(Appointment).all(status = 'cancelled')" with error message 'There are search results, but they do not fully match the search criteria.'

And response bundle contains resource with ID "${data.appointment-read-id}" with error message "The requested appointment ${data.appointment-read-id} is not contained in the response bundle"

Then Get FHIR resource at "http://fhirserver/Appointment/?service-type=${data.schedule-read-servicetype-code}&actor=Patient/${data.appointment-patient-id}" with content type "json"

And FHIR current response body evaluates the FHIRPath 'entry.resource.ofType(Appointment).count() } 0' with error message 'No search results were found'

And FHIR current response body evaluates the FHIRPath "entry.resource.ofType(Appointment).all(serviceType.coding.where(code='${data.schedule-read-servicetype-code}' and system='${data.schedule-read-servicetype-system}').exists())" with error message 'There are search results, but they do not fully match the search criteria.'

Then Get FHIR resource at "http://fhirserver/Appointment/?actor=Patient/${data.appointment-patient-id}&specialty=http://ihe-d.de/CodeSystems/AerztlicheFachrichtungen%7CNEUR" with content type "json"

And FHIR current response body evaluates the FHIRPath 'entry.resource.ofType(Appointment).count() } 0' with error message 'No search results were found'

And FHIR current response body evaluates the FHIRPath "entry.resource.ofType(Appointment).all(specialty.coding.where(code = 'NEUR' and system ='http://ihe-d.de/CodeSystems/AerztlicheFachrichtungen').exists())" with error message 'There are search results, but they do not fully match the search criteria.'

Then Get FHIR resource at "http://fhirserver/Appointment/?date=${data.slot-read-start}&actor=Patient/${data.appointment-patient-id}" with content type "xml"

And FHIR current response body evaluates the FHIRPath 'entry.resource.ofType(Appointment).count() } 0' with error message 'No search results were found'

And FHIR current response body evaluates the FHIRPath "entry.resource.ofType(Appointment).all(start.toString().contains('${data.slot-read-start}') or start ~ @${data.slot-read-start})" with error message 'There are search results, but they do not fully match the search criteria.'

Then Get FHIR resource at "http://fhirserver/Appointment/?slot=${data.slot-read-id}&actor=Patient/${data.appointment-patient-id}" with content type "xml"

And FHIR current response body evaluates the FHIRPath 'entry.resource.ofType(Appointment).count() } 0' with error message 'No search results were found'

And FHIR current response body evaluates the FHIRPath "entry.resource.ofType(Appointment).all(slot.where(reference.replaceMatches('/_history/.+','').matches('\b${data.slot-read-id}$')).exists())" with error message 'There are search results, but they do not fully match the search criteria.'

Feature Coverage By Scenario

Test Outcomes

Test Performance

Key Statistics

Number of Scenarios 11 Total Duration 28s
Total Number of Test Cases 19 Fastest Test 287ms
Number of Manual Test Cases 0 Slowest Test 12s
Tests Started Sep 01, 2026 07:09:33 Average Execution Time 1s
Tests Finished Sep 01, 2026 07:10:01 Cumulative Test Time
(sum of all individual test durations)
28s

Automated Tests

feature Scenario Context Steps Started Total Duration Result
Testing search parameters against the Appointment resource (@Appointment-Search) Precondition 2 07:09:33 438ms SUCCESS
Testing search parameters against the Appointment resource (@Appointment-Search) Read and Validation of the CapabilityStatement 2 07:09:33 7s 655ms SUCCESS
Testing search parameters against the Appointment resource (@Appointment-Search) Validation of the search parameter definitions in the CapabilityStatement
9 passing test cases
1 07:09:41 2s 732ms SUCCESS
Testing search parameters against the Appointment resource (@Appointment-Search) Search for the Appointment by ID 3 07:09:44 12s 183ms SUCCESS
Testing search parameters against the Appointment resource (@Appointment-Search) Optional Search for the Appointment by Tag and ID 4 07:09:56 917ms SUCCESS
Testing search parameters against the Appointment resource (@Appointment-Search) Search for the Appointment by Count 2 07:09:57 497ms SUCCESS
Testing search parameters against the Appointment resource (@Appointment-Search) Search for the Appointment that belong to a Patient, by Status 4 07:09:57 917ms SUCCESS
Testing search parameters against the Appointment resource (@Appointment-Search) Search for the Appointment that belong to a Patient, by Service Type 3 07:09:58 735ms SUCCESS
Testing search parameters against the Appointment resource (@Appointment-Search) Search for the Appointment that belong to a Patient, by Specialty 3 07:09:59 696ms SUCCESS
Testing search parameters against the Appointment resource (@Appointment-Search) Search for the Appointment that belong to a Patient, by Date 3 07:09:59 725ms SUCCESS
Testing search parameters against the Appointment resource (@Appointment-Search) Search for the Appointment that belong to a Patient, by Slot 3 07:10:00 706ms SUCCESS

Manual Tests

No manual tests were recorded

Evidence

Scenario Title Details
Precondition RBellog 0  Download Evidence
Read and Validation of the CapabilityStatement INFO - rest.where(mode = 'server').resource.where(type = 'Appointment' and interaction.where(code = 'search-type').exists()).exists()  Details
Read and Validation of the CapabilityStatement RBellog 0  Download Evidence
Read and Validation of the CapabilityStatement Evidence Report  Download Evidence
Validation of the search parameter definitions in the CapabilityStatement INFO - rest.where(mode = 'server').resource.where(type = 'Appointment' and searchParam.where(name = '_id' and type = 'token').exists()).exists()  Details
Validation of the search parameter definitions in the CapabilityStatement RBellog 1  Download Evidence
Validation of the search parameter definitions in the CapabilityStatement Evidence Report  Download Evidence
Validation of the search parameter definitions in the CapabilityStatement INFO - rest.where(mode = 'server').resource.where(type = 'Appointment' and searchParam.where(name = '_tag' and type = 'token').exists()).exists()  Details
Validation of the search parameter definitions in the CapabilityStatement RBellog 2  Download Evidence
Validation of the search parameter definitions in the CapabilityStatement Evidence Report  Download Evidence
Validation of the search parameter definitions in the CapabilityStatement INFO - rest.where(mode = 'server').resource.where(type = 'Appointment' and searchParam.where(name = '_count' and type = 'number').exists()).exists()  Details
Validation of the search parameter definitions in the CapabilityStatement RBellog 3  Download Evidence
Validation of the search parameter definitions in the CapabilityStatement Evidence Report  Download Evidence
Validation of the search parameter definitions in the CapabilityStatement INFO - rest.where(mode = 'server').resource.where(type = 'Appointment' and searchParam.where(name = 'status' and type = 'token').exists()).exists()  Details
Validation of the search parameter definitions in the CapabilityStatement RBellog 4  Download Evidence
Validation of the search parameter definitions in the CapabilityStatement Evidence Report  Download Evidence
Validation of the search parameter definitions in the CapabilityStatement INFO - rest.where(mode = 'server').resource.where(type = 'Appointment' and searchParam.where(name = 'service-type' and type = 'token').exists()).exists()  Details
Validation of the search parameter definitions in the CapabilityStatement RBellog 5  Download Evidence
Validation of the search parameter definitions in the CapabilityStatement Evidence Report  Download Evidence
Validation of the search parameter definitions in the CapabilityStatement INFO - rest.where(mode = 'server').resource.where(type = 'Appointment' and searchParam.where(name = 'specialty' and type = 'token').exists()).exists()  Details
Validation of the search parameter definitions in the CapabilityStatement RBellog 6  Download Evidence
Validation of the search parameter definitions in the CapabilityStatement Evidence Report  Download Evidence
Validation of the search parameter definitions in the CapabilityStatement INFO - rest.where(mode = 'server').resource.where(type = 'Appointment' and searchParam.where(name = 'date' and type = 'date').exists()).exists()  Details
Validation of the search parameter definitions in the CapabilityStatement RBellog 7  Download Evidence
Validation of the search parameter definitions in the CapabilityStatement Evidence Report  Download Evidence
Validation of the search parameter definitions in the CapabilityStatement INFO - rest.where(mode = 'server').resource.where(type = 'Appointment' and searchParam.where(name = 'slot' and type = 'reference').exists()).exists()  Details
Validation of the search parameter definitions in the CapabilityStatement RBellog 8  Download Evidence
Validation of the search parameter definitions in the CapabilityStatement Evidence Report  Download Evidence
Validation of the search parameter definitions in the CapabilityStatement INFO - rest.where(mode = 'server').resource.where(type = 'Appointment' and searchParam.where(name = 'actor' and type = 'reference').exists()).exists()  Details
Validation of the search parameter definitions in the CapabilityStatement RBellog 9  Download Evidence
Validation of the search parameter definitions in the CapabilityStatement Evidence Report  Download Evidence
Search for the Appointment by ID INFO - entry.resource.where(id.replaceMatches('/_history/.+','').matches('\\bAppointment-Read-Example$')).count() = 1  Details
Search for the Appointment by ID INFO - This element does not match any known slice defined in the profile https://gematik.de/fhir/isik/StructureDefinition/ISiKTermin|5.1.2  Details
Search for the Appointment by ID WARN - Value set https://gematik.de/fhir/isik/ValueSet/ISiKTerminPriority has been ignored due to module configuration  Details
Search for the Appointment by ID INFO - Code system definition is missing for 'http://snomed.info/sct#394848005'  Details
Search for the Appointment by ID RBellog 0  Download Evidence
Search for the Appointment by ID Evidence Report  Download Evidence
Optional Search for the Appointment by Tag and ID INFO - entry.resource.count() > 0  Details
Optional Search for the Appointment by Tag and ID INFO - entry.resource.all(meta.tag.where(code='external').exists())  Details
Optional Search for the Appointment by Tag and ID INFO - entry.resource.where(id.replaceMatches('/_history/.+','').matches('\\bAppointment-Read-Example$')).count() = 1  Details
Optional Search for the Appointment by Tag and ID RBellog 0  Download Evidence
Optional Search for the Appointment by Tag and ID Evidence Report  Download Evidence
Search for the Appointment by Count INFO - entry.resource.count() > 0 and entry.resource.count() <= 1  Details
Search for the Appointment by Count RBellog 0  Download Evidence
Search for the Appointment by Count Evidence Report  Download Evidence
Search for the Appointment that belong to a Patient, by Status INFO - entry.resource.ofType(Appointment).count() > 0  Details
Search for the Appointment that belong to a Patient, by Status INFO - entry.resource.ofType(Appointment).all(status = 'cancelled')  Details
Search for the Appointment that belong to a Patient, by Status INFO - entry.resource.where(id.replaceMatches('/_history/.+','').matches('\\bAppointment-Read-Example$')).count() = 1  Details
Search for the Appointment that belong to a Patient, by Status RBellog 0  Download Evidence
Search for the Appointment that belong to a Patient, by Status Evidence Report  Download Evidence
Search for the Appointment that belong to a Patient, by Service Type INFO - entry.resource.ofType(Appointment).count() > 0  Details
Search for the Appointment that belong to a Patient, by Service Type INFO - entry.resource.ofType(Appointment).all(serviceType.coding.where(code='177' and system='http://terminology.hl7.org/CodeSystem/service-type').exists())  Details
Search for the Appointment that belong to a Patient, by Service Type RBellog 0  Download Evidence
Search for the Appointment that belong to a Patient, by Service Type Evidence Report  Download Evidence
Search for the Appointment that belong to a Patient, by Specialty INFO - entry.resource.ofType(Appointment).count() > 0  Details
Search for the Appointment that belong to a Patient, by Specialty INFO - entry.resource.ofType(Appointment).all(specialty.coding.where(code = 'NEUR' and system ='http://ihe-d.de/CodeSystems/AerztlicheFachrichtungen').exists())  Details
Search for the Appointment that belong to a Patient, by Specialty RBellog 0  Download Evidence
Search for the Appointment that belong to a Patient, by Specialty Evidence Report  Download Evidence
Search for the Appointment that belong to a Patient, by Date INFO - entry.resource.ofType(Appointment).count() > 0  Details
Search for the Appointment that belong to a Patient, by Date INFO - entry.resource.ofType(Appointment).all(start.toString().contains('2027-01-01') or start ~ @2027-01-01)  Details
Search for the Appointment that belong to a Patient, by Date RBellog 0  Download Evidence
Search for the Appointment that belong to a Patient, by Date Evidence Report  Download Evidence
Search for the Appointment that belong to a Patient, by Slot INFO - entry.resource.ofType(Appointment).count() > 0  Details
Search for the Appointment that belong to a Patient, by Slot INFO - entry.resource.ofType(Appointment).all(slot.where(reference.replaceMatches('/_history/.+','').matches('\\bSlot-Read-Example$')).exists())  Details
Search for the Appointment that belong to a Patient, by Slot RBellog 0  Download Evidence
Search for the Appointment that belong to a Patient, by Slot Evidence Report  Download Evidence
Serenity BDD version 5.3.10