Skip to content

Commit 59ac3d4

Browse files
chore: add E2E tests
1 parent 24f6cc2 commit 59ac3d4

File tree

3 files changed

+109
-10
lines changed

3 files changed

+109
-10
lines changed

includes/admin/feedzy-rss-feeds-import.php

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2027,10 +2027,6 @@ function ( $attr, $key ) {
20272027
);
20282028
}
20292029

2030-
Feedzy_Rss_Feeds_Log::error(
2031-
'Check error reported. Remove on done'
2032-
);
2033-
20342030
// Used as a new line character in import content.
20352031
$import_content = rawurldecode( $import_content );
20362032
$import_content = str_replace( PHP_EOL, "\r\n", $import_content );

tests/e2e/specs/logger.spec.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/**
2+
* WordPress dependencies
3+
*/
4+
import { test, expect } from '@wordpress/e2e-test-utils-playwright';
5+
import { createAndRunSampleImport, deleteAllFeedImports } from '../utils';
6+
7+
test.describe('Logger', () => {
8+
test.beforeEach(async ({ requestUtils }) => {
9+
await deleteAllFeedImports(requestUtils);
10+
await requestUtils.deleteAllPosts();
11+
await requestUtils.deleteAllMedia();
12+
});
13+
14+
test('check settings rendering', async ({ page, admin }) => {
15+
await admin.visitAdminPage('admin.php?page=feedzy-settings');
16+
17+
await expect(
18+
page.locator('select[name="logs-logging-level"]')
19+
).toBeVisible();
20+
21+
await expect(
22+
page.getByText('Report errors via email (Once')
23+
).toBeVisible();
24+
});
25+
26+
test('check logs tabs', async ({ page, admin }) => {
27+
await admin.visitAdminPage('admin.php?page=feedzy-settings');
28+
29+
await page
30+
.locator('select[name="logs-logging-level"]')
31+
.selectOption('debug');
32+
33+
await page
34+
.getByRole('button', { name: 'Save Settings' })
35+
.click({ force: true });
36+
37+
// Create some logs via a sample import.
38+
await createAndRunSampleImport(page);
39+
40+
await admin.visitAdminPage('admin.php?page=feedzy-settings&tab=logs');
41+
42+
await expect(
43+
page.getByRole('heading', { name: 'Recent Logs' })
44+
).toBeVisible();
45+
46+
// Check that logs are displayed.
47+
expect(
48+
await page.locator('.fz-log-container--info').count()
49+
).toBeGreaterThan(0);
50+
expect(
51+
await page.locator('.fz-log-container--debug').count()
52+
).toBeGreaterThan(0);
53+
54+
// Filter messages by Debug.
55+
await page.getByRole('link', { name: 'Debug' }).click();
56+
expect(await page.locator('.fz-log-container--info').count()).toBe(0);
57+
expect(
58+
await page.locator('.fz-log-container--debug').count()
59+
).toBeGreaterThan(0);
60+
});
61+
});

tests/e2e/utils.js

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@ import { expect } from '@wordpress/e2e-test-utils-playwright';
55
*/
66
const { RequestUtils } = require('@wordpress/e2e-test-utils-playwright');
77

8+
export const CUSTOM_FEED_URL =
9+
'https://s3.amazonaws.com/verti-utils/sample-feed.xml';
10+
811
/**
912
* Close the tour modal if it is visible.
1013
*
1114
* @param {import('playwright').Page} page The page object.
1215
*/
1316
export async function tryCloseTourModal(page) {
1417
if (await page.getByRole('button', { name: 'Skip' }).isVisible()) {
15-
await page.getByRole('button', { name: 'Skip' }).click();
18+
await page.getByRole('button', { name: 'Skip' }).click({ force: true });
1619
await page.waitForTimeout(500);
1720
}
1821
}
@@ -25,6 +28,9 @@ export async function tryCloseTourModal(page) {
2528
* @return {Promise<void>} The promise that resolves when the feeds are added.
2629
*/
2730
export async function addFeeds(page, feedURLs) {
31+
await page.waitForSelector('input[name="feedzy_meta_data[source]"]', {
32+
state: 'attached',
33+
});
2834
await page.evaluate((urls) => {
2935
document.querySelector('input[name="feedzy_meta_data[source]"]').value =
3036
urls?.join(', ');
@@ -67,11 +73,21 @@ export async function addContentMapping(page, mapping) {
6773
* @return {Promise<void>}
6874
*/
6975
export async function setItemLimit(page, limit) {
70-
await page.evaluate((limit) => {
71-
document.querySelector(
72-
'input[name="feedzy_meta_data[import_feed_limit]"]'
73-
).value = limit;
74-
}, limit);
76+
try {
77+
await page.waitForSelector(
78+
'input[name="feedzy_meta_data[import_feed_limit]"]',
79+
{
80+
state: 'attached',
81+
}
82+
);
83+
await page.evaluate((importLimit) => {
84+
document.querySelector(
85+
'input[name="feedzy_meta_data[import_feed_limit]"]'
86+
).value = importLimit;
87+
}, limit);
88+
} catch (error) {
89+
// Element not found or not attached - ignore silently
90+
}
7591
}
7692

7793
/**
@@ -192,3 +208,29 @@ export async function getPostsByFeedzy(requestUtils) {
192208
},
193209
});
194210
}
211+
212+
/**
213+
* Create and run a sample import with the given feed URL.
214+
*
215+
* @param {import('playwright').Page} page
216+
* @param {string} feedUrl
217+
*
218+
* @return {Promise<void>} The promise that resolves when the import is created and run.
219+
*/
220+
export async function createAndRunSampleImport(
221+
page,
222+
feedUrl = CUSTOM_FEED_URL
223+
) {
224+
const importName = `Create and run sample import: ${new Date().toISOString()}`;
225+
226+
await page.goto('/wp-admin/post-new.php?post_type=feedzy_imports');
227+
await tryCloseTourModal(page);
228+
229+
await page.getByPlaceholder('Add a name for your import').fill(importName);
230+
await addFeeds(page, [feedUrl]);
231+
await page
232+
.getByRole('button', { name: 'Save & Activate importing' })
233+
.click({ force: true });
234+
235+
await runFeedImport(page);
236+
}

0 commit comments

Comments
 (0)