aboutsummaryrefslogtreecommitdiffstats
path: root/frontend/tests
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/tests')
-rw-r--r--frontend/tests/e2e.spec.ts47
1 files changed, 47 insertions, 0 deletions
diff --git a/frontend/tests/e2e.spec.ts b/frontend/tests/e2e.spec.ts
new file mode 100644
index 0000000..43b3fa7
--- /dev/null
+++ b/frontend/tests/e2e.spec.ts
@@ -0,0 +1,47 @@
+import { test, expect } from '@playwright/test';
+
+test.describe('Neko Reader E2E', () => {
+ test('should allow login, viewing feeds, and logout', async ({ page }) => {
+ // 1. Go to Login
+ await page.goto('/v2/login');
+ await expect(page).toHaveTitle(/Neko/);
+
+ // 2. Login
+ await page.fill('#password', '');
+ await page.click('button[type="submit"]');
+
+ // Check for error message if login failed (optional, for debugging)
+ // await expect(page.locator('.error-message')).toBeVisible({ timeout: 2000 }).catch(() => {});
+
+ // 3. Verify Dashboard
+ // Keep checking for /v2/ or /v2
+ await expect(page).toHaveURL(/.*\/v2\/?$/);
+ await expect(page.getByText('Neko Reader')).toBeVisible();
+ await expect(page.getByText('Logout')).toBeVisible();
+
+ // 4. Verify Feed List
+ await page.click('text=Settings');
+ await expect(page).toHaveURL(/.*\/v2\/settings/);
+
+ // Add a feed
+ const feedUrl = 'http://rss.cnn.com/rss/cnn_topstories.rss';
+ await page.fill('input[type="url"]', feedUrl);
+ await page.click('text=Add Feed');
+
+ // Wait for it to appear
+ await expect(page.getByText(feedUrl)).toBeVisible();
+
+ // 5. Navigate to Feed
+ await page.goto('/v2/');
+
+ // 6. Verify Tag View
+ // Go to a tag URL (simulated, since we can't easily add tags via UI in this test yet without setup)
+ // But we can check if the route loads without crashing
+ await page.goto('/v2/tag/Tech');
+ await expect(page.getByText('Tag: Tech')).toBeVisible();
+
+ // 7. Logout
+ await page.click('text=Logout');
+ await expect(page).toHaveURL(/.*\/v2\/login/);
+ });
+});