93 lines
4.0 KiB
TypeScript
93 lines
4.0 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import { PublicFormHelper } from '../../helpers/helpers';
|
|
|
|
test.describe.configure({ mode: 'serial' });
|
|
|
|
test.describe('Public Inquiry Form', () => {
|
|
test('inquiry form loads from landing page', async ({ page }) => {
|
|
const helper = new PublicFormHelper(page);
|
|
await helper.goToPublicLanding();
|
|
await helper.selectFormType('inquiry');
|
|
|
|
await page.waitForSelector('#inquiryForm', { timeout: 15000 });
|
|
await expect(page.locator('#inquiryForm')).toBeVisible();
|
|
await expect(page.locator('input[name="name"]')).toBeVisible();
|
|
await expect(page.locator('input[name="email"]')).toBeVisible();
|
|
await expect(page.locator('input[name="phone"]')).toBeVisible();
|
|
await expect(page.locator('input[name="subject"]')).toBeVisible();
|
|
await expect(page.locator('textarea[name="message"]')).toBeVisible();
|
|
await expect(page.locator('#inqSubmitBtn')).toBeVisible();
|
|
});
|
|
|
|
test('inquiry form has required field validation', async ({ page }) => {
|
|
const helper = new PublicFormHelper(page);
|
|
await helper.goToPublicLanding();
|
|
await helper.selectFormType('inquiry');
|
|
await page.waitForSelector('#inquiryForm', { timeout: 15000 });
|
|
|
|
await page.click('#inqSubmitBtn');
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
const nameInvalid = await page.locator('input[name="name"]:invalid').count();
|
|
const emailInvalid = await page.locator('input[name="email"]:invalid').count();
|
|
|
|
expect(nameInvalid + emailInvalid).toBeGreaterThan(0);
|
|
});
|
|
|
|
test('inquiry form fills all fields correctly', async ({ page }) => {
|
|
const helper = new PublicFormHelper(page);
|
|
await helper.goToPublicLanding();
|
|
await helper.selectFormType('inquiry');
|
|
await page.waitForSelector('#inquiryForm', { timeout: 15000 });
|
|
|
|
await page.fill('input[name="name"]', 'Test Inquirer');
|
|
await page.fill('input[name="email"]', 'inquirer@example.com');
|
|
await page.fill('input[name="phone"]', '+966509876543');
|
|
await page.selectOption('select[name="category"]', 'general');
|
|
await page.fill('input[name="subject"]', 'Test Inquiry Subject');
|
|
await page.fill('textarea[name="message"]', 'This is a test inquiry for E2E testing. I would like to know about visiting hours.');
|
|
|
|
await expect(page.locator('input[name="name"]')).toHaveValue('Test Inquirer');
|
|
await expect(page.locator('input[name="email"]')).toHaveValue('inquirer@example.com');
|
|
await expect(page.locator('input[name="phone"]')).toHaveValue('+966509876543');
|
|
await expect(page.locator('input[name="subject"]')).toHaveValue('Test Inquiry Subject');
|
|
await expect(page.locator('textarea[name="message"]')).toHaveValue(
|
|
'This is a test inquiry for E2E testing. I would like to know about visiting hours.'
|
|
);
|
|
});
|
|
|
|
test('inquiry category has expected options', async ({ page }) => {
|
|
const helper = new PublicFormHelper(page);
|
|
await helper.goToPublicLanding();
|
|
await helper.selectFormType('inquiry');
|
|
await page.waitForSelector('#inquiryForm', { timeout: 15000 });
|
|
|
|
const options = page.locator('select[name="category"] option');
|
|
const count = await options.count();
|
|
expect(count).toBeGreaterThanOrEqual(6);
|
|
|
|
const values = [];
|
|
for (let i = 0; i < count; i++) {
|
|
values.push(await options.nth(i).getAttribute('value'));
|
|
}
|
|
expect(values).toContain('general');
|
|
expect(values).toContain('services');
|
|
expect(values).toContain('appointments');
|
|
expect(values).toContain('billing');
|
|
expect(values).toContain('medical');
|
|
expect(values).toContain('other');
|
|
});
|
|
|
|
test('back button returns to selection from inquiry form', async ({ page }) => {
|
|
const helper = new PublicFormHelper(page);
|
|
await helper.goToPublicLanding();
|
|
await helper.selectFormType('inquiry');
|
|
await page.waitForSelector('#inquiryForm', { timeout: 15000 });
|
|
|
|
await page.click('button:has-text("Back to Selection")');
|
|
|
|
await page.waitForSelector('.selection-card', { timeout: 10000 });
|
|
await expect(page.locator('.selection-card')).toHaveCount(3);
|
|
});
|
|
});
|