Skip to content

Commit c2305f0

Browse files
authored
MAN-190: Added lao checks for caseload search (#4477)
1 parent 28f5681 commit c2305f0

File tree

12 files changed

+255
-40
lines changed

12 files changed

+255
-40
lines changed

projects/manage-supervision-and-delius/src/dev/kotlin/uk/gov/justice/digital/hmpps/data/DataLoader.kt

+21-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import org.springframework.transaction.annotation.Transactional
1010
import uk.gov.justice.digital.hmpps.audit.BusinessInteraction
1111
import uk.gov.justice.digital.hmpps.data.generator.*
1212
import uk.gov.justice.digital.hmpps.data.generator.CourtAppearanceGenerator.COURT_APPEARANCE
13+
import uk.gov.justice.digital.hmpps.data.generator.PersonGenerator.GENDER_MALE
1314
import uk.gov.justice.digital.hmpps.data.generator.personalDetails.PersonDetailsGenerator
1415
import uk.gov.justice.digital.hmpps.integrations.delius.audit.BusinessInteractionCode
1516
import uk.gov.justice.digital.hmpps.user.AuditUserRepository
@@ -41,6 +42,7 @@ class DataLoader(
4142
ContactGenerator.DEFAULT_BOROUGH,
4243
ContactGenerator.DEFAULT_DISTRICT,
4344
ContactGenerator.DEFAULT_STAFF,
45+
ContactGenerator.LIMITED_ACCESS_STAFF,
4446
ContactGenerator.STAFF_1,
4547
ContactGenerator.DEFAULT_TEAM,
4648
ContactGenerator.LOCATION_BRK_1,
@@ -49,7 +51,9 @@ class DataLoader(
4951

5052
entityManager.persist(ContactGenerator.USER_1)
5153

52-
entityManager.persist(PersonGenerator.OVERVIEW.gender)
54+
entityManager.persist(ContactGenerator.LIMITED_ACCESS_USER)
55+
56+
entityManager.persist(GENDER_MALE)
5357

5458
PersonGenerator.DISABILITIES.forEach { entityManager.persist(it.type) }
5559
PersonGenerator.PROVISIONS.forEach { entityManager.persist(it.type) }
@@ -62,7 +66,6 @@ class DataLoader(
6266
entityManager.persistCollection(PersonGenerator.PROVISIONS)
6367
entityManager.persistCollection(PersonGenerator.PERSONAL_CIRCUMSTANCES)
6468
entityManager.persist(PersonGenerator.OVERVIEW)
65-
6669
entityManager.persist(CourtGenerator.BHAM)
6770
entityManager.persist(PersonGenerator.EVENT_1)
6871
entityManager.persist(PersonGenerator.EVENT_2)
@@ -188,6 +191,9 @@ class DataLoader(
188191
PersonDetailsGenerator.LANGUAGE_RD,
189192
PersonDetailsGenerator.GENDER_IDENTITY_RD,
190193
PersonDetailsGenerator.PERSONAL_DETAILS,
194+
PersonDetailsGenerator.RESTRICTION,
195+
PersonDetailsGenerator.EXCLUSION,
196+
PersonDetailsGenerator.RESTRICTION_EXCLUSION,
191197
PersonDetailsGenerator.DISABILITY_1_RD,
192198
PersonDetailsGenerator.DISABILITY_2_RD,
193199
PersonDetailsGenerator.PERSONAL_CIRCUMSTANCE_1_RD,
@@ -222,10 +228,23 @@ class DataLoader(
222228
entityManager.flush()
223229
entityManager.merge(PersonGenerator.PERSON_1)
224230
entityManager.merge(PersonGenerator.PERSON_2)
231+
entityManager.merge(PersonGenerator.CL_EXCLUDED)
232+
entityManager.merge(PersonGenerator.CL_RESTRICTED)
233+
entityManager.merge(PersonGenerator.CL_RESTRICTED_EXCLUDED)
225234
entityManager.flush()
226235
entityManager.persist(PersonGenerator.CASELOAD_PERSON_1)
227236
entityManager.persist(PersonGenerator.CASELOAD_PERSON_2)
228237
entityManager.persist(PersonGenerator.CASELOAD_PERSON_3)
238+
239+
entityManager.persist(PersonGenerator.CASELOAD_LIMITED_ACCESS_EXCLUSION)
240+
entityManager.persist(PersonGenerator.CASELOAD_LIMITED_ACCESS_RESTRICTION)
241+
entityManager.persist(PersonGenerator.CASELOAD_LIMITED_ACCESS_BOTH)
242+
entityManager.persist(PersonGenerator.CASELOAD_LIMITED_ACCESS_NEITHER)
243+
244+
entityManager.persist(LimitedAccessGenerator.EXCLUSION)
245+
entityManager.persist(LimitedAccessGenerator.RESTRICTION)
246+
entityManager.persist(LimitedAccessGenerator.BOTH_EXCLUSION)
247+
entityManager.persist(LimitedAccessGenerator.BOTH_RESTRICTION)
229248
}
230249

231250
private fun EntityManager.persistAll(vararg entities: Any) {

projects/manage-supervision-and-delius/src/dev/kotlin/uk/gov/justice/digital/hmpps/data/generator/ContactGenerator.kt

+9
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ object ContactGenerator {
3030

3131
val DEFAULT_STAFF = generateStaff("N01BDT1", "John", "Smith", emptyList())
3232
val STAFF_1 = generateStaff("N01BDT2", "Jim", "Brown", emptyList())
33+
val LIMITED_ACCESS_STAFF = generateStaff("N01BDT3", "Limited", "Access", emptyList())
3334

3435
val DEFAULT_TEAM = generateTeam(code = "TEAM11", description = "Main Team", staff = listOf(DEFAULT_STAFF, STAFF_1))
3536

@@ -48,6 +49,14 @@ object ContactGenerator {
4849
username = "JimBrown"
4950
)
5051

52+
val LIMITED_ACCESS_USER = User(
53+
id = IdGenerator.getAndIncrement(),
54+
forename = "Limited",
55+
surname = "Access",
56+
staff = LIMITED_ACCESS_STAFF,
57+
username = "LimitedAccess"
58+
)
59+
5160
val COMMUNICATION_CATEGORY_RD = ReferenceData(IdGenerator.getAndIncrement(), "LT", "Communication")
5261

5362
val BREACH_CONTACT_TYPE = generateContactType("BRE02", false, "Breach Contact Type")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package uk.gov.justice.digital.hmpps.data.generator
2+
3+
import uk.gov.justice.digital.hmpps.data.generator.personalDetails.PersonDetailsGenerator
4+
import uk.gov.justice.digital.hmpps.entity.Exclusion
5+
import uk.gov.justice.digital.hmpps.entity.LimitedAccessPerson
6+
import uk.gov.justice.digital.hmpps.entity.LimitedAccessUser
7+
import uk.gov.justice.digital.hmpps.entity.Restriction
8+
import uk.gov.justice.digital.hmpps.integrations.delius.overview.entity.Person
9+
import uk.gov.justice.digital.hmpps.integrations.delius.user.entity.User
10+
import java.time.LocalDateTime
11+
12+
object LimitedAccessGenerator {
13+
val EXCLUSION = generateExclusion(PersonDetailsGenerator.EXCLUSION)
14+
val RESTRICTION =
15+
generateRestriction(PersonDetailsGenerator.RESTRICTION, endDateTime = LocalDateTime.now().plusDays(1))
16+
val BOTH_EXCLUSION = generateExclusion(PersonDetailsGenerator.RESTRICTION_EXCLUSION)
17+
val BOTH_RESTRICTION = generateRestriction(
18+
PersonDetailsGenerator.RESTRICTION_EXCLUSION,
19+
endDateTime = LocalDateTime.now().plusDays(1)
20+
)
21+
22+
fun generateExclusion(
23+
person: Person,
24+
user: User = ContactGenerator.LIMITED_ACCESS_USER,
25+
endDateTime: LocalDateTime? = null,
26+
id: Long = IdGenerator.getAndIncrement()
27+
) = Exclusion(person.limitedAccess(), user.limitedAccess(), endDateTime, id)
28+
29+
fun generateRestriction(
30+
person: Person,
31+
user: User = ContactGenerator.USER_1,
32+
endDateTime: LocalDateTime? = null,
33+
id: Long = IdGenerator.getAndIncrement()
34+
) = Restriction(person.limitedAccess(), user.limitedAccess(), endDateTime, id)
35+
36+
private fun Person.limitedAccess() = LimitedAccessPerson(crn, exclusionMessage, restrictionMessage, id)
37+
private fun User.limitedAccess() = LimitedAccessUser(username, id)
38+
}

projects/manage-supervision-and-delius/src/dev/kotlin/uk/gov/justice/digital/hmpps/data/generator/PersonGenerator.kt

+42-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package uk.gov.justice.digital.hmpps.data.generator
22

33
import uk.gov.justice.digital.hmpps.data.generator.ContactGenerator.DEFAULT_STAFF
4+
import uk.gov.justice.digital.hmpps.data.generator.ContactGenerator.LIMITED_ACCESS_STAFF
45
import uk.gov.justice.digital.hmpps.data.generator.ContactGenerator.USER
56
import uk.gov.justice.digital.hmpps.data.generator.personalDetails.PersonDetailsGenerator
67
import uk.gov.justice.digital.hmpps.integrations.delius.compliance.Nsi
@@ -23,6 +24,7 @@ import java.time.ZonedDateTime
2324

2425
object PersonGenerator {
2526

27+
val GENDER_MALE = ReferenceData(IdGenerator.getAndIncrement(), "M", "Male")
2628
val OVERVIEW = generateOverview("X000004")
2729
val EVENT_1 = generateEvent(
2830
OVERVIEW,
@@ -185,10 +187,43 @@ object PersonGenerator {
185187
PersonDetailsGenerator.PERSONAL_DETAILS.surname
186188
)
187189

190+
val CL_EXCLUDED =
191+
generateCaseloadPerson(
192+
PersonDetailsGenerator.EXCLUSION.id,
193+
PersonDetailsGenerator.EXCLUSION.crn,
194+
PersonDetailsGenerator.EXCLUSION.forename,
195+
PersonDetailsGenerator.EXCLUSION.secondName,
196+
PersonDetailsGenerator.EXCLUSION.surname
197+
)
198+
val CL_RESTRICTED = generateCaseloadPerson(
199+
PersonDetailsGenerator.RESTRICTION.id,
200+
PersonDetailsGenerator.RESTRICTION.crn,
201+
PersonDetailsGenerator.RESTRICTION.forename,
202+
PersonDetailsGenerator.RESTRICTION.secondName,
203+
PersonDetailsGenerator.RESTRICTION.surname
204+
)
205+
206+
val CL_RESTRICTED_EXCLUDED = generateCaseloadPerson(
207+
PersonDetailsGenerator.RESTRICTION_EXCLUSION.id,
208+
PersonDetailsGenerator.RESTRICTION_EXCLUSION.crn,
209+
PersonDetailsGenerator.RESTRICTION_EXCLUSION.forename,
210+
PersonDetailsGenerator.RESTRICTION_EXCLUSION.secondName,
211+
PersonDetailsGenerator.RESTRICTION_EXCLUSION.surname
212+
)
213+
188214
val CASELOAD_PERSON_1 = generateCaseload(PERSON_1, DEFAULT_STAFF, ContactGenerator.DEFAULT_TEAM)
189215
val CASELOAD_PERSON_2 = generateCaseload(PERSON_2, ContactGenerator.STAFF_1, ContactGenerator.DEFAULT_TEAM)
190216
val CASELOAD_PERSON_3 = generateCaseload(PERSON_2, DEFAULT_STAFF, ContactGenerator.DEFAULT_TEAM)
191217

218+
val CASELOAD_LIMITED_ACCESS_EXCLUSION =
219+
generateCaseload(CL_EXCLUDED, LIMITED_ACCESS_STAFF, ContactGenerator.DEFAULT_TEAM)
220+
val CASELOAD_LIMITED_ACCESS_RESTRICTION =
221+
generateCaseload(CL_RESTRICTED, LIMITED_ACCESS_STAFF, ContactGenerator.DEFAULT_TEAM)
222+
val CASELOAD_LIMITED_ACCESS_BOTH =
223+
generateCaseload(CL_RESTRICTED_EXCLUDED, LIMITED_ACCESS_STAFF, ContactGenerator.DEFAULT_TEAM)
224+
val CASELOAD_LIMITED_ACCESS_NEITHER =
225+
generateCaseload(PERSON_2, LIMITED_ACCESS_STAFF, ContactGenerator.DEFAULT_TEAM)
226+
192227
fun generateEvent(
193228
person: Person,
194229
id: Long = IdGenerator.getAndIncrement(),
@@ -295,8 +330,10 @@ object PersonGenerator {
295330
telephoneNumber: String? = "4321",
296331
preferredName: String? = "Dee",
297332
dateOfBirth: LocalDate = LocalDate.now().minusYears(50),
298-
gender: ReferenceData = ReferenceData(IdGenerator.getAndIncrement(), "M", "Male"),
299-
id: Long = IdGenerator.getAndIncrement()
333+
gender: ReferenceData = GENDER_MALE,
334+
id: Long = IdGenerator.getAndIncrement(),
335+
exclusionMessage: String? = null,
336+
restrictionMessage: String? = null
300337
) = Person(
301338
id = id,
302339
crn = crn,
@@ -314,7 +351,9 @@ object PersonGenerator {
314351
religion = null,
315352
sexualOrientation = null,
316353
genderIdentity = null,
317-
genderIdentityDescription = null
354+
genderIdentityDescription = null,
355+
exclusionMessage = exclusionMessage,
356+
restrictionMessage = restrictionMessage
318357
)
319358

320359
fun generateRequirement(

projects/manage-supervision-and-delius/src/dev/kotlin/uk/gov/justice/digital/hmpps/data/generator/personalDetails/PersonDetailsGenerator.kt

+33-13
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,21 @@ object PersonDetailsGenerator {
3535
requiresInterpreter = true
3636
)
3737

38+
val EXCLUSION = generatePersonDetails(
39+
"E123456",
40+
exclusionMessage = "There is an exclusion on this person"
41+
)
42+
val RESTRICTION =
43+
generatePersonDetails(
44+
"R123456",
45+
restrictionMessage = "There is a restriction on this person"
46+
)
47+
val RESTRICTION_EXCLUSION = generatePersonDetails(
48+
"B123456",
49+
exclusionMessage = "You are excluded from viewing this case",
50+
restrictionMessage = "You are restricted from viewing this case"
51+
)
52+
3853
val ALIAS_1 = generateAlias("Sam", "Edward", "Smith", PERSONAL_DETAILS.id)
3954
val ALIAS_2 = generateAlias("Joe", "Richard", "Jones", PersonGenerator.OVERVIEW.id)
4055

@@ -236,6 +251,7 @@ object PersonDetailsGenerator {
236251
endDate: LocalDate? = null,
237252
verified: Boolean? = null,
238253
notes: String? = null
254+
239255
) = PersonAddress(
240256
personId = personId,
241257
id = IdGenerator.getAndIncrement(),
@@ -255,23 +271,25 @@ object PersonDetailsGenerator {
255271
typeVerified = verified,
256272
telephoneNumber = "0191876865",
257273
lastUpdatedUser = USER,
258-
notes = notes
274+
notes = notes,
259275
)
260276

261277
fun generatePersonDetails(
262278
crn: String,
263-
forename: String,
264-
secondName: String,
265-
surname: String,
266-
preferredName: String,
267-
gender: ReferenceData,
268-
religion: ReferenceData,
269-
sexualOrientation: ReferenceData,
270-
language: ReferenceData,
271-
previousSurname: String,
272-
genderIdentity: ReferenceData,
273-
genderIdentityDescription: String,
274-
requiresInterpreter: Boolean = false
279+
forename: String = "TestForename",
280+
secondName: String = "SecondName",
281+
surname: String = "Surname",
282+
preferredName: String = "PreferredName",
283+
gender: ReferenceData = GENDER_FEMALE,
284+
religion: ReferenceData = RELIGION_DEFAULT,
285+
sexualOrientation: ReferenceData = SEXUAL_ORIENTATION,
286+
language: ReferenceData = LANGUAGE_RD,
287+
previousSurname: String = "PreviousSurname",
288+
genderIdentity: ReferenceData = GENDER_IDENTITY_RD,
289+
genderIdentityDescription: String = "genderIdentityDescription",
290+
requiresInterpreter: Boolean = false,
291+
exclusionMessage: String? = null,
292+
restrictionMessage: String? = null
275293
) = Person(
276294
id = IdGenerator.getAndIncrement(),
277295
crn = crn,
@@ -292,6 +310,8 @@ object PersonDetailsGenerator {
292310
genderIdentity = genderIdentity,
293311
genderIdentityDescription = genderIdentityDescription,
294312
requiresInterpreter = requiresInterpreter,
313+
exclusionMessage = exclusionMessage,
314+
restrictionMessage = restrictionMessage
295315
)
296316

297317
fun generateDocument(

projects/manage-supervision-and-delius/src/integrationTest/kotlin/uk/gov/justice/digital/hmpps/AppointmentOutcomeIntegrationTest.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import uk.gov.justice.digital.hmpps.api.model.appointment.AppointmentDetail
1616
import uk.gov.justice.digital.hmpps.api.model.appointment.CreateAppointment
1717
import uk.gov.justice.digital.hmpps.api.model.appointment.Outcome
1818
import uk.gov.justice.digital.hmpps.api.model.appointment.User
19+
import uk.gov.justice.digital.hmpps.data.generator.AppointmentGenerator.APPOINTMENT_TYPES
1920
import uk.gov.justice.digital.hmpps.data.generator.AppointmentGenerator.ATTENDED_COMPLIED
2021
import uk.gov.justice.digital.hmpps.data.generator.OffenderManagerGenerator.STAFF_USER_1
2122
import uk.gov.justice.digital.hmpps.data.generator.OffenderManagerGenerator.TEAM
@@ -66,6 +67,9 @@ class AppointmentOutcomeIntegrationTest {
6667
fun `when an appointment outcome does not exist returns a 404 response`() {
6768
val response = createAppointment()
6869

70+
val expectedContactType =
71+
APPOINTMENT_TYPES.firstOrNull { type -> type.code == CreateAppointment.Type.PlannedOfficeVisitNS.code }
72+
6973
mockMvc
7074
.perform(
7175
MockMvcRequestBuilders.patch("/appointment")
@@ -76,7 +80,7 @@ class AppointmentOutcomeIntegrationTest {
7680
.andExpect(
7781
jsonPath(
7882
"$.message",
79-
equalTo("ContactTypeOutcome with contact_type_id 8 and outcome code of ABC not found")
83+
equalTo("ContactTypeOutcome with contact_type_id ${expectedContactType?.id} and outcome code of ABC not found")
8084
)
8185
)
8286

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package uk.gov.justice.digital.hmpps
2+
3+
import org.hamcrest.MatcherAssert.assertThat
4+
import org.hamcrest.Matchers.equalTo
5+
import org.junit.jupiter.api.Assertions.assertNotEquals
6+
import org.junit.jupiter.api.Test
7+
import org.springframework.beans.factory.annotation.Autowired
8+
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc
9+
import org.springframework.boot.test.context.SpringBootTest
10+
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT
11+
import org.springframework.test.web.servlet.MockMvc
12+
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get
13+
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status
14+
import uk.gov.justice.digital.hmpps.api.model.user.StaffCaseload
15+
import uk.gov.justice.digital.hmpps.data.generator.ContactGenerator.LIMITED_ACCESS_USER
16+
import uk.gov.justice.digital.hmpps.data.generator.personalDetails.PersonDetailsGenerator.EXCLUSION
17+
import uk.gov.justice.digital.hmpps.data.generator.personalDetails.PersonDetailsGenerator.RESTRICTION
18+
import uk.gov.justice.digital.hmpps.data.generator.personalDetails.PersonDetailsGenerator.RESTRICTION_EXCLUSION
19+
import uk.gov.justice.digital.hmpps.test.MockMvcExtensions.contentAsJson
20+
import uk.gov.justice.digital.hmpps.test.MockMvcExtensions.withToken
21+
22+
@AutoConfigureMockMvc
23+
@SpringBootTest(webEnvironment = RANDOM_PORT)
24+
internal class LaoCaseloadIntegrationTest {
25+
@Autowired
26+
lateinit var mockMvc: MockMvc
27+
28+
@Test
29+
fun `all caseload activity for an lao user`() {
30+
31+
val person = LIMITED_ACCESS_USER
32+
val res = mockMvc
33+
.perform(get("/caseload/user/${person.username}").withToken())
34+
.andExpect(status().isOk)
35+
.andReturn().response.contentAsJson<StaffCaseload>()
36+
37+
val caseload = res.caseload.sortedBy { it.crn }
38+
39+
assertThat(caseload[0].crn, equalTo(RESTRICTION_EXCLUSION.crn))
40+
assertThat(caseload[1].crn, equalTo(EXCLUSION.crn))
41+
assertThat(caseload[2].crn, equalTo(RESTRICTION.crn))
42+
43+
44+
assertThat(caseload[0].limitedAccess, equalTo(true))
45+
assertThat(caseload[0].caseName, equalTo(null))
46+
assertThat(caseload[0].latestSentence, equalTo(null))
47+
assertThat(caseload[0].nextAppointment, equalTo(null))
48+
assertThat(caseload[0].previousAppointment, equalTo(null))
49+
assertThat(caseload[0].numberOfAdditionalSentences, equalTo(null))
50+
51+
assertThat(caseload[1].limitedAccess, equalTo(true))
52+
assertThat(caseload[1].caseName, equalTo(null))
53+
assertThat(caseload[1].latestSentence, equalTo(null))
54+
assertThat(caseload[1].nextAppointment, equalTo(null))
55+
assertThat(caseload[1].previousAppointment, equalTo(null))
56+
assertThat(caseload[1].numberOfAdditionalSentences, equalTo(null))
57+
58+
assertThat(caseload[2].limitedAccess, equalTo(true))
59+
assertThat(caseload[2].caseName, equalTo(null))
60+
assertThat(caseload[2].latestSentence, equalTo(null))
61+
assertThat(caseload[2].nextAppointment, equalTo(null))
62+
assertThat(caseload[2].previousAppointment, equalTo(null))
63+
assertThat(caseload[2].numberOfAdditionalSentences, equalTo(null))
64+
65+
assertThat(caseload[3].limitedAccess, equalTo(false))
66+
assertNotEquals(caseload[3].caseName, null)
67+
}
68+
}

0 commit comments

Comments
 (0)