Skip to content

Commit 3165efe

Browse files
committed
increase test coverage
1 parent dee617d commit 3165efe

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
import { test, expect } from '@playwright/test';
2+
import { SnippetsTestHelper } from './helpers/SnippetsTestHelper';
3+
import { SELECTORS } from './helpers/constants';
4+
5+
const TEST_SNIPPET_NAME = 'E2E List Test Snippet';
6+
7+
test.describe('Code Snippets List Page Actions', () => {
8+
let helper: SnippetsTestHelper;
9+
10+
test.beforeEach(async ({ page }) => {
11+
helper = new SnippetsTestHelper(page);
12+
await helper.navigateToSnippetsAdmin();
13+
14+
await helper.createAndActivateSnippet({
15+
name: TEST_SNIPPET_NAME,
16+
code: 'echo "Test snippet for list actions";'
17+
});
18+
await helper.navigateToSnippetsAdmin();
19+
});
20+
21+
test.afterEach(async ({ page }) => {
22+
try {
23+
await helper.cleanupSnippet(TEST_SNIPPET_NAME);
24+
} catch {}
25+
});
26+
27+
test('Can toggle snippet activation from list page', async ({ page }) => {
28+
const snippetRow = page.locator(`tr:has-text("${TEST_SNIPPET_NAME}")`);
29+
const toggleSwitch = snippetRow.locator('a.snippet-activation-switch');
30+
31+
await expect(toggleSwitch).toHaveAttribute('title', 'Deactivate');
32+
33+
await toggleSwitch.click();
34+
await page.waitForLoadState('networkidle');
35+
36+
const updatedRow = page.locator(`tr:has-text("${TEST_SNIPPET_NAME}")`);
37+
const updatedToggle = updatedRow.locator('a.snippet-activation-switch');
38+
await expect(updatedToggle).toHaveAttribute('title', 'Activate');
39+
40+
await updatedToggle.click();
41+
await page.waitForLoadState('networkidle');
42+
43+
const reactivatedRow = page.locator(`tr:has-text("${TEST_SNIPPET_NAME}")`);
44+
const reactivatedToggle = reactivatedRow.locator('a.snippet-activation-switch');
45+
await expect(reactivatedToggle).toHaveAttribute('title', 'Deactivate');
46+
});
47+
48+
test('Can access edit from list page', async ({ page }) => {
49+
const snippetRow = page.locator(`tr:has-text("${TEST_SNIPPET_NAME}")`);
50+
51+
await snippetRow.locator(SELECTORS.EDIT_ACTION).click();
52+
53+
await expect(page).toHaveURL(/page=edit-snippet/);
54+
await expect(page.locator('#title')).toHaveValue(TEST_SNIPPET_NAME);
55+
});
56+
57+
test('Can clone snippet from list page', async ({ page }) => {
58+
const snippetRow = page.locator(`tr:has-text("${TEST_SNIPPET_NAME}")`);
59+
60+
await snippetRow.locator(SELECTORS.CLONE_ACTION).click();
61+
await page.waitForLoadState('networkidle');
62+
63+
await expect(page).toHaveURL(/page=snippets/);
64+
65+
await expect(page.locator(`tr:has-text("${TEST_SNIPPET_NAME} [CLONE]")`)).toBeVisible();
66+
});
67+
68+
test('Can delete snippet from list page', async ({ page }) => {
69+
const snippetRow = page.locator(`tr:has-text("${TEST_SNIPPET_NAME}")`);
70+
71+
page.on('dialog', dialog => {
72+
expect(dialog.type()).toBe('confirm');
73+
dialog.accept();
74+
});
75+
76+
await snippetRow.locator(SELECTORS.DELETE_ACTION).click();
77+
await page.waitForLoadState('networkidle');
78+
79+
await expect(page).toHaveURL(/page=snippets/);
80+
await expect(page.locator(`tr:has-text("${TEST_SNIPPET_NAME}")`)).not.toBeVisible();
81+
});
82+
83+
test('Can export snippet from list page', async ({ page }) => {
84+
const snippetRow = page.locator(`tr:has-text("${TEST_SNIPPET_NAME}")`);
85+
86+
const downloadPromise = page.waitForEvent('download');
87+
88+
await snippetRow.locator(SELECTORS.EXPORT_ACTION).click();
89+
90+
const download = await downloadPromise;
91+
expect(download.suggestedFilename()).toMatch(/\.json$/);
92+
});
93+
});

tests/e2e/helpers/constants.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,16 @@ export const SELECTORS = {
1313

1414
DELETE_CONFIRM_BUTTON: 'button.components-button.is-destructive.is-primary',
1515

16+
SNIPPETS_TABLE: '.wp-list-table',
17+
SNIPPET_ROW: '.wp-list-table tbody tr',
18+
SNIPPET_TOGGLE: '.snippet-activation-switch input[type="checkbox"]',
19+
SNIPPET_NAME_LINK: '.row-title',
20+
21+
EDIT_ACTION: '.row-actions .edit a',
22+
CLONE_ACTION: '.row-actions .clone a',
23+
DELETE_ACTION: '.row-actions .delete a',
24+
EXPORT_ACTION: '.row-actions .export a',
25+
1626
ADMIN_BAR: '#wpadminbar',
1727
} as const;
1828

0 commit comments

Comments
 (0)