@oslokommune/punkt-testing-utils 12.43.2 → 13.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -193,6 +193,7 @@ const setPktElementChecked = (testingLibrary) => asyncFuncWithStringIdentifierOr
|
|
|
193
193
|
throw new Error("Kan ikke av-velge en <input type='radio'> - prøv å velge en annen radioknapp i samme gruppe");
|
|
194
194
|
} else {
|
|
195
195
|
returnValue = testingLibrary.fireEvent.click(element);
|
|
196
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
196
197
|
}
|
|
197
198
|
} else if (htmlInputElement.type === "checkbox") {
|
|
198
199
|
if (htmlInputElement.checked !== checked) {
|
|
@@ -204,9 +205,11 @@ const setPktElementChecked = (testingLibrary) => asyncFuncWithStringIdentifierOr
|
|
|
204
205
|
}
|
|
205
206
|
return Promise.resolve(returnValue);
|
|
206
207
|
});
|
|
207
|
-
const isPktElementChecked = (testingLibrary) => (
|
|
208
|
-
const element = syncResolveIdentifierOrElement(testingLibrary)(
|
|
209
|
-
|
|
208
|
+
const isPktElementChecked = (testingLibrary) => (target) => {
|
|
209
|
+
const element = syncResolveIdentifierOrElement(testingLibrary)(target, "label");
|
|
210
|
+
if ("checked" in element) return !!element.checked;
|
|
211
|
+
const descendant = element.querySelector('input[type="radio"]:checked, input[type="checkbox"]:checked');
|
|
212
|
+
return descendant !== null;
|
|
210
213
|
};
|
|
211
214
|
const getPktElementByDisplayValue = (testingLibrary) => (text, container) => getPktElementBy(testingLibrary)("displayValue", text, container);
|
|
212
215
|
const findPktElementByDisplayValue = (testingLibrary) => (text, container) => findPktElementBy(testingLibrary)("displayValue", text, container);
|
|
@@ -242,17 +245,31 @@ const setPktElementValue = (testingLibrary) => asyncFuncWithStringIdentifierOrEl
|
|
|
242
245
|
testingLibrary.fireEvent.change(element, { target: { value: newValue } });
|
|
243
246
|
return Promise.resolve(true);
|
|
244
247
|
} else {
|
|
245
|
-
|
|
246
|
-
|
|
248
|
+
if ("value" in element) {
|
|
249
|
+
element.value = valueOrValues.toString();
|
|
250
|
+
}
|
|
251
|
+
testingLibrary.fireEvent.input(element, { target: { value: valueOrValues } });
|
|
252
|
+
testingLibrary.fireEvent.change(element, { target: { value: valueOrValues } });
|
|
253
|
+
return Promise.resolve(true);
|
|
247
254
|
}
|
|
248
255
|
}
|
|
249
256
|
);
|
|
257
|
+
const containsRadioInput = (element) => {
|
|
258
|
+
var _a;
|
|
259
|
+
if (element.tagName === "INPUT" && element.type === "radio") return true;
|
|
260
|
+
if ((_a = element.querySelector) == null ? void 0 : _a.call(element, 'input[type="radio"]')) return true;
|
|
261
|
+
if (element.tagName === "LABEL") {
|
|
262
|
+
const label = element;
|
|
263
|
+
const control = label.control || (label.htmlFor ? document.getElementById(label.htmlFor) : null);
|
|
264
|
+
return !!(control && control.type === "radio");
|
|
265
|
+
}
|
|
266
|
+
return false;
|
|
267
|
+
};
|
|
250
268
|
const pktClickButton = (testingLibrary) => asyncFuncWithStringIdentifierOrElement(testingLibrary)(async (element) => {
|
|
251
|
-
if (element
|
|
269
|
+
if (containsRadioInput(element)) {
|
|
252
270
|
throw new Error("Klikk på <pkt-radiobutton> støttes ikke - bruk setPktElementChecked i stedet");
|
|
253
271
|
}
|
|
254
|
-
|
|
255
|
-
return Promise.resolve(returnValue);
|
|
272
|
+
return testingLibrary.fireEvent.click(element);
|
|
256
273
|
}, "text");
|
|
257
274
|
const setPktSelectedOptionsByLabel = (testingLibrary) => asyncFuncWithStringIdentifierOrElement(testingLibrary)(
|
|
258
275
|
async (pktSelect, ...desiredOptionLabels) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"punkt-testing-utils.es.js","sources":["../src/index.ts"],"sourcesContent":["import DomTestingLibrary, {\n FindAllByBoundAttribute,\n findAllByDisplayValue,\n findAllByLabelText,\n findAllByTestId,\n findAllByText,\n getAllByDisplayValue,\n getAllByLabelText,\n getAllByTestId,\n getAllByText,\n getElementError,\n} from '@testing-library/dom'\nimport {\n PktBackLink,\n PktCheckbox,\n PktCombobox,\n PktDatepicker,\n PktHelptext,\n PktIcon,\n PktInputWrapper,\n PktLoader,\n PktProgressbar,\n PktRadioButton,\n PktSelect,\n PktTextarea,\n} from '@oslokommune/punkt-elements'\nimport { AllByBoundAttribute } from '@testing-library/dom/types/queries'\n\nexport const PKT_CUSTOM_FORMFIELDS = [\n 'pkt-backlink',\n 'pkt-checkbox',\n 'pkt-combobox',\n 'pkt-datepicker',\n 'pkt-progressbar',\n 'pkt-radiobutton',\n 'pkt-select',\n 'pkt-textarea',\n 'pkt-textinput',\n]\nconst PKT_CUSTOM_ELEMENTS = [\n 'pkt-input-wrapper',\n 'pkt-icon',\n 'pkt-helptext',\n 'pkt-loader',\n 'pkt-backlink',\n ...PKT_CUSTOM_FORMFIELDS,\n]\n\ntype PTLElementType =\n | PktBackLink\n | PktCheckbox\n | PktCombobox\n | PktDatepicker\n | PktHelptext\n | PktIcon\n | PktInputWrapper\n | PktLoader\n | PktProgressbar\n | PktRadioButton\n | PktSelect\n | PktTextarea\n | HTMLInputElement\n | HTMLSelectElement\n | HTMLTextAreaElement\n\nexport type PktTestingLibraryOptions = Pick<\n typeof DomTestingLibrary,\n | 'fireEvent'\n | 'findAllByLabelText'\n | 'findAllByTestId'\n | 'findAllByDisplayValue'\n | 'findAllByText'\n | 'getAllByLabelText'\n | 'getAllByTestId'\n | 'getAllByDisplayValue'\n | 'getAllByText'\n>\n\ntype TestingLibraryTools = {\n fireEvent: typeof DomTestingLibrary.fireEvent\n findAllByLabelText: typeof DomTestingLibrary.findAllByLabelText\n findAllByTestId: typeof DomTestingLibrary.findAllByTestId\n findAllByDisplayValue: typeof DomTestingLibrary.findAllByDisplayValue\n findAllByText: typeof DomTestingLibrary.findAllByText\n getAllByLabelText: typeof DomTestingLibrary.getAllByLabelText\n getAllByTestId: typeof DomTestingLibrary.getAllByTestId\n getAllByDisplayValue: typeof DomTestingLibrary.getAllByDisplayValue\n getAllByText: typeof DomTestingLibrary.getAllByText\n}\n\nexport type LabelOrElement<ElementType = PTLElementType> = string | RegExp | ElementType\n\nexport type PktElementValueType = string | number | Date\n\nexport type PktTestingLibrary = {\n findPktElementByLabelText: (label: string | RegExp, container?: HTMLElement) => Promise<PTLElementType>\n getPktElementByLabelText: (label: string | RegExp, container?: HTMLElement) => PTLElementType\n getPktSelectOptions: (labelOrElement: LabelOrElement<PktSelect>, onlySelected?: boolean) => Array<PktOption>\n getAllPktElementsByLabelText: (label: string, container?: HTMLElement) => Element[]\n setPktElementChecked: (labelOrElement: LabelOrElement, checked: boolean) => Promise<boolean>\n isPktElementChecked: (labelOrElement: LabelOrElement) => boolean\n setPktElementValue: (\n labelOrElement: LabelOrElement,\n valueOrValues: PktElementValueType | Array<PktElementValueType>,\n useInputEvent?: boolean,\n ) => Promise<boolean>\n pktClickButton: (labelOrElement: LabelOrElement<HTMLInputElement | HTMLButtonElement>) => Promise<boolean>\n waitForPktElementsToBeDefined: () => Promise<any>\n setPktSelectedOptionsByLabel: (\n labelOrElement: LabelOrElement<PktSelect>,\n ...desiredOptionLabels: Array<string>\n ) => Promise<any>\n getPktElementByDisplayValue: (labelOrElement: string | RegExp, container?: HTMLElement) => PTLElementType\n findPktElementByDisplayValue: (labelOrElement: string | RegExp, container?: HTMLElement) => Promise<PTLElementType>\n}\n\nexport const setupPktTestingLibrary: (options: PktTestingLibraryOptions) => PktTestingLibrary = (\n options: PktTestingLibraryOptions,\n) => {\n const tools: TestingLibraryTools = {\n fireEvent: options.fireEvent,\n findAllByLabelText: options.findAllByLabelText,\n findAllByDisplayValue: options.findAllByDisplayValue,\n findAllByTestId: options.findAllByTestId,\n findAllByText: options.findAllByText,\n getAllByLabelText: options.getAllByLabelText,\n getAllByDisplayValue: options.getAllByDisplayValue,\n getAllByTestId: options.getAllByTestId,\n getAllByText: options.getAllByText,\n }\n return {\n findPktElementByLabelText: withTestingLibrary(tools, findPktElementByLabel),\n waitForPktElementsToBeDefined,\n getPktElementByLabelText: withTestingLibrary(tools, getPktElementByLabel),\n setPktElementChecked: withTestingLibrary(tools, setPktElementChecked),\n isPktElementChecked: withTestingLibrary(tools, isPktElementChecked),\n getPktSelectOptions: withTestingLibrary(tools, getPktSelectOptions),\n getAllPktElementsByLabelText: withTestingLibrary(tools, getAllPktElementsByLabelText),\n setPktElementValue: withTestingLibrary(tools, setPktElementValue),\n pktClickButton: withTestingLibrary(tools, pktClickButton),\n setPktSelectedOptionsByLabel: withTestingLibrary(tools, setPktSelectedOptionsByLabel),\n getPktElementByDisplayValue: withTestingLibrary(tools, getPktElementByDisplayValue),\n findPktElementByDisplayValue: withTestingLibrary(tools, findPktElementByDisplayValue),\n }\n}\n\ntype SyncQueries = typeof getAllByText | typeof getAllByLabelText | typeof getAllByTestId | typeof getAllByDisplayValue\ntype AsyncQueries =\n | FindAllByBoundAttribute\n | typeof findAllByText\n | typeof findAllByLabelText\n | typeof findAllByTestId\n | typeof findAllByDisplayValue\n\ntype QueryTypes = 'label' | 'text' | 'displayValue' | 'testid'\n\nconst syncQueryFunctionResolver =\n (testingLibrary: TestingLibraryTools) =>\n (queryType: QueryTypes): SyncQueries => {\n const queries: Record<QueryTypes, SyncQueries> = {\n text: testingLibrary.getAllByText,\n label: testingLibrary.getAllByLabelText,\n testid: testingLibrary.getAllByTestId,\n displayValue: testingLibrary.getAllByDisplayValue,\n }\n const query = queries[queryType]\n if (query) {\n return query\n } else {\n throw new Error('Unsupported query type: ' + queryType)\n }\n }\n\nconst asyncQueryFunctionResolver =\n (testingLibrary: TestingLibraryTools) =>\n (queryType: QueryTypes): AsyncQueries => {\n const queries: Record<QueryTypes, AsyncQueries> = {\n text: testingLibrary.findAllByText,\n label: testingLibrary.findAllByLabelText,\n testid: testingLibrary.findAllByTestId,\n displayValue: testingLibrary.findAllByDisplayValue,\n }\n const query = queries[queryType]\n if (query) {\n return query\n } else {\n throw new Error('Unsupported query type: ' + queryType)\n }\n }\n\nconst syncResolveIdentifierOrElement =\n (testingLibrary: TestingLibraryTools) =>\n <ElementType>(elementOrIdentifier: string | RegExp | HTMLElement, query: QueryTypes) =>\n typeof elementOrIdentifier === 'string' || elementOrIdentifier instanceof RegExp\n ? (getPktElementBy(testingLibrary)(query, elementOrIdentifier) as ElementType)\n : (elementOrIdentifier as ElementType)\n\nconst asyncResolveIdentifierOrElement =\n (testingLibrary: TestingLibraryTools) =>\n async <ElementType>(elementOrIdentifier: string | RegExp | HTMLElement, query: QueryTypes) =>\n typeof elementOrIdentifier === 'string' || elementOrIdentifier instanceof RegExp\n ? ((await findPktElementBy(testingLibrary)(query, elementOrIdentifier)) as ElementType)\n : (elementOrIdentifier as ElementType)\n\nconst asyncFuncWithStringIdentifierOrElement =\n (testingLibrary: TestingLibraryTools) =>\n <ElementType, ResultType>(\n func: (element: ElementType, ...restArgs: Array<any>) => Promise<ResultType>,\n query: QueryTypes = 'label',\n ) => {\n return async (labelOrPktElement: string | RegExp | HTMLElement, ...restArgs: Array<any>) => {\n const element = await asyncResolveIdentifierOrElement(testingLibrary)<ElementType>(labelOrPktElement, query)\n return await func(element, ...restArgs)\n }\n }\n\nconst syncFuncWithStringIdentifierOrElement =\n (testingLibrary: TestingLibraryTools) =>\n <ElementType, ResultType>(\n func: (element: ElementType, ...restArgs: Array<any>) => ResultType,\n query: QueryTypes = 'label',\n ) => {\n return (labelOrPktElement: string | RegExp | HTMLElement, ...restArgs: Array<any>) => {\n const element = syncResolveIdentifierOrElement(testingLibrary)<ElementType>(labelOrPktElement, query)\n return func(element, ...restArgs)\n }\n }\n\nconst withTestingLibrary = <F>(testingLibrary: TestingLibraryTools, fn: (testingLibrary: TestingLibraryTools) => F) =>\n fn(testingLibrary)\n\n/**\n * Sørger for at alle brukte custom elements fra Punkt er definerte og erstattet med implementasjoner.\n * Bør kalles etter `render`, før noen operasjoner og antakelser gjøres.\n *\n * F.eks.:\n * <code>\n * render(<div><PktTextinput id=\"textinput\" name={'textInput'} label=\"My text input\" aria-label=\"My text input\" /></div>);\n * await waitForPktElementsToBeDefined();\n *\n * await setPktElementValue(\"My text input\", \"new value\");\n * </code>\n */\nconst waitForPktElementsToBeDefined = async () =>\n await Promise.all(\n PKT_CUSTOM_ELEMENTS.map((elementName) => {\n if (document.querySelector(elementName) !== null) {\n return window.customElements.whenDefined(elementName)\n }\n }).filter((promise) => promise),\n )\n\nconst findPossibleWrappingPktCustomElement =\n (testingLibrary: TestingLibraryTools) =>\n <R extends PTLElementType>(innerElement: HTMLElement | null, isByRole: boolean, args: Array<any>): PTLElementType => {\n if (!innerElement === null) {\n throw getElementError(`Finner ikke noe element med ${isByRole ? 'role' : 'label'} \"${args[0]}\"`, document.body)\n }\n const pktElement = innerElement?.closest(PKT_CUSTOM_FORMFIELDS.join(', ')) as R | null\n if (pktElement) {\n return pktElement as R\n } else {\n return innerElement as R\n }\n }\n\nconst getPktElementBy =\n (testingLibrary: TestingLibraryTools) =>\n (query: QueryTypes = 'label', identifier: string | RegExp, container?: HTMLElement): PTLElementType => {\n try {\n const queryFunc = syncQueryFunctionResolver(testingLibrary)(query)\n const innerElement = doElementSearch(identifier, query, queryFunc, container)[0]\n return findPossibleWrappingPktCustomElement(testingLibrary)(innerElement, false, [])\n } catch (e) {\n return fallbackSearchForPktSelectByLabel(testingLibrary)(identifier, query, container)\n }\n }\n\nconst removeElementBySelector = (ancestor: HTMLElement, selector: string) => {\n const elements = Array.from(ancestor.querySelectorAll(selector))\n elements.forEach((element) => {\n element.parentNode?.removeChild(element)\n })\n}\n\nfunction getPureLabelText(label: Node) {\n const clonedLabel = label.cloneNode(true) as HTMLElement\n removeElementBySelector(clonedLabel, 'pkt-helptext')\n removeElementBySelector(clonedLabel, '.pkt-input-suffix')\n removeElementBySelector(clonedLabel, '.pkt-input-prefix')\n removeElementBySelector(clonedLabel, '.pkt-input-icon')\n removeElementBySelector(clonedLabel, '.pkt-input__counter')\n removeElementBySelector(clonedLabel, 'option')\n removeElementBySelector(clonedLabel, 'pkt-listbox')\n removeElementBySelector(clonedLabel, '.pkt-alert--error')\n removeElementBySelector(clonedLabel, '.pkt-tag')\n removeElementBySelector(clonedLabel, '.pkt-input-check__input-helptext')\n removeElementBySelector(clonedLabel, '.pkt-inputwrapper__helptext')\n return clonedLabel.textContent?.trim() || null\n}\n\nconst getPureLabelTextForLabelOwner = (labelOwner: HTMLElement): string | null => {\n const label =\n ('labels' in labelOwner &&\n labelOwner.labels instanceof NodeList &&\n labelOwner.labels.length > 0 &&\n labelOwner.labels[0]) ||\n (['input', ...PKT_CUSTOM_FORMFIELDS].includes(labelOwner.tagName.toLowerCase()) &&\n (labelOwner.querySelector('label') as HTMLLabelElement | null)) ||\n null\n if (label) {\n return getPureLabelText(label)\n } else {\n return null\n }\n}\n\nconst labelMatcher = (labelTextToMatch: string) => (nodeContent: string, element: Element | null) => {\n if (element instanceof HTMLElement) {\n const labelWithoutHelptext = getPureLabelTextForLabelOwner(element as HTMLElement)\n return labelWithoutHelptext === labelTextToMatch\n } else {\n return false\n }\n}\n\nconst fallbackSearchForPktSelectByLabel =\n (testingLibrary: TestingLibraryTools) =>\n (identifier: any, query: QueryTypes, container: HTMLElement = document.body): PTLElementType => {\n if (typeof identifier === 'string' && query === 'label') {\n // Spesial-case for <pkt-select> som ikke har aria-label\n const matchingLabel: HTMLLabelElement | undefined = Array.from(container.querySelectorAll('label')).find(\n (labelElement) => getPureLabelText(labelElement) === identifier,\n )\n const labelOwner =\n matchingLabel?.control || matchingLabel?.closest('pkt-select') || matchingLabel?.closest('pkt-combobox')\n if (!labelOwner) {\n throw getElementError(`Fant ikke noe element med label \"${identifier}\"`, container)\n }\n return labelOwner as PTLElementType\n }\n throw getElementError(`Fant ikke noe element med ${query} \"${identifier}\"`, container)\n }\n\nconst doElementSearch = <T>(\n identifier: string | RegExp,\n query: QueryTypes,\n queryFunc: (...args: Parameters<AllByBoundAttribute>) => T,\n container: HTMLElement = document.body,\n) => {\n return typeof identifier === 'string' && query === 'label'\n ? queryFunc(container, labelMatcher(identifier.trim()))\n : queryFunc(container, identifier)\n}\n\nconst findPktElementBy =\n (testingLibrary: TestingLibraryTools) =>\n async (\n query: QueryTypes = 'label',\n identifier: string | RegExp,\n container?: HTMLElement,\n ): Promise<PTLElementType> => {\n try {\n const queryFunc = asyncQueryFunctionResolver(testingLibrary)(query)\n const innerElement = (await doElementSearch(identifier, query, queryFunc, container))[0]\n return Promise.resolve(findPossibleWrappingPktCustomElement(testingLibrary)(innerElement, false, []))\n } catch (e) {\n return fallbackSearchForPktSelectByLabel(testingLibrary)(identifier, query, container)\n }\n }\n\nconst getPktElementByLabel =\n (testingLibrary: TestingLibraryTools) => (label: string | RegExp, container?: HTMLElement) =>\n getPktElementBy(testingLibrary)('label', label, container)\n\nconst findPktElementByLabel =\n (testingLibrary: TestingLibraryTools) =>\n async (label: string | RegExp, container?: HTMLElement): Promise<PTLElementType> =>\n findPktElementBy(testingLibrary)('label', label, container)\n\nconst getPktElementByText = (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n getPktElementBy(testingLibrary)('text', text, container)\n\nconst findPktElementByText =\n (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n findPktElementBy(testingLibrary)('text', text, container)\n\nconst setPktElementChecked = (testingLibrary: TestingLibraryTools) =>\n asyncFuncWithStringIdentifierOrElement(testingLibrary)(async (element: PTLElementType, checked: boolean) => {\n if (!('checked' in element)) {\n throw new Error('Bare elementer som har en \"checked\"-attributt støttes')\n }\n let returnValue: boolean = false\n if (element.tagName === 'INPUT') {\n // https://github.com/testing-library/react-testing-library/issues/175#issuecomment-637349276\n // kentcdodds: \"this should probably be documented better, but with checkboxes you don't actually fire change\n // events, you should fire click events instead.\"\n const htmlInputElement = element as HTMLInputElement\n if (htmlInputElement.type === 'radio') {\n if (!checked) {\n throw new Error(\"Kan ikke av-velge en <input type='radio'> - prøv å velge en annen radioknapp i samme gruppe\")\n } else {\n returnValue = testingLibrary.fireEvent.click(element)\n }\n } else if (htmlInputElement.type === 'checkbox') {\n if (htmlInputElement.checked !== checked) {\n returnValue = testingLibrary.fireEvent.click(element)\n }\n }\n } else {\n returnValue = testingLibrary.fireEvent.change(element, { target: { checked } })\n }\n\n return Promise.resolve(returnValue)\n })\n\nconst isPktElementChecked = (testingLibrary: TestingLibraryTools) => (labelOrElement: LabelOrElement) => {\n const element = syncResolveIdentifierOrElement(testingLibrary)<PTLElementType>(labelOrElement, 'label')\n return element.querySelectorAll(':checked').length > 0\n}\n\nconst getPktElementByDisplayValue =\n (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n getPktElementBy(testingLibrary)('displayValue', text, container)\n\nconst findPktElementByDisplayValue =\n (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n findPktElementBy(testingLibrary)('displayValue', text, container)\n\n/**\n * Representerer en option i en PktSelect.\n *\n * @property {string} 0 - verdien (value)\n * @property {string | null} 1 - Tekstinnholdet, <option>tekstinnhold</option>\n * @property {boolean} 2 - Om denne er valgt (selected)\n */\nexport type PktOption = [string, string | undefined, boolean]\n\nconst getPktSelectOptions = (testingLibrary: TestingLibraryTools) =>\n syncFuncWithStringIdentifierOrElement(testingLibrary)<PktSelect, Array<PktOption>>(\n (selectElement: PktSelect, onlySelected?: boolean): Array<PktOption> => {\n const optionElements: Array<HTMLOptionElement> = Array.from(\n selectElement.querySelectorAll('option:not(.pkt-hide), data:not(.pkt.hide)'),\n )\n const filter = onlySelected ? ([, , selected]: PktOption) => selected : (_: PktOption) => true\n const currentValue = selectElement.value\n return optionElements\n .map(\n (optionElement) =>\n [optionElement.value, optionElement.textContent?.trim(), optionElement.value === currentValue] as PktOption,\n )\n .filter(filter)\n },\n )\n\nconst getAllPktElementsByLabelText =\n (testingLibrary: TestingLibraryTools) =>\n (label: string, container?: HTMLElement): Element[] => {\n const innerElements = testingLibrary.getAllByLabelText(container || document.body, label)\n return innerElements.map((element) => findPossibleWrappingPktCustomElement(testingLibrary)(element, false, []))\n }\n\nconst setPktElementValue = (testingLibrary: TestingLibraryTools) =>\n asyncFuncWithStringIdentifierOrElement(testingLibrary)(\n async (\n element: PTLElementType,\n valueOrValues: PktElementValueType | Array<PktElementValueType>,\n useInputEvent = false,\n ): Promise<boolean> => {\n if (Array.isArray(valueOrValues) && valueOrValues.length > 1 && element.tagName === 'PKT-SELECT') {\n throw new Error('Multi-verdi <pkt-select> støttes ikke. Bruk <pkt-combobox> i stedet.')\n }\n if (element.tagName === 'PKT-SELECT' || element.tagName === 'PKT-COMBOBOX') {\n const pktSelect = element as HTMLSelectElement\n const multiple = pktSelect.multiple\n const valueAsArray = Array.isArray(valueOrValues) ? valueOrValues : [valueOrValues]\n const newValue = (multiple && valueAsArray) || (valueAsArray.length == 0 && '') || valueAsArray[0]\n testingLibrary.fireEvent.change(element, { target: { value: newValue } })\n return Promise.resolve(true)\n } else {\n const returnValue = useInputEvent\n ? testingLibrary.fireEvent.input(element, { target: { value: valueOrValues } })\n : testingLibrary.fireEvent.change(element, { target: { value: valueOrValues } })\n return Promise.resolve(returnValue)\n }\n },\n )\n\nconst pktClickButton = (testingLibrary: TestingLibraryTools) =>\n asyncFuncWithStringIdentifierOrElement(testingLibrary)(async (element: PTLElementType) => {\n if (element.tagName === 'PKT-RADIOBUTTON') {\n throw new Error('Klikk på <pkt-radiobutton> støttes ikke - bruk setPktElementChecked i stedet')\n }\n const returnValue = testingLibrary.fireEvent.click(element)\n return Promise.resolve(returnValue)\n }, 'text')\n\nconst setPktSelectedOptionsByLabel = (testingLibrary: TestingLibraryTools) =>\n asyncFuncWithStringIdentifierOrElement(testingLibrary)(\n async (pktSelect: PktSelect, ...desiredOptionLabels: Array<string>) => {\n const availableOptions = getPktSelectOptions(testingLibrary)(pktSelect)\n const selectedOptions = desiredOptionLabels\n .map((optionLabel) => availableOptions.find(([_, label]) => label === optionLabel))\n .filter((possibleOption) => possibleOption) as Array<PktOption>\n if (selectedOptions.length !== desiredOptionLabels.length) {\n throw new Error(\n \"Noen av option'ene finnes ikke i denne komponenten. Du valgte \" +\n JSON.stringify(desiredOptionLabels) +\n ', mens valgmulighetene er ' +\n JSON.stringify(availableOptions.map(([, label]) => label)),\n )\n }\n\n return await setPktElementValue(testingLibrary)(\n pktSelect,\n selectedOptions.map(([value]) => value),\n )\n },\n )\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"punkt-testing-utils.es.js","sources":["../src/index.ts"],"sourcesContent":["import DomTestingLibrary, {\n FindAllByBoundAttribute,\n findAllByDisplayValue,\n findAllByLabelText,\n findAllByTestId,\n findAllByText,\n getAllByDisplayValue,\n getAllByLabelText,\n getAllByTestId,\n getAllByText,\n getElementError,\n} from '@testing-library/dom'\nimport {\n PktBackLink,\n PktCheckbox,\n PktCombobox,\n PktDatepicker,\n PktHelptext,\n PktIcon,\n PktInputWrapper,\n PktLoader,\n PktProgressbar,\n PktRadioButton,\n PktSelect,\n PktTextarea,\n} from '@oslokommune/punkt-elements'\nimport { AllByBoundAttribute } from '@testing-library/dom/types/queries'\n\nexport const PKT_CUSTOM_FORMFIELDS = [\n 'pkt-backlink',\n 'pkt-checkbox',\n 'pkt-combobox',\n 'pkt-datepicker',\n 'pkt-progressbar',\n 'pkt-radiobutton',\n 'pkt-select',\n 'pkt-textarea',\n 'pkt-textinput',\n]\nconst PKT_CUSTOM_ELEMENTS = [\n 'pkt-input-wrapper',\n 'pkt-icon',\n 'pkt-helptext',\n 'pkt-loader',\n 'pkt-backlink',\n ...PKT_CUSTOM_FORMFIELDS,\n]\n\ntype PTLElementType =\n | PktBackLink\n | PktCheckbox\n | PktCombobox\n | PktDatepicker\n | PktHelptext\n | PktIcon\n | PktInputWrapper\n | PktLoader\n | PktProgressbar\n | PktRadioButton\n | PktSelect\n | PktTextarea\n | HTMLInputElement\n | HTMLSelectElement\n | HTMLTextAreaElement\n\nexport type PktTestingLibraryOptions = Pick<\n typeof DomTestingLibrary,\n | 'fireEvent'\n | 'findAllByLabelText'\n | 'findAllByTestId'\n | 'findAllByDisplayValue'\n | 'findAllByText'\n | 'getAllByLabelText'\n | 'getAllByTestId'\n | 'getAllByDisplayValue'\n | 'getAllByText'\n>\n\ntype TestingLibraryTools = {\n fireEvent: typeof DomTestingLibrary.fireEvent\n findAllByLabelText: typeof DomTestingLibrary.findAllByLabelText\n findAllByTestId: typeof DomTestingLibrary.findAllByTestId\n findAllByDisplayValue: typeof DomTestingLibrary.findAllByDisplayValue\n findAllByText: typeof DomTestingLibrary.findAllByText\n getAllByLabelText: typeof DomTestingLibrary.getAllByLabelText\n getAllByTestId: typeof DomTestingLibrary.getAllByTestId\n getAllByDisplayValue: typeof DomTestingLibrary.getAllByDisplayValue\n getAllByText: typeof DomTestingLibrary.getAllByText\n}\n\nexport type LabelOrElement<ElementType = PTLElementType> = string | RegExp | ElementType\n\nexport type PktElementValueType = string | number | Date\n\nexport type PktTestingLibrary = {\n findPktElementByLabelText: (label: string | RegExp, container?: HTMLElement) => Promise<PTLElementType>\n getPktElementByLabelText: (label: string | RegExp, container?: HTMLElement) => PTLElementType\n getPktSelectOptions: (labelOrElement: LabelOrElement<PktSelect>, onlySelected?: boolean) => Array<PktOption>\n getAllPktElementsByLabelText: (label: string, container?: HTMLElement) => Element[]\n setPktElementChecked: (labelOrElement: LabelOrElement, checked: boolean) => Promise<boolean>\n isPktElementChecked: (labelOrElement: LabelOrElement) => boolean\n setPktElementValue: (\n labelOrElement: LabelOrElement,\n valueOrValues: PktElementValueType | Array<PktElementValueType>,\n useInputEvent?: boolean,\n ) => Promise<boolean>\n pktClickButton: (labelOrElement: LabelOrElement<HTMLInputElement | HTMLButtonElement>) => Promise<boolean>\n waitForPktElementsToBeDefined: () => Promise<any>\n setPktSelectedOptionsByLabel: (\n labelOrElement: LabelOrElement<PktSelect>,\n ...desiredOptionLabels: Array<string>\n ) => Promise<any>\n getPktElementByDisplayValue: (labelOrElement: string | RegExp, container?: HTMLElement) => PTLElementType\n findPktElementByDisplayValue: (labelOrElement: string | RegExp, container?: HTMLElement) => Promise<PTLElementType>\n}\n\nexport const setupPktTestingLibrary: (options: PktTestingLibraryOptions) => PktTestingLibrary = (\n options: PktTestingLibraryOptions,\n) => {\n const tools: TestingLibraryTools = {\n fireEvent: options.fireEvent,\n findAllByLabelText: options.findAllByLabelText,\n findAllByDisplayValue: options.findAllByDisplayValue,\n findAllByTestId: options.findAllByTestId,\n findAllByText: options.findAllByText,\n getAllByLabelText: options.getAllByLabelText,\n getAllByDisplayValue: options.getAllByDisplayValue,\n getAllByTestId: options.getAllByTestId,\n getAllByText: options.getAllByText,\n }\n return {\n findPktElementByLabelText: withTestingLibrary(tools, findPktElementByLabel),\n waitForPktElementsToBeDefined,\n getPktElementByLabelText: withTestingLibrary(tools, getPktElementByLabel),\n setPktElementChecked: withTestingLibrary(tools, setPktElementChecked),\n isPktElementChecked: withTestingLibrary(tools, isPktElementChecked),\n getPktSelectOptions: withTestingLibrary(tools, getPktSelectOptions),\n getAllPktElementsByLabelText: withTestingLibrary(tools, getAllPktElementsByLabelText),\n setPktElementValue: withTestingLibrary(tools, setPktElementValue),\n pktClickButton: withTestingLibrary(tools, pktClickButton),\n setPktSelectedOptionsByLabel: withTestingLibrary(tools, setPktSelectedOptionsByLabel),\n getPktElementByDisplayValue: withTestingLibrary(tools, getPktElementByDisplayValue),\n findPktElementByDisplayValue: withTestingLibrary(tools, findPktElementByDisplayValue),\n }\n}\n\ntype SyncQueries = typeof getAllByText | typeof getAllByLabelText | typeof getAllByTestId | typeof getAllByDisplayValue\ntype AsyncQueries =\n | FindAllByBoundAttribute\n | typeof findAllByText\n | typeof findAllByLabelText\n | typeof findAllByTestId\n | typeof findAllByDisplayValue\n\ntype QueryTypes = 'label' | 'text' | 'displayValue' | 'testid'\n\nconst syncQueryFunctionResolver =\n (testingLibrary: TestingLibraryTools) =>\n (queryType: QueryTypes): SyncQueries => {\n const queries: Record<QueryTypes, SyncQueries> = {\n text: testingLibrary.getAllByText,\n label: testingLibrary.getAllByLabelText,\n testid: testingLibrary.getAllByTestId,\n displayValue: testingLibrary.getAllByDisplayValue,\n }\n const query = queries[queryType]\n if (query) {\n return query\n } else {\n throw new Error('Unsupported query type: ' + queryType)\n }\n }\n\nconst asyncQueryFunctionResolver =\n (testingLibrary: TestingLibraryTools) =>\n (queryType: QueryTypes): AsyncQueries => {\n const queries: Record<QueryTypes, AsyncQueries> = {\n text: testingLibrary.findAllByText,\n label: testingLibrary.findAllByLabelText,\n testid: testingLibrary.findAllByTestId,\n displayValue: testingLibrary.findAllByDisplayValue,\n }\n const query = queries[queryType]\n if (query) {\n return query\n } else {\n throw new Error('Unsupported query type: ' + queryType)\n }\n }\n\nconst syncResolveIdentifierOrElement =\n (testingLibrary: TestingLibraryTools) =>\n <ElementType>(elementOrIdentifier: string | RegExp | HTMLElement, query: QueryTypes) =>\n typeof elementOrIdentifier === 'string' || elementOrIdentifier instanceof RegExp\n ? (getPktElementBy(testingLibrary)(query, elementOrIdentifier) as ElementType)\n : (elementOrIdentifier as ElementType)\n\nconst asyncResolveIdentifierOrElement =\n (testingLibrary: TestingLibraryTools) =>\n async <ElementType>(elementOrIdentifier: string | RegExp | HTMLElement, query: QueryTypes) =>\n typeof elementOrIdentifier === 'string' || elementOrIdentifier instanceof RegExp\n ? ((await findPktElementBy(testingLibrary)(query, elementOrIdentifier)) as ElementType)\n : (elementOrIdentifier as ElementType)\n\nconst asyncFuncWithStringIdentifierOrElement =\n (testingLibrary: TestingLibraryTools) =>\n <ElementType, ResultType>(\n func: (element: ElementType, ...restArgs: Array<any>) => Promise<ResultType>,\n query: QueryTypes = 'label',\n ) => {\n return async (labelOrPktElement: string | RegExp | HTMLElement, ...restArgs: Array<any>) => {\n const element = await asyncResolveIdentifierOrElement(testingLibrary)<ElementType>(labelOrPktElement, query)\n return await func(element, ...restArgs)\n }\n }\n\nconst syncFuncWithStringIdentifierOrElement =\n (testingLibrary: TestingLibraryTools) =>\n <ElementType, ResultType>(\n func: (element: ElementType, ...restArgs: Array<any>) => ResultType,\n query: QueryTypes = 'label',\n ) => {\n return (labelOrPktElement: string | RegExp | HTMLElement, ...restArgs: Array<any>) => {\n const element = syncResolveIdentifierOrElement(testingLibrary)<ElementType>(labelOrPktElement, query)\n return func(element, ...restArgs)\n }\n }\n\nconst withTestingLibrary = <F>(testingLibrary: TestingLibraryTools, fn: (testingLibrary: TestingLibraryTools) => F) =>\n fn(testingLibrary)\n\n/**\n * Sørger for at alle brukte custom elements fra Punkt er definerte og erstattet med implementasjoner.\n * Bør kalles etter `render`, før noen operasjoner og antakelser gjøres.\n *\n * F.eks.:\n * <code>\n * render(<div><PktTextinput id=\"textinput\" name={'textInput'} label=\"My text input\" aria-label=\"My text input\" /></div>);\n * await waitForPktElementsToBeDefined();\n *\n * await setPktElementValue(\"My text input\", \"new value\");\n * </code>\n */\nconst waitForPktElementsToBeDefined = async () =>\n await Promise.all(\n PKT_CUSTOM_ELEMENTS.map((elementName) => {\n if (document.querySelector(elementName) !== null) {\n return window.customElements.whenDefined(elementName)\n }\n }).filter((promise) => promise),\n )\n\nconst findPossibleWrappingPktCustomElement =\n (testingLibrary: TestingLibraryTools) =>\n <R extends PTLElementType>(innerElement: HTMLElement | null, isByRole: boolean, args: Array<any>): PTLElementType => {\n if (!innerElement === null) {\n throw getElementError(`Finner ikke noe element med ${isByRole ? 'role' : 'label'} \"${args[0]}\"`, document.body)\n }\n const pktElement = innerElement?.closest(PKT_CUSTOM_FORMFIELDS.join(', ')) as R | null\n if (pktElement) {\n return pktElement as R\n } else {\n return innerElement as R\n }\n }\n\nconst getPktElementBy =\n (testingLibrary: TestingLibraryTools) =>\n (query: QueryTypes = 'label', identifier: string | RegExp, container?: HTMLElement): PTLElementType => {\n try {\n const queryFunc = syncQueryFunctionResolver(testingLibrary)(query)\n const innerElement = doElementSearch(identifier, query, queryFunc, container)[0]\n return findPossibleWrappingPktCustomElement(testingLibrary)(innerElement, false, [])\n } catch (e) {\n return fallbackSearchForPktSelectByLabel(testingLibrary)(identifier, query, container)\n }\n }\n\nconst removeElementBySelector = (ancestor: HTMLElement, selector: string) => {\n const elements = Array.from(ancestor.querySelectorAll(selector))\n elements.forEach((element) => {\n element.parentNode?.removeChild(element)\n })\n}\n\nfunction getPureLabelText(label: Node) {\n const clonedLabel = label.cloneNode(true) as HTMLElement\n removeElementBySelector(clonedLabel, 'pkt-helptext')\n removeElementBySelector(clonedLabel, '.pkt-input-suffix')\n removeElementBySelector(clonedLabel, '.pkt-input-prefix')\n removeElementBySelector(clonedLabel, '.pkt-input-icon')\n removeElementBySelector(clonedLabel, '.pkt-input__counter')\n removeElementBySelector(clonedLabel, 'option')\n removeElementBySelector(clonedLabel, 'pkt-listbox')\n removeElementBySelector(clonedLabel, '.pkt-alert--error')\n removeElementBySelector(clonedLabel, '.pkt-tag')\n removeElementBySelector(clonedLabel, '.pkt-input-check__input-helptext')\n removeElementBySelector(clonedLabel, '.pkt-inputwrapper__helptext')\n return clonedLabel.textContent?.trim() || null\n}\n\nconst getPureLabelTextForLabelOwner = (labelOwner: HTMLElement): string | null => {\n const label =\n ('labels' in labelOwner &&\n labelOwner.labels instanceof NodeList &&\n labelOwner.labels.length > 0 &&\n labelOwner.labels[0]) ||\n (['input', ...PKT_CUSTOM_FORMFIELDS].includes(labelOwner.tagName.toLowerCase()) &&\n (labelOwner.querySelector('label') as HTMLLabelElement | null)) ||\n null\n if (label) {\n return getPureLabelText(label)\n } else {\n return null\n }\n}\n\nconst labelMatcher = (labelTextToMatch: string) => (nodeContent: string, element: Element | null) => {\n if (element instanceof HTMLElement) {\n const labelWithoutHelptext = getPureLabelTextForLabelOwner(element as HTMLElement)\n return labelWithoutHelptext === labelTextToMatch\n } else {\n return false\n }\n}\n\nconst fallbackSearchForPktSelectByLabel =\n (testingLibrary: TestingLibraryTools) =>\n (identifier: any, query: QueryTypes, container: HTMLElement = document.body): PTLElementType => {\n if (typeof identifier === 'string' && query === 'label') {\n // Spesial-case for <pkt-select> som ikke har aria-label\n const matchingLabel: HTMLLabelElement | undefined = Array.from(container.querySelectorAll('label')).find(\n (labelElement) => getPureLabelText(labelElement) === identifier,\n )\n const labelOwner =\n matchingLabel?.control || matchingLabel?.closest('pkt-select') || matchingLabel?.closest('pkt-combobox')\n if (!labelOwner) {\n throw getElementError(`Fant ikke noe element med label \"${identifier}\"`, container)\n }\n return labelOwner as PTLElementType\n }\n throw getElementError(`Fant ikke noe element med ${query} \"${identifier}\"`, container)\n }\n\nconst doElementSearch = <T>(\n identifier: string | RegExp,\n query: QueryTypes,\n queryFunc: (...args: Parameters<AllByBoundAttribute>) => T,\n container: HTMLElement = document.body,\n) => {\n return typeof identifier === 'string' && query === 'label'\n ? queryFunc(container, labelMatcher(identifier.trim()))\n : queryFunc(container, identifier)\n}\n\nconst findPktElementBy =\n (testingLibrary: TestingLibraryTools) =>\n async (\n query: QueryTypes = 'label',\n identifier: string | RegExp,\n container?: HTMLElement,\n ): Promise<PTLElementType> => {\n try {\n const queryFunc = asyncQueryFunctionResolver(testingLibrary)(query)\n const innerElement = (await doElementSearch(identifier, query, queryFunc, container))[0]\n return Promise.resolve(findPossibleWrappingPktCustomElement(testingLibrary)(innerElement, false, []))\n } catch (e) {\n return fallbackSearchForPktSelectByLabel(testingLibrary)(identifier, query, container)\n }\n }\n\nconst getPktElementByLabel =\n (testingLibrary: TestingLibraryTools) => (label: string | RegExp, container?: HTMLElement) =>\n getPktElementBy(testingLibrary)('label', label, container)\n\nconst findPktElementByLabel =\n (testingLibrary: TestingLibraryTools) =>\n async (label: string | RegExp, container?: HTMLElement): Promise<PTLElementType> =>\n findPktElementBy(testingLibrary)('label', label, container)\n\nconst getPktElementByText = (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n getPktElementBy(testingLibrary)('text', text, container)\n\nconst findPktElementByText =\n (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n findPktElementBy(testingLibrary)('text', text, container)\n\nconst setPktElementChecked = (testingLibrary: TestingLibraryTools) =>\n asyncFuncWithStringIdentifierOrElement(testingLibrary)(async (element: PTLElementType, checked: boolean) => {\n if (!('checked' in element)) {\n throw new Error('Bare elementer som har en \"checked\"-attributt støttes')\n }\n let returnValue: boolean = false\n if (element.tagName === 'INPUT') {\n // https://github.com/testing-library/react-testing-library/issues/175#issuecomment-637349276\n // kentcdodds: \"this should probably be documented better, but with checkboxes you don't actually fire change\n // events, you should fire click events instead.\"\n const htmlInputElement = element as HTMLInputElement\n if (htmlInputElement.type === 'radio') {\n if (!checked) {\n throw new Error(\"Kan ikke av-velge en <input type='radio'> - prøv å velge en annen radioknapp i samme gruppe\")\n } else {\n returnValue = testingLibrary.fireEvent.click(element)\n await new Promise((resolve) => setTimeout(resolve, 0))\n }\n } else if (htmlInputElement.type === 'checkbox') {\n if (htmlInputElement.checked !== checked) {\n returnValue = testingLibrary.fireEvent.click(element)\n }\n }\n } else {\n returnValue = testingLibrary.fireEvent.change(element, { target: { checked } })\n }\n\n return Promise.resolve(returnValue)\n })\n\nconst isPktElementChecked =\n (testingLibrary: TestingLibraryTools) =>\n (target: LabelOrElement): boolean => {\n const element = syncResolveIdentifierOrElement(testingLibrary)<PTLElementType>(target, 'label')\n\n if ('checked' in element) return !!(element as HTMLInputElement).checked\n\n const descendant = element.querySelector('input[type=\"radio\"]:checked, input[type=\"checkbox\"]:checked')\n return descendant !== null\n }\n\nconst getPktElementByDisplayValue =\n (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n getPktElementBy(testingLibrary)('displayValue', text, container)\n\nconst findPktElementByDisplayValue =\n (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n findPktElementBy(testingLibrary)('displayValue', text, container)\n\n/**\n * Representerer en option i en PktSelect.\n *\n * @property {string} 0 - verdien (value)\n * @property {string | null} 1 - Tekstinnholdet, <option>tekstinnhold</option>\n * @property {boolean} 2 - Om denne er valgt (selected)\n */\nexport type PktOption = [string, string | undefined, boolean]\n\nconst getPktSelectOptions = (testingLibrary: TestingLibraryTools) =>\n syncFuncWithStringIdentifierOrElement(testingLibrary)<PktSelect, Array<PktOption>>(\n (selectElement: PktSelect, onlySelected?: boolean): Array<PktOption> => {\n const optionElements: Array<HTMLOptionElement> = Array.from(\n selectElement.querySelectorAll('option:not(.pkt-hide), data:not(.pkt.hide)'),\n )\n const filter = onlySelected ? ([, , selected]: PktOption) => selected : (_: PktOption) => true\n const currentValue = selectElement.value\n return optionElements\n .map(\n (optionElement) =>\n [optionElement.value, optionElement.textContent?.trim(), optionElement.value === currentValue] as PktOption,\n )\n .filter(filter)\n },\n )\n\nconst getAllPktElementsByLabelText =\n (testingLibrary: TestingLibraryTools) =>\n (label: string, container?: HTMLElement): Element[] => {\n const innerElements = testingLibrary.getAllByLabelText(container || document.body, label)\n return innerElements.map((element) => findPossibleWrappingPktCustomElement(testingLibrary)(element, false, []))\n }\n\nconst setPktElementValue = (testingLibrary: TestingLibraryTools) =>\n asyncFuncWithStringIdentifierOrElement(testingLibrary)(\n async (\n element: PTLElementType,\n valueOrValues: PktElementValueType | Array<PktElementValueType>,\n useInputEvent = false,\n ): Promise<boolean> => {\n if (Array.isArray(valueOrValues) && valueOrValues.length > 1 && element.tagName === 'PKT-SELECT') {\n throw new Error('Multi-verdi <pkt-select> støttes ikke. Bruk <pkt-combobox> i stedet.')\n }\n if (element.tagName === 'PKT-SELECT' || element.tagName === 'PKT-COMBOBOX') {\n const pktSelect = element as HTMLSelectElement\n const multiple = pktSelect.multiple\n const valueAsArray = Array.isArray(valueOrValues) ? valueOrValues : [valueOrValues]\n const newValue = (multiple && valueAsArray) || (valueAsArray.length == 0 && '') || valueAsArray[0]\n testingLibrary.fireEvent.change(element, { target: { value: newValue } })\n return Promise.resolve(true)\n } else {\n if ('value' in element) {\n element.value = valueOrValues.toString()\n }\n\n testingLibrary.fireEvent.input(element, { target: { value: valueOrValues } })\n testingLibrary.fireEvent.change(element, { target: { value: valueOrValues } })\n\n return Promise.resolve(true)\n }\n },\n )\n\nconst containsRadioInput = (element: Element): boolean => {\n if (element.tagName === 'INPUT' && (element as HTMLInputElement).type === 'radio') return true\n\n if (element.querySelector?.('input[type=\"radio\"]')) return true\n\n if (element.tagName === 'LABEL') {\n const label = element as HTMLLabelElement\n const control = label.control || (label.htmlFor ? document.getElementById(label.htmlFor) : null)\n return !!(control && (control as HTMLInputElement).type === 'radio')\n }\n\n return false\n}\n\nconst pktClickButton = (testingLibrary: TestingLibraryTools) =>\n asyncFuncWithStringIdentifierOrElement(testingLibrary)(async (element: PTLElementType) => {\n if (containsRadioInput(element)) {\n throw new Error('Klikk på <pkt-radiobutton> støttes ikke - bruk setPktElementChecked i stedet')\n }\n return testingLibrary.fireEvent.click(element)\n }, 'text')\n\nconst setPktSelectedOptionsByLabel = (testingLibrary: TestingLibraryTools) =>\n asyncFuncWithStringIdentifierOrElement(testingLibrary)(\n async (pktSelect: PktSelect, ...desiredOptionLabels: Array<string>) => {\n const availableOptions = getPktSelectOptions(testingLibrary)(pktSelect)\n const selectedOptions = desiredOptionLabels\n .map((optionLabel) => availableOptions.find(([_, label]) => label === optionLabel))\n .filter((possibleOption) => possibleOption) as Array<PktOption>\n if (selectedOptions.length !== desiredOptionLabels.length) {\n throw new Error(\n \"Noen av option'ene finnes ikke i denne komponenten. Du valgte \" +\n JSON.stringify(desiredOptionLabels) +\n ', mens valgmulighetene er ' +\n JSON.stringify(availableOptions.map(([, label]) => label)),\n )\n }\n\n return await setPktElementValue(testingLibrary)(\n pktSelect,\n selectedOptions.map(([value]) => value),\n )\n },\n )\n"],"names":[],"mappings":"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"}
|
|
@@ -196,6 +196,7 @@
|
|
|
196
196
|
throw new Error("Kan ikke av-velge en <input type='radio'> - prøv å velge en annen radioknapp i samme gruppe");
|
|
197
197
|
} else {
|
|
198
198
|
returnValue = testingLibrary.fireEvent.click(element);
|
|
199
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
199
200
|
}
|
|
200
201
|
} else if (htmlInputElement.type === "checkbox") {
|
|
201
202
|
if (htmlInputElement.checked !== checked) {
|
|
@@ -207,9 +208,11 @@
|
|
|
207
208
|
}
|
|
208
209
|
return Promise.resolve(returnValue);
|
|
209
210
|
});
|
|
210
|
-
const isPktElementChecked = (testingLibrary) => (
|
|
211
|
-
const element = syncResolveIdentifierOrElement(testingLibrary)(
|
|
212
|
-
|
|
211
|
+
const isPktElementChecked = (testingLibrary) => (target) => {
|
|
212
|
+
const element = syncResolveIdentifierOrElement(testingLibrary)(target, "label");
|
|
213
|
+
if ("checked" in element) return !!element.checked;
|
|
214
|
+
const descendant = element.querySelector('input[type="radio"]:checked, input[type="checkbox"]:checked');
|
|
215
|
+
return descendant !== null;
|
|
213
216
|
};
|
|
214
217
|
const getPktElementByDisplayValue = (testingLibrary) => (text, container) => getPktElementBy(testingLibrary)("displayValue", text, container);
|
|
215
218
|
const findPktElementByDisplayValue = (testingLibrary) => (text, container) => findPktElementBy(testingLibrary)("displayValue", text, container);
|
|
@@ -245,17 +248,31 @@
|
|
|
245
248
|
testingLibrary.fireEvent.change(element, { target: { value: newValue } });
|
|
246
249
|
return Promise.resolve(true);
|
|
247
250
|
} else {
|
|
248
|
-
|
|
249
|
-
|
|
251
|
+
if ("value" in element) {
|
|
252
|
+
element.value = valueOrValues.toString();
|
|
253
|
+
}
|
|
254
|
+
testingLibrary.fireEvent.input(element, { target: { value: valueOrValues } });
|
|
255
|
+
testingLibrary.fireEvent.change(element, { target: { value: valueOrValues } });
|
|
256
|
+
return Promise.resolve(true);
|
|
250
257
|
}
|
|
251
258
|
}
|
|
252
259
|
);
|
|
260
|
+
const containsRadioInput = (element) => {
|
|
261
|
+
var _a;
|
|
262
|
+
if (element.tagName === "INPUT" && element.type === "radio") return true;
|
|
263
|
+
if ((_a = element.querySelector) == null ? void 0 : _a.call(element, 'input[type="radio"]')) return true;
|
|
264
|
+
if (element.tagName === "LABEL") {
|
|
265
|
+
const label = element;
|
|
266
|
+
const control = label.control || (label.htmlFor ? document.getElementById(label.htmlFor) : null);
|
|
267
|
+
return !!(control && control.type === "radio");
|
|
268
|
+
}
|
|
269
|
+
return false;
|
|
270
|
+
};
|
|
253
271
|
const pktClickButton = (testingLibrary) => asyncFuncWithStringIdentifierOrElement(testingLibrary)(async (element) => {
|
|
254
|
-
if (element
|
|
272
|
+
if (containsRadioInput(element)) {
|
|
255
273
|
throw new Error("Klikk på <pkt-radiobutton> støttes ikke - bruk setPktElementChecked i stedet");
|
|
256
274
|
}
|
|
257
|
-
|
|
258
|
-
return Promise.resolve(returnValue);
|
|
275
|
+
return testingLibrary.fireEvent.click(element);
|
|
259
276
|
}, "text");
|
|
260
277
|
const setPktSelectedOptionsByLabel = (testingLibrary) => asyncFuncWithStringIdentifierOrElement(testingLibrary)(
|
|
261
278
|
async (pktSelect, ...desiredOptionLabels) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"punkt-testing-utils.umd.js","sources":["../src/index.ts"],"sourcesContent":["import DomTestingLibrary, {\n FindAllByBoundAttribute,\n findAllByDisplayValue,\n findAllByLabelText,\n findAllByTestId,\n findAllByText,\n getAllByDisplayValue,\n getAllByLabelText,\n getAllByTestId,\n getAllByText,\n getElementError,\n} from '@testing-library/dom'\nimport {\n PktBackLink,\n PktCheckbox,\n PktCombobox,\n PktDatepicker,\n PktHelptext,\n PktIcon,\n PktInputWrapper,\n PktLoader,\n PktProgressbar,\n PktRadioButton,\n PktSelect,\n PktTextarea,\n} from '@oslokommune/punkt-elements'\nimport { AllByBoundAttribute } from '@testing-library/dom/types/queries'\n\nexport const PKT_CUSTOM_FORMFIELDS = [\n 'pkt-backlink',\n 'pkt-checkbox',\n 'pkt-combobox',\n 'pkt-datepicker',\n 'pkt-progressbar',\n 'pkt-radiobutton',\n 'pkt-select',\n 'pkt-textarea',\n 'pkt-textinput',\n]\nconst PKT_CUSTOM_ELEMENTS = [\n 'pkt-input-wrapper',\n 'pkt-icon',\n 'pkt-helptext',\n 'pkt-loader',\n 'pkt-backlink',\n ...PKT_CUSTOM_FORMFIELDS,\n]\n\ntype PTLElementType =\n | PktBackLink\n | PktCheckbox\n | PktCombobox\n | PktDatepicker\n | PktHelptext\n | PktIcon\n | PktInputWrapper\n | PktLoader\n | PktProgressbar\n | PktRadioButton\n | PktSelect\n | PktTextarea\n | HTMLInputElement\n | HTMLSelectElement\n | HTMLTextAreaElement\n\nexport type PktTestingLibraryOptions = Pick<\n typeof DomTestingLibrary,\n | 'fireEvent'\n | 'findAllByLabelText'\n | 'findAllByTestId'\n | 'findAllByDisplayValue'\n | 'findAllByText'\n | 'getAllByLabelText'\n | 'getAllByTestId'\n | 'getAllByDisplayValue'\n | 'getAllByText'\n>\n\ntype TestingLibraryTools = {\n fireEvent: typeof DomTestingLibrary.fireEvent\n findAllByLabelText: typeof DomTestingLibrary.findAllByLabelText\n findAllByTestId: typeof DomTestingLibrary.findAllByTestId\n findAllByDisplayValue: typeof DomTestingLibrary.findAllByDisplayValue\n findAllByText: typeof DomTestingLibrary.findAllByText\n getAllByLabelText: typeof DomTestingLibrary.getAllByLabelText\n getAllByTestId: typeof DomTestingLibrary.getAllByTestId\n getAllByDisplayValue: typeof DomTestingLibrary.getAllByDisplayValue\n getAllByText: typeof DomTestingLibrary.getAllByText\n}\n\nexport type LabelOrElement<ElementType = PTLElementType> = string | RegExp | ElementType\n\nexport type PktElementValueType = string | number | Date\n\nexport type PktTestingLibrary = {\n findPktElementByLabelText: (label: string | RegExp, container?: HTMLElement) => Promise<PTLElementType>\n getPktElementByLabelText: (label: string | RegExp, container?: HTMLElement) => PTLElementType\n getPktSelectOptions: (labelOrElement: LabelOrElement<PktSelect>, onlySelected?: boolean) => Array<PktOption>\n getAllPktElementsByLabelText: (label: string, container?: HTMLElement) => Element[]\n setPktElementChecked: (labelOrElement: LabelOrElement, checked: boolean) => Promise<boolean>\n isPktElementChecked: (labelOrElement: LabelOrElement) => boolean\n setPktElementValue: (\n labelOrElement: LabelOrElement,\n valueOrValues: PktElementValueType | Array<PktElementValueType>,\n useInputEvent?: boolean,\n ) => Promise<boolean>\n pktClickButton: (labelOrElement: LabelOrElement<HTMLInputElement | HTMLButtonElement>) => Promise<boolean>\n waitForPktElementsToBeDefined: () => Promise<any>\n setPktSelectedOptionsByLabel: (\n labelOrElement: LabelOrElement<PktSelect>,\n ...desiredOptionLabels: Array<string>\n ) => Promise<any>\n getPktElementByDisplayValue: (labelOrElement: string | RegExp, container?: HTMLElement) => PTLElementType\n findPktElementByDisplayValue: (labelOrElement: string | RegExp, container?: HTMLElement) => Promise<PTLElementType>\n}\n\nexport const setupPktTestingLibrary: (options: PktTestingLibraryOptions) => PktTestingLibrary = (\n options: PktTestingLibraryOptions,\n) => {\n const tools: TestingLibraryTools = {\n fireEvent: options.fireEvent,\n findAllByLabelText: options.findAllByLabelText,\n findAllByDisplayValue: options.findAllByDisplayValue,\n findAllByTestId: options.findAllByTestId,\n findAllByText: options.findAllByText,\n getAllByLabelText: options.getAllByLabelText,\n getAllByDisplayValue: options.getAllByDisplayValue,\n getAllByTestId: options.getAllByTestId,\n getAllByText: options.getAllByText,\n }\n return {\n findPktElementByLabelText: withTestingLibrary(tools, findPktElementByLabel),\n waitForPktElementsToBeDefined,\n getPktElementByLabelText: withTestingLibrary(tools, getPktElementByLabel),\n setPktElementChecked: withTestingLibrary(tools, setPktElementChecked),\n isPktElementChecked: withTestingLibrary(tools, isPktElementChecked),\n getPktSelectOptions: withTestingLibrary(tools, getPktSelectOptions),\n getAllPktElementsByLabelText: withTestingLibrary(tools, getAllPktElementsByLabelText),\n setPktElementValue: withTestingLibrary(tools, setPktElementValue),\n pktClickButton: withTestingLibrary(tools, pktClickButton),\n setPktSelectedOptionsByLabel: withTestingLibrary(tools, setPktSelectedOptionsByLabel),\n getPktElementByDisplayValue: withTestingLibrary(tools, getPktElementByDisplayValue),\n findPktElementByDisplayValue: withTestingLibrary(tools, findPktElementByDisplayValue),\n }\n}\n\ntype SyncQueries = typeof getAllByText | typeof getAllByLabelText | typeof getAllByTestId | typeof getAllByDisplayValue\ntype AsyncQueries =\n | FindAllByBoundAttribute\n | typeof findAllByText\n | typeof findAllByLabelText\n | typeof findAllByTestId\n | typeof findAllByDisplayValue\n\ntype QueryTypes = 'label' | 'text' | 'displayValue' | 'testid'\n\nconst syncQueryFunctionResolver =\n (testingLibrary: TestingLibraryTools) =>\n (queryType: QueryTypes): SyncQueries => {\n const queries: Record<QueryTypes, SyncQueries> = {\n text: testingLibrary.getAllByText,\n label: testingLibrary.getAllByLabelText,\n testid: testingLibrary.getAllByTestId,\n displayValue: testingLibrary.getAllByDisplayValue,\n }\n const query = queries[queryType]\n if (query) {\n return query\n } else {\n throw new Error('Unsupported query type: ' + queryType)\n }\n }\n\nconst asyncQueryFunctionResolver =\n (testingLibrary: TestingLibraryTools) =>\n (queryType: QueryTypes): AsyncQueries => {\n const queries: Record<QueryTypes, AsyncQueries> = {\n text: testingLibrary.findAllByText,\n label: testingLibrary.findAllByLabelText,\n testid: testingLibrary.findAllByTestId,\n displayValue: testingLibrary.findAllByDisplayValue,\n }\n const query = queries[queryType]\n if (query) {\n return query\n } else {\n throw new Error('Unsupported query type: ' + queryType)\n }\n }\n\nconst syncResolveIdentifierOrElement =\n (testingLibrary: TestingLibraryTools) =>\n <ElementType>(elementOrIdentifier: string | RegExp | HTMLElement, query: QueryTypes) =>\n typeof elementOrIdentifier === 'string' || elementOrIdentifier instanceof RegExp\n ? (getPktElementBy(testingLibrary)(query, elementOrIdentifier) as ElementType)\n : (elementOrIdentifier as ElementType)\n\nconst asyncResolveIdentifierOrElement =\n (testingLibrary: TestingLibraryTools) =>\n async <ElementType>(elementOrIdentifier: string | RegExp | HTMLElement, query: QueryTypes) =>\n typeof elementOrIdentifier === 'string' || elementOrIdentifier instanceof RegExp\n ? ((await findPktElementBy(testingLibrary)(query, elementOrIdentifier)) as ElementType)\n : (elementOrIdentifier as ElementType)\n\nconst asyncFuncWithStringIdentifierOrElement =\n (testingLibrary: TestingLibraryTools) =>\n <ElementType, ResultType>(\n func: (element: ElementType, ...restArgs: Array<any>) => Promise<ResultType>,\n query: QueryTypes = 'label',\n ) => {\n return async (labelOrPktElement: string | RegExp | HTMLElement, ...restArgs: Array<any>) => {\n const element = await asyncResolveIdentifierOrElement(testingLibrary)<ElementType>(labelOrPktElement, query)\n return await func(element, ...restArgs)\n }\n }\n\nconst syncFuncWithStringIdentifierOrElement =\n (testingLibrary: TestingLibraryTools) =>\n <ElementType, ResultType>(\n func: (element: ElementType, ...restArgs: Array<any>) => ResultType,\n query: QueryTypes = 'label',\n ) => {\n return (labelOrPktElement: string | RegExp | HTMLElement, ...restArgs: Array<any>) => {\n const element = syncResolveIdentifierOrElement(testingLibrary)<ElementType>(labelOrPktElement, query)\n return func(element, ...restArgs)\n }\n }\n\nconst withTestingLibrary = <F>(testingLibrary: TestingLibraryTools, fn: (testingLibrary: TestingLibraryTools) => F) =>\n fn(testingLibrary)\n\n/**\n * Sørger for at alle brukte custom elements fra Punkt er definerte og erstattet med implementasjoner.\n * Bør kalles etter `render`, før noen operasjoner og antakelser gjøres.\n *\n * F.eks.:\n * <code>\n * render(<div><PktTextinput id=\"textinput\" name={'textInput'} label=\"My text input\" aria-label=\"My text input\" /></div>);\n * await waitForPktElementsToBeDefined();\n *\n * await setPktElementValue(\"My text input\", \"new value\");\n * </code>\n */\nconst waitForPktElementsToBeDefined = async () =>\n await Promise.all(\n PKT_CUSTOM_ELEMENTS.map((elementName) => {\n if (document.querySelector(elementName) !== null) {\n return window.customElements.whenDefined(elementName)\n }\n }).filter((promise) => promise),\n )\n\nconst findPossibleWrappingPktCustomElement =\n (testingLibrary: TestingLibraryTools) =>\n <R extends PTLElementType>(innerElement: HTMLElement | null, isByRole: boolean, args: Array<any>): PTLElementType => {\n if (!innerElement === null) {\n throw getElementError(`Finner ikke noe element med ${isByRole ? 'role' : 'label'} \"${args[0]}\"`, document.body)\n }\n const pktElement = innerElement?.closest(PKT_CUSTOM_FORMFIELDS.join(', ')) as R | null\n if (pktElement) {\n return pktElement as R\n } else {\n return innerElement as R\n }\n }\n\nconst getPktElementBy =\n (testingLibrary: TestingLibraryTools) =>\n (query: QueryTypes = 'label', identifier: string | RegExp, container?: HTMLElement): PTLElementType => {\n try {\n const queryFunc = syncQueryFunctionResolver(testingLibrary)(query)\n const innerElement = doElementSearch(identifier, query, queryFunc, container)[0]\n return findPossibleWrappingPktCustomElement(testingLibrary)(innerElement, false, [])\n } catch (e) {\n return fallbackSearchForPktSelectByLabel(testingLibrary)(identifier, query, container)\n }\n }\n\nconst removeElementBySelector = (ancestor: HTMLElement, selector: string) => {\n const elements = Array.from(ancestor.querySelectorAll(selector))\n elements.forEach((element) => {\n element.parentNode?.removeChild(element)\n })\n}\n\nfunction getPureLabelText(label: Node) {\n const clonedLabel = label.cloneNode(true) as HTMLElement\n removeElementBySelector(clonedLabel, 'pkt-helptext')\n removeElementBySelector(clonedLabel, '.pkt-input-suffix')\n removeElementBySelector(clonedLabel, '.pkt-input-prefix')\n removeElementBySelector(clonedLabel, '.pkt-input-icon')\n removeElementBySelector(clonedLabel, '.pkt-input__counter')\n removeElementBySelector(clonedLabel, 'option')\n removeElementBySelector(clonedLabel, 'pkt-listbox')\n removeElementBySelector(clonedLabel, '.pkt-alert--error')\n removeElementBySelector(clonedLabel, '.pkt-tag')\n removeElementBySelector(clonedLabel, '.pkt-input-check__input-helptext')\n removeElementBySelector(clonedLabel, '.pkt-inputwrapper__helptext')\n return clonedLabel.textContent?.trim() || null\n}\n\nconst getPureLabelTextForLabelOwner = (labelOwner: HTMLElement): string | null => {\n const label =\n ('labels' in labelOwner &&\n labelOwner.labels instanceof NodeList &&\n labelOwner.labels.length > 0 &&\n labelOwner.labels[0]) ||\n (['input', ...PKT_CUSTOM_FORMFIELDS].includes(labelOwner.tagName.toLowerCase()) &&\n (labelOwner.querySelector('label') as HTMLLabelElement | null)) ||\n null\n if (label) {\n return getPureLabelText(label)\n } else {\n return null\n }\n}\n\nconst labelMatcher = (labelTextToMatch: string) => (nodeContent: string, element: Element | null) => {\n if (element instanceof HTMLElement) {\n const labelWithoutHelptext = getPureLabelTextForLabelOwner(element as HTMLElement)\n return labelWithoutHelptext === labelTextToMatch\n } else {\n return false\n }\n}\n\nconst fallbackSearchForPktSelectByLabel =\n (testingLibrary: TestingLibraryTools) =>\n (identifier: any, query: QueryTypes, container: HTMLElement = document.body): PTLElementType => {\n if (typeof identifier === 'string' && query === 'label') {\n // Spesial-case for <pkt-select> som ikke har aria-label\n const matchingLabel: HTMLLabelElement | undefined = Array.from(container.querySelectorAll('label')).find(\n (labelElement) => getPureLabelText(labelElement) === identifier,\n )\n const labelOwner =\n matchingLabel?.control || matchingLabel?.closest('pkt-select') || matchingLabel?.closest('pkt-combobox')\n if (!labelOwner) {\n throw getElementError(`Fant ikke noe element med label \"${identifier}\"`, container)\n }\n return labelOwner as PTLElementType\n }\n throw getElementError(`Fant ikke noe element med ${query} \"${identifier}\"`, container)\n }\n\nconst doElementSearch = <T>(\n identifier: string | RegExp,\n query: QueryTypes,\n queryFunc: (...args: Parameters<AllByBoundAttribute>) => T,\n container: HTMLElement = document.body,\n) => {\n return typeof identifier === 'string' && query === 'label'\n ? queryFunc(container, labelMatcher(identifier.trim()))\n : queryFunc(container, identifier)\n}\n\nconst findPktElementBy =\n (testingLibrary: TestingLibraryTools) =>\n async (\n query: QueryTypes = 'label',\n identifier: string | RegExp,\n container?: HTMLElement,\n ): Promise<PTLElementType> => {\n try {\n const queryFunc = asyncQueryFunctionResolver(testingLibrary)(query)\n const innerElement = (await doElementSearch(identifier, query, queryFunc, container))[0]\n return Promise.resolve(findPossibleWrappingPktCustomElement(testingLibrary)(innerElement, false, []))\n } catch (e) {\n return fallbackSearchForPktSelectByLabel(testingLibrary)(identifier, query, container)\n }\n }\n\nconst getPktElementByLabel =\n (testingLibrary: TestingLibraryTools) => (label: string | RegExp, container?: HTMLElement) =>\n getPktElementBy(testingLibrary)('label', label, container)\n\nconst findPktElementByLabel =\n (testingLibrary: TestingLibraryTools) =>\n async (label: string | RegExp, container?: HTMLElement): Promise<PTLElementType> =>\n findPktElementBy(testingLibrary)('label', label, container)\n\nconst getPktElementByText = (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n getPktElementBy(testingLibrary)('text', text, container)\n\nconst findPktElementByText =\n (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n findPktElementBy(testingLibrary)('text', text, container)\n\nconst setPktElementChecked = (testingLibrary: TestingLibraryTools) =>\n asyncFuncWithStringIdentifierOrElement(testingLibrary)(async (element: PTLElementType, checked: boolean) => {\n if (!('checked' in element)) {\n throw new Error('Bare elementer som har en \"checked\"-attributt støttes')\n }\n let returnValue: boolean = false\n if (element.tagName === 'INPUT') {\n // https://github.com/testing-library/react-testing-library/issues/175#issuecomment-637349276\n // kentcdodds: \"this should probably be documented better, but with checkboxes you don't actually fire change\n // events, you should fire click events instead.\"\n const htmlInputElement = element as HTMLInputElement\n if (htmlInputElement.type === 'radio') {\n if (!checked) {\n throw new Error(\"Kan ikke av-velge en <input type='radio'> - prøv å velge en annen radioknapp i samme gruppe\")\n } else {\n returnValue = testingLibrary.fireEvent.click(element)\n }\n } else if (htmlInputElement.type === 'checkbox') {\n if (htmlInputElement.checked !== checked) {\n returnValue = testingLibrary.fireEvent.click(element)\n }\n }\n } else {\n returnValue = testingLibrary.fireEvent.change(element, { target: { checked } })\n }\n\n return Promise.resolve(returnValue)\n })\n\nconst isPktElementChecked = (testingLibrary: TestingLibraryTools) => (labelOrElement: LabelOrElement) => {\n const element = syncResolveIdentifierOrElement(testingLibrary)<PTLElementType>(labelOrElement, 'label')\n return element.querySelectorAll(':checked').length > 0\n}\n\nconst getPktElementByDisplayValue =\n (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n getPktElementBy(testingLibrary)('displayValue', text, container)\n\nconst findPktElementByDisplayValue =\n (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n findPktElementBy(testingLibrary)('displayValue', text, container)\n\n/**\n * Representerer en option i en PktSelect.\n *\n * @property {string} 0 - verdien (value)\n * @property {string | null} 1 - Tekstinnholdet, <option>tekstinnhold</option>\n * @property {boolean} 2 - Om denne er valgt (selected)\n */\nexport type PktOption = [string, string | undefined, boolean]\n\nconst getPktSelectOptions = (testingLibrary: TestingLibraryTools) =>\n syncFuncWithStringIdentifierOrElement(testingLibrary)<PktSelect, Array<PktOption>>(\n (selectElement: PktSelect, onlySelected?: boolean): Array<PktOption> => {\n const optionElements: Array<HTMLOptionElement> = Array.from(\n selectElement.querySelectorAll('option:not(.pkt-hide), data:not(.pkt.hide)'),\n )\n const filter = onlySelected ? ([, , selected]: PktOption) => selected : (_: PktOption) => true\n const currentValue = selectElement.value\n return optionElements\n .map(\n (optionElement) =>\n [optionElement.value, optionElement.textContent?.trim(), optionElement.value === currentValue] as PktOption,\n )\n .filter(filter)\n },\n )\n\nconst getAllPktElementsByLabelText =\n (testingLibrary: TestingLibraryTools) =>\n (label: string, container?: HTMLElement): Element[] => {\n const innerElements = testingLibrary.getAllByLabelText(container || document.body, label)\n return innerElements.map((element) => findPossibleWrappingPktCustomElement(testingLibrary)(element, false, []))\n }\n\nconst setPktElementValue = (testingLibrary: TestingLibraryTools) =>\n asyncFuncWithStringIdentifierOrElement(testingLibrary)(\n async (\n element: PTLElementType,\n valueOrValues: PktElementValueType | Array<PktElementValueType>,\n useInputEvent = false,\n ): Promise<boolean> => {\n if (Array.isArray(valueOrValues) && valueOrValues.length > 1 && element.tagName === 'PKT-SELECT') {\n throw new Error('Multi-verdi <pkt-select> støttes ikke. Bruk <pkt-combobox> i stedet.')\n }\n if (element.tagName === 'PKT-SELECT' || element.tagName === 'PKT-COMBOBOX') {\n const pktSelect = element as HTMLSelectElement\n const multiple = pktSelect.multiple\n const valueAsArray = Array.isArray(valueOrValues) ? valueOrValues : [valueOrValues]\n const newValue = (multiple && valueAsArray) || (valueAsArray.length == 0 && '') || valueAsArray[0]\n testingLibrary.fireEvent.change(element, { target: { value: newValue } })\n return Promise.resolve(true)\n } else {\n const returnValue = useInputEvent\n ? testingLibrary.fireEvent.input(element, { target: { value: valueOrValues } })\n : testingLibrary.fireEvent.change(element, { target: { value: valueOrValues } })\n return Promise.resolve(returnValue)\n }\n },\n )\n\nconst pktClickButton = (testingLibrary: TestingLibraryTools) =>\n asyncFuncWithStringIdentifierOrElement(testingLibrary)(async (element: PTLElementType) => {\n if (element.tagName === 'PKT-RADIOBUTTON') {\n throw new Error('Klikk på <pkt-radiobutton> støttes ikke - bruk setPktElementChecked i stedet')\n }\n const returnValue = testingLibrary.fireEvent.click(element)\n return Promise.resolve(returnValue)\n }, 'text')\n\nconst setPktSelectedOptionsByLabel = (testingLibrary: TestingLibraryTools) =>\n asyncFuncWithStringIdentifierOrElement(testingLibrary)(\n async (pktSelect: PktSelect, ...desiredOptionLabels: Array<string>) => {\n const availableOptions = getPktSelectOptions(testingLibrary)(pktSelect)\n const selectedOptions = desiredOptionLabels\n .map((optionLabel) => availableOptions.find(([_, label]) => label === optionLabel))\n .filter((possibleOption) => possibleOption) as Array<PktOption>\n if (selectedOptions.length !== desiredOptionLabels.length) {\n throw new Error(\n \"Noen av option'ene finnes ikke i denne komponenten. Du valgte \" +\n JSON.stringify(desiredOptionLabels) +\n ', mens valgmulighetene er ' +\n JSON.stringify(availableOptions.map(([, label]) => label)),\n )\n }\n\n return await setPktElementValue(testingLibrary)(\n pktSelect,\n selectedOptions.map(([value]) => value),\n )\n },\n )\n"],"names":["getElementError"],"mappings":";;;;AA4BO,QAAM,wBAAwB;AAAA,IACnC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,sBAAsB;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL;AAsEa,QAAA,yBAAmF,CAC9F,YACG;AACH,UAAM,QAA6B;AAAA,MACjC,WAAW,QAAQ;AAAA,MACnB,oBAAoB,QAAQ;AAAA,MAC5B,uBAAuB,QAAQ;AAAA,MAC/B,iBAAiB,QAAQ;AAAA,MACzB,eAAe,QAAQ;AAAA,MACvB,mBAAmB,QAAQ;AAAA,MAC3B,sBAAsB,QAAQ;AAAA,MAC9B,gBAAgB,QAAQ;AAAA,MACxB,cAAc,QAAQ;AAAA,IACxB;AACO,WAAA;AAAA,MACL,2BAA2B,mBAAmB,OAAO,qBAAqB;AAAA,MAC1E;AAAA,MACA,0BAA0B,mBAAmB,OAAO,oBAAoB;AAAA,MACxE,sBAAsB,mBAAmB,OAAO,oBAAoB;AAAA,MACpE,qBAAqB,mBAAmB,OAAO,mBAAmB;AAAA,MAClE,qBAAqB,mBAAmB,OAAO,mBAAmB;AAAA,MAClE,8BAA8B,mBAAmB,OAAO,4BAA4B;AAAA,MACpF,oBAAoB,mBAAmB,OAAO,kBAAkB;AAAA,MAChE,gBAAgB,mBAAmB,OAAO,cAAc;AAAA,MACxD,8BAA8B,mBAAmB,OAAO,4BAA4B;AAAA,MACpF,6BAA6B,mBAAmB,OAAO,2BAA2B;AAAA,MAClF,8BAA8B,mBAAmB,OAAO,4BAA4B;AAAA,IACtF;AAAA,EACF;AAYA,QAAM,4BACJ,CAAC,mBACD,CAAC,cAAuC;AACtC,UAAM,UAA2C;AAAA,MAC/C,MAAM,eAAe;AAAA,MACrB,OAAO,eAAe;AAAA,MACtB,QAAQ,eAAe;AAAA,MACvB,cAAc,eAAe;AAAA,IAC/B;AACM,UAAA,QAAQ,QAAQ,SAAS;AAC/B,QAAI,OAAO;AACF,aAAA;AAAA,IAAA,OACF;AACC,YAAA,IAAI,MAAM,6BAA6B,SAAS;AAAA,IAAA;AAAA,EAE1D;AAEF,QAAM,6BACJ,CAAC,mBACD,CAAC,cAAwC;AACvC,UAAM,UAA4C;AAAA,MAChD,MAAM,eAAe;AAAA,MACrB,OAAO,eAAe;AAAA,MACtB,QAAQ,eAAe;AAAA,MACvB,cAAc,eAAe;AAAA,IAC/B;AACM,UAAA,QAAQ,QAAQ,SAAS;AAC/B,QAAI,OAAO;AACF,aAAA;AAAA,IAAA,OACF;AACC,YAAA,IAAI,MAAM,6BAA6B,SAAS;AAAA,IAAA;AAAA,EAE1D;AAEF,QAAM,iCACJ,CAAC,mBACD,CAAc,qBAAoD,UAChE,OAAO,wBAAwB,YAAY,+BAA+B,SACrE,gBAAgB,cAAc,EAAE,OAAO,mBAAmB,IAC1D;AAET,QAAM,kCACJ,CAAC,mBACD,OAAoB,qBAAoD,UACtE,OAAO,wBAAwB,YAAY,+BAA+B,SACpE,MAAM,iBAAiB,cAAc,EAAE,OAAO,mBAAmB,IAClE;AAET,QAAM,yCACJ,CAAC,mBACD,CACE,MACA,QAAoB,YACjB;AACI,WAAA,OAAO,sBAAqD,aAAyB;AAC1F,YAAM,UAAU,MAAM,gCAAgC,cAAc,EAAe,mBAAmB,KAAK;AAC3G,aAAO,MAAM,KAAK,SAAS,GAAG,QAAQ;AAAA,IACxC;AAAA,EACF;AAEF,QAAM,wCACJ,CAAC,mBACD,CACE,MACA,QAAoB,YACjB;AACI,WAAA,CAAC,sBAAqD,aAAyB;AACpF,YAAM,UAAU,+BAA+B,cAAc,EAAe,mBAAmB,KAAK;AAC7F,aAAA,KAAK,SAAS,GAAG,QAAQ;AAAA,IAClC;AAAA,EACF;AAEF,QAAM,qBAAqB,CAAI,gBAAqC,OAClE,GAAG,cAAc;AAcnB,QAAM,gCAAgC,YACpC,MAAM,QAAQ;AAAA,IACZ,oBAAoB,IAAI,CAAC,gBAAgB;AACvC,UAAI,SAAS,cAAc,WAAW,MAAM,MAAM;AACzC,eAAA,OAAO,eAAe,YAAY,WAAW;AAAA,MAAA;AAAA,IACtD,CACD,EAAE,OAAO,CAAC,YAAY,OAAO;AAAA,EAChC;AAEF,QAAM,uCACJ,CAAC,mBACD,CAA2B,cAAkC,UAAmB,SAAqC;AAC/G,QAAA,CAAC,iBAAiB,MAAM;AACpB,YAAAA,IAAA,gBAAgB,+BAA+B,WAAW,SAAS,OAAO,KAAK,KAAK,CAAC,CAAC,KAAK,SAAS,IAAI;AAAA,IAAA;AAEhH,UAAM,aAAa,6CAAc,QAAQ,sBAAsB,KAAK,IAAI;AACxE,QAAI,YAAY;AACP,aAAA;AAAA,IAAA,OACF;AACE,aAAA;AAAA,IAAA;AAAA,EAEX;AAEF,QAAM,kBACJ,CAAC,mBACD,CAAC,QAAoB,SAAS,YAA6B,cAA4C;AACjG,QAAA;AACF,YAAM,YAAY,0BAA0B,cAAc,EAAE,KAAK;AACjE,YAAM,eAAe,gBAAgB,YAAY,OAAO,WAAW,SAAS,EAAE,CAAC;AAC/E,aAAO,qCAAqC,cAAc,EAAE,cAAc,OAAO,CAAA,CAAE;AAAA,aAC5E,GAAG;AACV,aAAO,kCAAgD,EAAE,YAAY,OAAO,SAAS;AAAA,IAAA;AAAA,EAEzF;AAEF,QAAM,0BAA0B,CAAC,UAAuB,aAAqB;AAC3E,UAAM,WAAW,MAAM,KAAK,SAAS,iBAAiB,QAAQ,CAAC;AACtD,aAAA,QAAQ,CAAC,YAAY;;AACpB,oBAAA,eAAA,mBAAY,YAAY;AAAA,IAAO,CACxC;AAAA,EACH;AAEA,WAAS,iBAAiB,OAAa;;AAC/B,UAAA,cAAc,MAAM,UAAU,IAAI;AACxC,4BAAwB,aAAa,cAAc;AACnD,4BAAwB,aAAa,mBAAmB;AACxD,4BAAwB,aAAa,mBAAmB;AACxD,4BAAwB,aAAa,iBAAiB;AACtD,4BAAwB,aAAa,qBAAqB;AAC1D,4BAAwB,aAAa,QAAQ;AAC7C,4BAAwB,aAAa,aAAa;AAClD,4BAAwB,aAAa,mBAAmB;AACxD,4BAAwB,aAAa,UAAU;AAC/C,4BAAwB,aAAa,kCAAkC;AACvE,4BAAwB,aAAa,6BAA6B;AAC3D,aAAA,iBAAY,gBAAZ,mBAAyB,WAAU;AAAA,EAC5C;AAEA,QAAM,gCAAgC,CAAC,eAA2C;AAChF,UAAM,QACH,YAAY,cACX,WAAW,kBAAkB,YAC7B,WAAW,OAAO,SAAS,KAC3B,WAAW,OAAO,CAAC,KACpB,CAAC,SAAS,GAAG,qBAAqB,EAAE,SAAS,WAAW,QAAQ,YAAY,CAAC,KAC3E,WAAW,cAAc,OAAO,KACnC;AACF,QAAI,OAAO;AACT,aAAO,iBAAiB,KAAK;AAAA,IAAA,OACxB;AACE,aAAA;AAAA,IAAA;AAAA,EAEX;AAEA,QAAM,eAAe,CAAC,qBAA6B,CAAC,aAAqB,YAA4B;AACnG,QAAI,mBAAmB,aAAa;AAC5B,YAAA,uBAAuB,8BAA8B,OAAsB;AACjF,aAAO,yBAAyB;AAAA,IAAA,OAC3B;AACE,aAAA;AAAA,IAAA;AAAA,EAEX;AAEA,QAAM,oCACJ,CAAC,mBACD,CAAC,YAAiB,OAAmB,YAAyB,SAAS,SAAyB;AAC9F,QAAI,OAAO,eAAe,YAAY,UAAU,SAAS;AAEvD,YAAM,gBAA8C,MAAM,KAAK,UAAU,iBAAiB,OAAO,CAAC,EAAE;AAAA,QAClG,CAAC,iBAAiB,iBAAiB,YAAY,MAAM;AAAA,MACvD;AACM,YAAA,cACJ,+CAAe,aAAW,+CAAe,QAAQ,mBAAiB,+CAAe,QAAQ;AAC3F,UAAI,CAAC,YAAY;AACf,cAAMA,IAAAA,gBAAgB,oCAAoC,UAAU,KAAK,SAAS;AAAA,MAAA;AAE7E,aAAA;AAAA,IAAA;AAET,UAAMA,oBAAgB,6BAA6B,KAAK,KAAK,UAAU,KAAK,SAAS;AAAA,EACvF;AAEF,QAAM,kBAAkB,CACtB,YACA,OACA,WACA,YAAyB,SAAS,SAC/B;AACH,WAAO,OAAO,eAAe,YAAY,UAAU,UAC/C,UAAU,WAAW,aAAa,WAAW,MAAM,CAAC,IACpD,UAAU,WAAW,UAAU;AAAA,EACrC;AAEA,QAAM,mBACJ,CAAC,mBACD,OACE,QAAoB,SACpB,YACA,cAC4B;AACxB,QAAA;AACF,YAAM,YAAY,2BAA2B,cAAc,EAAE,KAAK;AAC5D,YAAA,gBAAgB,MAAM,gBAAgB,YAAY,OAAO,WAAW,SAAS,GAAG,CAAC;AAChF,aAAA,QAAQ,QAAQ,qCAAqC,cAAc,EAAE,cAAc,OAAO,CAAA,CAAE,CAAC;AAAA,aAC7F,GAAG;AACV,aAAO,kCAAgD,EAAE,YAAY,OAAO,SAAS;AAAA,IAAA;AAAA,EAEzF;AAEF,QAAM,uBACJ,CAAC,mBAAwC,CAAC,OAAwB,cAChE,gBAAgB,cAAc,EAAE,SAAS,OAAO,SAAS;AAE7D,QAAM,wBACJ,CAAC,mBACD,OAAO,OAAwB,cAC7B,iBAAiB,cAAc,EAAE,SAAS,OAAO,SAAS;AAS9D,QAAM,uBAAuB,CAAC,mBAC5B,uCAAuC,cAAc,EAAE,OAAO,SAAyB,YAAqB;AACtG,QAAA,EAAE,aAAa,UAAU;AACrB,YAAA,IAAI,MAAM,uDAAuD;AAAA,IAAA;AAEzE,QAAI,cAAuB;AACvB,QAAA,QAAQ,YAAY,SAAS;AAI/B,YAAM,mBAAmB;AACrB,UAAA,iBAAiB,SAAS,SAAS;AACrC,YAAI,CAAC,SAAS;AACN,gBAAA,IAAI,MAAM,6FAA6F;AAAA,QAAA,OACxG;AACS,wBAAA,eAAe,UAAU,MAAM,OAAO;AAAA,QAAA;AAAA,MACtD,WACS,iBAAiB,SAAS,YAAY;AAC3C,YAAA,iBAAiB,YAAY,SAAS;AAC1B,wBAAA,eAAe,UAAU,MAAM,OAAO;AAAA,QAAA;AAAA,MACtD;AAAA,IACF,OACK;AACS,oBAAA,eAAe,UAAU,OAAO,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG;AAAA,IAAA;AAGzE,WAAA,QAAQ,QAAQ,WAAW;AAAA,EACpC,CAAC;AAEH,QAAM,sBAAsB,CAAC,mBAAwC,CAAC,mBAAmC;AACvG,UAAM,UAAU,+BAA+B,cAAc,EAAkB,gBAAgB,OAAO;AACtG,WAAO,QAAQ,iBAAiB,UAAU,EAAE,SAAS;AAAA,EACvD;AAEA,QAAM,8BACJ,CAAC,mBAAwC,CAAC,MAAuB,cAC/D,gBAAgB,cAAc,EAAE,gBAAgB,MAAM,SAAS;AAEnE,QAAM,+BACJ,CAAC,mBAAwC,CAAC,MAAuB,cAC/D,iBAAiB,cAAc,EAAE,gBAAgB,MAAM,SAAS;AAWpE,QAAM,sBAAsB,CAAC,mBAC3B,sCAAsC,cAAc;AAAA,IAClD,CAAC,eAA0B,iBAA6C;AACtE,YAAM,iBAA2C,MAAM;AAAA,QACrD,cAAc,iBAAiB,4CAA4C;AAAA,MAC7E;AACM,YAAA,SAAS,eAAe,CAAC,CAAA,EAAA,EAAK,QAAQ,MAAiB,WAAW,CAAC,MAAiB;AAC1F,YAAM,eAAe,cAAc;AACnC,aAAO,eACJ;AAAA,QACC,CAAC,kBACC;;AAAA,kBAAC,cAAc,QAAO,mBAAc,gBAAd,mBAA2B,QAAQ,cAAc,UAAU,YAAY;AAAA;AAAA,MAAA,EAEhG,OAAO,MAAM;AAAA,IAAA;AAAA,EAEpB;AAEF,QAAM,+BACJ,CAAC,mBACD,CAAC,OAAe,cAAuC;AACrD,UAAM,gBAAgB,eAAe,kBAAkB,aAAa,SAAS,MAAM,KAAK;AACjF,WAAA,cAAc,IAAI,CAAC,YAAY,qCAAmD,EAAE,SAAS,OAAO,CAAA,CAAE,CAAC;AAAA,EAChH;AAEF,QAAM,qBAAqB,CAAC,mBAC1B,uCAAuC,cAAc;AAAA,IACnD,OACE,SACA,eACA,gBAAgB,UACK;AACjB,UAAA,MAAM,QAAQ,aAAa,KAAK,cAAc,SAAS,KAAK,QAAQ,YAAY,cAAc;AAC1F,cAAA,IAAI,MAAM,sEAAsE;AAAA,MAAA;AAExF,UAAI,QAAQ,YAAY,gBAAgB,QAAQ,YAAY,gBAAgB;AAC1E,cAAM,YAAY;AAClB,cAAM,WAAW,UAAU;AAC3B,cAAM,eAAe,MAAM,QAAQ,aAAa,IAAI,gBAAgB,CAAC,aAAa;AAC5E,cAAA,WAAY,YAAY,gBAAkB,aAAa,UAAU,KAAK,MAAO,aAAa,CAAC;AAClF,uBAAA,UAAU,OAAO,SAAS,EAAE,QAAQ,EAAE,OAAO,SAAS,GAAG;AACjE,eAAA,QAAQ,QAAQ,IAAI;AAAA,MAAA,OACtB;AACC,cAAA,cAAc,gBAChB,eAAe,UAAU,MAAM,SAAS,EAAE,QAAQ,EAAE,OAAO,cAAc,EAAA,CAAG,IAC5E,eAAe,UAAU,OAAO,SAAS,EAAE,QAAQ,EAAE,OAAO,cAAc,GAAG;AAC1E,eAAA,QAAQ,QAAQ,WAAW;AAAA,MAAA;AAAA,IACpC;AAAA,EAEJ;AAEF,QAAM,iBAAiB,CAAC,mBACtB,uCAAuC,cAAc,EAAE,OAAO,YAA4B;AACpF,QAAA,QAAQ,YAAY,mBAAmB;AACnC,YAAA,IAAI,MAAM,8EAA8E;AAAA,IAAA;AAEhG,UAAM,cAAc,eAAe,UAAU,MAAM,OAAO;AACnD,WAAA,QAAQ,QAAQ,WAAW;AAAA,EACpC,GAAG,MAAM;AAEX,QAAM,+BAA+B,CAAC,mBACpC,uCAAuC,cAAc;AAAA,IACnD,OAAO,cAAyB,wBAAuC;AACrE,YAAM,mBAAmB,oBAAoB,cAAc,EAAE,SAAS;AACtE,YAAM,kBAAkB,oBACrB,IAAI,CAAC,gBAAgB,iBAAiB,KAAK,CAAC,CAAC,GAAG,KAAK,MAAM,UAAU,WAAW,CAAC,EACjF,OAAO,CAAC,mBAAmB,cAAc;AACxC,UAAA,gBAAgB,WAAW,oBAAoB,QAAQ;AACzD,cAAM,IAAI;AAAA,UACR,mEACE,KAAK,UAAU,mBAAmB,IAClC,+BACA,KAAK,UAAU,iBAAiB,IAAI,CAAC,CAAA,EAAG,KAAK,MAAM,KAAK,CAAC;AAAA,QAC7D;AAAA,MAAA;AAGK,aAAA,MAAM,mBAAmB,cAAc;AAAA,QAC5C;AAAA,QACA,gBAAgB,IAAI,CAAC,CAAC,KAAK,MAAM,KAAK;AAAA,MACxC;AAAA,IAAA;AAAA,EAEJ;;;;;"}
|
|
1
|
+
{"version":3,"file":"punkt-testing-utils.umd.js","sources":["../src/index.ts"],"sourcesContent":["import DomTestingLibrary, {\n FindAllByBoundAttribute,\n findAllByDisplayValue,\n findAllByLabelText,\n findAllByTestId,\n findAllByText,\n getAllByDisplayValue,\n getAllByLabelText,\n getAllByTestId,\n getAllByText,\n getElementError,\n} from '@testing-library/dom'\nimport {\n PktBackLink,\n PktCheckbox,\n PktCombobox,\n PktDatepicker,\n PktHelptext,\n PktIcon,\n PktInputWrapper,\n PktLoader,\n PktProgressbar,\n PktRadioButton,\n PktSelect,\n PktTextarea,\n} from '@oslokommune/punkt-elements'\nimport { AllByBoundAttribute } from '@testing-library/dom/types/queries'\n\nexport const PKT_CUSTOM_FORMFIELDS = [\n 'pkt-backlink',\n 'pkt-checkbox',\n 'pkt-combobox',\n 'pkt-datepicker',\n 'pkt-progressbar',\n 'pkt-radiobutton',\n 'pkt-select',\n 'pkt-textarea',\n 'pkt-textinput',\n]\nconst PKT_CUSTOM_ELEMENTS = [\n 'pkt-input-wrapper',\n 'pkt-icon',\n 'pkt-helptext',\n 'pkt-loader',\n 'pkt-backlink',\n ...PKT_CUSTOM_FORMFIELDS,\n]\n\ntype PTLElementType =\n | PktBackLink\n | PktCheckbox\n | PktCombobox\n | PktDatepicker\n | PktHelptext\n | PktIcon\n | PktInputWrapper\n | PktLoader\n | PktProgressbar\n | PktRadioButton\n | PktSelect\n | PktTextarea\n | HTMLInputElement\n | HTMLSelectElement\n | HTMLTextAreaElement\n\nexport type PktTestingLibraryOptions = Pick<\n typeof DomTestingLibrary,\n | 'fireEvent'\n | 'findAllByLabelText'\n | 'findAllByTestId'\n | 'findAllByDisplayValue'\n | 'findAllByText'\n | 'getAllByLabelText'\n | 'getAllByTestId'\n | 'getAllByDisplayValue'\n | 'getAllByText'\n>\n\ntype TestingLibraryTools = {\n fireEvent: typeof DomTestingLibrary.fireEvent\n findAllByLabelText: typeof DomTestingLibrary.findAllByLabelText\n findAllByTestId: typeof DomTestingLibrary.findAllByTestId\n findAllByDisplayValue: typeof DomTestingLibrary.findAllByDisplayValue\n findAllByText: typeof DomTestingLibrary.findAllByText\n getAllByLabelText: typeof DomTestingLibrary.getAllByLabelText\n getAllByTestId: typeof DomTestingLibrary.getAllByTestId\n getAllByDisplayValue: typeof DomTestingLibrary.getAllByDisplayValue\n getAllByText: typeof DomTestingLibrary.getAllByText\n}\n\nexport type LabelOrElement<ElementType = PTLElementType> = string | RegExp | ElementType\n\nexport type PktElementValueType = string | number | Date\n\nexport type PktTestingLibrary = {\n findPktElementByLabelText: (label: string | RegExp, container?: HTMLElement) => Promise<PTLElementType>\n getPktElementByLabelText: (label: string | RegExp, container?: HTMLElement) => PTLElementType\n getPktSelectOptions: (labelOrElement: LabelOrElement<PktSelect>, onlySelected?: boolean) => Array<PktOption>\n getAllPktElementsByLabelText: (label: string, container?: HTMLElement) => Element[]\n setPktElementChecked: (labelOrElement: LabelOrElement, checked: boolean) => Promise<boolean>\n isPktElementChecked: (labelOrElement: LabelOrElement) => boolean\n setPktElementValue: (\n labelOrElement: LabelOrElement,\n valueOrValues: PktElementValueType | Array<PktElementValueType>,\n useInputEvent?: boolean,\n ) => Promise<boolean>\n pktClickButton: (labelOrElement: LabelOrElement<HTMLInputElement | HTMLButtonElement>) => Promise<boolean>\n waitForPktElementsToBeDefined: () => Promise<any>\n setPktSelectedOptionsByLabel: (\n labelOrElement: LabelOrElement<PktSelect>,\n ...desiredOptionLabels: Array<string>\n ) => Promise<any>\n getPktElementByDisplayValue: (labelOrElement: string | RegExp, container?: HTMLElement) => PTLElementType\n findPktElementByDisplayValue: (labelOrElement: string | RegExp, container?: HTMLElement) => Promise<PTLElementType>\n}\n\nexport const setupPktTestingLibrary: (options: PktTestingLibraryOptions) => PktTestingLibrary = (\n options: PktTestingLibraryOptions,\n) => {\n const tools: TestingLibraryTools = {\n fireEvent: options.fireEvent,\n findAllByLabelText: options.findAllByLabelText,\n findAllByDisplayValue: options.findAllByDisplayValue,\n findAllByTestId: options.findAllByTestId,\n findAllByText: options.findAllByText,\n getAllByLabelText: options.getAllByLabelText,\n getAllByDisplayValue: options.getAllByDisplayValue,\n getAllByTestId: options.getAllByTestId,\n getAllByText: options.getAllByText,\n }\n return {\n findPktElementByLabelText: withTestingLibrary(tools, findPktElementByLabel),\n waitForPktElementsToBeDefined,\n getPktElementByLabelText: withTestingLibrary(tools, getPktElementByLabel),\n setPktElementChecked: withTestingLibrary(tools, setPktElementChecked),\n isPktElementChecked: withTestingLibrary(tools, isPktElementChecked),\n getPktSelectOptions: withTestingLibrary(tools, getPktSelectOptions),\n getAllPktElementsByLabelText: withTestingLibrary(tools, getAllPktElementsByLabelText),\n setPktElementValue: withTestingLibrary(tools, setPktElementValue),\n pktClickButton: withTestingLibrary(tools, pktClickButton),\n setPktSelectedOptionsByLabel: withTestingLibrary(tools, setPktSelectedOptionsByLabel),\n getPktElementByDisplayValue: withTestingLibrary(tools, getPktElementByDisplayValue),\n findPktElementByDisplayValue: withTestingLibrary(tools, findPktElementByDisplayValue),\n }\n}\n\ntype SyncQueries = typeof getAllByText | typeof getAllByLabelText | typeof getAllByTestId | typeof getAllByDisplayValue\ntype AsyncQueries =\n | FindAllByBoundAttribute\n | typeof findAllByText\n | typeof findAllByLabelText\n | typeof findAllByTestId\n | typeof findAllByDisplayValue\n\ntype QueryTypes = 'label' | 'text' | 'displayValue' | 'testid'\n\nconst syncQueryFunctionResolver =\n (testingLibrary: TestingLibraryTools) =>\n (queryType: QueryTypes): SyncQueries => {\n const queries: Record<QueryTypes, SyncQueries> = {\n text: testingLibrary.getAllByText,\n label: testingLibrary.getAllByLabelText,\n testid: testingLibrary.getAllByTestId,\n displayValue: testingLibrary.getAllByDisplayValue,\n }\n const query = queries[queryType]\n if (query) {\n return query\n } else {\n throw new Error('Unsupported query type: ' + queryType)\n }\n }\n\nconst asyncQueryFunctionResolver =\n (testingLibrary: TestingLibraryTools) =>\n (queryType: QueryTypes): AsyncQueries => {\n const queries: Record<QueryTypes, AsyncQueries> = {\n text: testingLibrary.findAllByText,\n label: testingLibrary.findAllByLabelText,\n testid: testingLibrary.findAllByTestId,\n displayValue: testingLibrary.findAllByDisplayValue,\n }\n const query = queries[queryType]\n if (query) {\n return query\n } else {\n throw new Error('Unsupported query type: ' + queryType)\n }\n }\n\nconst syncResolveIdentifierOrElement =\n (testingLibrary: TestingLibraryTools) =>\n <ElementType>(elementOrIdentifier: string | RegExp | HTMLElement, query: QueryTypes) =>\n typeof elementOrIdentifier === 'string' || elementOrIdentifier instanceof RegExp\n ? (getPktElementBy(testingLibrary)(query, elementOrIdentifier) as ElementType)\n : (elementOrIdentifier as ElementType)\n\nconst asyncResolveIdentifierOrElement =\n (testingLibrary: TestingLibraryTools) =>\n async <ElementType>(elementOrIdentifier: string | RegExp | HTMLElement, query: QueryTypes) =>\n typeof elementOrIdentifier === 'string' || elementOrIdentifier instanceof RegExp\n ? ((await findPktElementBy(testingLibrary)(query, elementOrIdentifier)) as ElementType)\n : (elementOrIdentifier as ElementType)\n\nconst asyncFuncWithStringIdentifierOrElement =\n (testingLibrary: TestingLibraryTools) =>\n <ElementType, ResultType>(\n func: (element: ElementType, ...restArgs: Array<any>) => Promise<ResultType>,\n query: QueryTypes = 'label',\n ) => {\n return async (labelOrPktElement: string | RegExp | HTMLElement, ...restArgs: Array<any>) => {\n const element = await asyncResolveIdentifierOrElement(testingLibrary)<ElementType>(labelOrPktElement, query)\n return await func(element, ...restArgs)\n }\n }\n\nconst syncFuncWithStringIdentifierOrElement =\n (testingLibrary: TestingLibraryTools) =>\n <ElementType, ResultType>(\n func: (element: ElementType, ...restArgs: Array<any>) => ResultType,\n query: QueryTypes = 'label',\n ) => {\n return (labelOrPktElement: string | RegExp | HTMLElement, ...restArgs: Array<any>) => {\n const element = syncResolveIdentifierOrElement(testingLibrary)<ElementType>(labelOrPktElement, query)\n return func(element, ...restArgs)\n }\n }\n\nconst withTestingLibrary = <F>(testingLibrary: TestingLibraryTools, fn: (testingLibrary: TestingLibraryTools) => F) =>\n fn(testingLibrary)\n\n/**\n * Sørger for at alle brukte custom elements fra Punkt er definerte og erstattet med implementasjoner.\n * Bør kalles etter `render`, før noen operasjoner og antakelser gjøres.\n *\n * F.eks.:\n * <code>\n * render(<div><PktTextinput id=\"textinput\" name={'textInput'} label=\"My text input\" aria-label=\"My text input\" /></div>);\n * await waitForPktElementsToBeDefined();\n *\n * await setPktElementValue(\"My text input\", \"new value\");\n * </code>\n */\nconst waitForPktElementsToBeDefined = async () =>\n await Promise.all(\n PKT_CUSTOM_ELEMENTS.map((elementName) => {\n if (document.querySelector(elementName) !== null) {\n return window.customElements.whenDefined(elementName)\n }\n }).filter((promise) => promise),\n )\n\nconst findPossibleWrappingPktCustomElement =\n (testingLibrary: TestingLibraryTools) =>\n <R extends PTLElementType>(innerElement: HTMLElement | null, isByRole: boolean, args: Array<any>): PTLElementType => {\n if (!innerElement === null) {\n throw getElementError(`Finner ikke noe element med ${isByRole ? 'role' : 'label'} \"${args[0]}\"`, document.body)\n }\n const pktElement = innerElement?.closest(PKT_CUSTOM_FORMFIELDS.join(', ')) as R | null\n if (pktElement) {\n return pktElement as R\n } else {\n return innerElement as R\n }\n }\n\nconst getPktElementBy =\n (testingLibrary: TestingLibraryTools) =>\n (query: QueryTypes = 'label', identifier: string | RegExp, container?: HTMLElement): PTLElementType => {\n try {\n const queryFunc = syncQueryFunctionResolver(testingLibrary)(query)\n const innerElement = doElementSearch(identifier, query, queryFunc, container)[0]\n return findPossibleWrappingPktCustomElement(testingLibrary)(innerElement, false, [])\n } catch (e) {\n return fallbackSearchForPktSelectByLabel(testingLibrary)(identifier, query, container)\n }\n }\n\nconst removeElementBySelector = (ancestor: HTMLElement, selector: string) => {\n const elements = Array.from(ancestor.querySelectorAll(selector))\n elements.forEach((element) => {\n element.parentNode?.removeChild(element)\n })\n}\n\nfunction getPureLabelText(label: Node) {\n const clonedLabel = label.cloneNode(true) as HTMLElement\n removeElementBySelector(clonedLabel, 'pkt-helptext')\n removeElementBySelector(clonedLabel, '.pkt-input-suffix')\n removeElementBySelector(clonedLabel, '.pkt-input-prefix')\n removeElementBySelector(clonedLabel, '.pkt-input-icon')\n removeElementBySelector(clonedLabel, '.pkt-input__counter')\n removeElementBySelector(clonedLabel, 'option')\n removeElementBySelector(clonedLabel, 'pkt-listbox')\n removeElementBySelector(clonedLabel, '.pkt-alert--error')\n removeElementBySelector(clonedLabel, '.pkt-tag')\n removeElementBySelector(clonedLabel, '.pkt-input-check__input-helptext')\n removeElementBySelector(clonedLabel, '.pkt-inputwrapper__helptext')\n return clonedLabel.textContent?.trim() || null\n}\n\nconst getPureLabelTextForLabelOwner = (labelOwner: HTMLElement): string | null => {\n const label =\n ('labels' in labelOwner &&\n labelOwner.labels instanceof NodeList &&\n labelOwner.labels.length > 0 &&\n labelOwner.labels[0]) ||\n (['input', ...PKT_CUSTOM_FORMFIELDS].includes(labelOwner.tagName.toLowerCase()) &&\n (labelOwner.querySelector('label') as HTMLLabelElement | null)) ||\n null\n if (label) {\n return getPureLabelText(label)\n } else {\n return null\n }\n}\n\nconst labelMatcher = (labelTextToMatch: string) => (nodeContent: string, element: Element | null) => {\n if (element instanceof HTMLElement) {\n const labelWithoutHelptext = getPureLabelTextForLabelOwner(element as HTMLElement)\n return labelWithoutHelptext === labelTextToMatch\n } else {\n return false\n }\n}\n\nconst fallbackSearchForPktSelectByLabel =\n (testingLibrary: TestingLibraryTools) =>\n (identifier: any, query: QueryTypes, container: HTMLElement = document.body): PTLElementType => {\n if (typeof identifier === 'string' && query === 'label') {\n // Spesial-case for <pkt-select> som ikke har aria-label\n const matchingLabel: HTMLLabelElement | undefined = Array.from(container.querySelectorAll('label')).find(\n (labelElement) => getPureLabelText(labelElement) === identifier,\n )\n const labelOwner =\n matchingLabel?.control || matchingLabel?.closest('pkt-select') || matchingLabel?.closest('pkt-combobox')\n if (!labelOwner) {\n throw getElementError(`Fant ikke noe element med label \"${identifier}\"`, container)\n }\n return labelOwner as PTLElementType\n }\n throw getElementError(`Fant ikke noe element med ${query} \"${identifier}\"`, container)\n }\n\nconst doElementSearch = <T>(\n identifier: string | RegExp,\n query: QueryTypes,\n queryFunc: (...args: Parameters<AllByBoundAttribute>) => T,\n container: HTMLElement = document.body,\n) => {\n return typeof identifier === 'string' && query === 'label'\n ? queryFunc(container, labelMatcher(identifier.trim()))\n : queryFunc(container, identifier)\n}\n\nconst findPktElementBy =\n (testingLibrary: TestingLibraryTools) =>\n async (\n query: QueryTypes = 'label',\n identifier: string | RegExp,\n container?: HTMLElement,\n ): Promise<PTLElementType> => {\n try {\n const queryFunc = asyncQueryFunctionResolver(testingLibrary)(query)\n const innerElement = (await doElementSearch(identifier, query, queryFunc, container))[0]\n return Promise.resolve(findPossibleWrappingPktCustomElement(testingLibrary)(innerElement, false, []))\n } catch (e) {\n return fallbackSearchForPktSelectByLabel(testingLibrary)(identifier, query, container)\n }\n }\n\nconst getPktElementByLabel =\n (testingLibrary: TestingLibraryTools) => (label: string | RegExp, container?: HTMLElement) =>\n getPktElementBy(testingLibrary)('label', label, container)\n\nconst findPktElementByLabel =\n (testingLibrary: TestingLibraryTools) =>\n async (label: string | RegExp, container?: HTMLElement): Promise<PTLElementType> =>\n findPktElementBy(testingLibrary)('label', label, container)\n\nconst getPktElementByText = (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n getPktElementBy(testingLibrary)('text', text, container)\n\nconst findPktElementByText =\n (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n findPktElementBy(testingLibrary)('text', text, container)\n\nconst setPktElementChecked = (testingLibrary: TestingLibraryTools) =>\n asyncFuncWithStringIdentifierOrElement(testingLibrary)(async (element: PTLElementType, checked: boolean) => {\n if (!('checked' in element)) {\n throw new Error('Bare elementer som har en \"checked\"-attributt støttes')\n }\n let returnValue: boolean = false\n if (element.tagName === 'INPUT') {\n // https://github.com/testing-library/react-testing-library/issues/175#issuecomment-637349276\n // kentcdodds: \"this should probably be documented better, but with checkboxes you don't actually fire change\n // events, you should fire click events instead.\"\n const htmlInputElement = element as HTMLInputElement\n if (htmlInputElement.type === 'radio') {\n if (!checked) {\n throw new Error(\"Kan ikke av-velge en <input type='radio'> - prøv å velge en annen radioknapp i samme gruppe\")\n } else {\n returnValue = testingLibrary.fireEvent.click(element)\n await new Promise((resolve) => setTimeout(resolve, 0))\n }\n } else if (htmlInputElement.type === 'checkbox') {\n if (htmlInputElement.checked !== checked) {\n returnValue = testingLibrary.fireEvent.click(element)\n }\n }\n } else {\n returnValue = testingLibrary.fireEvent.change(element, { target: { checked } })\n }\n\n return Promise.resolve(returnValue)\n })\n\nconst isPktElementChecked =\n (testingLibrary: TestingLibraryTools) =>\n (target: LabelOrElement): boolean => {\n const element = syncResolveIdentifierOrElement(testingLibrary)<PTLElementType>(target, 'label')\n\n if ('checked' in element) return !!(element as HTMLInputElement).checked\n\n const descendant = element.querySelector('input[type=\"radio\"]:checked, input[type=\"checkbox\"]:checked')\n return descendant !== null\n }\n\nconst getPktElementByDisplayValue =\n (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n getPktElementBy(testingLibrary)('displayValue', text, container)\n\nconst findPktElementByDisplayValue =\n (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n findPktElementBy(testingLibrary)('displayValue', text, container)\n\n/**\n * Representerer en option i en PktSelect.\n *\n * @property {string} 0 - verdien (value)\n * @property {string | null} 1 - Tekstinnholdet, <option>tekstinnhold</option>\n * @property {boolean} 2 - Om denne er valgt (selected)\n */\nexport type PktOption = [string, string | undefined, boolean]\n\nconst getPktSelectOptions = (testingLibrary: TestingLibraryTools) =>\n syncFuncWithStringIdentifierOrElement(testingLibrary)<PktSelect, Array<PktOption>>(\n (selectElement: PktSelect, onlySelected?: boolean): Array<PktOption> => {\n const optionElements: Array<HTMLOptionElement> = Array.from(\n selectElement.querySelectorAll('option:not(.pkt-hide), data:not(.pkt.hide)'),\n )\n const filter = onlySelected ? ([, , selected]: PktOption) => selected : (_: PktOption) => true\n const currentValue = selectElement.value\n return optionElements\n .map(\n (optionElement) =>\n [optionElement.value, optionElement.textContent?.trim(), optionElement.value === currentValue] as PktOption,\n )\n .filter(filter)\n },\n )\n\nconst getAllPktElementsByLabelText =\n (testingLibrary: TestingLibraryTools) =>\n (label: string, container?: HTMLElement): Element[] => {\n const innerElements = testingLibrary.getAllByLabelText(container || document.body, label)\n return innerElements.map((element) => findPossibleWrappingPktCustomElement(testingLibrary)(element, false, []))\n }\n\nconst setPktElementValue = (testingLibrary: TestingLibraryTools) =>\n asyncFuncWithStringIdentifierOrElement(testingLibrary)(\n async (\n element: PTLElementType,\n valueOrValues: PktElementValueType | Array<PktElementValueType>,\n useInputEvent = false,\n ): Promise<boolean> => {\n if (Array.isArray(valueOrValues) && valueOrValues.length > 1 && element.tagName === 'PKT-SELECT') {\n throw new Error('Multi-verdi <pkt-select> støttes ikke. Bruk <pkt-combobox> i stedet.')\n }\n if (element.tagName === 'PKT-SELECT' || element.tagName === 'PKT-COMBOBOX') {\n const pktSelect = element as HTMLSelectElement\n const multiple = pktSelect.multiple\n const valueAsArray = Array.isArray(valueOrValues) ? valueOrValues : [valueOrValues]\n const newValue = (multiple && valueAsArray) || (valueAsArray.length == 0 && '') || valueAsArray[0]\n testingLibrary.fireEvent.change(element, { target: { value: newValue } })\n return Promise.resolve(true)\n } else {\n if ('value' in element) {\n element.value = valueOrValues.toString()\n }\n\n testingLibrary.fireEvent.input(element, { target: { value: valueOrValues } })\n testingLibrary.fireEvent.change(element, { target: { value: valueOrValues } })\n\n return Promise.resolve(true)\n }\n },\n )\n\nconst containsRadioInput = (element: Element): boolean => {\n if (element.tagName === 'INPUT' && (element as HTMLInputElement).type === 'radio') return true\n\n if (element.querySelector?.('input[type=\"radio\"]')) return true\n\n if (element.tagName === 'LABEL') {\n const label = element as HTMLLabelElement\n const control = label.control || (label.htmlFor ? document.getElementById(label.htmlFor) : null)\n return !!(control && (control as HTMLInputElement).type === 'radio')\n }\n\n return false\n}\n\nconst pktClickButton = (testingLibrary: TestingLibraryTools) =>\n asyncFuncWithStringIdentifierOrElement(testingLibrary)(async (element: PTLElementType) => {\n if (containsRadioInput(element)) {\n throw new Error('Klikk på <pkt-radiobutton> støttes ikke - bruk setPktElementChecked i stedet')\n }\n return testingLibrary.fireEvent.click(element)\n }, 'text')\n\nconst setPktSelectedOptionsByLabel = (testingLibrary: TestingLibraryTools) =>\n asyncFuncWithStringIdentifierOrElement(testingLibrary)(\n async (pktSelect: PktSelect, ...desiredOptionLabels: Array<string>) => {\n const availableOptions = getPktSelectOptions(testingLibrary)(pktSelect)\n const selectedOptions = desiredOptionLabels\n .map((optionLabel) => availableOptions.find(([_, label]) => label === optionLabel))\n .filter((possibleOption) => possibleOption) as Array<PktOption>\n if (selectedOptions.length !== desiredOptionLabels.length) {\n throw new Error(\n \"Noen av option'ene finnes ikke i denne komponenten. Du valgte \" +\n JSON.stringify(desiredOptionLabels) +\n ', mens valgmulighetene er ' +\n JSON.stringify(availableOptions.map(([, label]) => label)),\n )\n }\n\n return await setPktElementValue(testingLibrary)(\n pktSelect,\n selectedOptions.map(([value]) => value),\n )\n },\n )\n"],"names":["getElementError"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oslokommune/punkt-testing-utils",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "13.0.0",
|
|
4
4
|
"description": "Test-utilities for Punkt",
|
|
5
5
|
"homepage": "https://punkt.oslo.kommune.no",
|
|
6
6
|
"author": "Team Designsystem, Oslo Origo",
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
"@testing-library/react": "16.2.0"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"@oslokommune/punkt-elements": "^
|
|
20
|
-
"@oslokommune/punkt-react": "^
|
|
19
|
+
"@oslokommune/punkt-elements": "^13.0.0",
|
|
20
|
+
"@oslokommune/punkt-react": "^13.0.0",
|
|
21
21
|
"@testing-library/jest-dom": "^6.6.3",
|
|
22
22
|
"@types/jest": "^29.5.14",
|
|
23
23
|
"@types/node": "^20.17.30",
|
|
@@ -66,5 +66,5 @@
|
|
|
66
66
|
"url": "https://github.com/oslokommune/punkt/issues"
|
|
67
67
|
},
|
|
68
68
|
"license": "MIT",
|
|
69
|
-
"gitHead": "
|
|
69
|
+
"gitHead": "8012adb5b795a7ab26d844a3311435fef05121c4"
|
|
70
70
|
}
|