feat: strengthen module contracts and shared WebUI runtime
This commit is contained in:
@@ -3,6 +3,14 @@ function assert(condition: unknown, message = "assertion failed"): void {
|
||||
}
|
||||
|
||||
import { renderToStaticMarkup } from "react-dom/server";
|
||||
import SearchableSelect, {
|
||||
filterSearchableSelectOptions
|
||||
} from "../src/components/SearchableSelect";
|
||||
import {
|
||||
ReferenceMultiSelect,
|
||||
staticReferenceOptionProvider,
|
||||
wildcardReferenceOption
|
||||
} from "../src/components/ReferenceSelect";
|
||||
import SelectionList, { SelectionListItem } from "../src/components/SelectionList";
|
||||
import { PlatformLanguageProvider } from "../src/i18n/LanguageContext";
|
||||
|
||||
@@ -50,3 +58,87 @@ const nativeLabelMarkup = renderToStaticMarkup(
|
||||
</SelectionList>
|
||||
);
|
||||
assert(nativeLabelMarkup.includes('aria-label="Already translated"'), "native accessible labels pass through unchanged");
|
||||
|
||||
const directoryOptions = [
|
||||
{
|
||||
value: "account-1",
|
||||
label: "Ada Lovelace",
|
||||
description: "ada@example.test"
|
||||
},
|
||||
{
|
||||
value: "group-1",
|
||||
label: "Finance",
|
||||
searchText: "cost centre"
|
||||
}
|
||||
];
|
||||
assert(
|
||||
filterSearchableSelectOptions(directoryOptions, "example").length === 1,
|
||||
"searchable selects match option descriptions"
|
||||
);
|
||||
assert(
|
||||
filterSearchableSelectOptions(directoryOptions, "cost centre")[0]?.value ===
|
||||
"group-1",
|
||||
"searchable selects include explicit search aliases"
|
||||
);
|
||||
|
||||
const searchableMarkup = renderToStaticMarkup(
|
||||
<PlatformLanguageProvider>
|
||||
<SearchableSelect
|
||||
id="assignment-target"
|
||||
aria-label="Assignment target"
|
||||
value="account-1"
|
||||
options={directoryOptions}
|
||||
onChange={() => undefined}
|
||||
/>
|
||||
</PlatformLanguageProvider>
|
||||
);
|
||||
assert(
|
||||
searchableMarkup.includes('role="combobox"'),
|
||||
"searchable selects expose combobox semantics"
|
||||
);
|
||||
assert(
|
||||
searchableMarkup.includes('aria-controls="assignment-target-results"'),
|
||||
"searchable selects associate their input and result list"
|
||||
);
|
||||
assert(
|
||||
searchableMarkup.includes('value="Ada Lovelace"'),
|
||||
"searchable selects render labels instead of technical ids"
|
||||
);
|
||||
|
||||
const referenceMarkup = renderToStaticMarkup(
|
||||
<PlatformLanguageProvider>
|
||||
<ReferenceMultiSelect
|
||||
id="policy-references"
|
||||
aria-label="Policy references"
|
||||
values={["group-1", "legacy-*", "removed"]}
|
||||
onChange={() => undefined}
|
||||
selectedOptions={[
|
||||
{
|
||||
value: "group-1",
|
||||
label: "Finance",
|
||||
description: "Access group"
|
||||
}
|
||||
]}
|
||||
provider={staticReferenceOptionProvider([
|
||||
{
|
||||
value: "group-1",
|
||||
label: "Finance",
|
||||
description: "Access group"
|
||||
}
|
||||
])}
|
||||
createCustomOption={(value) => wildcardReferenceOption(value)}
|
||||
/>
|
||||
</PlatformLanguageProvider>
|
||||
);
|
||||
assert(
|
||||
referenceMarkup.includes("Finance"),
|
||||
"reference multi-selects render known labels"
|
||||
);
|
||||
assert(
|
||||
referenceMarkup.includes("Pattern"),
|
||||
"reference multi-selects distinguish wildcard patterns"
|
||||
);
|
||||
assert(
|
||||
referenceMarkup.includes("Unavailable reference"),
|
||||
"reference multi-selects retain unavailable values"
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user