Skip to content

Commit f44511e

Browse files
committed
separate single e2e tests to cover various scenarios
Adds helper methods to condense spec file and increase reusabilty. Introduces beforeEach and afterEach steps
1 parent 47302fd commit f44511e

File tree

3 files changed

+74
-26
lines changed

3 files changed

+74
-26
lines changed

playwright.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export default defineConfig({
1212
fullyParallel: true,
1313
forbidOnly: !!process.env.CI,
1414
retries: process.env.CI ? 2 : 0,
15-
workers: process.env.CI ? 1 : undefined,
15+
workers: 4,
1616
reporter: 'html',
1717
use: {
1818
baseURL: process.env.WP_BASE_URL,

tests/e2e/feature-flags.spec.ts

Lines changed: 53 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ import { ERROR_FLAG_EXISTS, ERROR_FLAG_INVALID } from '../../src/constants';
33
import {
44
AddNewFlag,
55
AddNewFlagAndFill,
6+
CloseSdkModal,
67
DisableFlag,
8+
OpenSdkModal,
79
SaveFlags,
810
deleteLastFlag,
911
} from './helper';
@@ -24,12 +26,23 @@ test.describe('Feature flags', () => {
2426
).toBeVisible();
2527
});
2628

27-
test('Create and delete flags e2e scenarios', async ({ page }) => {
28-
//Create new flag
29-
await AddNewFlagAndFill(page, 'test');
29+
test.afterEach(async ({ page }) => {
30+
await deleteLastFlag(page);
31+
});
32+
33+
test('Create and save new flag successfully', async ({ page }) => {
34+
await AddNewFlagAndFill(page, 'hello_test');
35+
await SaveFlags(page);
36+
37+
expect(
38+
await page.getByLabel('Dismiss this notice').innerText()
39+
).toMatch(/Saved successfully!/);
40+
});
41+
42+
test('Create new flag and disable it successfully', async ({ page }) => {
43+
await AddNewFlagAndFill(page, 'test123');
3044
await SaveFlags(page);
3145

32-
//Confirm save success
3346
expect(
3447
await page.getByLabel('Dismiss this notice').innerText()
3548
).toMatch(/Saved successfully!/);
@@ -45,55 +58,70 @@ test.describe('Feature flags', () => {
4558
.last()
4659
.getByLabel('Flag disabled')
4760
).toBeVisible();
61+
});
62+
63+
test('Check duplicate and invalid flag', async ({ page }) => {
64+
//Create new flag
65+
await AddNewFlagAndFill(page, 'testDuplicate');
66+
await SaveFlags(page);
67+
68+
//Confirm save success
69+
expect(
70+
await page.getByLabel('Dismiss this notice').innerText()
71+
).toMatch(/Saved successfully!/);
4872

49-
//Create another flag with same name
50-
await AddNewFlagAndFill(page, 'test');
73+
//Create another flag with same name should show error
74+
await AddNewFlagAndFill(page, 'testDuplicate');
5175
expect(page.getByText(ERROR_FLAG_EXISTS)).toBeVisible();
5276
expect(page.getByRole('button', { name: 'Save' })).toBeDisabled();
5377

54-
//update flag name to be unique and check text validation.
55-
await AddNewFlag(page, 'test 2');
78+
//update flag name to be unique but still invalid
79+
await AddNewFlag(page, 'test duplicate');
5680
expect(page.getByText(ERROR_FLAG_INVALID)).toBeVisible();
5781
expect(page.getByRole('button', { name: 'Save' })).toBeDisabled();
5882

5983
//Delete the flag
60-
await page
61-
.locator('id=mr-feature-flag-item')
62-
.last()
63-
.getByLabel('Delete Flag')
64-
.click();
65-
// await deleteLastFlag(page);
66-
await page.getByRole('button', { name: 'Yes' }).click();
67-
//Confirm delete success
84+
await deleteLastFlag(page);
85+
6886
expect(
6987
await page.getByLabel('Dismiss this notice').innerText()
7088
).toMatch(/Saved successfully!/);
89+
});
90+
91+
test('Open SDK modal and test the clipboard', async ({ page }) => {
92+
const flagName = 'testWidget';
93+
await AddNewFlagAndFill(page, flagName);
94+
await SaveFlags(page);
7195

72-
//Check SDK modal details.
73-
await page.getByLabel('Click to see SDK setting').last().click();
7496
expect(
75-
page.getByRole('heading', { name: 'SDK for feature flag: test' })
97+
await page.getByLabel('Dismiss this notice').innerText()
98+
).toMatch(/Saved successfully!/);
99+
100+
await OpenSdkModal(page);
101+
102+
expect(
103+
page.getByRole('heading', {
104+
name: `SDK for feature flag: ${flagName}`,
105+
})
76106
).toBeVisible();
77107

78108
// Check PHP Snippet clipboard details
79109
await page.getByLabel('Copy to clipboard').first().click();
80110
const phpClipboardText = await page.evaluate(
81111
'navigator.clipboard.readText()'
82112
);
83-
expect(phpClipboardText).toContain("Flag::is_enabled( 'test' )");
113+
expect(phpClipboardText).toContain(`Flag::is_enabled( '${flagName}' )`);
84114

85115
// Check JS Snippet clipboard details
86116
await page.getByLabel('Copy to clipboard').nth(1).click();
87117
const jsClipboardText: string = await page.evaluate(
88118
'navigator.clipboard.readText()'
89119
);
90120
expect(jsClipboardText).toContain(
91-
"window.mrFeatureFlags.isEnabled('test')"
121+
`window.mrFeatureFlags.isEnabled('${flagName}')`
92122
);
93-
//Close SDK modal
94-
await page.locator('button[aria-label="Close"]').click();
95123

96-
//Delete the created flag
97-
await deleteLastFlag(page);
124+
//Close SDK modal
125+
await CloseSdkModal(page);
98126
});
99127
});

tests/e2e/helper/index.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,23 @@ export async function DisableFlag(page: Page, isEnabled: boolean) {
6161
{ box: true }
6262
);
6363
}
64+
65+
export async function OpenSdkModal(page: Page) {
66+
await test.step(
67+
'Open sdk modal',
68+
async () => {
69+
await page.getByLabel('Click to see SDK setting').last().click();
70+
},
71+
{ box: true }
72+
);
73+
}
74+
75+
export async function CloseSdkModal(page: Page) {
76+
await test.step(
77+
'Close sdk modal',
78+
async () => {
79+
await page.locator('button[aria-label="Close"]').click();
80+
},
81+
{ box: true }
82+
);
83+
}

0 commit comments

Comments
 (0)