@oslokommune/punkt-testing-utils 12.26.0 → 12.26.2

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.
@@ -120,6 +120,7 @@ function getPureLabelText(label) {
120
120
  removeElementBySelector(clonedLabel, ".pkt-input__counter");
121
121
  removeElementBySelector(clonedLabel, "option");
122
122
  removeElementBySelector(clonedLabel, ".pkt-alert--error");
123
+ removeElementBySelector(clonedLabel, ".pkt-tag");
123
124
  return ((_a = clonedLabel.textContent) == null ? void 0 : _a.trim()) || null;
124
125
  }
125
126
  const getPureLabelTextForLabelOwner = (labelOwner) => {
@@ -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 PktDatepicker,\n PktInputWrapper,\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-datepicker',\n 'pkt-progressbar',\n 'pkt-textarea',\n 'pkt-textinput',\n 'pkt-select',\n]\nconst PKT_CUSTOM_ELEMENTS = ['pkt-input-wrapper', ...PKT_CUSTOM_FORMFIELDS]\n\ntype PTLElementType =\n | PktDatepicker\n | PktProgressbar\n | PktTextarea\n | PktInputWrapper\n | PktSelect\n | PktRadioButton\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 setPktElementValue: (\n labelOrElement: LabelOrElement,\n valueOrValues: PktElementValueType | Array<PktElementValueType>,\n useInputEvent?: boolean,\n ) => Promise<boolean>\n pktClickButton: (labelOrElement: LabelOrElement<PktRadioButton | 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: PktTestingLibraryOptions = {\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 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-alert--error')\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 = matchingLabel?.control || matchingLabel?.closest('pkt-select')\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)((element: PTLElementType, checked: boolean) => {\n if (!('checked' in element)) {\n throw new Error('Only elements with a checked attribute can be checked')\n }\n const returnValue = testingLibrary.fireEvent.change(element, { target: { checked } })\n return Promise.resolve(returnValue)\n })\n\nconst getPktElementByDisplayValue = (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n getPktElementBy(testingLibrary)('displayValue', text, container)\n\nconst findPktElementByDisplayValue = (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')\n }\n if (element.tagName === 'PKT-SELECT') {\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: PktRadioButton) => {\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 PktSelect'en. 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 PktDatepicker,\n PktInputWrapper,\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-datepicker',\n 'pkt-progressbar',\n 'pkt-textarea',\n 'pkt-textinput',\n 'pkt-select',\n]\nconst PKT_CUSTOM_ELEMENTS = ['pkt-input-wrapper', ...PKT_CUSTOM_FORMFIELDS]\n\ntype PTLElementType =\n | PktDatepicker\n | PktProgressbar\n | PktTextarea\n | PktInputWrapper\n | PktSelect\n | PktRadioButton\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 setPktElementValue: (\n labelOrElement: LabelOrElement,\n valueOrValues: PktElementValueType | Array<PktElementValueType>,\n useInputEvent?: boolean,\n ) => Promise<boolean>\n pktClickButton: (labelOrElement: LabelOrElement<PktRadioButton | 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: PktTestingLibraryOptions = {\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 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-alert--error')\n removeElementBySelector(clonedLabel, '.pkt-tag')\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 = matchingLabel?.control || matchingLabel?.closest('pkt-select')\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)((element: PTLElementType, checked: boolean) => {\n if (!('checked' in element)) {\n throw new Error('Only elements with a checked attribute can be checked')\n }\n const returnValue = testingLibrary.fireEvent.change(element, { target: { checked } })\n return Promise.resolve(returnValue)\n })\n\nconst getPktElementByDisplayValue = (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n getPktElementBy(testingLibrary)('displayValue', text, container)\n\nconst findPktElementByDisplayValue = (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')\n }\n if (element.tagName === 'PKT-SELECT') {\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: PktRadioButton) => {\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 PktSelect'en. 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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"}
@@ -123,6 +123,7 @@
123
123
  removeElementBySelector(clonedLabel, ".pkt-input__counter");
124
124
  removeElementBySelector(clonedLabel, "option");
125
125
  removeElementBySelector(clonedLabel, ".pkt-alert--error");
126
+ removeElementBySelector(clonedLabel, ".pkt-tag");
126
127
  return ((_a = clonedLabel.textContent) == null ? void 0 : _a.trim()) || null;
127
128
  }
128
129
  const getPureLabelTextForLabelOwner = (labelOwner) => {
@@ -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 PktDatepicker,\n PktInputWrapper,\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-datepicker',\n 'pkt-progressbar',\n 'pkt-textarea',\n 'pkt-textinput',\n 'pkt-select',\n]\nconst PKT_CUSTOM_ELEMENTS = ['pkt-input-wrapper', ...PKT_CUSTOM_FORMFIELDS]\n\ntype PTLElementType =\n | PktDatepicker\n | PktProgressbar\n | PktTextarea\n | PktInputWrapper\n | PktSelect\n | PktRadioButton\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 setPktElementValue: (\n labelOrElement: LabelOrElement,\n valueOrValues: PktElementValueType | Array<PktElementValueType>,\n useInputEvent?: boolean,\n ) => Promise<boolean>\n pktClickButton: (labelOrElement: LabelOrElement<PktRadioButton | 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: PktTestingLibraryOptions = {\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 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-alert--error')\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 = matchingLabel?.control || matchingLabel?.closest('pkt-select')\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)((element: PTLElementType, checked: boolean) => {\n if (!('checked' in element)) {\n throw new Error('Only elements with a checked attribute can be checked')\n }\n const returnValue = testingLibrary.fireEvent.change(element, { target: { checked } })\n return Promise.resolve(returnValue)\n })\n\nconst getPktElementByDisplayValue = (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n getPktElementBy(testingLibrary)('displayValue', text, container)\n\nconst findPktElementByDisplayValue = (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')\n }\n if (element.tagName === 'PKT-SELECT') {\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: PktRadioButton) => {\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 PktSelect'en. 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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"}
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 PktDatepicker,\n PktInputWrapper,\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-datepicker',\n 'pkt-progressbar',\n 'pkt-textarea',\n 'pkt-textinput',\n 'pkt-select',\n]\nconst PKT_CUSTOM_ELEMENTS = ['pkt-input-wrapper', ...PKT_CUSTOM_FORMFIELDS]\n\ntype PTLElementType =\n | PktDatepicker\n | PktProgressbar\n | PktTextarea\n | PktInputWrapper\n | PktSelect\n | PktRadioButton\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 setPktElementValue: (\n labelOrElement: LabelOrElement,\n valueOrValues: PktElementValueType | Array<PktElementValueType>,\n useInputEvent?: boolean,\n ) => Promise<boolean>\n pktClickButton: (labelOrElement: LabelOrElement<PktRadioButton | 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: PktTestingLibraryOptions = {\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 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-alert--error')\n removeElementBySelector(clonedLabel, '.pkt-tag')\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 = matchingLabel?.control || matchingLabel?.closest('pkt-select')\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)((element: PTLElementType, checked: boolean) => {\n if (!('checked' in element)) {\n throw new Error('Only elements with a checked attribute can be checked')\n }\n const returnValue = testingLibrary.fireEvent.change(element, { target: { checked } })\n return Promise.resolve(returnValue)\n })\n\nconst getPktElementByDisplayValue = (testingLibrary: TestingLibraryTools) => (text: string | RegExp, container?: HTMLElement) =>\n getPktElementBy(testingLibrary)('displayValue', text, container)\n\nconst findPktElementByDisplayValue = (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')\n }\n if (element.tagName === 'PKT-SELECT') {\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: PktRadioButton) => {\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 PktSelect'en. 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": "12.26.0",
3
+ "version": "12.26.2",
4
4
  "description": "Test-utilities for Punkt",
5
5
  "homepage": "https://punkt.oslo.kommune.no",
6
6
  "author": "Team Designsystem, Oslo Origo",
@@ -17,8 +17,8 @@
17
17
  "element-internals-polyfill": "^1.3.10"
18
18
  },
19
19
  "devDependencies": {
20
- "@oslokommune/punkt-elements": "^12.26.0",
21
- "@oslokommune/punkt-react": "^12.26.0",
20
+ "@oslokommune/punkt-elements": "^12.26.2",
21
+ "@oslokommune/punkt-react": "^12.26.2",
22
22
  "@testing-library/jest-dom": "^6.1.0",
23
23
  "@types/jest": "^29.5.0",
24
24
  "@types/testing-library__jest-dom": "^5.14.9",
@@ -65,5 +65,5 @@
65
65
  "url": "https://github.com/oslokommune/punkt/issues"
66
66
  },
67
67
  "license": "MIT",
68
- "gitHead": "d53ac4282cddb23a055e3d81337eb533d3abd068"
68
+ "gitHead": "40edb9d3d4eab9308ced03492923de706deff59d"
69
69
  }