@@ -141,4 +141,84 @@ class OperationsRouterTest {
141141 assertEquals(" timeband-1" , appointment?.timeBand?.id)
142142 }
143143 }
144+
145+ @Test
146+ fun `can retrieve operation with included properties` () {
147+ val jsonFilePath = Paths .get(" src/test/resources/projects/operations/all-operations-with-included-properties.json" )
148+ val jsonContent = Files .readString(jsonFilePath)
149+
150+ val mockEngine = MockEngine { request ->
151+ respond(
152+ content = jsonContent,
153+ status = HttpStatusCode .OK ,
154+ headers = headersOf(HttpHeaders .ContentType , " application/json" )
155+ )
156+ }
157+
158+ val operationsRouter = OperationsRouter (httpClient = HttpClient (mockEngine).configureForTest())
159+
160+ runBlocking {
161+ val response = operationsRouter.one(
162+ organisationId = " 123" ,
163+ operationId = " a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d" ,
164+ requestParameters = OperationRequestParameters (
165+ includes = listOf (
166+ OperationIncludes .Properties
167+ )
168+ )
169+ )
170+
171+ assertIs<Operation >(response)
172+ assertNotNull(response.properties, " Properties should not be null" )
173+ assertEquals(2 , response.properties?.size, " Should have 2 properties" )
174+
175+ // Validate first property
176+ val property1 = response.properties?.find { it.id == " f6a7b8c9-d0e1-4f2a-3b4c-5d6e7f8a9b0c" }
177+ assertNotNull(property1, " First property should exist" )
178+
179+ // Validate address details
180+ assertNotNull(property1?.address)
181+ assertEquals(" 42, Lorem Street, AB12 3CD" , property1?.address?.description)
182+ assertEquals(" 42" , property1?.address?.number)
183+ assertEquals(" Lorem House" , property1?.address?.name)
184+ assertEquals(" Lorem Street" , property1?.address?.thoroughfare)
185+ assertEquals(" DOLOR" , property1?.address?.postTown)
186+ assertEquals(" AB12 3CD" , property1?.address?.postcode)
187+ assertEquals(" United Kingdom" , property1?.address?.country)
188+
189+ // Validate location details
190+ assertNotNull(property1?.location)
191+ assertNotNull(property1?.location?.latLong)
192+ assertEquals(51.5074 , property1?.location?.latLong?.latitude)
193+ assertEquals(- 0.1278 , property1?.location?.latLong?.longitude)
194+
195+ // Validate meters
196+ assertNotNull(property1?.meters)
197+ assertEquals(1 , property1?.meters?.size)
198+ assertEquals(" mprn" , property1?.meters?.get(0 )?.type)
199+ assertEquals(1234567890 , property1?.meters?.get(0 )?.number)
200+
201+ // Validate UPRN
202+ assertEquals(100000000001 , property1?.uprn)
203+
204+ // Validate PSR data
205+ assertNotNull(property1?.psr)
206+ assertEquals(false , property1?.psr?.indicator)
207+
208+ // Validate second property with PSR indicator
209+ val property2 = response.properties?.find { it.id == " e5f6a7b8-c9d0-4e1f-2a3b-4c5d6e7f8a9b" }
210+ assertNotNull(property2, " Second property should exist" )
211+ assertEquals(" 15, Dolor Avenue, EF45 6GH" , property2?.address?.description)
212+ assertEquals(100000000002 , property2?.uprn)
213+
214+ // Validate meters for property2
215+ assertNotNull(property2?.meters)
216+ assertEquals(1 , property2?.meters?.size)
217+ assertEquals(" mprn" , property2?.meters?.get(0 )?.type)
218+ assertEquals(9876543210 , property2?.meters?.get(0 )?.number)
219+
220+ // Validate PSR
221+ assertEquals(true , property2?.psr?.indicator)
222+ }
223+ }
144224}
0 commit comments