import { Page } from '@playwright/test'; /** * Date picker panel identifiers */ export const DatePickerPanels = { MIN_DATE: 'MinimumDt', MAX_DATE: 'MaximumDt', } as const; /** * Set the minimum date in the TimeSpan filter panel * @param page - Playwright page object * @param date - Date string in YYYY-MM-DD format or Date object */ export async function setMinDate(page: Page, date: string | Date): Promise { const dateStr = formatDateForInput(date); const dateInput = page.locator('input[name="MinimumDt"]'); await dateInput.fill(dateStr); await page.waitForTimeout(300); } /** * Set the maximum date in the TimeSpan filter panel * @param page - Playwright page object * @param date - Date string in YYYY-MM-DD format or Date object */ export async function setMaxDate(page: Page, date: string | Date): Promise { const dateStr = formatDateForInput(date); const dateInput = page.locator('input[name="MaximumDt"]'); await dateInput.fill(dateStr); await page.waitForTimeout(300); } /** * Set both minimum and maximum dates in the TimeSpan filter panel * @param page - Playwright page object * @param minDate - Minimum date string in YYYY-MM-DD format or Date object * @param maxDate - Maximum date string in YYYY-MM-DD format or Date object */ export async function setDateRange(page: Page, minDate: string | Date, maxDate: string | Date): Promise { await setMinDate(page, minDate); await setMaxDate(page, maxDate); } /** * Get the current minimum date value * @param page - Playwright page object * @returns The date value as a string */ export async function getMinDate(page: Page): Promise { const dateInput = page.locator('input[name="MinimumDt"]'); return await dateInput.inputValue(); } /** * Get the current maximum date value * @param page - Playwright page object * @returns The date value as a string */ export async function getMaxDate(page: Page): Promise { const dateInput = page.locator('input[name="MaximumDt"]'); return await dateInput.inputValue(); } /** * Clear the minimum date field * @param page - Playwright page object */ export async function clearMinDate(page: Page): Promise { const dateInput = page.locator('input[name="MinimumDt"]'); await dateInput.clear(); await page.waitForTimeout(300); } /** * Clear the maximum date field * @param page - Playwright page object */ export async function clearMaxDate(page: Page): Promise { const dateInput = page.locator('input[name="MaximumDt"]'); await dateInput.clear(); await page.waitForTimeout(300); } /** * Clear both date fields * @param page - Playwright page object */ export async function clearDateRange(page: Page): Promise { await clearMinDate(page); await clearMaxDate(page); } /** * Check if the TimeSpan filter panel is visible * @param page - Playwright page object * @returns true if visible */ export async function isTimeSpanPanelVisible(page: Page): Promise { const panel = page.locator('text=Filter by Time Span'); return await panel.isVisible({ timeout: 2000 }).catch(() => false); } /** * Format a date for input into the date picker * @param date - Date string or Date object * @returns Date string in MM/DD/YYYY format (Radzen date picker format) */ function formatDateForInput(date: string | Date): string { let d: Date; if (typeof date === 'string') { // Parse YYYY-MM-DD format const parts = date.split('-'); if (parts.length === 3) { d = new Date(parseInt(parts[0]), parseInt(parts[1]) - 1, parseInt(parts[2])); } else { d = new Date(date); } } else { d = date; } // Format as MM/DD/YYYY for Radzen DatePicker const month = String(d.getMonth() + 1).padStart(2, '0'); const day = String(d.getDate()).padStart(2, '0'); const year = d.getFullYear(); return `${month}/${day}/${year}`; } /** * Common date ranges for testing */ export const TestDateRanges = { /** Recent date range: 2020-01-01 to 2020-09-01 */ RECENT: { min: '2020-01-01', max: '2020-09-01', }, /** Mid-range dates: 2018-01-01 to 2019-12-31 */ MID_RANGE: { min: '2018-01-01', max: '2019-12-31', }, /** Historical date range: 2016-01-01 to 2017-12-31 */ HISTORICAL: { min: '2016-01-01', max: '2017-12-31', }, /** Same day range: 2020-06-15 */ SAME_DAY: { min: '2020-06-15', max: '2020-06-15', }, /** Start boundary: earliest date in database */ START_BOUNDARY: { min: '1905-01-20', max: '1905-12-31', }, /** End boundary: latest date in database */ END_BOUNDARY: { min: '2020-08-01', max: '2020-09-01', }, /** Invalid: min > max (for negative testing) */ INVALID_REVERSED: { min: '2020-09-01', max: '2020-01-01', }, /** Future dates (for negative testing) */ FUTURE: { min: '2025-01-01', max: '2025-12-31', }, } as const;