Skip to content

Commit

Permalink
Man 282 risk tags (#277)
Browse files Browse the repository at this point in the history
* MAN-282 add risk tag on all tabs

* MAN-282 add risk tag on all tabs

* MAN-282 add risk tag on all tabs

* MAN-282 update tests

* MAN-282 update tests

* MAN-282 update tests to fix code duplication warning

* MAN-282 update code to avoid duplication warning
  • Loading branch information
achimber-moj authored Jan 22, 2025
1 parent 9517d34 commit ddf3e06
Show file tree
Hide file tree
Showing 17 changed files with 175 additions and 17 deletions.
2 changes: 1 addition & 1 deletion integration_tests/e2e/appointments.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ context('Appointment', () => {
const page = Page.verifyOnPage(AppointmentsPage)
page.headerCrn().should('contain.text', 'X000001')
page.headerName().should('contain.text', 'Eula Schmeler')

page.assertRiskTags()
page.upcomingAppointmentDate(1).should('contain.text', '22 March 2045')
page.upcomingAppointmentTime(1).should('contain.text', '10:15am to 10:30am')
page.upcomingAppointmentType(1).should('contain.text', 'Video call')
Expand Down
1 change: 1 addition & 0 deletions integration_tests/e2e/compliance.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ context('Compliance', () => {
it('Compliance page is rendered', () => {
cy.visit('/case/X000001/compliance')
const page = Page.verifyOnPage(CompliancePage)
page.assertRiskTags()
page.getCardHeader('sentence1').should('contain.text', 'Sentence (3)')
page
.getRowData('sentence1', 'mainOffenceDescription', 'Value')
Expand Down
1 change: 1 addition & 0 deletions integration_tests/e2e/interventions.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ context('Interventions', () => {
page.headerName().should('contain.text', 'Eula Schmeler')
page.pageHeading().should('contain.text', 'Interventions')

page.assertRiskTags()
page
.getRowData('interventions', 'referralInterventionTitle3', 'Value')
.should('contain.text', 'Other Services - North West')
Expand Down
8 changes: 8 additions & 0 deletions integration_tests/e2e/licence-condition-note.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,14 @@ context('Sentence', () => {
page.headerName().should('contain.text', 'Caroline Wolff')
cy.get('[data-qa=pageHeading]').eq(0).should('contain.text', 'Sentence')

cy.get(`[class=predictor-timeline-item__level]`)
.eq(0)
.within(() => cy.get('strong').should('contain.text', 'ROSH'))

cy.get(`[class=predictor-timeline-item__level]`)
.eq(1)
.within(() => cy.get('strong').should('contain.text', 'RSR'))

cy.get(`[class=app-summary-card__header]`).within(() =>
cy.get('h2').should('contain.text', 'Alcohol Monitoring (Electronic Monitoring)'),
)
Expand Down
1 change: 1 addition & 0 deletions integration_tests/e2e/overview.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ context('Overview', () => {
page.headerCrn().should('contain.text', 'X000001')
page.headerName().should('contain.text', 'Caroline Wolff')
page.pageHeading().should('contain.text', 'Overview')
page.assertRiskTags()
page.getTab('overview').should('contain.text', 'Overview')
page.getTab('personalDetails').should('contain.text', 'Personal details')
page.getTab('risk').should('contain.text', 'Risk')
Expand Down
1 change: 1 addition & 0 deletions integration_tests/e2e/personalDetails.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ context('Personal Details', () => {
it('Overview page is rendered', () => {
cy.visit('/case/X000001/personal-details')
const page = Page.verifyOnPage(PersonalDetailsPage)
page.assertRiskTags()
page.headerCrn().should('contain.text', 'X000001')
page.headerName().should('contain.text', 'Eula Schmeler')
page.pageHeading().should('contain.text', 'Personal Details')
Expand Down
1 change: 1 addition & 0 deletions integration_tests/e2e/requirement-note.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ context('Sentence', () => {
const page = Page.verifyOnPage(SentencePage)
page.headerCrn().should('contain.text', 'X000001')
page.headerName().should('contain.text', 'Caroline Wolff')
page.assertRiskTags()
cy.get('[data-qa=pageHeading]').eq(0).should('contain.text', 'Sentence')

cy.get(`[class=app-summary-card__header]`).within(() =>
Expand Down
2 changes: 1 addition & 1 deletion integration_tests/e2e/sentence.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ context('Sentence', () => {
const page = Page.verifyOnPage(SentencePage)
page.headerCrn().should('contain.text', 'X000001')
page.headerName().should('contain.text', 'Caroline Wolff')

page.assertRiskTags()
page.getTab('overview').should('contain.text', 'Overview')
page.getTab('personalDetails').should('contain.text', 'Personal details')
page.getTab('risk').should('contain.text', 'Risk')
Expand Down
10 changes: 10 additions & 0 deletions integration_tests/pages/page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,4 +129,14 @@ export default abstract class Page {
getSummaryListRow = (index: number) => {
return cy.get(`.govuk-summary-list__row:nth-child(${index})`)
}

assertRiskTags() {
cy.get(`[class=predictor-timeline-item__level]`)
.eq(0)
.within(() => cy.get('strong').should('contain.text', 'ROSH'))

cy.get(`[class=predictor-timeline-item__level]`)
.eq(1)
.within(() => cy.get('strong').should('contain.text', 'RSR'))
}
}
34 changes: 31 additions & 3 deletions server/routes/activityLog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,17 @@ import asyncMiddleware from '../middleware/asyncMiddleware'
import type { Services } from '../services'
import MasApiClient from '../data/masApiClient'
import TierApiClient from '../data/tierApiClient'
import { TimelineItem } from '../data/model/risk'
import { toPredictors, toRoshWidget, toTimeline } from '../utils/utils'
import ArnsApiClient from '../data/arnsApiClient'

export default function activityLogRoutes(router: Router, { hmppsAuthClient }: Services) {
const get = (path: string | string[], handler: RequestHandler) => router.get(path, asyncMiddleware(handler))

get('/case/:crn/activity-log', async (req, res, _next) => {
const { crn } = req.params
const token = await hmppsAuthClient.getSystemClientToken(res.locals.user.username)
const arnsClient = new ArnsApiClient(token)
const masClient = new MasApiClient(token)
const tierClient = new TierApiClient(token)

Expand All @@ -27,9 +31,11 @@ export default function activityLogRoutes(router: Router, { hmppsAuthClient }: S
res.locals.requirement = req.query.requirement
}

const [personActivity, tierCalculation] = await Promise.all([
const [personActivity, tierCalculation, risks, predictors] = await Promise.all([
masClient.getPersonActivityLog(crn),
tierClient.getCalculationDetails(crn),
arnsClient.getRisks(crn),
arnsClient.getPredictorsAll(crn),
])

const queryParams = getQueryString(req.query)
Expand All @@ -42,11 +48,17 @@ export default function activityLogRoutes(router: Router, { hmppsAuthClient }: S
correlationId: v4(),
service: 'hmpps-manage-people-on-probation-ui',
})

const risksWidget = toRoshWidget(risks)

const predictorScores = toPredictors(predictors)
res.render('pages/activity-log', {
personActivity,
crn,
queryParams,
tierCalculation,
risksWidget,
predictorScores,
})
})

Expand All @@ -63,12 +75,15 @@ export default function activityLogRoutes(router: Router, { hmppsAuthClient }: S
service: 'hmpps-manage-people-on-probation-ui',
})

const arnsClient = new ArnsApiClient(token)
const masClient = new MasApiClient(token)
const tierClient = new TierApiClient(token)

const [personActivity, tierCalculation] = await Promise.all([
const [personActivity, tierCalculation, risks, predictors] = await Promise.all([
masClient.getPersonActivityLog(crn),
tierClient.getCalculationDetails(crn),
arnsClient.getRisks(crn),
arnsClient.getPredictorsAll(crn),
])

if (req.query.view === 'compact') {
Expand All @@ -83,24 +98,32 @@ export default function activityLogRoutes(router: Router, { hmppsAuthClient }: S

const queryParams = getQueryString(req.query)

const risksWidget = toRoshWidget(risks)

const predictorScores = toPredictors(predictors)
res.render('pages/activity-log', {
category,
personActivity,
queryParams,
crn,
tierCalculation,
risksWidget,
predictorScores,
})
})

get('/case/:crn/activity-log/activity/:id', async (req, res, _next) => {
const { crn, id } = req.params
const token = await hmppsAuthClient.getSystemClientToken(res.locals.user.username)

const arnsClient = new ArnsApiClient(token)
const masClient = new MasApiClient(token)
const tierClient = new TierApiClient(token)
const [personAppointment, tierCalculation] = await Promise.all([
const [personAppointment, tierCalculation, risks, predictors] = await Promise.all([
masClient.getPersonAppointment(crn, id),
tierClient.getCalculationDetails(crn),
arnsClient.getRisks(crn),
arnsClient.getPredictorsAll(crn),
])
const isActivityLog = true
const queryParams = getQueryString(req.query)
Expand All @@ -116,13 +139,18 @@ export default function activityLogRoutes(router: Router, { hmppsAuthClient }: S
service: 'hmpps-manage-people-on-probation-ui',
})

const risksWidget = toRoshWidget(risks)

const predictorScores = toPredictors(predictors)
res.render('pages/appointments/appointment', {
category,
queryParams,
personAppointment,
crn,
isActivityLog,
tierCalculation,
risksWidget,
predictorScores,
})
})

Expand Down
13 changes: 12 additions & 1 deletion server/routes/appointments.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import MasApiClient from '../data/masApiClient'
import logger from '../../logger'
import { ErrorMessages } from '../data/model/caseload'
import TierApiClient from '../data/tierApiClient'
import { toPredictors, toRoshWidget } from '../utils/utils'
import ArnsApiClient from '../data/arnsApiClient'

export default function scheduleRoutes(router: Router, { hmppsAuthClient }: Services) {
const get = (path: string | string[], handler: RequestHandler) => router.get(path, asyncMiddleware(handler))
Expand All @@ -15,6 +17,7 @@ export default function scheduleRoutes(router: Router, { hmppsAuthClient }: Serv
get('/case/:crn/appointments', async (req, res, _next) => {
const { crn } = req.params
const token = await hmppsAuthClient.getSystemClientToken(res.locals.user.username)
const arnsClient = new ArnsApiClient(token)
const masClient = new MasApiClient(token)
const tierClient = new TierApiClient(token)

Expand All @@ -27,16 +30,24 @@ export default function scheduleRoutes(router: Router, { hmppsAuthClient }: Serv
service: 'hmpps-manage-people-on-probation-ui',
})

const [upcomingAppointments, pastAppointments, tierCalculation] = await Promise.all([
const [upcomingAppointments, pastAppointments, risks, tierCalculation, predictors] = await Promise.all([
masClient.getPersonSchedule(crn, 'upcoming'),
masClient.getPersonSchedule(crn, 'previous'),
arnsClient.getRisks(crn),
tierClient.getCalculationDetails(crn),
arnsClient.getPredictorsAll(crn),
])

const risksWidget = toRoshWidget(risks)

const predictorScores = toPredictors(predictors)
res.render('pages/appointments', {
upcomingAppointments,
pastAppointments,
crn,
tierCalculation,
risksWidget,
predictorScores,
})
})

Expand Down
11 changes: 10 additions & 1 deletion server/routes/case.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import type { Services } from '../services'
import MasApiClient from '../data/masApiClient'
import ArnsApiClient from '../data/arnsApiClient'
import TierApiClient from '../data/tierApiClient'
import { toPredictors, toRoshWidget, toTimeline } from '../utils/utils'
import { TimelineItem } from '../data/model/risk'

export default function caseRoutes(router: Router, { hmppsAuthClient }: Services) {
const get = (path: string | string[], handler: RequestHandler) => router.get(path, asyncMiddleware(handler))
Expand All @@ -26,16 +28,23 @@ export default function caseRoutes(router: Router, { hmppsAuthClient }: Services
service: 'hmpps-manage-people-on-probation-ui',
})

const [overview, risks, tierCalculation] = await Promise.all([
const [overview, risks, tierCalculation, predictors] = await Promise.all([
masClient.getOverview(crn, sentenceNumber),
arnsClient.getRisks(crn),
tierClient.getCalculationDetails(crn),
arnsClient.getPredictorsAll(crn),
])

const risksWidget = toRoshWidget(risks)

const predictorScores = toPredictors(predictors)
res.render('pages/overview', {
overview,
risks,
crn,
tierCalculation,
risksWidget,
predictorScores,
})
})
}
13 changes: 12 additions & 1 deletion server/routes/compliance.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import asyncMiddleware from '../middleware/asyncMiddleware'
import type { Services } from '../services'
import MasApiClient from '../data/masApiClient'
import TierApiClient from '../data/tierApiClient'
import ArnsApiClient from '../data/arnsApiClient'
import { toPredictors, toRoshWidget } from '../utils/utils'

export default function complianceRoutes(router: Router, { hmppsAuthClient }: Services) {
const get = (path: string | string[], handler: RequestHandler) => router.get(path, asyncMiddleware(handler))
Expand All @@ -22,17 +24,26 @@ export default function complianceRoutes(router: Router, { hmppsAuthClient }: Se
service: 'hmpps-manage-people-on-probation-ui',
})

const arnsClient = new ArnsApiClient(token)
const masClient = new MasApiClient(token)
const tierClient = new TierApiClient(token)

const [personCompliance, tierCalculation] = await Promise.all([
const [personCompliance, tierCalculation, risks, predictors] = await Promise.all([
masClient.getPersonCompliance(crn),
tierClient.getCalculationDetails(crn),
arnsClient.getRisks(crn),
arnsClient.getPredictorsAll(crn),
])

const risksWidget = toRoshWidget(risks)

const predictorScores = toPredictors(predictors)
res.render('pages/compliance', {
personCompliance,
tierCalculation,
crn,
risksWidget,
predictorScores,
})
})
}
13 changes: 12 additions & 1 deletion server/routes/interventions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,16 @@ import type { Services } from '../services'
import MasApiClient from '../data/masApiClient'
import TierApiClient from '../data/tierApiClient'
import InterventionsApiClient from '../data/interventionsApiClient'
import { toPredictors, toRoshWidget } from '../utils/utils'
import ArnsApiClient from '../data/arnsApiClient'

export default function interventionsRoutes(router: Router, { hmppsAuthClient }: Services) {
const get = (path: string | string[], handler: RequestHandler) => router.get(path, asyncMiddleware(handler))

get('/case/:crn/interventions', async (req, res, _next) => {
const { crn } = req.params
const token = await hmppsAuthClient.getSystemClientToken(res.locals.user.username)
const arnsClient = new ArnsApiClient(token)
const masClient = new MasApiClient(token)
const interventionsApiClient = new InterventionsApiClient(token)
const tierClient = new TierApiClient(token)
Expand All @@ -26,16 +29,24 @@ export default function interventionsRoutes(router: Router, { hmppsAuthClient }:
service: 'hmpps-manage-people-on-probation-ui',
})

const [personSummary, interventions, tierCalculation] = await Promise.all([
const [personSummary, interventions, tierCalculation, risks, predictors] = await Promise.all([
masClient.getPersonSummary(crn),
interventionsApiClient.getInterventions(crn),
tierClient.getCalculationDetails(crn),
arnsClient.getRisks(crn),
arnsClient.getPredictorsAll(crn),
])

const risksWidget = toRoshWidget(risks)

const predictorScores = toPredictors(predictors)
res.render('pages/interventions', {
personSummary,
interventions,
tierCalculation,
crn,
risksWidget,
predictorScores,
})
})
}
Loading

0 comments on commit ddf3e06

Please sign in to comment.