HH/e2e/tests/public-forms/inquiries.spec.ts
2026-04-08 17:13:35 +03:00

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);
});
});