From 84afd7d4a2af0fef3d70564d23e85beb55e77ad6 Mon Sep 17 00:00:00 2001 From: Jun Tao Luo Date: Tue, 3 Sep 2024 22:06:48 -0400 Subject: [PATCH] Update unit tests --- .../requests/vaos/v2/appointments_spec.rb | 52 ++++++------- .../services/v2/appointment_service_spec.rb | 75 +++++++++++++------ .../appointments/cancel_appointments_200.yml | 2 +- .../v2/appointments/get_appointment_200.yml | 2 +- ...ppointments_va_booked_200_JACQUELINE_M.yml | 2 +- ...ntments_va_booked_200_JACQUELINE_M_vpg.yml | 2 +- ...pointments_va_booked_200_and_logs_data.yml | 2 +- ...tments_va_booked_200_and_logs_data_vpg.yml | 2 +- 8 files changed, 83 insertions(+), 56 deletions(-) diff --git a/modules/vaos/spec/requests/vaos/v2/appointments_spec.rb b/modules/vaos/spec/requests/vaos/v2/appointments_spec.rb index 10c31dc47b7..e1058598b05 100644 --- a/modules/vaos/spec/requests/vaos/v2/appointments_spec.rb +++ b/modules/vaos/spec/requests/vaos/v2/appointments_spec.rb @@ -724,24 +724,25 @@ def stub_clinics end it 'updates the service name, physical location, friendly name, and location' do - appointment = { clinic: 'Test Clinic', location_id: 1 } - + stub_facilities allow_any_instance_of(VAOS::V2::MobileFacilityService).to receive(:get_clinic) .and_return(service_name: 'Service Name', physical_location: 'Physical Location') - allow_any_instance_of(VAOS::V2::MobileFacilityService).to receive(:get_facility).and_return('Location') - allow_any_instance_of(described_class).to receive(:appointment).and_return(appointment) - allow(Rails.logger).to receive(:info).at_least(:once) + VCR.use_cassette('vaos/v2/appointments/get_appointment_200', + match_requests_on: %i[method path query]) do + allow(Rails.logger).to receive(:info).at_least(:once) - get '/vaos/v2/appointments/70060', headers: inflection_header + get '/vaos/v2/appointments/70060', headers: inflection_header - data = json_body_for(response) - expect(data['serviceName']).to eq('Service Name') - expect(data['physicalLocation']).to eq('Physical Location') - expect(data['friendlyName']).to eq('Service Name') - expect(data['location']).to eq('Location') - expect(Rails.logger).to have_received(:info).with( - 'VAOS::V2::AppointmentsController appointment creation time: unknown' - ) + data = json_body_for(response)['attributes'] + expect(data['serviceName']).to eq('Service Name') + expect(data['physicalLocation']).to eq('Physical Location') + expect(data['friendlyName']).to eq('Service Name') + expect(data['location']).to eq(expected_facility) + expect(Rails.logger).to have_received(:info).with( + 'VAOS::V2::AppointmentsController appointment creation time: 2021-12-13T14:03:02Z', + { created: '2021-12-13T14:03:02Z' }.to_json + ) + end end end @@ -772,6 +773,7 @@ def stub_clinics it 'returns a status code of 200 and the cancelled appointment with the updated status' do stub_facilities + stub_clinics VCR.use_cassette('vaos/v2/appointments/cancel_appointments_200', match_requests_on: %i[method path query]) do put '/vaos/v2/appointments/70060', params: { status: 'cancelled' }, headers: inflection_header expect(response).to have_http_status(:success) @@ -786,22 +788,20 @@ def stub_clinics end context 'when clinic and location_id are present' do - let(:updated_appointment) { { clinic: 'Test Clinic', location_id: 1 } } - it 'updates the service name, physical location, friendly name, and location' do allow_any_instance_of(VAOS::V2::MobileFacilityService).to receive(:get_clinic) .and_return(service_name: 'Service Name', physical_location: 'Physical Location') - allow_any_instance_of(VAOS::V2::MobileFacilityService).to receive(:get_facility) - .and_return('Location') - allow_any_instance_of(described_class).to receive(:updated_appointment).and_return(updated_appointment) - - put '/vaos/v2/appointments/70060', params: { status: 'cancelled' }, headers: inflection_header + stub_facilities + VCR.use_cassette('vaos/v2/appointments/cancel_appointments_200', + match_requests_on: %i[method path query]) do + put '/vaos/v2/appointments/70060', params: { status: 'cancelled' }, headers: inflection_header - data = json_body_for(response) - expect(data['serviceName']).to eq('Service Name') - expect(data['physicalLocation']).to eq('Physical Location') - expect(data['friendlyName']).to eq('Service Name') - expect(data['location']).to eq('Location') + data = json_body_for(response)['attributes'] + expect(data['serviceName']).to eq('Service Name') + expect(data['physicalLocation']).to eq('Physical Location') + expect(data['friendlyName']).to eq('Service Name') + expect(data['location']).to eq(expected_facility) + end end end diff --git a/modules/vaos/spec/services/v2/appointment_service_spec.rb b/modules/vaos/spec/services/v2/appointment_service_spec.rb index 858ad45563e..817396a9977 100644 --- a/modules/vaos/spec/services/v2/appointment_service_spec.rb +++ b/modules/vaos/spec/services/v2/appointment_service_spec.rb @@ -92,11 +92,14 @@ match_requests_on: %i[method path query]) do VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', match_requests_on: %i[method path query]) do - allow(Rails.logger).to receive(:info).at_least(:once) - response = subject.post_appointment(va_booked_request_body) - expect(response[:id]).to be_a(String) - expect(response[:local_start_time]) - .to eq(DateTime.parse('2022-11-30T13:45:00-07:00')) + VCR.use_cassette('vaos/v2/mobile_facility_service/get_clinic_200', + match_requests_on: %i[method path query]) do + allow(Rails.logger).to receive(:info).at_least(:once) + response = subject.post_appointment(va_booked_request_body) + expect(response[:id]).to be_a(String) + expect(response[:local_start_time]) + .to eq(DateTime.parse('2022-11-30T13:45:00-07:00')) + end end end end @@ -106,10 +109,13 @@ match_requests_on: %i[method path query]) do VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', match_requests_on: %i[method path query]) do - response = subject.post_appointment(va_booked_request_body) - expect(response[:id]).to be_a(String) - expect(response[:local_start_time]) - .to eq(DateTime.parse('2022-11-30T13:45:00-07:00')) + VCR.use_cassette('vaos/v2/mobile_facility_service/get_clinic_200', + match_requests_on: %i[method path query]) do + response = subject.post_appointment(va_booked_request_body) + expect(response[:id]).to be_a(String) + expect(response[:local_start_time]) + .to eq(DateTime.parse('2022-11-30T13:45:00-07:00')) + end end end end @@ -117,8 +123,14 @@ it 'returns the created appointment-va-proposed-clinic' do VCR.use_cassette('vaos/v2/appointments/post_appointments_va_proposed_clinic_200', match_requests_on: %i[method path query]) do - response = subject.post_appointment(va_proposed_clinic_request_body) - expect(response[:id]).to eq('70065') + VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + match_requests_on: %i[method path query]) do + VCR.use_cassette('vaos/v2/mobile_facility_service/get_clinic_200', + match_requests_on: %i[method path query]) do + response = subject.post_appointment(va_proposed_clinic_request_body) + expect(response[:id]).to eq('70065') + end + end end end end @@ -186,11 +198,14 @@ match_requests_on: %i[method path query]) do VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', match_requests_on: %i[method path query]) do - allow(Rails.logger).to receive(:info).at_least(:once) - response = subject.post_appointment(va_booked_request_body) - expect(response[:id]).to be_a(String) - expect(response[:local_start_time]) - .to eq(DateTime.parse('2022-11-30T13:45:00-07:00')) + VCR.use_cassette('vaos/v2/mobile_facility_service/get_clinic_200', + match_requests_on: %i[method path query]) do + allow(Rails.logger).to receive(:info).at_least(:once) + response = subject.post_appointment(va_booked_request_body) + expect(response[:id]).to be_a(String) + expect(response[:local_start_time]) + .to eq(DateTime.parse('2022-11-30T13:45:00-07:00')) + end end end end @@ -200,10 +215,13 @@ match_requests_on: %i[method path query]) do VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', match_requests_on: %i[method path query]) do - response = subject.post_appointment(va_booked_request_body) - expect(response[:id]).to be_a(String) - expect(response[:local_start_time]) - .to eq(DateTime.parse('2022-11-30T13:45:00-07:00')) + VCR.use_cassette('vaos/v2/mobile_facility_service/get_clinic_200', + match_requests_on: %i[method path query]) do + response = subject.post_appointment(va_booked_request_body) + expect(response[:id]).to be_a(String) + expect(response[:local_start_time]) + .to eq(DateTime.parse('2022-11-30T13:45:00-07:00')) + end end end end @@ -211,8 +229,14 @@ it 'returns the created appointment-va-proposed-clinic' do VCR.use_cassette('vaos/v2/appointments/post_appointments_va_proposed_clinic_200_vpg', match_requests_on: %i[method path query]) do - response = subject.post_appointment(va_proposed_clinic_request_body) - expect(response[:id]).to eq('70065') + VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + match_requests_on: %i[method path query]) do + VCR.use_cassette('vaos/v2/mobile_facility_service/get_clinic_200', + match_requests_on: %i[method path query]) do + response = subject.post_appointment(va_proposed_clinic_request_body) + expect(response[:id]).to eq('70065') + end + end end end end @@ -788,8 +812,11 @@ match_requests_on: %i[method path query]) do VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', match_requests_on: %i[method path query]) do - response = subject.update_appointment('70060', 'cancelled') - expect(response.status).to eq('cancelled') + VCR.use_cassette('vaos/v2/mobile_facility_service/get_clinic_200', + match_requests_on: %i[method path query]) do + response = subject.update_appointment('70060', 'cancelled') + expect(response.status).to eq('cancelled') + end end end end diff --git a/spec/support/vcr_cassettes/vaos/v2/appointments/cancel_appointments_200.yml b/spec/support/vcr_cassettes/vaos/v2/appointments/cancel_appointments_200.yml index 8b3d3adca05..a33a6150e59 100644 --- a/spec/support/vcr_cassettes/vaos/v2/appointments/cancel_appointments_200.yml +++ b/spec/support/vcr_cassettes/vaos/v2/appointments/cancel_appointments_200.yml @@ -56,7 +56,7 @@ http_interactions: - max-age=63072000; includeSubDomains; preload body: encoding: UTF-8 - string: '{"id":"70060","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/ars/id","value":"8a4890c47da65e2b017db59b20500000"}],"kind":"clinic","status":"cancelled","serviceType":"socialWork","reasonCode":{"text":"text"},"patientIcn":"1012846043V576341","locationId":"983GB","created":"2021-12-13T14:03:02Z","requestedPeriods":[{"start":"2021-12-20T00:00:00Z","end":"2021-12-20T11:59:59.999Z"}],"contact":{"telecom":[{"type":"email","value":"C_Natalie.Yun@cerner.com"},{"type":"phone","value":"2566832029"}]},"preferredTimesForPhoneCall":["Morning"],"cancellationReason":{"code":"other"},"cancellable":true,"extension":{"ccLocation":{"address":{}}}}' + string: '{"id":"70060","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/ars/id","value":"8a4890c47da65e2b017db59b20500000"}],"kind":"clinic","status":"cancelled","serviceType":"socialWork","reasonCode":{"text":"text"},"patientIcn":"1012846043V576341","clinic":"455","locationId":"983GB","created":"2021-12-13T14:03:02Z","requestedPeriods":[{"start":"2021-12-20T00:00:00Z","end":"2021-12-20T11:59:59.999Z"}],"contact":{"telecom":[{"type":"email","value":"C_Natalie.Yun@cerner.com"},{"type":"phone","value":"2566832029"}]},"preferredTimesForPhoneCall":["Morning"],"cancellationReason":{"code":"other"},"cancellable":true,"extension":{"ccLocation":{"address":{}}}}' recorded_at: Wed, 15 Dec 2021 18:51:34 GMT - request: method: put diff --git a/spec/support/vcr_cassettes/vaos/v2/appointments/get_appointment_200.yml b/spec/support/vcr_cassettes/vaos/v2/appointments/get_appointment_200.yml index ef5af27b524..5a394ffce6e 100644 --- a/spec/support/vcr_cassettes/vaos/v2/appointments/get_appointment_200.yml +++ b/spec/support/vcr_cassettes/vaos/v2/appointments/get_appointment_200.yml @@ -56,6 +56,6 @@ http_interactions: - max-age=63072000; includeSubDomains; preload body: encoding: UTF-8 - string: '{"data":{"id":"70060","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/ars/id","value":"8a4890c47da65e2b017db59b20500000"}],"kind":"clinic","status":"proposed","serviceType":"socialWork","reasonCode":{"text":"text"},"patientIcn":"1012846043V576341","locationId":"983GB","created":"2021-12-13T14:03:02Z","requestedPeriods":[{"start":"2021-12-20T00:00:00Z","end":"2021-12-20T11:59:59.999Z"}],"contact":{"telecom":[{"type":"email","value":"C_Natalie.Yun@cerner.com"},{"type":"phone","value":"2566832029"}]},"preferredTimesForPhoneCall":["Morning"],"cancellationReason":{"code":"other"},"cancellable":true,"extension":{"ccLocation":{"address":{}}}}}' + string: '{"data":{"id":"70060","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/ars/id","value":"8a4890c47da65e2b017db59b20500000"}],"kind":"clinic","status":"proposed","serviceType":"socialWork","reasonCode":{"text":"text"},"patientIcn":"1012846043V576341","locationId":"983GB","clinic":"455","created":"2021-12-13T14:03:02Z","requestedPeriods":[{"start":"2021-12-20T00:00:00Z","end":"2021-12-20T11:59:59.999Z"}],"contact":{"telecom":[{"type":"email","value":"C_Natalie.Yun@cerner.com"},{"type":"phone","value":"2566832029"}]},"preferredTimesForPhoneCall":["Morning"],"cancellationReason":{"code":"other"},"cancellable":true,"extension":{"ccLocation":{"address":{}}}}}' recorded_at: Mon, 13 Dec 2021 23:28:26 GMT recorded_with: VCR 6.0.0 diff --git a/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_JACQUELINE_M.yml b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_JACQUELINE_M.yml index 8f5dd8bdf8e..43958167354 100644 --- a/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_JACQUELINE_M.yml +++ b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_JACQUELINE_M.yml @@ -58,7 +58,7 @@ http_interactions: body: encoding: UTF-8 string: '{"id":"139064","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/vista/983/appointment/id","value":"999;20221130.134500"}],"kind":"clinic","status":"booked","serviceType":"optometry","serviceCategory":[{"coding":[{"system":"http://www.va.gov/Terminology/VistADefinedTerms/409_1","code":"REGULAR","display":"REGULAR"}],"text":"REGULAR"}],"reasonCode":{"text":"Routine - Follow-up: testing"},"patientIcn":"1012846043V576341","locationId":"983","clinic":"999","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z","minutesDuration":15,"slot":{"id":"3230323231313330323034353A323032323131333032313030","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z"},"comment":"Routine + Follow-up: testing"},"patientIcn":"1012846043V576341","locationId":"983","clinic":"455","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z","minutesDuration":15,"slot":{"id":"3230323231313330323034353A323032323131333032313030","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z"},"comment":"Routine Follow-up: testing","cancellable":true,"extension":{"ccLocation":{"address":{}}}}' recorded_at: Thu, 20 Oct 2022 22:21:59 GMT recorded_with: VCR 6.1.0 diff --git a/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_JACQUELINE_M_vpg.yml b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_JACQUELINE_M_vpg.yml index a2aceee3340..16d965e63ad 100644 --- a/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_JACQUELINE_M_vpg.yml +++ b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_JACQUELINE_M_vpg.yml @@ -58,7 +58,7 @@ http_interactions: body: encoding: UTF-8 string: '{"id":"139064","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/vista/983/appointment/id","value":"999;20221130.134500"}],"kind":"clinic","status":"booked","serviceType":"optometry","serviceCategory":[{"coding":[{"system":"http://www.va.gov/Terminology/VistADefinedTerms/409_1","code":"REGULAR","display":"REGULAR"}],"text":"REGULAR"}],"reasonCode":{"text":"Routine - Follow-up: testing"},"patientIcn":"1012846043V576341","locationId":"983","clinic":"999","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z","minutesDuration":15,"slot":{"id":"3230323231313330323034353A323032323131333032313030","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z"},"comment":"Routine + Follow-up: testing"},"patientIcn":"1012846043V576341","locationId":"983","clinic":"455","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z","minutesDuration":15,"slot":{"id":"3230323231313330323034353A323032323131333032313030","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z"},"comment":"Routine Follow-up: testing","cancellable":true,"extension":{"ccLocation":{"address":{}}}}' recorded_at: Thu, 20 Oct 2022 22:21:59 GMT recorded_with: VCR 6.1.0 diff --git a/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_and_logs_data.yml b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_and_logs_data.yml index c828dcaccba..0eff96a8fa7 100644 --- a/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_and_logs_data.yml +++ b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_and_logs_data.yml @@ -57,6 +57,6 @@ http_interactions: - max-age=63072000; includeSubDomains; preload body: encoding: UTF-8 - string: '{"id":"139064","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/vista/983/appointment/id","value":"999;20221130.134500"}],"kind":"clinic","status":"booked","serviceType":"optometry","serviceTypes":[{"coding":[{"system":"http://veteran.apps.va.gov/terminologies/fhir/CodeSystem/vats-service-type","code":"optometry"}]}],"serviceCategory":[{"coding":[{"system":"http://www.va.gov/Terminology/VistADefinedTerms/409_1","code":"REGULAR","display":"REGULAR"}],"text":"REGULAR"}],"reasonCode":{"text":"Routine Follow-up: testing"},"patientIcn":"1012846043V576341","locationId":"983","clinic":"999","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z","minutesDuration":15,"slot":{"id":"3230323231313330323034353A323032323131333032313030","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z"},"comment":"Routine Follow-up: testing","cancellable":true, "telehealth":{"url":"https://pexip.mapsandbox.net/vvc-app/?join=1&media=1&escalate=1&conference=VAC000420576@pexip.mapsandbox.net&pin=955191&aid=d9824ec6-1cd2-4875-b8d1-1775c4322572#","atlas":{"siteCode":"VFW-VA-20151-05","confirmationCode":"788926","address":{"streetAddress":"14850 Conference Center Dr","city":"Chantilly","state":"VA","zipCode":"20151","country":"USA","latitutde":38.87426,"longitude":-77.46,"additionalDetails":""}},"group":false,"vvsKind":"ADHOC"}, "extension":{"ccLocation":{"address":{}}}}' + string: '{"id":"139064","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/vista/983/appointment/id","value":"999;20221130.134500"}],"kind":"clinic","status":"booked","serviceType":"optometry","serviceTypes":[{"coding":[{"system":"http://veteran.apps.va.gov/terminologies/fhir/CodeSystem/vats-service-type","code":"optometry"}]}],"serviceCategory":[{"coding":[{"system":"http://www.va.gov/Terminology/VistADefinedTerms/409_1","code":"REGULAR","display":"REGULAR"}],"text":"REGULAR"}],"reasonCode":{"text":"Routine Follow-up: testing"},"patientIcn":"1012846043V576341","locationId":"983","clinic":"455","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z","minutesDuration":15,"slot":{"id":"3230323231313330323034353A323032323131333032313030","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z"},"comment":"Routine Follow-up: testing","cancellable":true, "telehealth":{"url":"https://pexip.mapsandbox.net/vvc-app/?join=1&media=1&escalate=1&conference=VAC000420576@pexip.mapsandbox.net&pin=955191&aid=d9824ec6-1cd2-4875-b8d1-1775c4322572#","atlas":{"siteCode":"VFW-VA-20151-05","confirmationCode":"788926","address":{"streetAddress":"14850 Conference Center Dr","city":"Chantilly","state":"VA","zipCode":"20151","country":"USA","latitutde":38.87426,"longitude":-77.46,"additionalDetails":""}},"group":false,"vvsKind":"ADHOC"}, "extension":{"ccLocation":{"address":{}}}}' recorded_at: Thu, 20 Oct 2022 22:21:59 GMT recorded_with: VCR 6.1.0 diff --git a/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_and_logs_data_vpg.yml b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_and_logs_data_vpg.yml index 05edca11a2a..5fb02c8f3f7 100644 --- a/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_and_logs_data_vpg.yml +++ b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_and_logs_data_vpg.yml @@ -57,6 +57,6 @@ http_interactions: - max-age=63072000; includeSubDomains; preload body: encoding: UTF-8 - string: '{"id":"139064","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/vista/983/appointment/id","value":"999;20221130.134500"}],"kind":"clinic","status":"booked","serviceType":"optometry","serviceTypes":[{"coding":[{"system":"http://veteran.apps.va.gov/terminologies/fhir/CodeSystem/vats-service-type","code":"optometry"}]}],"serviceCategory":[{"coding":[{"system":"http://www.va.gov/Terminology/VistADefinedTerms/409_1","code":"REGULAR","display":"REGULAR"}],"text":"REGULAR"}],"reasonCode":{"text":"Routine Follow-up: testing"},"patientIcn":"1012846043V576341","locationId":"983","clinic":"999","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z","minutesDuration":15,"slot":{"id":"3230323231313330323034353A323032323131333032313030","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z"},"comment":"Routine Follow-up: testing","cancellable":true, "telehealth":{"url":"https://pexip.mapsandbox.net/vvc-app/?join=1&media=1&escalate=1&conference=VAC000420576@pexip.mapsandbox.net&pin=955191&aid=d9824ec6-1cd2-4875-b8d1-1775c4322572#","atlas":{"siteCode":"VFW-VA-20151-05","confirmationCode":"788926","address":{"streetAddress":"14850 Conference Center Dr","city":"Chantilly","state":"VA","zipCode":"20151","country":"USA","latitutde":38.87426,"longitude":-77.46,"additionalDetails":""}},"group":false,"vvsKind":"ADHOC"}, "extension":{"ccLocation":{"address":{}}}}' + string: '{"id":"139064","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/vista/983/appointment/id","value":"999;20221130.134500"}],"kind":"clinic","status":"booked","serviceType":"optometry","serviceTypes":[{"coding":[{"system":"http://veteran.apps.va.gov/terminologies/fhir/CodeSystem/vats-service-type","code":"optometry"}]}],"serviceCategory":[{"coding":[{"system":"http://www.va.gov/Terminology/VistADefinedTerms/409_1","code":"REGULAR","display":"REGULAR"}],"text":"REGULAR"}],"reasonCode":{"text":"Routine Follow-up: testing"},"patientIcn":"1012846043V576341","locationId":"983","clinic":"455","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z","minutesDuration":15,"slot":{"id":"3230323231313330323034353A323032323131333032313030","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z"},"comment":"Routine Follow-up: testing","cancellable":true, "telehealth":{"url":"https://pexip.mapsandbox.net/vvc-app/?join=1&media=1&escalate=1&conference=VAC000420576@pexip.mapsandbox.net&pin=955191&aid=d9824ec6-1cd2-4875-b8d1-1775c4322572#","atlas":{"siteCode":"VFW-VA-20151-05","confirmationCode":"788926","address":{"streetAddress":"14850 Conference Center Dr","city":"Chantilly","state":"VA","zipCode":"20151","country":"USA","latitutde":38.87426,"longitude":-77.46,"additionalDetails":""}},"group":false,"vvsKind":"ADHOC"}, "extension":{"ccLocation":{"address":{}}}}' recorded_at: Thu, 20 Oct 2022 22:21:59 GMT recorded_with: VCR 6.1.0