diff --git a/e2e/profile.spec.ts b/e2e/profile.spec.ts index 0da039bc..2428af9c 100644 --- a/e2e/profile.spec.ts +++ b/e2e/profile.spec.ts @@ -1,25 +1,69 @@ -import { test, expect } from '../playwright/fixtures'; -import { PLAYWRIGHT_BASE_URL } from '../playwright/config'; +import {test, expect} from '../playwright/fixtures'; +import {PLAYWRIGHT_BASE_URL} from '../playwright/config'; -test('test that user name can be updated', async ({ page }) => { +test('test that user name can be updated', async ({page}) => { await page.goto(PLAYWRIGHT_BASE_URL + '/user/profile'); - await page.getByLabel('Name').fill('NEW NAME'); + await page.getByLabel('Name', {exact: true} ).fill('NEW NAME'); await Promise.all([ - page.getByRole('button', { name: 'Save' }).first().click(), + page.getByRole('button', {name: 'Save'}).first().click(), page.waitForResponse('**/user/profile-information'), ]); await page.reload(); - await expect(page.getByLabel('Name')).toHaveValue('NEW NAME'); + await expect(page.getByLabel('Name', {exact: true})).toHaveValue('NEW NAME'); }); -test.skip('test that user email can be updated', async ({ page }) => { +test.skip('test that user email can be updated', async ({page}) => { // this does not work because of email verification currently await page.goto(PLAYWRIGHT_BASE_URL + '/user/profile'); const emailId = Math.round(Math.random() * 10000); await page.getByLabel('Email').fill(`newemail+${emailId}@test.com`); - await page.getByRole('button', { name: 'Save' }).first().click(); + await page.getByRole('button', {name: 'Save'}).first().click(); await page.reload(); await expect(page.getByLabel('Email')).toHaveValue( `newemail+${emailId}@test.com` ); }); + +async function createNewApiToken(page) { + await page.getByLabel('API Key Name').fill('NEW API KEY'); + await Promise.all([ + page.getByRole('button', {name: 'Create API Key'}).click(), + page.waitForResponse('**/users/me/api-tokens') + ]); + + await expect(page.locator('body')).toContainText('API Token created successfully'); + await page.getByRole('dialog').getByText('Close').click(); + await expect(page.locator('body')).toContainText('NEW API KEY'); +} + +test('test that user can create an API key', async ({page}) => { + await page.goto(PLAYWRIGHT_BASE_URL + '/user/profile'); + await createNewApiToken(page); +}); + +test('test that user can delete an API key', async ({page}) => { + await page.goto(PLAYWRIGHT_BASE_URL + '/user/profile'); + await createNewApiToken(page); + page.getByLabel('Delete API Token NEW API KEY').click(); + await expect(page.getByRole('dialog')).toContainText('Are you sure you would like to delete this API token?'); + await Promise.all([ + page.getByRole('dialog').getByRole('button', {name: 'Delete'}).click(), + page.waitForResponse('**/users/me/api-tokens') + ]); + await expect(page.locator('body')).not.toContainText('NEW API KEY'); +}); + + +test('test that user can revoke an API key', async ({page}) => { + await page.goto(PLAYWRIGHT_BASE_URL + '/user/profile'); + await createNewApiToken(page); + page.getByLabel('Revoke API Token NEW API KEY').click(); + await expect(page.getByRole('dialog')).toContainText('Are you sure you would like to revoke this API token?'); + await Promise.all([ + page.getByRole('dialog').getByRole('button', {name: 'Revoke'}).click(), + page.waitForResponse('**/users/me/api-tokens') + ]); + await expect(page.getByRole('button', {name: 'Revoke'})).toBeHidden(); + await expect(page.locator('body')).toContainText('NEW API KEY'); + await expect(page.locator('body')).toContainText('Revoked'); +}); diff --git a/resources/js/Pages/Profile/Partials/ApiTokensForm.vue b/resources/js/Pages/Profile/Partials/ApiTokensForm.vue index e54d3c9e..895b7aa4 100644 --- a/resources/js/Pages/Profile/Partials/ApiTokensForm.vue +++ b/resources/js/Pages/Profile/Partials/ApiTokensForm.vue @@ -157,9 +157,9 @@ const revokeApiTokenMutation = useMutation({ @@ -236,11 +234,13 @@ const revokeApiTokenMutation = useMutation({ @@ -254,7 +254,7 @@ const revokeApiTokenMutation = useMutation({ - +