diff --git a/ui/admin/tests/e2e/tests/auth-method-ldap.spec.js b/ui/admin/tests/e2e/tests/auth-method-ldap.spec.js index 91ae4d014..939f73ef5 100644 --- a/ui/admin/tests/e2e/tests/auth-method-ldap.spec.js +++ b/ui/admin/tests/e2e/tests/auth-method-ldap.spec.js @@ -38,21 +38,11 @@ test.beforeAll(async () => { test('Set up LDAP auth method @ce @ent @docker', async ({ page }) => { await page.goto('/'); - let org; + let orgName; let connect; try { - // Create an org - const orgName = await createOrg(page); - await authenticateBoundaryCli( - process.env.BOUNDARY_ADDR, - process.env.E2E_PASSWORD_AUTH_METHOD_ID, - process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, - process.env.E2E_PASSWORD_ADMIN_PASSWORD, - ); - const orgs = JSON.parse(execSync('boundary scopes list -format json')); - org = orgs.items.filter((obj) => obj.name == orgName)[0]; - - // Navigate to LDAP auth method creation page + // Create an LDAP auth method + orgName = await createOrg(page); await page .getByRole('navigation', { name: 'IAM' }) .getByRole('link', { name: 'Auth Methods' }) @@ -135,6 +125,14 @@ test('Set up LDAP auth method @ce @ent @docker', async ({ page }) => { await createRole(page); await addPrincipalToRole(page, ldapManagedGroupName); } finally { + await authenticateBoundaryCli( + process.env.BOUNDARY_ADDR, + process.env.E2E_PASSWORD_AUTH_METHOD_ID, + process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME, + process.env.E2E_PASSWORD_ADMIN_PASSWORD, + ); + const orgs = JSON.parse(execSync('boundary scopes list -format json')); + const org = orgs.items.filter((obj) => obj.name == orgName)[0]; if (org) { await deleteOrgCli(org.id); } diff --git a/ui/admin/tests/e2e/tests/auth-method-password.spec.js b/ui/admin/tests/e2e/tests/auth-method-password.spec.js index e4271fcbd..b02cebb5f 100644 --- a/ui/admin/tests/e2e/tests/auth-method-password.spec.js +++ b/ui/admin/tests/e2e/tests/auth-method-password.spec.js @@ -4,9 +4,8 @@ */ /* eslint-disable no-undef */ -const { test } = require('@playwright/test'); +const { test, expect } = require('@playwright/test'); const { execSync } = require('child_process'); -const { authenticatedState } = require('../helpers/general'); const { authenticateBoundaryCli, checkBoundaryCli, @@ -22,8 +21,6 @@ const { makeAuthMethodPrimary, } = require('../helpers/boundary-ui'); -test.use({ storageState: authenticatedState }); - test.beforeAll(async () => { await checkBoundaryCli(); }); @@ -32,9 +29,110 @@ test('Verify new auth-method can be created and assigned to users @ce @ent @aws page, }) => { await page.goto('/'); - let org; + let orgName; try { - const orgName = await createOrg(page); + // Log in + await page + .getByLabel('Login Name') + .fill(process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME); + await page + .getByLabel('Password', { exact: true }) + .fill(process.env.E2E_PASSWORD_ADMIN_PASSWORD); + await page.getByRole('button', { name: 'Sign In' }).click(); + await expect( + page.getByRole('navigation', { name: 'General' }), + ).toBeVisible(); + await expect( + page.getByText(process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME), + ).toBeEnabled(); + await expect( + page.getByRole('navigation', { name: 'breadcrumbs' }).getByText('Orgs'), + ).toBeVisible(); + + // Create a new password auth method and account + orgName = await createOrg(page); + const authMethodName = await createPasswordAuthMethod(page); + const username = 'test-user'; + const password = 'password'; + await createPasswordAccount(page, username, password); + await makeAuthMethodPrimary(page); + await createUser(page); + await addAccountToUser(page); + + // Log out + await page.getByText(process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME).click(); + await page.getByRole('button', { name: 'Sign Out' }).click(); + await expect(page.getByRole('button', { name: 'Sign In' })).toBeVisible(); + + // Log in using new account + await page.getByText('Choose a different scope').click(); + await page.getByRole('link', { name: orgName }).click(); + await page.getByRole('link', { name: authMethodName }).click(); + await page.getByLabel('Login Name').fill(username); + await page.getByLabel('Password', { exact: true }).fill(password); + await page.getByRole('button', { name: 'Sign In' }).click(); + await expect( + page.getByRole('navigation', { name: 'General' }), + ).toBeVisible(); + await expect(page.getByText(username)).toBeEnabled(); + await expect( + page + .getByRole('navigation', { name: 'breadcrumbs' }) + .getByText('Projects'), + ).toBeVisible(); + + // Log out + await page.getByText(username).click(); + await page.getByRole('button', { name: 'Sign Out' }).click(); + await expect(page.getByRole('button', { name: 'Sign In' })).toBeVisible(); + + // Log back in as admin + await page + .getByLabel('Login Name') + .fill(process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME); + await page + .getByLabel('Password', { exact: true }) + .fill(process.env.E2E_PASSWORD_ADMIN_PASSWORD); + await page.getByRole('button', { name: 'Sign In' }).click(); + + // Set a new password on the account + await page + .getByRole('navigation', { name: 'General' }) + .getByRole('link', { name: 'Orgs' }) + .click(); + await page.getByRole('link', { name: orgName }).click(); + await page + .getByRole('navigation', { name: 'IAM' }) + .getByRole('link', { name: 'Auth Methods' }) + .click(); + await page.getByRole('link', { name: authMethodName }).click(); + await page.getByRole('link', { name: 'Accounts', exact: true }).click(); + await page.getByRole('link', { name: username }).click(); + const newPassword = 'new-password'; + await setPasswordToAccount(page, newPassword); + + // Log out + await page.getByText(process.env.E2E_PASSWORD_ADMIN_LOGIN_NAME).click(); + await page.getByRole('button', { name: 'Sign Out' }).click(); + await expect(page.getByRole('button', { name: 'Sign In' })).toBeVisible(); + + // Log in using new password + await page.getByText('Choose a different scope').click(); + await page.getByRole('link', { name: orgName }).click(); + await page.getByRole('link', { name: authMethodName }).click(); + await page.getByLabel('Login Name').fill(username); + await page.getByLabel('Password', { exact: true }).fill(newPassword); + await page.getByRole('button', { name: 'Sign In' }).click(); + await expect( + page.getByRole('navigation', { name: 'General' }), + ).toBeVisible(); + await expect(page.getByText(username)).toBeEnabled(); + await expect( + page + .getByRole('navigation', { name: 'breadcrumbs' }) + .getByText('Projects'), + ).toBeVisible(); + } finally { await authenticateBoundaryCli( process.env.BOUNDARY_ADDR, process.env.E2E_PASSWORD_AUTH_METHOD_ID, @@ -42,14 +140,9 @@ test('Verify new auth-method can be created and assigned to users @ce @ent @aws process.env.E2E_PASSWORD_ADMIN_PASSWORD, ); const orgs = JSON.parse(execSync('boundary scopes list -format json')); - org = orgs.items.filter((obj) => obj.name == orgName)[0]; - await createPasswordAuthMethod(page); - await createPasswordAccount(page, 'test-user', 'password'); - await setPasswordToAccount(page, 'password2'); - await makeAuthMethodPrimary(page); - await createUser(page); - await addAccountToUser(page); - } finally { - await deleteOrgCli(org.id); + const org = orgs.items.filter((obj) => obj.name == orgName)[0]; + if (org) { + await deleteOrgCli(org.id); + } } }); diff --git a/ui/admin/tests/e2e/tests/delete-resources-ent.spec.js b/ui/admin/tests/e2e/tests/delete-resources-ent.spec.js index 99891be47..3db27f110 100644 --- a/ui/admin/tests/e2e/tests/delete-resources-ent.spec.js +++ b/ui/admin/tests/e2e/tests/delete-resources-ent.spec.js @@ -171,6 +171,8 @@ test('Verify resources can be deleted (enterprise) @ent @aws', async ({ await page.goto(`/scopes/${orgId}/edit`); await deleteResource(page); } finally { - await deleteOrgCli(orgId); + if (orgId) { + await deleteOrgCli(orgId); + } } }); diff --git a/ui/admin/tests/e2e/tests/delete-resources.spec.js b/ui/admin/tests/e2e/tests/delete-resources.spec.js index d293d1d56..6f1ce72c7 100644 --- a/ui/admin/tests/e2e/tests/delete-resources.spec.js +++ b/ui/admin/tests/e2e/tests/delete-resources.spec.js @@ -193,6 +193,8 @@ test('Verify resources can be deleted @ce @aws', async ({ page }) => { await deleteResource(page); } finally { // Delete org in case the test failed before deleting the org using UI - await deleteOrgCli(orgId); + if (orgId) { + await deleteOrgCli(orgId); + } } }); diff --git a/ui/admin/tests/e2e/tests/group-role.spec.js b/ui/admin/tests/e2e/tests/group-role.spec.js index e13faaa3c..0e0f0a066 100644 --- a/ui/admin/tests/e2e/tests/group-role.spec.js +++ b/ui/admin/tests/e2e/tests/group-role.spec.js @@ -31,9 +31,15 @@ test('Verify a new role can be created and associated with a group @ce @ent @aws page, }) => { await page.goto('/'); - let org; + let orgName; try { - const orgName = await createOrg(page); + orgName = await createOrg(page); + const groupName = await createGroup(page); + await addMemberToGroup(page, 'admin'); + await createRole(page); + await addPrincipalToRole(page, groupName); + await addGrantsToGroup(page, 'ids=*;type=*;actions=read,list'); + } finally { await authenticateBoundaryCli( process.env.BOUNDARY_ADDR, process.env.E2E_PASSWORD_AUTH_METHOD_ID, @@ -41,13 +47,9 @@ test('Verify a new role can be created and associated with a group @ce @ent @aws process.env.E2E_PASSWORD_ADMIN_PASSWORD, ); const orgs = JSON.parse(execSync('boundary scopes list -format json')); - org = orgs.items.filter((obj) => obj.name == orgName)[0]; - const groupName = await createGroup(page); - await addMemberToGroup(page, 'admin'); - await createRole(page); - await addPrincipalToRole(page, groupName); - await addGrantsToGroup(page, 'ids=*;type=*;actions=read,list'); - } finally { - await deleteOrgCli(org.id); + const org = orgs.items.filter((obj) => obj.name == orgName)[0]; + if (org) { + await deleteOrgCli(org.id); + } } }); diff --git a/ui/admin/tests/e2e/tests/target.spec.js b/ui/admin/tests/e2e/tests/target.spec.js index c5d37f966..fc2e5198c 100644 --- a/ui/admin/tests/e2e/tests/target.spec.js +++ b/ui/admin/tests/e2e/tests/target.spec.js @@ -82,7 +82,9 @@ test('Verify session created to target with host, then cancel the session @ce @a .getByRole('button', { name: 'Cancel' }) .click(); } finally { - await deleteOrgCli(org.id); + if (org) { + await deleteOrgCli(org.id); + } // End `boundary connect` process if (connect) { connect.kill('SIGTERM'); @@ -134,7 +136,9 @@ test('Verify session created to target with address, then cancel the session @ce .getByRole('button', { name: 'Cancel' }) .click(); } finally { - await deleteOrgCli(org.id); + if (org) { + await deleteOrgCli(org.id); + } // End `boundary connect` process if (connect) { connect.kill('SIGTERM'); @@ -181,6 +185,8 @@ test('Verify TCP target is updated @ce @aws @docker', async ({ page }) => { ); const orgs = JSON.parse(execSync('boundary scopes list -format json')); const org = orgs.items.filter((obj) => obj.name === orgName)[0]; - await deleteOrgCli(org.id); + if (org) { + await deleteOrgCli(org.id); + } } });