Skip to content

Commit

Permalink
Merge pull request #1957 from ministryofjustice/APS-560
Browse files Browse the repository at this point in the history
APS-560: Updating permissions not immediately applying after logout a…
  • Loading branch information
vubalasu authored Jul 10, 2024
2 parents 84665d8 + f5fea0e commit fbb3569
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 3 deletions.
6 changes: 6 additions & 0 deletions integration_tests/pages/admin/userManagement/showPage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,10 @@ export default class ShowPage extends Page {
clickRemoveAccess(): void {
cy.get('a').contains('Remove access').click()
}

shouldHaveCriteriaSelected(roles: Array<string>): void {
roles.forEach(role => {
cy.get(`input[name="roles"][value="${role}"]`).should('be.checked')
})
}
}
8 changes: 8 additions & 0 deletions integration_tests/tests/admin/userManagement.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,11 @@ context('User management', () => {
// Given there are users in the DB
const users = userFactory.buildList(10, { roles: ['assessor'] })
const user = users[0]
const roles = ['manager', 'matcher', 'workflow_manager']
cy.task('stubFindUser', { user, id: user.id })
cy.task('stubUsers', { users })
cy.task('stubApAreaReferenceData')
cy.task('stubAuthUser', { roles })

// When I visit the list page
const listPage = ListPage.visit()
Expand Down Expand Up @@ -83,6 +85,12 @@ context('User management', () => {

// And I should see a message confirming the details have been updated
showPage.shouldShowBanner('User updated')

// And I should see updated user roles
const revisitedListPage = ListPage.visit()
revisitedListPage.shouldShowUsers(users)
revisitedListPage.clickUser(user.name)
showPage.shouldHaveCriteriaSelected(roles)
})

it('allows searching for users', () => {
Expand Down
10 changes: 7 additions & 3 deletions server/controllers/admin/userManagementController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { ApAreaService, UserService } from '../../services'

import UserManagementController from './userManagementController'
import { qualifications, roles } from '../../utils/users'
import { apAreaFactory, paginatedResponseFactory, userFactory } from '../../testutils/factories'
import { apAreaFactory, paginatedResponseFactory, userDetailsFactory, userFactory } from '../../testutils/factories'
import paths from '../../paths/admin'
import { PaginatedResponse } from '../../@types/ui'
import { ApprovedPremisesUser } from '../../@types/shared'
Expand All @@ -16,8 +16,8 @@ jest.mock('../../utils/getPaginationDetails')
describe('UserManagementController', () => {
const token = 'SOME_TOKEN'

const request: DeepMocked<Request> = createMock<Request>({ user: { token } })
const response: DeepMocked<Response> = createMock<Response>({})
const request: DeepMocked<Request> = createMock<Request>({ user: { token }, session: {} })
const response = createMock<Response>({ locals: { user: { token } } })
const next: DeepMocked<NextFunction> = createMock<NextFunction>({})

let userManagementController: UserManagementController
Expand Down Expand Up @@ -292,7 +292,10 @@ describe('UserManagementController', () => {
qualifications: ['emergency'],
roles: [...updatedRoles.roles, ...updatedRoles.allocationRoles],
}
request.session.user = user
const userDetails = userDetailsFactory.build()
userService.getUserById.mockResolvedValue(user)
userService.getActingUser.mockResolvedValue(userDetails)
const flash = jest.fn()

const requestHandler = userManagementController.update()
Expand All @@ -317,6 +320,7 @@ describe('UserManagementController', () => {
})
expect(response.redirect).toHaveBeenCalledWith(paths.admin.userManagement.edit({ id: user.id }))
expect(flash).toHaveBeenCalledWith('success', 'User updated')
expect(response.locals.user.roles).toEqual(userDetails.roles)
})
})

Expand Down
3 changes: 3 additions & 0 deletions server/controllers/admin/userManagementController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ export default class UserController {
roles: [...flattenCheckboxInput(req.body.roles), ...flattenCheckboxInput(req.body.allocationPreferences)],
qualifications: flattenCheckboxInput(req.body.qualifications),
})
const user = await this.userService.getActingUser(res.locals.user.token)
req.session.user = user
res.locals.user = { ...user, ...res.locals.user }

req.flash('success', 'User updated')
res.redirect(paths.admin.userManagement.edit({ id: req.params.id }))
Expand Down

0 comments on commit fbb3569

Please sign in to comment.