@@ -100,6 +100,89 @@ describe("Unit tests for statusUpdate", function () {
100100 expect ( requestBundle ) . toEqual ( simpleResponseBundle ( ) )
101101 } )
102102
103+ it ( "when with pharmacy, followed by 2 post-dated ready to collect updates are present, the latest RTC update is applied" , async ( ) => {
104+ // Note that GSUL should only return 1 update per status, so this is belt and braces
105+ const requestBundle = simpleRequestBundle ( )
106+ const statusUpdates = simpleStatusUpdatesPayload ( )
107+
108+ const itemId = "E76812CF-C893-42FF-AB02-B19EA1FA11B4"
109+ statusUpdates . prescriptions [ 0 ] . items = [
110+ {
111+ isTerminalState : false ,
112+ itemId : itemId ,
113+ lastUpdateDateTime : "2026-01-26T17:00:00.000Z" ,
114+ latestStatus : "With Pharmacy"
115+ } ,
116+ {
117+ isTerminalState : false ,
118+ itemId : itemId ,
119+ lastUpdateDateTime : "2026-01-28T12:00:00.000Z" ,
120+ latestStatus : "Ready to Collect" ,
121+ postDatedLastModifiedSetAt : "2026-01-27T10:40:00.000Z"
122+ } ,
123+ {
124+ isTerminalState : false ,
125+ itemId : itemId ,
126+ lastUpdateDateTime : "2026-01-27T12:00:00.000Z" ,
127+ latestStatus : "Ready to Collect" ,
128+ postDatedLastModifiedSetAt : "2026-01-27T11:40:00.000Z"
129+ }
130+ ]
131+
132+ applyStatusUpdates ( logger , requestBundle , statusUpdates )
133+
134+ const prescriptionBundle = requestBundle . entry ! [ 0 ] . resource as Bundle
135+ const medicationRequest = prescriptionBundle . entry ! [ 0 ] . resource as MedicationRequest
136+ const statusExtension = medicationRequest . extension ! [ 0 ] . extension ! . find ( ( e ) => e . url === "status" )
137+
138+ expect ( statusExtension ! . valueCoding ! . code ) . toEqual ( "Ready to Collect" )
139+ expect ( medicationRequest . extension ! [ 0 ] . extension ! [ 1 ] . valueDateTime ) . toEqual ( "2026-01-27T12:00:00.000Z" )
140+ } )
141+
142+ it ( "when with pharmacy, followed by with pharmacy and post-dated ready to collect updates at different pharmacy shows RTC update" , async ( ) => {
143+ const requestBundle = simpleRequestBundle ( )
144+ const statusUpdates = simpleStatusUpdatesPayload ( )
145+
146+ const itemId = "E76812CF-C893-42FF-AB02-B19EA1FA11B4"
147+ statusUpdates . prescriptions [ 0 ] . items = [
148+ {
149+ isTerminalState : false ,
150+ itemId : itemId ,
151+ lastUpdateDateTime : "2026-01-26T17:00:00.000Z" ,
152+ latestStatus : "With Pharmacy"
153+ } ,
154+ {
155+ isTerminalState : false ,
156+ itemId : itemId ,
157+ lastUpdateDateTime : "2026-01-28T12:00:00.000Z" ,
158+ latestStatus : "With Pharmacy" ,
159+ postDatedLastModifiedSetAt : "2026-01-27T10:40:00.000Z"
160+ } ,
161+ {
162+ isTerminalState : false ,
163+ itemId : itemId ,
164+ lastUpdateDateTime : "2026-01-27T12:00:00.000Z" ,
165+ latestStatus : "Ready to Collect"
166+ }
167+ ]
168+
169+ const updatesWithOdsCode = statusUpdates as unknown as {
170+ prescriptions : Array < { items : Array < { odsCode ?: string } > } >
171+ }
172+ updatesWithOdsCode . prescriptions [ 0 ] . items [ 0 ] . odsCode = "FA565"
173+ updatesWithOdsCode . prescriptions [ 0 ] . items [ 1 ] . odsCode = "A83008"
174+ updatesWithOdsCode . prescriptions [ 0 ] . items [ 2 ] . odsCode = "A83008"
175+
176+ applyStatusUpdates ( logger , requestBundle , statusUpdates )
177+
178+ const prescriptionBundle = requestBundle . entry ! [ 0 ] . resource as Bundle
179+ const medicationRequest = prescriptionBundle . entry ! [ 0 ] . resource as MedicationRequest
180+ const statusExtension = medicationRequest . extension ! [ 0 ] . extension ! . find ( ( e ) => e . url === "status" )
181+
182+ expect ( statusExtension ! . valueCoding ! . code ) . toEqual ( "Ready to Collect" )
183+ expect ( medicationRequest . extension ! [ 0 ] . extension ! [ 1 ] . valueDateTime ) . toEqual ( "2026-01-27T12:00:00.000Z" )
184+ } )
185+
103186 it ( "when an update has a terminal state flag set to true, but is less than seven days old, the status is set as 'active'" , async ( ) => {
104187 const requestBundle = simpleRequestBundle ( )
105188 const statusUpdates = simpleStatusUpdatesPayload ( )
0 commit comments