@@ -6,7 +6,7 @@ import { GlobalSnackbar } from "../../components/GlobalSnackbar/GlobalSnackbar"
6
6
import { Language as ResetPasswordDialogLanguage } from "../../components/ResetPasswordDialog/ResetPasswordDialog"
7
7
import { Language as RoleSelectLanguage } from "../../components/RoleSelect/RoleSelect"
8
8
import { Language as UsersTableLanguage } from "../../components/UsersTable/UsersTable"
9
- import { MockAuditorRole , MockUser , MockUser2 , render } from "../../testHelpers/renderHelpers"
9
+ import { MockAuditorRole , MockUser , MockUser2 , render , SuspendedMockUser } from "../../testHelpers/renderHelpers"
10
10
import { server } from "../../testHelpers/server"
11
11
import { permissionsToCheck } from "../../xServices/auth/authXService"
12
12
import { Language as usersXServiceLanguage } from "../../xServices/users/usersXService"
@@ -40,6 +40,35 @@ const suspendUser = async (setupActionSpies: () => void) => {
40
40
fireEvent . click ( confirmButton )
41
41
}
42
42
43
+ const activateUser = async ( setupActionSpies : ( ) => void ) => {
44
+ // Get the first user in the table
45
+ const users = await screen . findAllByText ( / .* @ c o d e r .c o m / )
46
+ const firstUserRow = users [ 2 ] . closest ( "tr" )
47
+ if ( ! firstUserRow ) {
48
+ throw new Error ( "Error on get the first user row" )
49
+ }
50
+
51
+ // Click on the "more" button to display the "Activate" option
52
+ const moreButton = within ( firstUserRow ) . getByLabelText ( "more" )
53
+ fireEvent . click ( moreButton )
54
+ const menu = screen . getByRole ( "menu" )
55
+ const activateButton = within ( menu ) . getByText ( UsersTableLanguage . activateMenuItem )
56
+ fireEvent . click ( activateButton )
57
+
58
+ // Check if the confirm message is displayed
59
+ const confirmDialog = screen . getByRole ( "dialog" )
60
+ expect ( confirmDialog ) . toHaveTextContent (
61
+ `${ UsersPageLanguage . activateDialogMessagePrefix } ${ SuspendedMockUser . username } ?` ,
62
+ )
63
+
64
+ // Setup spies to check the actions after
65
+ setupActionSpies ( )
66
+
67
+ // Click on the "Confirm" button
68
+ const confirmButton = within ( confirmDialog ) . getByText ( UsersPageLanguage . activateDialogAction )
69
+ fireEvent . click ( confirmButton )
70
+ }
71
+
43
72
const resetUserPassword = async ( setupActionSpies : ( ) => void ) => {
44
73
// Get the first user in the table
45
74
const users = await screen . findAllByText ( / .* @ c o d e r .c o m / )
@@ -99,7 +128,7 @@ describe("Users Page", () => {
99
128
it ( "shows users" , async ( ) => {
100
129
render ( < UsersPage /> )
101
130
const users = await screen . findAllByText ( / .* @ c o d e r .c o m / )
102
- expect ( users . length ) . toEqual ( 2 )
131
+ expect ( users . length ) . toEqual ( 3 )
103
132
} )
104
133
105
134
it ( "shows 'Create user' button to an authorized user" , ( ) => {
@@ -178,6 +207,54 @@ describe("Users Page", () => {
178
207
} )
179
208
} )
180
209
210
+ describe ( "activate user" , ( ) => {
211
+ describe ( "when user is successfully activated" , ( ) => {
212
+ it ( "shows a success message and refreshes the page" , async ( ) => {
213
+ render (
214
+ < >
215
+ < UsersPage />
216
+ < GlobalSnackbar />
217
+ </ > ,
218
+ )
219
+
220
+ await activateUser ( ( ) => {
221
+ jest . spyOn ( API , "activateUser" ) . mockResolvedValueOnce ( SuspendedMockUser )
222
+ jest
223
+ . spyOn ( API , "getUsers" )
224
+ . mockImplementationOnce ( ( ) => Promise . resolve ( [ MockUser , MockUser2 , SuspendedMockUser ] ) )
225
+ } )
226
+
227
+ // Check if the success message is displayed
228
+ await screen . findByText ( usersXServiceLanguage . activateUserSuccess )
229
+
230
+ // Check if the API was called correctly
231
+ expect ( API . activateUser ) . toBeCalledTimes ( 1 )
232
+ expect ( API . activateUser ) . toBeCalledWith ( SuspendedMockUser . id )
233
+ } )
234
+ } )
235
+ describe ( "when activation fails" , ( ) => {
236
+ it ( "shows an error message" , async ( ) => {
237
+ render (
238
+ < >
239
+ < UsersPage />
240
+ < GlobalSnackbar />
241
+ </ > ,
242
+ )
243
+
244
+ await activateUser ( ( ) => {
245
+ jest . spyOn ( API , "activateUser" ) . mockRejectedValueOnce ( { } )
246
+ } )
247
+
248
+ // Check if the error message is displayed
249
+ await screen . findByText ( usersXServiceLanguage . activateUserError )
250
+
251
+ // Check if the API was called correctly
252
+ expect ( API . activateUser ) . toBeCalledTimes ( 1 )
253
+ expect ( API . activateUser ) . toBeCalledWith ( SuspendedMockUser . id )
254
+ } )
255
+ } )
256
+ } )
257
+
181
258
describe ( "reset user password" , ( ) => {
182
259
describe ( "when it is success" , ( ) => {
183
260
it ( "shows a success message" , async ( ) => {
0 commit comments