mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-01-31 06:42:03 +00:00
Address PR review comments by: - Creating shared sanitizeForTestId utility in apps/ui/src/lib/utils.ts - Updating ProjectSwitcherItem to use the shared utility - Adding matching helper to test utils for E2E tests - Updating all E2E tests to use the sanitization helper This ensures the component and tests use identical sanitization logic, making tests robust against project names with special characters.
50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
import { Page, Locator } from '@playwright/test';
|
|
|
|
/**
|
|
* Sanitize a string for use in data-testid selectors.
|
|
* This mirrors the sanitizeForTestId function in apps/ui/src/lib/utils.ts
|
|
* to ensure tests use the same sanitization logic as the component.
|
|
*
|
|
* @param name - The string to sanitize (e.g., project name)
|
|
* @returns A sanitized string safe for CSS selectors
|
|
*/
|
|
export function sanitizeForTestId(name: string): string {
|
|
return name
|
|
.toLowerCase()
|
|
.replace(/\s+/g, '-')
|
|
.replace(/[^a-z0-9-]/g, '')
|
|
.replace(/-+/g, '-')
|
|
.replace(/^-|-$/g, '');
|
|
}
|
|
|
|
/**
|
|
* Get an element by its data-testid attribute
|
|
*/
|
|
export async function getByTestId(page: Page, testId: string): Promise<Locator> {
|
|
return page.locator(`[data-testid="${testId}"]`);
|
|
}
|
|
|
|
/**
|
|
* Get a button by its text content
|
|
*/
|
|
export async function getButtonByText(page: Page, text: string): Promise<Locator> {
|
|
return page.locator(`button:has-text("${text}")`);
|
|
}
|
|
|
|
/**
|
|
* Get the category autocomplete input element
|
|
*/
|
|
export async function getCategoryAutocompleteInput(
|
|
page: Page,
|
|
testId: string = 'feature-category-input'
|
|
): Promise<Locator> {
|
|
return page.locator(`[data-testid="${testId}"]`);
|
|
}
|
|
|
|
/**
|
|
* Get the category autocomplete dropdown list
|
|
*/
|
|
export async function getCategoryAutocompleteList(page: Page): Promise<Locator> {
|
|
return page.locator('[data-testid="category-autocomplete-list"]');
|
|
}
|