Skip to content

Commit ac25fd0

Browse files
Refactor lead management tests and add CoreLocators for improved structure and maintainability
1 parent 2227142 commit ac25fd0

File tree

4 files changed

+90
-31
lines changed

4 files changed

+90
-31
lines changed

packages/Webkul/Admin/tests/e2e-pw/.state/Admin-auth.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@
22
"cookies": [
33
{
44
"name": "XSRF-TOKEN",
5-
"value": "eyJpdiI6ImZCa2tGWEM3UzdRcGRZN1BSZWsxd1E9PSIsInZhbHVlIjoiSFRJMGxUZHRTaWtCRGNrV2tTSVVSYy91a2lDTGVvdlE3RHZxdzh3UVJ4akkwN0k4WVU3QmZOMTl2MS9CTEFkTnN0ZDFvUngvNVdBNUdwS2t6RmJRbXNEQWM3QmFqK3N4NEgwMXlOb3AzdXdpb3lqVk8raGhDNXN6SThRL0ZMTnYiLCJtYWMiOiI3MGExOWE3YmY1ZjRmMjEzZWUxMmRhNGZiOWY4NDIwYzkzZjkyZmNmNjhiYzQ3YjViNDA2YzdkYzAyMjMzZGRjIiwidGFnIjoiIn0%3D",
5+
"value": "eyJpdiI6IndCTjV3TWtLMk42cURvR3l3aFkzQ2c9PSIsInZhbHVlIjoiZG9OanJicjdZU3lzRU9rb3k0UHRKalZoL1NvQkhKWWhqU1Urd0hFLzBlZFNIL0hWc0MzQ1dDeDFDa3BvTFdZcEpHSGh4VnMvNnYxclZOS2NtaDZYUGZIbC9RVUFnSEw2RjlZTjJlU2JhczVXR1hCaHdydE5IN3FvWjJzNk1Hd0EiLCJtYWMiOiIzOWJlZTNmMGM3YTE4YTJlNWE4ZDdjNjRiOTgyN2UwMzRhZDVkMmUwZjM1Njc4OTA2YTExN2VmMzZhOGRiMzQxIiwidGFnIjoiIn0%3D",
66
"domain": "192.168.15.131",
77
"path": "/",
8-
"expires": 1762789075.686608,
8+
"expires": 1762790399.94281,
99
"httpOnly": false,
1010
"secure": false,
1111
"sameSite": "Lax"
1212
},
1313
{
1414
"name": "krayin_crm_session",
15-
"value": "eyJpdiI6ImxVcU1vT0NNbzE5MTJhTll6Vk1zb1E9PSIsInZhbHVlIjoiRzlKcklvTDh0YlhMSXBpR2N1UDA0bVU2dmZYajBkUVgybU9sU290djZXWVdYNTdOdUFpSys2NnJNaCtTeFZqT0xyMkkvTjhHVExRMCtZMXBhdmRYMkdxWHdRTi9UWUxjeURQMmU0Vm1lbVJHRW9QRHJTbTVhb2RQSklFTVZ4TnAiLCJtYWMiOiIyZDVhY2ZmYTMwMTRmMzlkMzA4ZjFiYzUyMzg2MjFlY2QyMTlhNDM0YjU5Y2UxOGM1NDNlMTkwMzVmN2UyYmExIiwidGFnIjoiIn0%3D",
15+
"value": "eyJpdiI6IkdPdUhDRUJUOFdNZE5UbFJpK1dWQVE9PSIsInZhbHVlIjoiMXR1dVBDYWpvVnd5bnVpTnVoZ3Z2bHdnNGZUeUVEMHQ4OER3VDhFOUkvVWVxUFhaNVpDbmtDaEpqRk5XTEJxWlNUZXMycUpaUUduNG1jYUxxSzJqc2xicW5sRmRsZ2d4K204REdwNFZMZFZPWnhmR1lYK0dEVnN5ZkQ0OFozNzQiLCJtYWMiOiJiMTJhZDA2NDkwODgzYWRkZjQzMDcxNzQ3NzMwNzhkNjliMjI0MDUyNmIyYjQxNTk3ODhmMGEzYjExNzZhZGM5IiwidGFnIjoiIn0%3D",
1616
"domain": "192.168.15.131",
1717
"path": "/",
18-
"expires": 1762789075.686725,
18+
"expires": 1762790399.942965,
1919
"httpOnly": true,
2020
"secure": false,
2121
"sameSite": "Lax"
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { Locator, Page } from "playwright/test";
2+
3+
export default class CoreLocators {
4+
readonly page: Page
5+
readonly searchInput:Locator
6+
constructor(page:Page) {
7+
8+
this.page= page,
9+
this.searchInput = page.locator('input[name="search"]');
10+
}
11+
12+
}

packages/Webkul/Admin/tests/e2e-pw/pages/leads/LeadPage.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,16 @@ export class LeadPage {
5555
readonly scheduleToInput: Locator;
5656
readonly locationInput: Locator;
5757
readonly saveActivityButton: Locator;
58-
readonly createLeadButton:Locator;
58+
readonly createLeadButton: Locator;
59+
readonly searchInput: Locator;
60+
5961

6062
constructor(page: Page) {
6163
this.page = page;
6264

6365
// Lead create button
6466

65-
this.createLeadButton= page.getByRole('link', { name: 'Create Lead' });
67+
this.createLeadButton = page.getByRole('link', { name: 'Create Lead' });
6668

6769
// Lead form
6870
this.titleInput = page.locator('input[name="title"]');
@@ -72,6 +74,7 @@ export class LeadPage {
7274
this.typeDropdown = page.locator('select[name="lead_type_id"]');
7375
this.userDropdown = page.locator('select[name="user_id"]');
7476
this.leadValueInput = page.locator('input[name="lead_value"]');
77+
this.searchInput = page.getByRole('textbox', { name: 'Search by Title' });
7578

7679
// Add person
7780
this.addPersonButton = page.locator('div', { hasText: /^Click to Add$/ }).nth(1);
@@ -86,6 +89,7 @@ export class LeadPage {
8689
this.saveLeadButton = page.getByRole('button', { name: 'Save' });
8790

8891
// General
92+
8993
this.leadSuccessToast = page.getByText('Success', { exact: true });
9094
this.deleteButton = page.getByRole('link', { name: '' });
9195
this.agreeButton = page.getByRole('button', { name: 'Agree', exact: true });
@@ -130,4 +134,5 @@ export class LeadPage {
130134
await this.saveLeadButton.click();
131135
await expect(this.leadSuccessToast).toBeVisible();
132136
}
137+
133138
}
Lines changed: 67 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,88 @@
1-
import { test,expect } from "../fixtures/AdminFixtures";
1+
import { test, expect } from "../fixtures/AdminFixtures";
2+
import CoreLocators from "../locator/CoreLocators";
23
import { LeadPage } from "../pages/leads/LeadPage";
34
import { generateDescription, generateEmail, generateName, generatePhoneNumber } from "../utils/faker";
45

56

6-
test.describe("lead management",async()=>{
7+
test.describe("lead management", async () => {
78

89
const leadData = {
910
title: generateName(),
1011
description: generateDescription(),
1112
email: generateEmail(),
1213
phone: generatePhoneNumber(),
1314
};
15+
1416

15-
16-
test("should create a new lead", async ({ adminPage }) => {
17-
const leadPage = new LeadPage(adminPage);
1817

19-
await leadPage.navigateToLeadList();
18+
test("should create a new lead", async ({ adminPage }) => {
19+
const leadPage = new LeadPage(adminPage);
2020

21-
await leadPage.createLeadButton.click();
21+
await leadPage.navigateToLeadList();
2222

23-
await leadPage.titleInput.fill(leadData.title);
24-
await leadPage.descriptionTextarea.fill(leadData.description);
25-
await leadPage.sourceDropdown.selectOption("1");
26-
await leadPage.expectedCloseDate.fill("2025-11-10");
27-
await leadPage.typeDropdown.selectOption("1");
28-
await leadPage.userDropdown.selectOption("1");
29-
await leadPage.leadValueInput.fill("1000");
23+
await leadPage.createLeadButton.click();
3024

31-
await leadPage.addPersonButton.click();
32-
await leadPage.personSearchInput.fill(leadData.title);
33-
await leadPage.addAsNewButton.click();
34-
await leadPage.personEmailInput.fill(leadData.email);
35-
await leadPage.personPhoneInput.fill(leadData.phone);
25+
await leadPage.titleInput.fill(leadData.title);
26+
await leadPage.descriptionTextarea.fill(leadData.description);
27+
await leadPage.sourceDropdown.selectOption("1");
28+
await leadPage.expectedCloseDate.fill("2025-11-10");
29+
await leadPage.typeDropdown.selectOption("1");
30+
await leadPage.userDropdown.selectOption("1");
31+
await leadPage.leadValueInput.fill("1000");
3632

37-
await leadPage.addOrganizationButton.click();
38-
await leadPage.organizationSearchInput.fill(leadData.title);
39-
await leadPage.addAsNewButton.click();
33+
await leadPage.addPersonButton.click();
34+
await leadPage.personSearchInput.fill(leadData.title);
35+
await leadPage.addAsNewButton.click();
36+
await leadPage.personEmailInput.fill(leadData.email);
37+
await leadPage.personPhoneInput.fill(leadData.phone);
4038

41-
await leadPage.saveLead();
39+
await leadPage.addOrganizationButton.click();
40+
await leadPage.organizationSearchInput.fill(leadData.title);
41+
await leadPage.addAsNewButton.click();
42+
43+
await leadPage.saveLead();
44+
45+
46+
47+
});
48+
49+
test("should update an existing lead", async ({ adminPage }) => {
50+
const leadPage = new LeadPage(adminPage);
51+
const coreLocators =await new CoreLocators(adminPage);
52+
53+
// Now update the lead with new data
54+
const updatedLeadData = {
55+
title: generateName(),
56+
description: generateDescription(),
57+
email: generateEmail(),
58+
phone: generatePhoneNumber(),
59+
};
60+
61+
// Fill updated lead data
62+
await leadPage.navigateToLeadList();
63+
await leadPage.searchInput.fill(leadData.title);
64+
await leadPage.page.keyboard.press('Enter');
65+
await leadPage.titleInput.fill(updatedLeadData.title);
66+
await leadPage.descriptionTextarea.fill(updatedLeadData.description);
67+
await leadPage.sourceDropdown.selectOption("2"); // Change source
68+
await leadPage.expectedCloseDate.fill("2025-12-31"); // Update close date
69+
await leadPage.typeDropdown.selectOption("2"); // Change type
70+
await leadPage.leadValueInput.fill("2000"); // Update lead value
71+
72+
// Update person details
73+
await leadPage.personEmailInput.fill(updatedLeadData.email);
74+
await leadPage.personPhoneInput.fill(updatedLeadData.phone);
75+
76+
// Save the updated lead
77+
await leadPage.saveLead();
78+
79+
// Verify the updates were successful
80+
await expect(leadPage.titleInput).toHaveValue(updatedLeadData.title);
81+
await expect(leadPage.descriptionTextarea).toHaveValue(updatedLeadData.description);
82+
await expect(leadPage.leadValueInput).toHaveValue("2000");
83+
await expect(leadPage.personEmailInput).toHaveValue(updatedLeadData.email);
84+
await expect(leadPage.personPhoneInput).toHaveValue(updatedLeadData.phone);
85+
});
4286

43-
44-
});
4587

4688
})

0 commit comments

Comments
 (0)