mirror of
https://github.com/bulwarkmail/webmail.git
synced 2026-10-31 16:13:15 +00:00
28 lines
1.4 KiB
TypeScript
28 lines
1.4 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { flatFieldsSkin } from '../theme-flat-fields';
|
|
|
|
// Flat fields gives every field the control border with an unlayered rule,
|
|
// which also beat the red border of a field holding an error. A field that
|
|
// says it is invalid keeps the error colour.
|
|
|
|
function rulesFor(selectorPart: string) {
|
|
return flatFieldsSkin.split('}').filter((block) => block.includes(selectorPart));
|
|
}
|
|
|
|
describe('Flat fields error borders', () => {
|
|
it('colours an invalid field with the destructive colour, after the control-border rule', () => {
|
|
const controlRule = flatFieldsSkin.indexOf('border-color: var(--color-input)');
|
|
const errorRule = rulesFor('[aria-invalid="true"]').find((block) => block.includes('border-color: var(--color-destructive)'));
|
|
expect(errorRule).toBeTruthy();
|
|
expect(flatFieldsSkin.indexOf(errorRule!)).toBeGreaterThan(controlRule);
|
|
// Same selector list plus the error condition, so it wins on specificity too.
|
|
expect(errorRule).toContain(':is(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]), select, textarea, .border-input):is(');
|
|
expect(errorRule).toContain('.border-destructive');
|
|
});
|
|
|
|
it('no longer claims the global border rule outranks utilities', () => {
|
|
expect(flatFieldsSkin).not.toContain('rule outranks utilities');
|
|
expect(flatFieldsSkin).not.toContain('rule wins over\n utilities');
|
|
});
|
|
});
|