Skip to content

Commit

Permalink
71787 CIE VAOS Appointment Serializer (#16304)
Browse files Browse the repository at this point in the history
* 71787 CIE VAOS Appointment Serializer

* Reducing LOC

* Removing unwanted test data

---------

Co-authored-by: kanchanasuriya <[email protected]>
  • Loading branch information
kanchanasuriya and kanchanasuriya authored Apr 16, 2024
1 parent 0b0ce7e commit 3345419
Show file tree
Hide file tree
Showing 2 changed files with 268 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# frozen_string_literal: true

module CheckIn
module VAOS
class VAOSAppointmentDataSerializer
include JSONAPI::Serializer

keys_to_serialize = %i[id identifier kind status serviceType locationId clinic start end extension]

set_id(&:id)

attribute :appointments do |object|
object.data.map do |data|
data.select { |key| keys_to_serialize.include?(key) }
end
end
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,249 @@
# frozen_string_literal: true

require 'rails_helper'

RSpec.describe CheckIn::VAOS::VAOSAppointmentDataSerializer do
subject { described_class }

let(:vaos_appointment_data) do
{
data: [
{
id: '180765',
identifier: [
{
system: 'Appointment/',
value: '413938333130383735'
},
{
system: 'http://www.va.gov/Terminology/VistADefinedTerms/409_84',
value: '983:10875'
}
],
kind: 'clinic',
status: 'booked',
serviceType: 'amputation',
patientIcn: '1013125218V696863',
locationId: '983GC',
clinic: '1081',
start: '2023-11-06T16:00:00Z',
end: '2023-11-06T16:30:00Z',
minutesDuration: 30,
created: '2023-08-02T00:00:00Z',
cancellable: true,
extension: {
ccLocation: {
address: {}
},
vistaStatus: [
'NO ACTION TAKEN'
],
preCheckinAllowed: true,
eCheckinAllowed: true
}
},
{
id: '180766',
identifier: [
{
system: 'Appointment/',
value: '413938333130383736'
},
{
system: 'http://www.va.gov/Terminology/VistADefinedTerms/409_84',
value: '983:10876'
}
],
kind: 'clinic',
status: 'booked',
serviceType: 'amputation',
patientIcn: '1013125218V696863',
locationId: '983GC',
clinic: '1081',
start: '2023-11-13T16:00:00Z',
end: '2023-11-13T16:30:00Z',
minutesDuration: 30,
created: '2023-08-02T00:00:00Z',
cancellable: true,
extension: {
ccLocation: {
address: {}
},
vistaStatus: [
'FUTURE'
],
preCheckinAllowed: true,
eCheckinAllowed: true
}
}
]
}
end

context 'For valid vaos appointment data' do
let(:appointment1) do
{
id: '180765',
identifier: [
{
system: 'Appointment/',
value: '413938333130383735'
},
{
system: 'http://www.va.gov/Terminology/VistADefinedTerms/409_84',
value: '983:10875'
}
],
kind: 'clinic',
status: 'booked',
serviceType: 'amputation',
locationId: '983GC',
clinic: '1081',
start: '2023-11-06T16:00:00Z',
end: '2023-11-06T16:30:00Z',
extension: {
ccLocation: {
address: {}
},
vistaStatus: [
'NO ACTION TAKEN'
],
preCheckinAllowed: true,
eCheckinAllowed: true
}
}
end
let(:appointment2) do
{
id: '180766',
identifier: [
{
system: 'Appointment/',
value: '413938333130383736'
},
{
system: 'http://www.va.gov/Terminology/VistADefinedTerms/409_84',
value: '983:10876'
}
],
kind: 'clinic',
status: 'booked',
serviceType: 'amputation',
locationId: '983GC',
clinic: '1081',
start: '2023-11-13T16:00:00Z',
end: '2023-11-13T16:30:00Z',
extension: {
ccLocation: {
address: {}
},
vistaStatus: [
'FUTURE'
],
preCheckinAllowed: true,
eCheckinAllowed: true
}
}
end

let(:serialized_hash_response) do
{
data:
{
id: nil,
type: :vaos_appointment_data,
attributes:
{
appointments:
[
appointment1, appointment2
]
}
}
}
end

it 'returns a serialized hash' do
appt_struct = OpenStruct.new(vaos_appointment_data)
appt_serializer = subject.new(appt_struct)
expect(appt_serializer.serializable_hash).to eq(serialized_hash_response)
end
end

context 'Missing serialization key' do
let(:vaos_appointment_data_without_identifier) do
{
data: [
{
id: '180765',
kind: 'clinic',
status: 'booked',
serviceType: 'amputation',
patientIcn: '1013125218V696863',
locationId: '983GC',
clinic: '1081',
start: '2023-11-06T16:00:00Z',
end: '2023-11-06T16:30:00Z',
created: '2023-08-02T00:00:00Z',
cancellable: true,
extension: {
ccLocation: {
address: {}
},
vistaStatus: [
'NO ACTION TAKEN'
],
preCheckinAllowed: true,
eCheckinAllowed: true
}
}
]
}
end

let(:appointment_without_identifier) do
{
id: '180765',
kind: 'clinic',
status: 'booked',
serviceType: 'amputation',
locationId: '983GC',
clinic: '1081',
start: '2023-11-06T16:00:00Z',
end: '2023-11-06T16:30:00Z',
extension: {
ccLocation: {
address: {}
},
vistaStatus: [
'NO ACTION TAKEN'
],
preCheckinAllowed: true,
eCheckinAllowed: true
}
}
end
let(:serialized_hash_response) do
{
data:
{
id: nil,
type: :vaos_appointment_data,
attributes:
{
appointments:
[
appointment_without_identifier
]
}
}
}
end

it 'identifier not present' do
appt_struct = OpenStruct.new(vaos_appointment_data_without_identifier)
appt_serializer = subject.new(appt_struct)
expect(appt_serializer.serializable_hash).to eq(serialized_hash_response)
end
end
end

0 comments on commit 3345419

Please sign in to comment.