test(e2e): Update password test to log in with new account (#2313)

* test(e2e): Update password test to log in with new account

* CR: Don't break other tests

Performing a log out in a test when using authenticatedState causes subsequent tests that use the state to fail (it will show up as logged out)

* CR: Only do clean up steps when necessary

* CR: Use const
This commit is contained in:
Michael Li authored and GitHub committed 2024-06-07 13:09:24 -04:00
1 parent 7e89f28949
commit 8d217aab2b
6 files changed
+146 -43

No files matched your search

@@ -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);
}
@@ -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);
}
}
});
@@ -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);
}
}
});
@@ -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);
}
}
});
+12 -10
View File
@@ -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);
}
}
});
+9 -3
View File
@@ -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);
}
}
});