fix the playwright auth-setup breaking (#22149)

This commit is contained in:
Ashish Gupta 2025-07-04 16:10:47 +05:30 committed by GitHub
parent d7c11b1557
commit 79df730b85
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -73,6 +73,12 @@ setup('authenticate all users', async ({ browser }) => {
setup.setTimeout(120 * 1000); setup.setTimeout(120 * 1000);
let adminPage: Page; let adminPage: Page;
let dataConsumerPage: Page;
let dataStewardPage: Page;
let editDescriptionPage: Page;
let editTagsPage: Page;
let editGlossaryTermPage: Page;
let ownerPage: Page;
try { try {
// Create admin page and context // Create admin page and context
@ -116,27 +122,51 @@ setup('authenticate all users', async ({ browser }) => {
// Save admin state // Save admin state
await adminPage.context().storageState({ path: adminFile }); await adminPage.context().storageState({ path: adminFile });
// Login and save states for all users in parallel // Create separate pages for each user
const loginPromises = [ const [
{ user: dataConsumer, file: dataConsumerFile }, dataConsumerPage,
{ user: dataSteward, file: dataStewardFile }, dataStewardPage,
{ user: editDescriptionUser, file: editDescriptionFile }, editDescriptionPage,
{ user: editTagsUser, file: editTagsFile }, editTagsPage,
{ user: editGlossaryTermUser, file: editGlossaryTermFile }, editGlossaryTermPage,
{ user: ownerUser, file: ownerFile }, ownerPage,
].map(async ({ user, file }) => { ] = await Promise.all([
const page = await browser.newPage(); browser.newPage(),
try { browser.newPage(),
await user.login(page); browser.newPage(),
// Wait for successful navigation instead of network idle browser.newPage(),
await page.waitForURL('**/my-data', { timeout: 15000 }); browser.newPage(),
await page.context().storageState({ path: file }); browser.newPage(),
} finally { ]);
await page.close();
}
});
await Promise.all(loginPromises); // Save states for each user sequentially to avoid file operation conflicts
await dataConsumer.login(dataConsumerPage);
await dataConsumerPage.waitForLoadState('networkidle');
await dataConsumerPage.context().storageState({ path: dataConsumerFile });
await dataSteward.login(dataStewardPage);
await dataStewardPage.waitForLoadState('networkidle');
await dataStewardPage.context().storageState({ path: dataStewardFile });
await editDescriptionUser.login(editDescriptionPage);
await editDescriptionPage.waitForLoadState('networkidle');
await editDescriptionPage
.context()
.storageState({ path: editDescriptionFile });
await editTagsUser.login(editTagsPage);
await editTagsPage.waitForLoadState('networkidle');
await editTagsPage.context().storageState({ path: editTagsFile });
await editGlossaryTermUser.login(editGlossaryTermPage);
await editGlossaryTermPage.waitForLoadState('networkidle');
await editGlossaryTermPage
.context()
.storageState({ path: editGlossaryTermFile });
await ownerUser.login(ownerPage);
await ownerPage.waitForLoadState('networkidle');
await ownerPage.context().storageState({ path: ownerFile });
await afterAction(); await afterAction();
} catch (error) { } catch (error) {
@ -145,9 +175,24 @@ setup('authenticate all users', async ({ browser }) => {
throw error; throw error;
} finally { } finally {
// Admin page cleanup // Close pages sequentially to avoid conflicts
if (adminPage) { if (dataConsumerPage) {
await adminPage.close(); await dataConsumerPage.close();
}
if (dataStewardPage) {
await dataStewardPage.close();
}
if (editDescriptionPage) {
await editDescriptionPage.close();
}
if (editTagsPage) {
await editTagsPage.close();
}
if (editGlossaryTermPage) {
await editGlossaryTermPage.close();
}
if (ownerPage) {
await ownerPage.close();
} }
} }
}); });