Migrate Playwright suite to .NET UI tests and deprecate TS project
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
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<void> {
|
||||
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<void> {
|
||||
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<void> {
|
||||
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<string> {
|
||||
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<string> {
|
||||
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<void> {
|
||||
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<void> {
|
||||
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<void> {
|
||||
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<boolean> {
|
||||
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;
|
||||
Reference in New Issue
Block a user