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 c9a839e58..75a4b210e 100644 --- a/ui/admin/tests/e2e/tests/auth-method-ldap.spec.js +++ b/ui/admin/tests/e2e/tests/auth-method-ldap.spec.js @@ -82,6 +82,35 @@ test('Set up LDAP auth method @ce @ent @docker', async ({ page }) => { await page.getByLabel('Group DN').fill(process.env.E2E_LDAP_DOMAIN_DN); await page.getByRole('switch', { name: 'Enable Groups' }).click(); + await page + .getByRole('group', { name: 'Account Attribute Maps' }) + .getByLabel('From Attribute') + .last() + .fill('cn'); + await page + .getByRole('group', { name: 'Account Attribute Maps' }) + .getByLabel('To Attribute') + .last() + .selectOption('fullName'); + await page + .getByRole('group', { name: 'Account Attribute Maps' }) + .getByRole('button', { name: 'Add' }) + .click(); + await page + .getByRole('group', { name: 'Account Attribute Maps' }) + .getByLabel('From Attribute') + .last() + .fill('mail'); + await page + .getByRole('group', { name: 'Account Attribute Maps' }) + .getByLabel('To Attribute') + .last() + .selectOption('email'); + await page + .getByRole('group', { name: 'Account Attribute Maps' }) + .getByRole('button', { name: 'Add' }) + .click(); + await page.getByRole('button', { name: 'Save' }).click(); await expect( page.getByRole('alert').getByText('Success', { exact: true }), @@ -143,7 +172,7 @@ test('Set up LDAP auth method @ce @ent @docker', async ({ page }) => { await addPrincipalToRole(page, ldapManagedGroupName); // Create a user and attach LDAP account to it - await createUser(page); + const userName = await createUser(page); await addAccountToUser(page, process.env.E2E_LDAP_USER_NAME); // Create a second auth method so that there's multiple auth methods on the @@ -173,6 +202,91 @@ test('Set up LDAP auth method @ce @ent @docker', async ({ page }) => { .getByRole('navigation', { name: 'breadcrumbs' }) .getByText('Projects'), ).toBeVisible(); + + // Log out + await page.getByText(process.env.E2E_LDAP_USER_NAME).click(); + await page.getByRole('button', { name: 'Sign Out' }).click(); + await expect(page.getByRole('button', { name: 'Sign In' })).toBeVisible(); + + // Log back in as an 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(); + 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(); + + // View the LDAP account and verify account attributes + await page.getByRole('link', { name: orgName }).click(); + await page + .getByRole('navigation', { name: 'IAM' }) + .getByRole('link', { name: 'Auth Methods' }) + .click(); + await page.getByRole('link', { name: ldapAuthMethodName }).click(); + await page.getByRole('link', { name: 'Accounts' }).click(); + + const headersCount = await page + .getByRole('table') + .getByRole('columnheader') + .count(); + let fullNameIndex; + let emailIndex; + for (let i = 0; i < headersCount; i++) { + const header = await page + .getByRole('table') + .getByRole('columnheader') + .nth(i) + .innerText(); + if (header == 'Full Name') { + fullNameIndex = i; + } else if (header == 'Email') { + emailIndex = i; + } + } + + expect( + await page + .getByRole('cell', { name: ldapAccountName }) + .locator('..') + .getByRole('cell') + .nth(fullNameIndex) + .innerText(), + ).toBe(process.env.E2E_LDAP_USER_NAME); + expect( + await page + .getByRole('cell', { name: ldapAccountName }) + .locator('..') + .getByRole('cell') + .nth(emailIndex) + .innerText(), + ).toBe(process.env.E2E_LDAP_USER_NAME + '@mail.com'); + + // View the User account and verify attributes + await page + .getByRole('navigation', { name: 'IAM' }) + .getByRole('link', { name: 'Users' }) + .click(); + await page.getByRole('link', { name: userName }).click(); + await page.getByRole('link', { name: 'Accounts' }).click(); + expect( + await page + .getByRole('table') + .getByRole('row') + .nth(1) // Account row + .getByRole('cell') + .nth(0) // Name field + .innerText(), + ).toContain(process.env.E2E_LDAP_USER_NAME + '@mail.com'); } finally { await authenticateBoundaryCli( process.env.BOUNDARY_ADDR, diff --git a/ui/admin/tests/e2e/tests/credential-store-static.spec.js b/ui/admin/tests/e2e/tests/credential-store-static.spec.js index c45f18d8c..09cdee92d 100644 --- a/ui/admin/tests/e2e/tests/credential-store-static.spec.js +++ b/ui/admin/tests/e2e/tests/credential-store-static.spec.js @@ -76,14 +76,7 @@ test('Static Credential Store (User & Key Pair) @ce @aws @docker', async ({ const retrievedUser = session.item.credentials[0].credential.username; const retrievedKey = session.item.credentials[0].credential.private_key; - if (process.env.E2E_SSH_USER != retrievedUser) { - throw new Error( - 'Stored User does not match. EXPECTED: ' + - process.env.E2E_SSH_USER + - ', ACTUAL: ' + - retrievedUser, - ); - } + expect(retrievedUser).toBe(process.env.E2E_SSH_USER); const keyData = await readFile(process.env.E2E_SSH_KEY_PATH, { encoding: 'utf-8', @@ -128,22 +121,8 @@ test('Static Credential Store (Username & Password) @ce @aws @docker', async ({ const retrievedUser = session.item.credentials[0].credential.username; const retrievedPassword = session.item.credentials[0].credential.password; - if (process.env.E2E_SSH_USER != retrievedUser) { - throw new Error( - 'Stored User does not match. EXPECTED: ' + - process.env.E2E_SSH_USER + - ', ACTUAL: ' + - retrievedUser, - ); - } - if (testPassword != retrievedPassword) { - throw new Error( - 'Stored Password does not match. EXPECTED: ' + - testPassword + - ', ACTUAL: ' + - retrievedPassword, - ); - } + expect(retrievedUser).toBe(process.env.E2E_SSH_USER); + expect(retrievedPassword).toBe(testPassword); } finally { await authenticateBoundaryCli( process.env.BOUNDARY_ADDR, @@ -200,30 +179,9 @@ test('Static Credential Store (JSON) @ce @aws @docker', async ({ page }) => { const retrievedPassword = session.item.credentials[0].credential.password; const retrievedId = session.item.credentials[0].credential.id; - if (testName != retrievedUser) { - throw new Error( - 'Stored User does not match. EXPECTED: ' + - process.env.E2E_SSH_USER + - ', ACTUAL: ' + - retrievedUser, - ); - } - if (testPassword != retrievedPassword) { - throw new Error( - 'Stored Password does not match. EXPECTED: ' + - testPassword + - ', ACTUAL: ' + - retrievedPassword, - ); - } - if (testId != retrievedId) { - throw new Error( - 'Stored ID does not match. EXPECTED: ' + - testId + - ', ACTUAL: ' + - retrievedId, - ); - } + expect(retrievedUser).toBe(testName); + expect(retrievedPassword).toBe(testPassword); + expect(retrievedId).toBe(testId); } finally { await authenticateBoundaryCli( process.env.BOUNDARY_ADDR, diff --git a/ui/admin/tests/e2e/tests/credential-store-vault.spec.js b/ui/admin/tests/e2e/tests/credential-store-vault.spec.js index 94eb2b80e..5fa496a72 100644 --- a/ui/admin/tests/e2e/tests/credential-store-vault.spec.js +++ b/ui/admin/tests/e2e/tests/credential-store-vault.spec.js @@ -148,14 +148,9 @@ test('Vault Credential Store (User & Key Pair) @ce @aws @docker', async ({ session.item.credentials[0].secret.decoded.data.username; const retrievedKey = session.item.credentials[0].secret.decoded.data.private_key; - if (process.env.E2E_SSH_USER != retrievedUser) { - throw new Error( - 'Stored User does not match. EXPECTED: ' + - process.env.E2E_SSH_USER + - ', ACTUAL: ' + - retrievedUser, - ); - } + + expect(retrievedUser).toBe(process.env.E2E_SSH_USER); + const keyData = await readFile(process.env.E2E_SSH_KEY_PATH, { encoding: 'utf-8', }); diff --git a/ui/admin/tests/e2e/tests/dynamic-host-catalog-aws.spec.js b/ui/admin/tests/e2e/tests/dynamic-host-catalog-aws.spec.js index 4ecf30798..c5979e1e2 100644 --- a/ui/admin/tests/e2e/tests/dynamic-host-catalog-aws.spec.js +++ b/ui/admin/tests/e2e/tests/dynamic-host-catalog-aws.spec.js @@ -109,7 +109,6 @@ test.describe('AWS', async () => { // Check number of hosts in host set let i = 0; let rowCount = 0; - let hostsAreVisible = false; let expectedHosts = JSON.parse(process.env.E2E_AWS_HOST_SET_IPS); do { i = i + 1; @@ -120,10 +119,6 @@ test.describe('AWS', async () => { .nth(1) .getByRole('row') .count(); - if (rowCount == expectedHosts.length) { - hostsAreVisible = true; - break; - } await page.reload(); await page .getByRole('navigation', { name: 'breadcrumbs' }) @@ -131,14 +126,7 @@ test.describe('AWS', async () => { .waitFor(); } while (i < 5); - if (!hostsAreVisible) { - throw new Error( - 'Hosts are not visible. EXPECTED: ' + - expectedHosts.length + - ', ACTUAL: ' + - rowCount, - ); - } + expect(rowCount).toBe(expectedHosts.length); // Navigate to each host in the host set for (let i = 0; i < expectedHosts.length; i++) {