|
| 1 | +import { expect, test } from '@playwright/test'; |
| 2 | +import { setUploadFile, waitModal, waitModalClosed, waitPageLoading } from '../utils.js'; |
| 3 | +import path from 'path'; |
| 4 | +import { fileURLToPath } from 'url'; |
| 5 | + |
| 6 | +const __filename = fileURLToPath(import.meta.url); |
| 7 | +const __dirname = path.dirname(__filename); |
| 8 | + |
| 9 | +const resourceFile = path.join(__dirname, '..', 'data', 'resource.json'); |
| 10 | + |
| 11 | +const randomResourceName = `${Math.random().toString(36).substring(7)} resource`; |
| 12 | +const randomProfileName = `${Math.random().toString(36).substring(7)} profile`; |
| 13 | + |
| 14 | +test('Create, update and delete a profile', async ({ page }) => { |
| 15 | + await test.step('Create a new resource', async () => { |
| 16 | + await page.goto('/v2/admin/resources/create'); |
| 17 | + await waitPageLoading(page); |
| 18 | + await setUploadFile(page, 'Load from file', resourceFile); |
| 19 | + await expect(page.locator('textarea')).toHaveValue(/{/); |
| 20 | + const text = await page.locator('textarea').inputValue(); |
| 21 | + const resource = JSON.parse(/**@type {string} */ (text)); |
| 22 | + await page.locator('textarea').fill(JSON.stringify({ ...resource, name: randomResourceName })); |
| 23 | + await page.getByRole('button', { name: 'Create resource' }).click(); |
| 24 | + await page.waitForURL(/\/v2\/admin\/resources$/); |
| 25 | + await waitPageLoading(page); |
| 26 | + }); |
| 27 | + |
| 28 | + await test.step('Open resource profiles', async () => { |
| 29 | + await page |
| 30 | + .getByRole('row', { name: randomResourceName }) |
| 31 | + .getByRole('link', { name: 'Profiles' }) |
| 32 | + .click(); |
| 33 | + await page.waitForURL(/\/v2\/admin\/resources\/\d+\/profiles$/); |
| 34 | + await waitPageLoading(page); |
| 35 | + }); |
| 36 | + |
| 37 | + await test.step('Create new profile', async () => { |
| 38 | + await page.getByRole('link', { name: 'New profile' }).click(); |
| 39 | + await page.waitForURL(/\/v2\/admin\/resources\/\d+\/profiles\/create$/); |
| 40 | + await waitPageLoading(page); |
| 41 | + await page.getByRole('textbox', { name: 'Profile name' }).fill(randomProfileName); |
| 42 | + await page.getByRole('button', { name: 'Save' }).click(); |
| 43 | + await page.waitForURL(/\/v2\/admin\/resources\/\d+\/profiles$/); |
| 44 | + await waitPageLoading(page); |
| 45 | + }); |
| 46 | + |
| 47 | + await test.step('Open profile page', async () => { |
| 48 | + await page |
| 49 | + .getByRole('row', { name: randomProfileName }) |
| 50 | + .getByRole('link', { name: 'Info' }) |
| 51 | + .click(); |
| 52 | + await page.waitForURL(/\/v2\/admin\/resources\/\d+\/profiles\/\d+$/); |
| 53 | + await waitPageLoading(page); |
| 54 | + await expect(page.getByRole('row', { name: randomProfileName })).toBeVisible(); |
| 55 | + }); |
| 56 | + |
| 57 | + await test.step('Edit profile', async () => { |
| 58 | + await page.getByRole('link', { name: 'Edit' }).click(); |
| 59 | + await page.getByRole('textbox', { name: 'Profile name' }).fill(`${randomProfileName}-renamed`); |
| 60 | + await page.getByRole('button', { name: 'Save' }).click(); |
| 61 | + await expect(page.getByText('Profile successfully updated')).toBeVisible(); |
| 62 | + }); |
| 63 | + |
| 64 | + await test.step('Delete profile', async () => { |
| 65 | + await page.getByRole('link', { name: 'Profiles' }).click(); |
| 66 | + await page.waitForURL(/\/v2\/admin\/resources\/\d+\/profiles$/); |
| 67 | + await waitPageLoading(page); |
| 68 | + await page |
| 69 | + .getByRole('row', { name: `${randomProfileName}-renamed` }) |
| 70 | + .getByRole('button', { name: 'Delete' }) |
| 71 | + .click(); |
| 72 | + const modal = await waitModal(page); |
| 73 | + await modal.getByRole('button', { name: 'Confirm' }).click(); |
| 74 | + await waitModalClosed(page); |
| 75 | + await expect(page.getByRole('row', { name: `${randomProfileName}-renamed` })).not.toBeVisible(); |
| 76 | + }); |
| 77 | + |
| 78 | + await test.step('Delete test resource', async () => { |
| 79 | + await page.getByRole('link', { name: 'Resources' }).click(); |
| 80 | + await page.waitForURL(/\/v2\/admin\/resources$/); |
| 81 | + await waitPageLoading(page); |
| 82 | + await page |
| 83 | + .getByRole('row', { name: randomResourceName }) |
| 84 | + .getByRole('button', { name: 'Delete' }) |
| 85 | + .click(); |
| 86 | + const modal = await waitModal(page); |
| 87 | + await modal.getByRole('button', { name: 'Confirm' }).click(); |
| 88 | + await waitModalClosed(page); |
| 89 | + await expect(page.getByRole('row', { name: randomResourceName })).not.toBeVisible(); |
| 90 | + }); |
| 91 | +}); |
0 commit comments