From 26a1d622a5b484637d8cb7b99482f56cb949e04a Mon Sep 17 00:00:00 2001 From: nikhil Date: Sat, 28 Mar 2026 11:24:41 -0400 Subject: [PATCH] test: add Playwright e2e tests for login page --- frontend/package.json | 1 + frontend/playwright.config.js | 10 +++++ frontend/test-results/.last-run.json | 4 ++ frontend/tests/login.spec.js | 28 ++++++++++++++ frontend/yarn.lock | 55 ++++++++++++++++++++++++++++ 5 files changed, 98 insertions(+) create mode 100644 frontend/playwright.config.js create mode 100644 frontend/test-results/.last-run.json create mode 100644 frontend/tests/login.spec.js diff --git a/frontend/package.json b/frontend/package.json index 143b24b..baaf72e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -39,6 +39,7 @@ }, "devDependencies": { "@eslint/eslintrc": "^3.3.5", + "@playwright/test": "^1.58.2", "@tailwindcss/postcss": "^4.1.3", "@types/bcryptjs": "^3.0.0", "@types/http-proxy": "^1.17.17", diff --git a/frontend/playwright.config.js b/frontend/playwright.config.js new file mode 100644 index 0000000..b60c55a --- /dev/null +++ b/frontend/playwright.config.js @@ -0,0 +1,10 @@ +import{ defineConfig } from '@playwright/test'; + +export default defineConfig({ + + testDir: './tests', + use: { + baseURL: 'http://localhost:3000', + headless: false, + }, +}); \ No newline at end of file diff --git a/frontend/test-results/.last-run.json b/frontend/test-results/.last-run.json new file mode 100644 index 0000000..cbcc1fb --- /dev/null +++ b/frontend/test-results/.last-run.json @@ -0,0 +1,4 @@ +{ + "status": "passed", + "failedTests": [] +} \ No newline at end of file diff --git a/frontend/tests/login.spec.js b/frontend/tests/login.spec.js new file mode 100644 index 0000000..cddfbcf --- /dev/null +++ b/frontend/tests/login.spec.js @@ -0,0 +1,28 @@ +const { test, expect} = require( '@playwright/test'); + +test.describe('Login Page', ()=>{ + + test('should load the login page',async({ page })=>{ + + await page.goto('http://localhost:3000'); + await expect(page).toHaveTitle(/PRDforge/); +}); + +test('should show error with invalid credentials',async({ page })=>{ + + await page.goto('http://localhost:3000'); + await page.fill('input[type="email"]','test@abc.com'); + await page.fill('input[type="password"]','testabc123'); + await page.click('button[type="submit"]'); + await expect(page.locator('text=Invalid email or password')).toBeVisible(); +}); + +test('should not allow empty form submission',async({ page })=>{ + + await page.goto('http://localhost:3000'); + await page.click('button[type="submit"]'); + await expect(page.locator('input[type="email"]')).toBeFocused(); + + +}) +}); \ No newline at end of file diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 23318d5..211967f 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -1093,6 +1093,17 @@ __metadata: languageName: node linkType: hard +"@playwright/test@npm:^1.58.2": + version: 1.58.2 + resolution: "@playwright/test@npm:1.58.2" + dependencies: + playwright: "npm:1.58.2" + bin: + playwright: cli.js + checksum: 10c0/2164c03ad97c3653ff02e8818a71f3b2bbc344ac07924c9d8e31cd57505d6d37596015a41f51396b3ed8de6840f59143eaa9c21bf65515963da20740119811da + languageName: node + linkType: hard + "@prisma/client@npm:5.22.0": version: 5.22.0 resolution: "@prisma/client@npm:5.22.0" @@ -4576,6 +4587,16 @@ __metadata: languageName: node linkType: hard +"fsevents@npm:2.3.2": + version: 2.3.2 + resolution: "fsevents@npm:2.3.2" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/be78a3efa3e181cda3cf7a4637cb527bcebb0bd0ea0440105a3bb45b86f9245b307dc10a2507e8f4498a7d4ec349d1910f4d73e4d4495b16103106e07eee735b + conditions: os=darwin + languageName: node + linkType: hard + "fsevents@npm:2.3.3, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" @@ -4586,6 +4607,15 @@ __metadata: languageName: node linkType: hard +"fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin": + version: 2.3.2 + resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" @@ -6737,6 +6767,30 @@ __metadata: languageName: node linkType: hard +"playwright-core@npm:1.58.2": + version: 1.58.2 + resolution: "playwright-core@npm:1.58.2" + bin: + playwright-core: cli.js + checksum: 10c0/5aa15b2b764e6ffe738293a09081a6f7023847a0dbf4cd05fe10eed2e25450d321baf7482f938f2d2eb330291e197fa23e57b29a5b552b89927ceb791266225b + languageName: node + linkType: hard + +"playwright@npm:1.58.2": + version: 1.58.2 + resolution: "playwright@npm:1.58.2" + dependencies: + fsevents: "npm:2.3.2" + playwright-core: "npm:1.58.2" + dependenciesMeta: + fsevents: + optional: true + bin: + playwright: cli.js + checksum: 10c0/d060d9b7cc124bd8b5dffebaab5e84f6b34654a553758fe7b19cc598dfbee93f6ecfbdc1832b40a6380ae04eade86ef3285ba03aa0b136799e83402246dc0727 + languageName: node + linkType: hard + "possible-typed-array-names@npm:^1.0.0": version: 1.1.0 resolution: "possible-typed-array-names@npm:1.1.0" @@ -6771,6 +6825,7 @@ __metadata: resolution: "prdforge-frontend@workspace:." dependencies: "@eslint/eslintrc": "npm:^3.3.5" + "@playwright/test": "npm:^1.58.2" "@prisma/client": "npm:5.22.0" "@radix-ui/react-avatar": "npm:^1.1.11" "@radix-ui/react-dialog": "npm:^1.1.15"