mirror of
https://github.com/router-for-me/Cli-Proxy-API-Management-Center.git
synced 2026-10-16 14:57:05 +08:00
33 lines
1.6 KiB
TypeScript
33 lines
1.6 KiB
TypeScript
import { describe, expect, test } from 'bun:test';
|
|
import { readFileSync } from 'node:fs';
|
|
|
|
const source = readFileSync('src/features/quota/QuotaPage.tsx', 'utf8');
|
|
const styles = readFileSync('src/features/quota/QuotaPage.module.scss', 'utf8');
|
|
|
|
describe('quota toolbar presentation contracts', () => {
|
|
test('uses a named, explicit clear action and restores input focus', () => {
|
|
expect(source).toContain('type="search"');
|
|
expect(source).toContain('ref={searchInputRef}');
|
|
expect(source).toContain('{search && (');
|
|
expect(source).toContain("aria-label={t('quota_management.search_clear')}");
|
|
expect(source).toContain(
|
|
"handleSearchChange('');\n searchInputRef.current?.focus();"
|
|
);
|
|
expect(source).toContain('<IconX size={14} aria-hidden="true" />');
|
|
expect(styles).toMatch(/&::-webkit-search-cancel-button,[\s\S]*?appearance: none;/);
|
|
});
|
|
|
|
test('groups search and sorting separately from provider navigation', () => {
|
|
const toolbarStart = source.indexOf('<div className={styles.toolbar}>');
|
|
const searchStart = source.indexOf('<div className={styles.search}>');
|
|
const sortStart = source.indexOf('<div className={styles.sort}>');
|
|
expect(toolbarStart).toBeGreaterThan(source.indexOf('<ProviderTabs'));
|
|
expect(searchStart).toBeGreaterThan(toolbarStart);
|
|
expect(sortStart).toBeGreaterThan(searchStart);
|
|
expect(styles).toMatch(/\.toolbar\s*\{[^}]*flex-wrap: wrap;/);
|
|
expect(styles).toContain('&:focus-within');
|
|
expect(styles).toContain('&:focus-visible');
|
|
expect(styles).toContain('@media (prefers-reduced-motion: reduce)');
|
|
});
|
|
});
|