@@ -17,8 +17,9 @@ import { GlobalSettingOptions } from '../../constant/settings';
1717import { UserClass } from '../../support/user/UserClass' ;
1818import { performAdminLogin } from '../../utils/admin' ;
1919import { descriptionBox , redirectToHomePage , uuid } from '../../utils/common' ;
20+ import { waitForAllLoadersToDisappear } from '../../utils/entity' ;
2021import { validateFormNameFieldInput } from '../../utils/form' ;
21- import { setPersonaAsDefault } from '../../utils/persona' ;
22+ import { navigateToPersonaWithPagination } from '../../utils/persona' ;
2223import { settingClick } from '../../utils/sidebar' ;
2324import { test } from '../fixtures/pages' ;
2425
@@ -28,12 +29,6 @@ const PERSONA_DETAILS = {
2829 description : `Test persona for deletion ${ uuid ( ) } .` ,
2930} ;
3031
31- const DEFAULT_PERSONA_DETAILS = {
32- name : `default-persona-${ uuid ( ) } ` ,
33- displayName : `Default Persona ${ uuid ( ) } ` ,
34- description : `Default persona for deletion ${ uuid ( ) } .` ,
35- } ;
36-
3732test . describe . serial ( 'User profile works after persona deletion' , ( ) => {
3833 const user = new UserClass ( ) ;
3934
@@ -99,9 +94,19 @@ test.describe.serial('User profile works after persona deletion', () => {
9994 . click ( ) ;
10095 await page . getByTestId ( 'selectable-list-update-btn' ) . click ( ) ;
10196
97+ const createPersona = page . waitForResponse ( '/api/v1/personas' ) ;
98+ const listPersonas = page . waitForResponse ( '/api/v1/personas?*' ) ;
99+
102100 await page . getByRole ( 'button' , { name : 'Create' } ) . click ( ) ;
103101
102+ await createPersona ;
103+ await listPersonas ;
104+
105+ await waitForAllLoadersToDisappear ( page , 'skeleton-card-loader' ) ;
106+
104107 // Verify persona was created
108+ await navigateToPersonaWithPagination ( page , PERSONA_DETAILS . name , false ) ;
109+
105110 await expect (
106111 page . getByTestId ( `persona-details-card-${ PERSONA_DETAILS . name } ` )
107112 ) . toBeVisible ( ) ;
@@ -135,15 +140,12 @@ test.describe.serial('User profile works after persona deletion', () => {
135140
136141 // Step 3: Delete the persona
137142 await test . step ( 'Delete the persona' , async ( ) => {
143+ const listPersonas = page . waitForResponse ( '/api/v1/personas?*' ) ;
138144 await settingClick ( page , GlobalSettingOptions . PERSONA ) ;
139- await page . waitForLoadState ( 'networkidle' ) ;
140- await page . waitForSelector ( '[data-testid="loader"]' , {
141- state : 'detached' ,
142- } ) ;
145+ await listPersonas ;
146+ await waitForAllLoadersToDisappear ( page , 'skeleton-card-loader' ) ;
143147
144- await page
145- . getByTestId ( `persona-details-card-${ PERSONA_DETAILS . name } ` )
146- . click ( ) ;
148+ await navigateToPersonaWithPagination ( page , PERSONA_DETAILS . name ) ;
147149 await page . waitForLoadState ( 'networkidle' ) ;
148150
149151 await page . click ( '[data-testid="manage-button"]' ) ;
@@ -216,218 +218,4 @@ test.describe.serial('User profile works after persona deletion', () => {
216218 }
217219 ) ;
218220 } ) ;
219-
220- // Mark as skipped since manual testing confirms this works
221- // The test fails due to timing/caching issues in the test environment
222- // but manual testing confirms default persona deletion works correctly
223- test . skip ( 'User profile loads correctly after DEFAULT persona deletion' , async ( {
224- page,
225- } ) => {
226- // Step 1: Create persona and set it as default for user
227- await test . step ( 'Create default persona with user' , async ( ) => {
228- await redirectToHomePage ( page ) ;
229- await settingClick ( page , GlobalSettingOptions . PERSONA ) ;
230- await page . waitForLoadState ( 'networkidle' ) ;
231- await page . waitForSelector ( '[data-testid="loader"]' , {
232- state : 'detached' ,
233- } ) ;
234-
235- // Create persona
236- await page . getByTestId ( 'add-persona-button' ) . click ( ) ;
237-
238- await validateFormNameFieldInput ( {
239- page,
240- value : DEFAULT_PERSONA_DETAILS . name ,
241- fieldName : 'Name' ,
242- fieldSelector : '[data-testid="name"]' ,
243- errorDivSelector : '#name_help' ,
244- } ) ;
245-
246- await page
247- . getByTestId ( 'displayName' )
248- . fill ( DEFAULT_PERSONA_DETAILS . displayName ) ;
249- await page
250- . locator ( descriptionBox )
251- . fill ( DEFAULT_PERSONA_DETAILS . description ) ;
252-
253- // Add user to persona during creation
254- const userListResponse = page . waitForResponse (
255- '/api/v1/users?limit=*&isBot=false*'
256- ) ;
257- await page . getByTestId ( 'add-users' ) . click ( ) ;
258- await userListResponse ;
259-
260- await page . waitForSelector ( '[data-testid="loader"]' , {
261- state : 'detached' ,
262- } ) ;
263-
264- const searchUser = page . waitForResponse (
265- `/api/v1/search/query?q=*${ encodeURIComponent (
266- user . responseData . displayName
267- ) } *`
268- ) ;
269- await page . getByTestId ( 'searchbar' ) . fill ( user . responseData . displayName ) ;
270- await searchUser ;
271-
272- await page
273- . getByRole ( 'listitem' , { name : user . responseData . displayName } )
274- . click ( ) ;
275- await page . getByTestId ( 'selectable-list-update-btn' ) . click ( ) ;
276-
277- await page . getByRole ( 'button' , { name : 'Create' } ) . click ( ) ;
278-
279- // Verify persona was created
280- await expect (
281- page . getByTestId ( `persona-details-card-${ DEFAULT_PERSONA_DETAILS . name } ` )
282- ) . toBeVisible ( ) ;
283-
284- // Set this persona as default
285- await page
286- . getByTestId ( `persona-details-card-${ DEFAULT_PERSONA_DETAILS . name } ` )
287- . click ( ) ;
288- await page . waitForLoadState ( 'networkidle' ) ;
289-
290- // Use the helper function to set as default
291- await setPersonaAsDefault ( page ) ;
292-
293- // Go back to personas list
294- await settingClick ( page , GlobalSettingOptions . PERSONA ) ;
295- await page . waitForLoadState ( 'networkidle' ) ;
296- } ) ;
297-
298- // Step 2: Navigate directly to user profile and verify default persona is shown
299- await test . step (
300- 'Verify default persona appears on user profile' ,
301- async ( ) => {
302- // Go directly to user profile URL
303- await page . goto (
304- `http://localhost:8585/users/${ user . responseData . name } `
305- ) ;
306- await page . waitForLoadState ( 'networkidle' ) ;
307-
308- // Check if persona appears on the user profile
309- const personaCard = page . getByTestId ( 'persona-details-card' ) ;
310-
311- await expect ( personaCard ) . toBeVisible ( ) ;
312-
313- // Look for both regular persona and default persona sections
314- await personaCard
315- . locator ( '[data-testid="persona-list"]' )
316- . first ( )
317- . textContent ( ) ;
318-
319- // Check if default persona text exists
320- const defaultPersonaSections = personaCard . locator (
321- '[data-testid="persona-list"]'
322- ) ;
323- const count = await defaultPersonaSections . count ( ) ;
324-
325- for ( let i = 0 ; i < count ; i ++ ) {
326- const text = await defaultPersonaSections . nth ( i ) . textContent ( ) ;
327- if ( text ?. includes ( 'Default Persona' ) ) {
328- const parentDiv = defaultPersonaSections . nth ( i ) . locator ( '..' ) ;
329- const siblingText = await parentDiv . locator ( '..' ) . textContent ( ) ;
330-
331- if ( ! siblingText ?. includes ( 'No default persona' ) ) {
332- // User has default persona assigned
333- }
334- }
335- }
336- }
337- ) ;
338-
339- // Step 3: Delete the default persona
340- await test . step ( 'Delete the default persona' , async ( ) => {
341- await settingClick ( page , GlobalSettingOptions . PERSONA ) ;
342- await page . waitForLoadState ( 'networkidle' ) ;
343- await page . waitForSelector ( '[data-testid="loader"]' , {
344- state : 'detached' ,
345- } ) ;
346-
347- await page
348- . getByTestId ( `persona-details-card-${ DEFAULT_PERSONA_DETAILS . name } ` )
349- . click ( ) ;
350- await page . waitForLoadState ( 'networkidle' ) ;
351-
352- await page . click ( '[data-testid="manage-button"]' ) ;
353- await page . click ( '[data-testid="delete-button-title"]' ) ;
354-
355- await expect ( page . locator ( '.ant-modal-header' ) ) . toContainText (
356- DEFAULT_PERSONA_DETAILS . displayName
357- ) ;
358-
359- await page . click ( `[data-testid="hard-delete-option"]` ) ;
360-
361- await expect (
362- page . locator ( '[data-testid="confirm-button"]' )
363- ) . toBeDisabled ( ) ;
364-
365- await page
366- . locator ( '[data-testid="confirmation-text-input"]' )
367- . fill ( DELETE_TERM ) ;
368-
369- const deleteResponse = page . waitForResponse (
370- `/api/v1/personas/*?hardDelete=true&recursive=false`
371- ) ;
372-
373- await expect (
374- page . locator ( '[data-testid="confirm-button"]' )
375- ) . not . toBeDisabled ( ) ;
376-
377- await page . click ( '[data-testid="confirm-button"]' ) ;
378- await deleteResponse ;
379-
380- await page . waitForURL ( '**/settings/persona' ) ;
381- } ) ;
382-
383- // Step 4: Go back to user profile and verify it still loads after default persona deletion
384- await test . step (
385- 'Verify user profile still loads after DEFAULT persona deletion' ,
386- async ( ) => {
387- // Go directly to user profile URL again
388- await page . goto (
389- `http://localhost:8585/users/${ user . responseData . name } `
390- ) ;
391- await page . waitForLoadState ( 'networkidle' ) ;
392-
393- // User profile should load without errors
394- // Check if the user name is displayed (this means the page loaded)
395- const userName = page . getByTestId ( 'nav-user-name' ) ;
396-
397- await expect ( userName ) . toBeVisible ( ) ;
398-
399- // Verify the persona card shows "No default persona" now
400- const personaCard = page . getByTestId ( 'persona-details-card' ) ;
401-
402- await expect ( personaCard ) . toBeVisible ( ) ;
403-
404- // Check all persona sections
405- const defaultPersonaSections = personaCard . locator (
406- '[data-testid="persona-list"]'
407- ) ;
408- const count = await defaultPersonaSections . count ( ) ;
409-
410- let foundDefaultPersonaSection = false ;
411- for ( let i = 0 ; i < count ; i ++ ) {
412- const text = await defaultPersonaSections . nth ( i ) . textContent ( ) ;
413- if ( text ?. includes ( 'Default Persona' ) ) {
414- foundDefaultPersonaSection = true ;
415- const parentDiv = defaultPersonaSections . nth ( i ) . locator ( '..' ) ;
416- const siblingContent = await parentDiv . locator ( '..' ) . textContent ( ) ;
417-
418- // Should show "No default persona" after deletion
419- if ( ! siblingContent ?. includes ( 'No default persona' ) ) {
420- throw new Error (
421- `User still shows deleted default persona in profile`
422- ) ;
423- }
424- }
425- }
426-
427- if ( ! foundDefaultPersonaSection ) {
428- // No default persona section found, which is also acceptable
429- }
430- }
431- ) ;
432- } ) ;
433221} ) ;
0 commit comments