Files
growup-crm/packages/Webkul/Admin/tests/e2e-pw/tests/lead.spec.ts
2026-02-02 15:31:15 -03:00

235 lines
9.4 KiB
TypeScript

import { test, expect } from "../setup";
import fs from "fs";
import { generateName, getRandomDateTime, generateDescription, generateDate, generateEmail, generatePhoneNumber,generateEmailSubject } from '../utils/faker';
async function generateLead(adminPage) {
/**
* Go to the lead listing page.
*/
await adminPage.goto("admin/leads");
await adminPage.getByRole('link', { name: 'Create Lead' }).click();
/**
* Fill the lead form.
*/
const leadTitle = generateName();
const leadDescription = generateDescription();
const leadDate = generateDate();
const leadEmail = generateEmail();
const leadPhoneNumber = generatePhoneNumber();
await adminPage.fill('input[name="title"]', leadTitle);
await adminPage.fill('textarea[name="description"]', leadDescription);
await adminPage.locator('select[name="lead_source_id"]').selectOption("1");
await adminPage.fill('input[name="expected_close_date"]', leadDate);
await adminPage.locator('select[name="lead_type_id"]').selectOption("1");
await adminPage.locator('select[name="user_id"]').selectOption("1");
await adminPage.fill('input[name="lead_value"]', '1000');
/**
* Add a new person.
*/
await adminPage.locator('div').filter({ hasText: /^Click to Add$/ }).nth(1).click();
await adminPage.getByRole('textbox', { name: 'Search...' }).fill(leadTitle);
await adminPage.getByText('Add as New').click();
await adminPage.fill('input[name="person[emails][0][value]"]', leadEmail);
await adminPage.fill('input[name="person[contact_numbers][0][value]"]', leadPhoneNumber);
/**
* Associate an organization.
*/
await adminPage.locator('div').filter({ hasText: /^Click to add$/ }).nth(2).click();
await adminPage.getByRole('textbox', { name: 'Search...' }).fill(leadTitle);
await adminPage.getByText('Add as New').click();
/**
* Save the lead.
*/
await adminPage.getByRole('button', { name: 'Save' }).click();
/**
* Assertion to confirm lead creation.
*/
await expect(adminPage.getByText('Success', { exact: true })).toBeVisible();
return { leadTitle, leadDescription, leadDate, leadEmail, leadPhoneNumber };
}
function generateFile(fileName, content) {
fs.writeFileSync(fileName, content);
return fileName;
}
test.describe("lead management", () => {
test("should create a new lead", async ({ adminPage }) => {
/**
* Create a new lead.
*/
await generateLead(adminPage);
});
test("should able to update lead", async ({ adminPage }) => {
/**
* Create a new lead.
*/
const lead = await generateLead(adminPage);
/**
* Update the lead.
*/
await adminPage.getByRole('link', { name: lead.leadTitle }).click();
const page1Promise = adminPage.waitForEvent('popup');
await adminPage.getByRole('link', { name: '' }).first().click();
const page1 = await page1Promise;
await page1.fill('textarea[name="description"]', generateDescription());
await page1.fill('input[name="title"]', generateName());
await page1.getByLabel('Source').selectOption('3');
await page1.fill('input[name="lead_value"]', '30000');
await page1.getByRole('button', { name: 'Save' }).click();
await page1.getByText('Success', { exact: true }).click();
});
test("should able to delete lead", async ({ adminPage }) => {
/**
* Create a new lead.
*/
const lead = await generateLead(adminPage);
/**
* Delete the lead.
*/
await adminPage.getByRole('link', { name: '' }).click();
await adminPage.locator('div:nth-child(4) > .flex > span:nth-child(2)').click();
await adminPage.getByRole('button', { name: 'Agree', exact: true }).click();
await expect(adminPage.getByText('Success', { exact: true })).toBeVisible();
await expect(adminPage.locator('#app')).toContainText('Lead deleted successfully.');
});
test("should sent a mail", async ({ adminPage }) => {
/**
* Create a new lead.
*/
const lead = await generateLead(adminPage);
/**
* fill mail detail.
*/
await adminPage.getByRole('link', { name: lead.leadTitle}).click();
await adminPage.getByRole('button', { name: ' Mail' }).click();
await adminPage.fill('input[name="temp-reply_to"]', generateEmail());
await adminPage.fill('input[name="subject"]', generateEmailSubject());
await adminPage.fill('textarea[name="reply"]', generateDescription());
/**
* Sending mail and closing the modal.
*/
await adminPage.getByRole('button', { name: 'Send' }).click();
await expect(adminPage.getByText('Email sent successfully.')).toBeVisible();
});
test("should able to upload file in lead", async ({ adminPage }) => {
/**
* Create a new lead.
*/
const lead = await generateLead(adminPage);
/**
* fill the file detail or upload a file.
*/
await adminPage.getByRole('link', { name: lead.leadTitle}).click();
await adminPage.getByRole('button', { name: ' File' }).click();
await adminPage.locator('input[name="title"]').fill(lead.leadTitle);
await adminPage.locator('textarea[name="comment"]').fill(generateDescription());
await adminPage.locator('input[name="name"]').fill(generateName());
await adminPage.locator('#file').setInputFiles(generateFile('example.txt', 'Hello, this is a generated file!'));
await adminPage.getByRole('button', { name: 'Save File' }).click();
});
test("should able to write a note in lead", async ({ adminPage }) => {
/**
* Create a new lead.
*/
const lead = await generateLead(adminPage);
/**
* write a notes
*/
await adminPage.getByRole('link', { name: lead.leadTitle}).click();
await adminPage.getByRole('button', { name: ' Note' }).click();
await adminPage.locator('textarea[name="comment"]').fill(generateDescription());
await adminPage.getByRole('button', { name: 'Save Note' }).click();
});
test("should able to add call activity in lead", async ({ adminPage }) => {
/**
* Create a new lead.
*/
const lead = await generateLead(adminPage);
/**
* write a call activity detail
*/
await adminPage.getByRole('link', { name: lead.leadTitle}).click();
await adminPage.getByRole('button', { name: ' Activity' }).click();
await adminPage.getByRole('heading', { name: 'Add Activity - Call ' }).locator('span').click();
await adminPage.getByText('Call', { exact: true }).click();
await adminPage.locator('input[name="title"]').fill(lead.leadTitle);
await adminPage.locator('textarea[name="comment"]').fill(generateDescription());
await adminPage.locator('input[name="schedule_from"]').click();
await adminPage.locator('input[name="schedule_from"]').fill(getRandomDateTime());
await adminPage.locator('input[name="schedule_to"]').click();
await adminPage.locator('input[name="schedule_to"]').fill(getRandomDateTime());
await adminPage.locator('input[name="location"]').fill('call');
await adminPage.getByRole('button', { name: 'Save Activity' }).click();
});
test("should able to add meeting activity in lead", async ({ adminPage }) => {
/**
* Create a new lead.
*/
const lead = await generateLead(adminPage);
/**
* write a call activity detail
*/
await adminPage.getByRole('link', { name: lead.leadTitle}).click();
await adminPage.getByRole('button', { name: ' Activity' }).click();
await adminPage.getByRole('heading', { name: 'Add Activity' }).locator('span').click();
await adminPage.getByText('Meeting', { exact: true }).click();
await adminPage.locator('input[name="title"]').fill(lead.leadTitle);
await adminPage.locator('textarea[name="comment"]').fill(generateDescription());
await adminPage.locator('input[name="schedule_from"]').click();
await adminPage.locator('input[name="schedule_from"]').fill(getRandomDateTime());
await adminPage.locator('input[name="schedule_to"]').click();
await adminPage.locator('input[name="schedule_to"]').fill(getRandomDateTime());
await adminPage.locator('input[name="location"]').fill('Google meet');
await adminPage.getByRole('button', { name: 'Save Activity' }).click();
});
test("should able to add lunch activity in lead", async ({ adminPage }) => {
/**
* Create a new lead.
*/
const lead = await generateLead(adminPage);
/**
* write a call activity detail
*/
await adminPage.getByRole('link', { name: lead.leadTitle}).click();
await adminPage.getByRole('button', { name: ' Activity' }).click();
await adminPage.getByRole('heading', { name: 'Add Activity' }).locator('span').click();
await adminPage.getByText('Lunch', { exact: true }).click();
await adminPage.locator('input[name="title"]').fill(lead.leadTitle);
await adminPage.locator('textarea[name="comment"]').fill(generateDescription());
await adminPage.locator('input[name="schedule_from"]').click();
await adminPage.locator('input[name="schedule_from"]').fill(getRandomDateTime());
await adminPage.locator('input[name="schedule_to"]').click();
await adminPage.locator('input[name="schedule_to"]').fill(getRandomDateTime());
await adminPage.locator('input[name="location"]').fill('Restraunt');
await adminPage.getByRole('button', { name: 'Save Activity' }).click();
});
});