@dynatrace/strato-components-testing 3.7.0 → 3.8.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.
- package/esm/jest/preset/resolver.js +5 -1
- package/esm/jest/preset/resolver.js.map +1 -1
- package/esm/jest/testing-helpers/filters/filter-field.js +2 -0
- package/esm/jest/testing-helpers/filters/filter-field.js.map +1 -1
- package/esm/jest/testing-helpers/forms/base-input.js +1 -0
- package/esm/jest/testing-helpers/forms/base-input.js.map +1 -1
- package/esm/jest/testing-helpers/forms/select.js +1 -0
- package/esm/jest/testing-helpers/forms/select.js.map +1 -1
- package/esm/jest/testing-helpers/tables/datatable.js +10 -0
- package/esm/jest/testing-helpers/tables/datatable.js.map +1 -1
- package/jest/testing-helpers/filters/filter-field.js +2 -0
- package/jest/testing-helpers/forms/base-input.js +1 -0
- package/jest/testing-helpers/forms/select.js +1 -0
- package/jest/testing-helpers/tables/datatable.js +10 -0
- package/package.json +2 -2
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
2
2
|
var __commonJS = (cb, mod) => function __require() {
|
|
3
|
-
|
|
3
|
+
try {
|
|
4
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
5
|
+
} catch (e) {
|
|
6
|
+
throw mod = 0, e;
|
|
7
|
+
}
|
|
4
8
|
};
|
|
5
9
|
var require_resolver = __commonJS({
|
|
6
10
|
"packages/components-testing/src/jest/preset/resolver.ts"(exports, module) {
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/jest/preset/resolver.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * @public\n */\nmodule.exports = (path, options) => {\n // Call the defaultResolver, so we leverage its cache, error handling, etc.\n return options.defaultResolver(path, {\n ...options,\n // Use packageFilter to process parsed `package.json` before the resolution (see https://www.npmjs.com/package/resolve#resolveid-opts-cb)\n packageFilter: (pkg) => {\n // This is a workaround for https://github.com/uuidjs/uuid/pull/616\n //\n // jest-environment-jsdom 28+ tries to use browser exports instead of default exports,\n // but uuid only offers an ESM browser export and not a CommonJS one. Jest does not yet\n // support ESM modules natively, so this causes a Jest error related to trying to parse\n // \"export\" syntax.\n //\n // This workaround prevents Jest from considering uuid's module-based exports at all;\n // it falls back to uuid's CommonJS+node \"main\" property.\n //\n // Once we're able to migrate our Jest config to ESM and a browser crypto\n // implementation is available for the browser+ESM version of uuid to use (eg, via\n // https://github.com/jsdom/jsdom/pull/3352 or a similar polyfill), this can go away.\n if (pkg.name === 'uuid') {\n delete pkg['exports'];\n delete pkg['module'];\n }\n return pkg;\n },\n });\n};\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;AAAA;AAAA;AAGA,WAAO,UAAU,CAAC,MAAM,YAAY;AAElC,aAAO,QAAQ,gBAAgB,MAAM;AAAA,QACnC,GAAG;AAAA;AAAA,QAEH,eAAe,CAAC,QAAQ;AActB,cAAI,IAAI,SAAS,QAAQ;AACvB,mBAAO,IAAI,SAAS;AACpB,mBAAO,IAAI,QAAQ;AAAA,UACrB;AACA,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AAAA,IACH;AAAA;AAAA;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -12,6 +12,7 @@ class FilterFieldPinnedAndRecentSuggestionBase {
|
|
|
12
12
|
constructor(suggestionRoot) {
|
|
13
13
|
this.suggestionRoot = suggestionRoot;
|
|
14
14
|
}
|
|
15
|
+
suggestionRoot;
|
|
15
16
|
get pinButtonElement() {
|
|
16
17
|
return this.suggestionRoot.querySelector(
|
|
17
18
|
"button[aria-checked]"
|
|
@@ -109,6 +110,7 @@ class FilterFieldHelper {
|
|
|
109
110
|
constructor(dataTestId) {
|
|
110
111
|
this.dataTestId = dataTestId;
|
|
111
112
|
}
|
|
113
|
+
dataTestId;
|
|
112
114
|
get filterFieldWrapper() {
|
|
113
115
|
return screen.getByTestId(this.dataTestId);
|
|
114
116
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/jest/testing-helpers/filters/filter-field.ts"],
|
|
4
4
|
"sourcesContent": ["import {\n act,\n screen,\n waitFor,\n waitForElementToBeRemoved,\n within,\n} from '@testing-library/react';\nimport { PointerEventsCheckLevel } from '@testing-library/user-event';\n\nimport { isFakeTimersEnabled } from '../utils/isFakeTimersEnabled.js';\nimport { setupUserEvent } from '../utils/setup-user-event.js';\n\n/**\n * Base class for pinned or recent filter field suggestion.\n * @public */\nexport class FilterFieldPinnedAndRecentSuggestionBase {\n constructor(protected readonly suggestionRoot: HTMLDivElement) {}\n\n private get pinButtonElement(): HTMLButtonElement | null {\n return this.suggestionRoot.querySelector<HTMLButtonElement>(\n 'button[aria-checked]',\n );\n }\n\n /**\n * Receives the value of the suggestion that would be applied.\n */\n get value(): string | null {\n return this.suggestionRoot.childNodes.item(1).textContent;\n }\n\n /**\n * Returns if the current suggestion is currently pinned or not.\n */\n get pinned(): boolean {\n if (this.pinButtonElement) {\n return this.pinButtonElement.getAttribute('aria-checked') === 'true';\n }\n return false;\n }\n\n /**\n * Applies the suggestion to the filter field.\n */\n async apply() {\n await setupUserEvent({\n pointerEventsCheck: PointerEventsCheckLevel.Never,\n }).click(this.suggestionRoot);\n }\n\n get pinEnabled(): boolean {\n if (this.pinButtonElement) {\n return this.pinButtonElement.getAttribute('aria-disabled') === 'false';\n }\n return false;\n }\n\n /**\n * Allows the suggestion to be pinned if not pinned already.\n */\n async pin() {\n if (this.pinned === true) {\n return;\n }\n if (this.pinButtonElement) {\n await setupUserEvent({\n pointerEventsCheck: PointerEventsCheckLevel.Never,\n }).click(this.pinButtonElement);\n\n if (isFakeTimersEnabled()) {\n await act(async () => {\n jest.runOnlyPendingTimers();\n });\n }\n }\n }\n\n /**\n * Allows the suggestion to be unpinned if not unpinned already.\n */\n async unpin() {\n if (this.pinned === false) {\n return;\n }\n if (this.pinButtonElement) {\n await setupUserEvent({\n pointerEventsCheck: PointerEventsCheckLevel.Never,\n }).click(this.pinButtonElement);\n\n if (isFakeTimersEnabled()) {\n await act(async () => {\n jest.runOnlyPendingTimers();\n });\n }\n }\n }\n}\n\n/**\n * Testing helper class for pinned suggestions in the filter field\n * @public */\nexport class FilterFieldPinnedSuggestion extends FilterFieldPinnedAndRecentSuggestionBase {\n /**\n * Receives the value of the suggestion that would be applied.\n */\n get value(): string | null {\n return this.suggestionRoot.childNodes.item(0).textContent;\n }\n}\n\n/**\n * Testing helper class for recent suggestions in the filter field\n * @public */\nexport class FilterFieldRecentSuggestion extends FilterFieldPinnedAndRecentSuggestionBase {\n /**\n * Receives the value of the suggestion that would be applied.\n */\n get value(): string | null {\n return (\n this.suggestionRoot.querySelector('[role=\"option\"]')?.childNodes.item(0)\n .textContent ?? null\n );\n }\n /**\n * Receives time offset indicating when the filter statement has last been used.\n */\n get lastUsed(): string | null {\n return (\n this.suggestionRoot.querySelector('[role=\"option\"]')?.childNodes.item(1)\n .textContent ?? null\n );\n }\n}\n\n/**\n * Helper class for interacting with the filter field.\n * @public\n */\nexport class FilterFieldHelper {\n private get filterFieldWrapper(): HTMLElement {\n return screen.getByTestId(this.dataTestId);\n }\n\n private get editorView() {\n return (\n this.filterFieldWrapper.querySelector(\n '.cm-content',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) as any\n )?.cmTile.view;\n }\n\n private get inputElement(): HTMLInputElement {\n return within(this.filterFieldWrapper).getAllByRole<HTMLInputElement>(\n 'textbox',\n { hidden: true },\n )[1];\n }\n\n private get filterFieldElement(): HTMLDivElement {\n return within(this.filterFieldWrapper).getByRole<HTMLDivElement>(\n 'textbox',\n {\n name: 'Filter field',\n hidden: true,\n },\n );\n }\n\n private get placeholderElement(): HTMLSpanElement | null {\n return this.filterFieldWrapper.querySelector('.cm-placeholder');\n }\n\n private get suggestionsContainer(): HTMLDivElement | null {\n return screen.queryByTestId(`filterfield-suggestions-${this.dataTestId}`);\n }\n\n constructor(private dataTestId: string) {}\n\n /** Returns the value of the native text input. */\n get value(): string {\n return this.inputElement.value;\n }\n\n /** Returns the value of the filter field. */\n get filterFieldValue(): string {\n return this.filterFieldElement.textContent || '';\n }\n\n /**\n * The placeholder text shown in the filter field.\n * Undefined if the placeholder is currently not rendered.\n */\n get placeholder(): string | undefined {\n return this.placeholderElement?.textContent || undefined;\n }\n\n /** Focus the filter field if not already focused. */\n async focus() {\n if (!this.filterFieldWrapper.contains(document.activeElement)) {\n await act(async () => {\n this.inputElement.focus();\n });\n\n expect(\n this.filterFieldWrapper.contains(document.activeElement),\n ).toBeTruthy();\n\n if (isFakeTimersEnabled()) {\n await act(async () => {\n jest.runOnlyPendingTimers();\n });\n }\n }\n }\n\n /** Blur the filter field by tabbing out of it. */\n async blur() {\n await act(async () => {\n this.filterFieldElement.blur();\n });\n\n if (isFakeTimersEnabled()) {\n await act(async () => {\n jest.runOnlyPendingTimers();\n });\n }\n }\n\n /** Fill a provided value into the filter field. */\n async type(text: string, cursorIndex?: number) {\n const regEx = new RegExp(text, 'g');\n const matches = this.value.match(regEx);\n\n await this.moveCursorTo(cursorIndex ?? -1);\n\n await setupUserEvent({\n pointerEventsCheck: PointerEventsCheckLevel.Never,\n }).keyboard(text);\n await waitFor(() => {\n expect(this.value.match(regEx) ?? []).toHaveLength(\n (matches?.length ?? 0) + 1,\n );\n });\n\n if (isFakeTimersEnabled()) {\n await act(async () => {\n jest.runOnlyPendingTimers();\n });\n }\n }\n\n /** Clears the filter field value. */\n async clear() {\n if (this.value !== '') {\n await setupUserEvent({\n pointerEventsCheck: PointerEventsCheckLevel.Never,\n }).click(\n await within(this.filterFieldWrapper).findByRole('button', {\n name: 'Clear filter',\n hidden: true,\n }),\n );\n\n if (isFakeTimersEnabled()) {\n await act(async () => {\n jest.runOnlyPendingTimers();\n });\n }\n }\n }\n\n /**\n * Moves the cursor to the given index.\n * -1 moves to the end of the input.\n */\n async moveCursorTo(index: number) {\n const user = setupUserEvent({\n pointerEventsCheck: PointerEventsCheckLevel.Never,\n });\n\n if (index === -1) {\n await act(async () => {\n await this.focus();\n });\n await user.keyboard('{PageDown}');\n\n return;\n }\n\n if (!this.editorView) {\n // eslint-disable-next-line no-console\n console.warn('FilterField editor could not be found. Panic now.');\n return;\n }\n\n await act(async () => {\n await this.focus();\n this.editorView.dispatch({\n selection: {\n anchor: Math.min(index, this.editorView.state.doc.length),\n },\n });\n });\n\n if (isFakeTimersEnabled()) {\n await act(async () => {\n jest.runOnlyPendingTimers();\n });\n }\n }\n\n /** Open the suggestions overlay with the keyboard shortcut. */\n async openSuggestions() {\n await act(async () => {\n await this.focus();\n });\n await setupUserEvent({\n pointerEventsCheck: PointerEventsCheckLevel.Never,\n }).keyboard('{Control>}{Space}{/Control}');\n\n await waitFor(async () =>\n expect(this.suggestionsContainer).toBeInTheDocument(),\n );\n if (isFakeTimersEnabled()) {\n await act(async () => {\n jest.runOnlyPendingTimers();\n });\n }\n }\n\n /**\n * Close the suggestions overlay using the `Escape` key.\n * If the filter field is focused, the focus will stay in the filter field.\n */\n async closeSuggestions() {\n await act(async () => {\n await this.focus();\n });\n await setupUserEvent({\n pointerEventsCheck: PointerEventsCheckLevel.Never,\n }).keyboard('{Escape}');\n\n if (this.suggestionsContainer !== null) {\n await waitForElementToBeRemoved(() => this.suggestionsContainer);\n }\n }\n\n /** Apply the suggestion with the given text. */\n async applySuggestion(queryString: string) {\n await act(async () => {\n await this.focus();\n });\n\n // Wait for the suggestions overlay to open.\n await waitFor(() => {\n expect(this.suggestionsContainer).toBeInTheDocument();\n });\n\n if (!this.suggestionsContainer) {\n // eslint-disable-next-line no-console\n console.warn(\n 'The filter field suggestions overlay seems to be closed. Make sure to open it before applying a suggestion.',\n );\n return;\n }\n\n const showMore = within(this.suggestionsContainer).queryByRole('option', {\n name: 'Show more',\n });\n\n if (showMore) {\n await setupUserEvent({\n pointerEventsCheck: PointerEventsCheckLevel.Never,\n }).click(showMore);\n }\n\n let suggestions = within(this.suggestionsContainer).queryAllByTestId(\n queryString,\n { exact: true },\n );\n\n if (suggestions.length > 0) {\n suggestions = suggestions.reduce<HTMLElement[]>((acc, container) => {\n const suggestion = within(container).queryByRole('option');\n if (suggestion) {\n acc.push(suggestion);\n }\n\n return acc;\n }, []);\n }\n\n if (suggestions.length === 0) {\n suggestions.push(\n ...within(this.suggestionsContainer).queryAllByText(\n (_, element) =>\n element?.getAttribute('role') === 'option' &&\n // The replace is needed to ignore non-breaking spaces\n element.firstElementChild?.textContent?.replace(/\\s+/g, ' ') ===\n queryString.replace(/\\s+/g, ' '),\n ),\n );\n }\n\n if (suggestions.length === 0) {\n // eslint-disable-next-line no-console\n console.warn(\n `Could not query a suggestion with the given queryString '${queryString}' (trying queryByTestId and queryByText).`,\n );\n return;\n }\n\n if (suggestions.length > 1) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Found multiple suggestions with the given testId. Will apply the first one',\n );\n }\n\n await setupUserEvent({\n pointerEventsCheck: PointerEventsCheckLevel.Never,\n }).click(suggestions[0]);\n }\n\n /** Get recent suggestions */\n async getRecentSuggestions(): Promise<FilterFieldRecentSuggestion[]> {\n if (this.suggestionsContainer) {\n const recentGroup = within(this.suggestionsContainer).getByRole('group', {\n name: 'Recently used filters',\n });\n const suggestions = within(recentGroup).getAllByRole<HTMLDivElement>(\n 'group',\n {\n hidden: true,\n name(_accessibleName: string, element: Element) {\n return (\n element.getAttribute(\n 'data-strato-filter-field-virtual-focus-type',\n ) === 'recent-suggestion'\n );\n },\n },\n );\n return suggestions.map((el) => new FilterFieldRecentSuggestion(el));\n }\n return [];\n }\n\n /** Get pinned suggestions */\n async getPinnedSuggestions(): Promise<FilterFieldPinnedSuggestion[]> {\n if (this.suggestionsContainer) {\n try {\n await waitFor(() =>\n screen.getByRole('group', {\n name: 'Pinned filters',\n hidden: true,\n suggest: false,\n }),\n );\n const pinnedGroup = within(this.suggestionsContainer).getByRole(\n 'group',\n {\n name: 'Pinned filters',\n hidden: true,\n },\n );\n const suggestions = within(pinnedGroup).getAllByRole<HTMLDivElement>(\n 'group',\n {\n hidden: true,\n name(_accessibleName: string, element: Element) {\n return (\n element.getAttribute(\n 'data-strato-filter-field-virtual-focus-type',\n ) === 'pinned-suggestion'\n );\n },\n },\n );\n return suggestions.map((el) => new FilterFieldPinnedSuggestion(el));\n } catch {\n return [];\n }\n }\n return [];\n }\n\n /** Paste text at the current cursor position */\n async paste(text: string, cursorIndex?: number) {\n await this.moveCursorTo(cursorIndex ?? -1);\n\n await setupUserEvent({\n pointerEventsCheck: PointerEventsCheckLevel.Never,\n }).paste(text);\n\n if (isFakeTimersEnabled()) {\n await act(async () => {\n jest.runOnlyPendingTimers();\n });\n }\n }\n}\n\n/**\n * Helper function that returns the filter field with its testing utilities.\n * @public\n */\nexport function getFilterFieldHelper(\n /** The accessible test id used to locate the filter field wrapper. */\n dataTestId: string,\n): FilterFieldHelper {\n return new FilterFieldHelper(dataTestId);\n}\n"],
|
|
5
|
-
"mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,+BAA+B;AAExC,SAAS,2BAA2B;AACpC,SAAS,sBAAsB;AAKxB,MAAM,yCAAyC;AAAA,EACpD,YAA+B,gBAAgC;AAAhC;AAAA,EAAiC;AAAA,
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/jest/testing-helpers/forms/base-input.ts"],
|
|
4
4
|
"sourcesContent": ["import { screen, within } from '@testing-library/react';\n\nimport { setupUserEvent } from '../utils/setup-user-event.js';\n\n/**\n * Helper class for interacting with the text input\n * @public\n */\nexport class BaseInputHelper {\n protected get inputWrapper(): HTMLElement {\n return screen.getByTestId(this.dataTestId);\n }\n\n protected get inputElement(): HTMLInputElement {\n return within(this.inputWrapper).getByRole('textbox', { hidden: true });\n }\n\n constructor(protected dataTestId: string) {}\n\n /** Returns the value of the native input element. */\n get value(): string {\n return this.inputElement.value;\n }\n\n focus() {\n this.inputElement.focus();\n }\n\n /** Fill a provided value into the text input. */\n async type(text: string) {\n await setupUserEvent().type(this.inputElement, text);\n }\n\n /** Clears the text input value. */\n async clear() {\n await setupUserEvent().clear(this.inputElement);\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,QAAQ,cAAc;AAE/B,SAAS,sBAAsB;AAMxB,MAAM,gBAAgB;AAAA,EAS3B,YAAsB,YAAoB;AAApB;AAAA,EAAqB;AAAA,
|
|
5
|
+
"mappings": "AAAA,SAAS,QAAQ,cAAc;AAE/B,SAAS,sBAAsB;AAMxB,MAAM,gBAAgB;AAAA,EAS3B,YAAsB,YAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EARtB,IAAc,eAA4B;AACxC,WAAO,OAAO,YAAY,KAAK,UAAU;AAAA,EAC3C;AAAA,EAEA,IAAc,eAAiC;AAC7C,WAAO,OAAO,KAAK,YAAY,EAAE,UAAU,WAAW,EAAE,QAAQ,KAAK,CAAC;AAAA,EACxE;AAAA;AAAA,EAKA,IAAI,QAAgB;AAClB,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA,EAEA,QAAQ;AACN,SAAK,aAAa,MAAM;AAAA,EAC1B;AAAA;AAAA,EAGA,MAAM,KAAK,MAAc;AACvB,UAAM,eAAe,EAAE,KAAK,KAAK,cAAc,IAAI;AAAA,EACrD;AAAA;AAAA,EAGA,MAAM,QAAQ;AACZ,UAAM,eAAe,EAAE,MAAM,KAAK,YAAY;AAAA,EAChD;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/jest/testing-helpers/forms/select.ts"],
|
|
4
4
|
"sourcesContent": ["import { screen, within } from '@testing-library/react';\nimport userEvent from '@testing-library/user-event';\n\n/**\n * Helper class for interacting with the select.\n * @public\n */\nexport class SelectTestingHelper {\n constructor(protected dataTestId: string) {}\n\n /**\n * Gets the root element of the select.\n */\n get element(): HTMLDivElement {\n return screen.getByTestId(this.dataTestId);\n }\n\n /**\n * Gets the trigger element of the select.\n */\n get trigger(): HTMLDivElement {\n const triggerElement =\n this.element.querySelector<HTMLDivElement>('div[type=\"button\"]');\n if (triggerElement) {\n return triggerElement;\n }\n throw new Error('Trigger element for the select was not found.');\n }\n\n /**\n * Gets the text value of the trigger display value of the select.\n */\n get displayValue(): string {\n const displayValue = this.trigger.textContent;\n\n if (displayValue) {\n return displayValue;\n }\n\n throw new Error('Could not get display value.');\n }\n\n /**\n * Gets the overlay (content) of the select.\n */\n get overlay(): HTMLDivElement {\n // Get the aria-controls attribute that connects the combobx to the listbox in\n // the overlay. It's the only unique identifier that we have that the overlay\n // is actually connected to the trigger.\n const selectInputAriaControls = within(this.trigger)\n .getByRole('combobox', { hidden: true })\n .getAttribute('aria-controls');\n\n // Get the listbox that is connected to the combobox of the trigger.\n const listboxElement = document.querySelector(\n `[role=\"listbox\"][id=\"${selectInputAriaControls}\"]`,\n );\n\n // Get the parent element of the listbox (the actual overlay).\n if (listboxElement) {\n return listboxElement.parentElement as HTMLDivElement;\n }\n\n throw new Error('Could not find the overlay element for the select.');\n }\n\n /**\n * Gets the text value of the select filter in the overlay.\n */\n get filterValue(): string {\n const filter = within(this.overlay).getByPlaceholderText<HTMLInputElement>(\n 'Search',\n );\n return filter.value;\n }\n\n /**\n * Gets the currently selected option(s).\n */\n get selectedOptions(): Array<string> {\n const selectedOptions = within(\n this.element,\n ).getAllByRole<HTMLOptionElement>('option', { hidden: true });\n\n return selectedOptions.map((option) => option.value);\n }\n\n /**\n * Gets the open state of the select overlay.\n */\n get openState(): boolean {\n return (\n within(this.trigger)\n .getByRole('combobox', { hidden: true })\n .getAttribute('aria-expanded') === 'true'\n );\n }\n\n /**\n * Gets the option with the corresponding label.\n */\n getOption(label: string): HTMLOptionElement {\n const option = within(this.overlay).getByRole<HTMLOptionElement>('option', {\n name: label,\n });\n\n return option;\n }\n\n /**\n * Selects the option with the corresponding label.\n */\n async selectOption(label: string) {\n await this.open();\n\n const option = within(this.overlay).getByRole<HTMLOptionElement>('option', {\n name: label,\n });\n\n await userEvent.click(option);\n }\n\n /**\n * Opens the select overlay.\n */\n async open() {\n if (!this.openState) {\n await userEvent.click(this.trigger);\n }\n }\n\n /**\n * Closes the select overlay.\n */\n async close() {\n if (this.openState) {\n await userEvent.click(this.trigger);\n }\n }\n\n /**\n * Types in the filter of the select.\n */\n async typeInFilter(text: string) {\n await this.open();\n const user = userEvent.setup();\n\n const filter = within(this.overlay).getByPlaceholderText('Search');\n await user.click(filter);\n await user.keyboard(text);\n }\n\n /**\n * Clears the filter / search of the select overlay.\n */\n async clearFilter() {\n await this.open();\n\n const filter = within(this.overlay).getByPlaceholderText('Search');\n await userEvent.clear(filter);\n }\n}\n\n/**\n * Helper function that returns the select element with its testing utilities.\n * @public\n */\nexport function getSelectTestingHelper(\n dataTestId: string,\n): SelectTestingHelper {\n return new SelectTestingHelper(dataTestId);\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,QAAQ,cAAc;AAC/B,OAAO,eAAe;AAMf,MAAM,oBAAoB;AAAA,EAC/B,YAAsB,YAAoB;AAApB;AAAA,EAAqB;AAAA;AAAA;AAAA;AAAA,
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -5,6 +5,7 @@ class DataTableSubRowsHelper {
|
|
|
5
5
|
constructor(rootHelper) {
|
|
6
6
|
this.rootHelper = rootHelper;
|
|
7
7
|
}
|
|
8
|
+
rootHelper;
|
|
8
9
|
async getSubRowButton(rowId) {
|
|
9
10
|
try {
|
|
10
11
|
return within(this.rootHelper.element).getByLabelText(
|
|
@@ -72,6 +73,7 @@ class DataTableRowSelectionHelper {
|
|
|
72
73
|
constructor(rootHelper) {
|
|
73
74
|
this.rootHelper = rootHelper;
|
|
74
75
|
}
|
|
76
|
+
rootHelper;
|
|
75
77
|
async getCheckboxById(id) {
|
|
76
78
|
return await within(
|
|
77
79
|
this.rootHelper.element
|
|
@@ -200,6 +202,7 @@ class DataTableUserActionHelper {
|
|
|
200
202
|
constructor(dataTestId) {
|
|
201
203
|
this.dataTestId = dataTestId;
|
|
202
204
|
}
|
|
205
|
+
dataTestId;
|
|
203
206
|
/**
|
|
204
207
|
* Gets the root element of the DataTable
|
|
205
208
|
*/
|
|
@@ -297,6 +300,7 @@ class DataTablePaginationHelper {
|
|
|
297
300
|
constructor(dataTestId) {
|
|
298
301
|
this.dataTestId = dataTestId;
|
|
299
302
|
}
|
|
303
|
+
dataTestId;
|
|
300
304
|
/**
|
|
301
305
|
* Gets the root element of the DataTable
|
|
302
306
|
*/
|
|
@@ -430,6 +434,8 @@ class DataTableSortingHelper {
|
|
|
430
434
|
this.dataTestId = dataTestId;
|
|
431
435
|
this.rootHelper = rootHelper;
|
|
432
436
|
}
|
|
437
|
+
dataTestId;
|
|
438
|
+
rootHelper;
|
|
433
439
|
/**
|
|
434
440
|
* Gets the root element of the DataTable
|
|
435
441
|
*/
|
|
@@ -555,6 +561,7 @@ class DataTableInteractiveRowsHelper {
|
|
|
555
561
|
constructor(_rootHelper) {
|
|
556
562
|
this._rootHelper = _rootHelper;
|
|
557
563
|
}
|
|
564
|
+
_rootHelper;
|
|
558
565
|
/**
|
|
559
566
|
* Returns the id of the currently active row or null if no rows are selected.
|
|
560
567
|
*/
|
|
@@ -589,6 +596,7 @@ class DataTableDownloadHelper {
|
|
|
589
596
|
constructor(rootHelper) {
|
|
590
597
|
this.rootHelper = rootHelper;
|
|
591
598
|
}
|
|
599
|
+
rootHelper;
|
|
592
600
|
async getDownloadMenuTrigger() {
|
|
593
601
|
const menuToggle = await within(
|
|
594
602
|
this.rootHelper.element
|
|
@@ -641,6 +649,7 @@ class DataTableExpandableRowHelper {
|
|
|
641
649
|
constructor(rootHelper) {
|
|
642
650
|
this.rootHelper = rootHelper;
|
|
643
651
|
}
|
|
652
|
+
rootHelper;
|
|
644
653
|
getExpandedRowIds() {
|
|
645
654
|
const expandedRows = this.rootHelper.element.querySelectorAll(
|
|
646
655
|
'[role="row"][data-rowid$="-expanded"]'
|
|
@@ -712,6 +721,7 @@ class DataTableHelper {
|
|
|
712
721
|
this.download = new DataTableDownloadHelper(this);
|
|
713
722
|
this.expandableRows = new DataTableExpandableRowHelper(this);
|
|
714
723
|
}
|
|
724
|
+
dataTestId;
|
|
715
725
|
get tableElement() {
|
|
716
726
|
return within(this.element).getByRole("grid", { hidden: true });
|
|
717
727
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/jest/testing-helpers/tables/datatable.ts"],
|
|
4
4
|
"sourcesContent": ["import { act, fireEvent, screen, within } from '@testing-library/react';\nimport { PointerEventsCheckLevel } from '@testing-library/user-event';\n\nimport { setupUserEvent } from '../utils/setup-user-event.js';\n\n/** @public */\nexport class DataTableSubRowsHelper {\n constructor(private readonly rootHelper: DataTableHelper) {}\n\n private async getSubRowButton(rowId: string): Promise<HTMLButtonElement> {\n try {\n return within(this.rootHelper.element).getByLabelText<HTMLButtonElement>(\n 'subrow with id',\n {\n suggest: false,\n selector: `[data-rowid=\"${CSS.escape(rowId)}\"] button`,\n exact: false,\n },\n );\n } catch {\n throw new Error(`Unable to locate subrow expander with id \"${rowId}\"`);\n }\n }\n\n private get getToggleAllSubRowsButton(): HTMLElement {\n return within(this.rootHelper.element).getByLabelText(\n /Collapse all subrows|Expand all subrows/,\n );\n }\n\n /**\n * Return the expanded state of the passed subrow id.\n */\n async getSubRowStateById(rowId: string): Promise<boolean> {\n const subRowButton = await this.getSubRowButton(rowId);\n\n return subRowButton.getAttribute('aria-expanded') === 'true';\n }\n\n /**\n * Expands the given row identified by the passed rowId if it not yet expanded.\n */\n async expandRowById(rowId: string): Promise<void> {\n const subRowButton = await this.getSubRowButton(rowId);\n\n if (subRowButton.getAttribute('aria-expanded') === 'false') {\n const userEvent = setupUserEvent();\n await userEvent.click(subRowButton);\n }\n }\n\n /**\n * Collapses the given row identified by the passed rowId if not yet collapsed.\n */\n async collapseRowById(rowId: string): Promise<void> {\n const subRowButton = await this.getSubRowButton(rowId);\n\n if (subRowButton.getAttribute('aria-expanded') === 'true') {\n const userEvent = setupUserEvent();\n await userEvent.click(subRowButton);\n }\n }\n\n /**\n * Toggles the expanded state of a given row identified by the passed rowId if not yet collapsed.\n */\n async toggleSubRowById(rowId: string): Promise<void> {\n const subRowButton = await this.getSubRowButton(rowId);\n const userEvent = setupUserEvent();\n await userEvent.click(subRowButton);\n }\n\n /**\n * Expands/Collapses all sub rows in the table.\n */\n async toggleAllSubRows(): Promise<void> {\n const toggleAllButton = this.getToggleAllSubRowsButton;\n const userEvent = setupUserEvent();\n await userEvent.click(toggleAllButton);\n }\n}\n\n/** @public */\nexport class DataTableRowSelectionHelper {\n constructor(private readonly rootHelper: DataTableHelper) {}\n\n private async getCheckboxById(id: string): Promise<HTMLInputElement> {\n return await within(\n this.rootHelper.element,\n ).findByLabelText<HTMLInputElement>(\n `Toggle row selection for row with id \"${id}\".`,\n {\n suggest: false,\n selector: 'input',\n },\n );\n }\n\n private async getCheckboxSelectAll(): Promise<HTMLInputElement> {\n return await within(\n this.rootHelper.element,\n ).findByLabelText<HTMLInputElement>(\n // A partial of both options that could be in the aria label.\n /select all rows/i,\n {\n suggest: false,\n selector: 'input',\n },\n );\n }\n\n /**\n * Ticks the selection checkbox for a row if it is not yet selected.\n */\n async selectRowById(id: string): Promise<void> {\n const checkbox = await this.getCheckboxById(id);\n\n if (checkbox) {\n if (!checkbox.checked) {\n fireEvent.click(checkbox);\n }\n }\n }\n\n /**\n * Unselects the selection checkbox for a row if it is not selected.\n */\n async deselectRowById(id: string): Promise<void> {\n const checkbox = await this.getCheckboxById(id);\n\n if (checkbox) {\n if (checkbox.checked) {\n fireEvent.click(checkbox);\n }\n }\n }\n\n /**\n * Toggles selection on the row.\n */\n async toggleSelectionRowById(id: string): Promise<void> {\n const checkbox = await this.getCheckboxById(id);\n\n if (checkbox) {\n fireEvent.click(checkbox);\n }\n }\n\n /**\n * Toggles selection on the row with the Shift key pressed (batch selection).\n */\n async shiftToggleSelectionRowById(id: string): Promise<void> {\n const checkbox = await this.getCheckboxById(id);\n\n if (checkbox) {\n fireEvent.click(checkbox, { shiftKey: true });\n }\n }\n\n /**\n * Returns the selection state for the row with the given ID.\n */\n async getSelectionStateById(id: string): Promise<boolean | 'indeterminate'> {\n const checkbox = await this.getCheckboxById(id);\n return checkbox.indeterminate === true ? 'indeterminate' : checkbox.checked;\n }\n\n /**\n * Returns a selection state for the currently shown checkboxes (current page).\n * Hint: Elements might be virtualized or not shown on this page.\n */\n async getSelectionState(): Promise<\n Record<string, boolean | 'indeterminate'>\n > {\n const rows = await within(this.rootHelper.element).findAllByRole('row', {\n hidden: true,\n });\n const selectionState: Record<string, boolean | 'indeterminate'> = {};\n for (const row of rows) {\n const rowId = row.getAttribute('data-rowid');\n if (!rowId) {\n continue;\n }\n const checkbox = within(\n this.rootHelper.element,\n ).queryByLabelText<HTMLInputElement>(\n `Toggle row selection for row with id \"${rowId}\".`,\n {\n suggest: false,\n selector: 'input',\n },\n );\n if (!checkbox) {\n // not every row has a checkbox (e.g. expanded rows)\n continue;\n }\n selectionState[rowId] = checkbox.indeterminate\n ? 'indeterminate'\n : checkbox.checked;\n }\n return selectionState;\n }\n\n async isSelectAllDisabled(): Promise<boolean> {\n const checkbox = await this.getCheckboxSelectAll();\n const disabled = checkbox.getAttribute('aria-disabled');\n return disabled === 'true';\n }\n\n async getSelectAllState(): Promise<boolean | 'indeterminate'> {\n const checkbox = await this.getCheckboxSelectAll();\n const value = checkbox.getAttribute('aria-checked');\n\n if (value === 'true') {\n return true;\n } else if (value === 'false') {\n return false;\n } else if (value === 'mixed') {\n return 'indeterminate';\n }\n\n // Type assertion guard, as the aria-checked attribute has to be on the checkbox.\n throw new Error(\n 'Could not determine the state of the select all checkbox.',\n );\n }\n\n async toggleSelectAll(): Promise<void> {\n const checkbox = await this.getCheckboxSelectAll();\n fireEvent.click(checkbox);\n }\n}\n\n/** @public */\nexport class DataTableUserActionHelper {\n /**\n * Gets the root element of the DataTable\n */\n get element(): HTMLDivElement {\n return screen.getByTestId(this.dataTestId);\n }\n\n constructor(private readonly dataTestId: string) {}\n\n /**\n * Lets you call a HeaderAction registered on the DataTable\n */\n async activateHeaderAction(\n /** Provide the rendered header string or a RegExp that matches the header cell. */\n headerName: string | RegExp,\n /** Provide the rendered actionName string or a RegExp that matches the option. */\n actionName: string | RegExp,\n ) {\n const headerCells = await within(this.element).findAllByRole(\n 'columnheader',\n { hidden: true },\n );\n const headerCell = headerCells.find(\n (element) => element.textContent === headerName,\n );\n const headerCellRow = headerCell?.getAttribute('data-header-row');\n const headerCellColumn = headerCell?.getAttribute('data-column');\n const headerButton = document.querySelector(\n `[data-testid=\"${this.dataTestId}\"] button[data-trigger=\"useraction\"][data-header-row=\"${headerCellRow}\"][data-column=\"${headerCellColumn}\"]`,\n );\n\n if (!headerButton) {\n throw new Error(`Could not find header button for ${headerName}`);\n }\n\n fireEvent.click(headerButton);\n const menuItem = await screen.findByRole('menuitem', {\n hidden: true,\n name: actionName,\n });\n fireEvent.click(menuItem);\n }\n\n /**\n * Lets you call a CellAction registered on the DataTable\n */\n async activateCellAction(\n /** Provide the rendered header id string or a RegExp that matches the header cell. */\n headerName: string | RegExp,\n /** Zero based index for the row. */\n row: number,\n /** Provide the rendered actionName string or a RegExp that matches the option. */\n actionName: string | RegExp,\n ) {\n const userEvent = setupUserEvent({\n pointerEventsCheck: PointerEventsCheckLevel.Never,\n });\n const header = await within(this.element).findByRole('columnheader', {\n hidden: true,\n name: headerName,\n });\n\n const columnIndex = header.getAttribute('data-column');\n\n const cellActionTrigger = document.querySelector(\n `[data-testid=\"${this.dataTestId}\"] [data-row=\"${row}\"] [data-column=\"${columnIndex}\"]`,\n );\n\n if (cellActionTrigger) {\n await userEvent.pointer({\n keys: '[MouseRight]',\n target: cellActionTrigger,\n });\n\n const menuItem = await screen.findByRole('menuitem', {\n hidden: true,\n name: actionName,\n });\n await userEvent.click(menuItem);\n } else {\n throw new Error(\n `No cell action for ${headerName} (index: ${columnIndex}) / ${row} was found.`,\n );\n }\n }\n\n /**\n * Lets you call a RowAction registered on the DataTable\n */\n async activateRowAction(\n /** Zero based index for the row. */\n row: number,\n /** Provide the rendered actionName string or a RegExp that matches the option. */\n actionName: string | RegExp,\n ) {\n const userEvent = setupUserEvent({\n pointerEventsCheck: PointerEventsCheckLevel.Never,\n });\n const header = this.element.querySelector(\n '[role=\"columnheader\"][data-columnid=\"DataTableRowActions\"]',\n );\n\n if (!header) {\n throw new Error('No RowActions column was found.');\n }\n\n const columnIndex = header.getAttribute('data-column');\n const rowActionsCell = document.querySelector<HTMLElement>(\n `[data-testid=\"${this.dataTestId}\"] [data-row=\"${row}\"] [data-column=\"${columnIndex}\"]`,\n );\n if (rowActionsCell) {\n // Check if the row action is directly in the cell or hidden within the menu\n const directRowActionButton = await within(rowActionsCell).findByRole(\n 'button',\n { name: actionName },\n );\n await userEvent.click(directRowActionButton);\n } else {\n throw new Error(\n `No RowActions cell (column: ${columnIndex}) / ${row} was found.`,\n );\n }\n }\n}\n\n/** @public */\nexport class DataTablePaginationHelper {\n /**\n * Gets the root element of the DataTable\n */\n private get element(): HTMLDivElement {\n return screen.getByTestId(this.dataTestId);\n }\n\n private get paginationElement(): HTMLDivElement {\n return within(this.element).getByRole('navigation', { hidden: true });\n }\n\n private get pageSizeSelect(): HTMLDivElement {\n const inputElement = within(\n this.paginationElement,\n ).getByLabelText<HTMLInputElement>(/Select page size/, {\n suggest: false,\n });\n const triggerElement =\n inputElement.closest<HTMLDivElement>('[type=\"button\"]');\n if (triggerElement) {\n return triggerElement;\n }\n throw new Error('Trigger for the pageSizeSelect was not found.');\n }\n\n private get pageIndexSelect(): HTMLDivElement {\n const inputElement = within(\n this.paginationElement,\n ).getByLabelText<HTMLInputElement>(/Select current page/, {\n suggest: false,\n });\n const triggerElement =\n inputElement.closest<HTMLDivElement>('[type=\"button\"]');\n if (triggerElement) {\n return triggerElement;\n }\n throw new Error('Trigger for the pageIndexSelect was not found.');\n }\n\n constructor(private readonly dataTestId: string) {}\n\n /**\n * Allows you to set the pageSize via the select in the DataTable Pagination.\n * @param pageSize - Target pageSize the pagination should be set to.\n */\n async setPageSizeTo(pageSize: number) {\n await act(async () => {\n fireEvent.click(this.pageSizeSelect);\n });\n\n // Get the dropDownContext for the selection.\n\n const controlsInput = this.pageSizeSelect.querySelector('[aria-controls]');\n const controlsAria = controlsInput?.getAttribute('aria-controls');\n\n if (controlsAria) {\n const portalOutletElement = document.getElementById(controlsAria);\n\n if (portalOutletElement) {\n try {\n const selectedOption = within(portalOutletElement).getByRole(\n 'option',\n {\n name: `${pageSize}`,\n hidden: true,\n },\n );\n if (selectedOption.getAttribute('aria-selected') === 'true') {\n // The option that wants to be selected is already selected,\n // we can close the select again.\n const userEvent = setupUserEvent();\n await userEvent.keyboard('{Escape /}');\n return;\n }\n\n await act(async () => {\n fireEvent.click(selectedOption);\n });\n } catch (error) {\n throw new Error(error);\n }\n }\n }\n }\n\n /**\n * Allows you to set the pageIndex via the select in the DataTable Pagination.\n * @param pageIndex - pageIndex you want to navigate to. 0 based value\n */\n async setPageIndex(pageIndex: number) {\n act(() => {\n fireEvent.click(this.pageIndexSelect);\n });\n\n // Get the dropDownContext for the selection.\n\n const controlsInput = this.pageIndexSelect.querySelector('[aria-controls]');\n const controlsAria = controlsInput?.getAttribute('aria-controls');\n\n if (controlsAria) {\n const portalOutletElement = document.getElementById(controlsAria);\n\n if (portalOutletElement) {\n try {\n const selectedOption = within(portalOutletElement).getByRole(\n 'option',\n {\n name: `${pageIndex + 1}`,\n hidden: true,\n },\n );\n if (selectedOption.getAttribute('aria-selected') === 'true') {\n // The option that wants to be selected is already selected,\n // we can close the select again.\n const userEvent = setupUserEvent();\n await userEvent.keyboard('{Escape /}');\n return;\n }\n\n act(() => {\n fireEvent.click(selectedOption);\n });\n } catch (error) {\n throw new Error(error);\n }\n }\n }\n }\n\n /**\n * Allows you to go to the next page using the \"Next page\" button.\n */\n async goToNextPage() {\n const nextButton = screen.getByRole('button', { name: /Go to next page/ });\n const userEvent = setupUserEvent();\n await userEvent.click(nextButton);\n }\n\n /**\n * Allows you to go to the previous page using the \"Previous page\" button.\n */\n async goToPreviousPage() {\n const previousButton = screen.getByRole('button', {\n name: /Go to previous page/,\n });\n const userEvent = setupUserEvent();\n await userEvent.click(previousButton);\n }\n}\n\ntype CurrentSort = Awaited<\n ReturnType<DataTableSortingHelper['getSortingDirection']>\n>;\n\ntype TargetSort = 'ascending' | 'descending' | undefined;\n\ntype SortCombination = `from-${Exclude<\n CurrentSort,\n 'other' | null\n>}-to-${Exclude<TargetSort, undefined>}`;\n\nconst getSortCombination = (\n current: CurrentSort,\n target: TargetSort,\n): SortCombination | undefined => {\n if (!current || current === 'other' || !target) {\n return undefined;\n }\n\n return `from-${current}-to-${target}`;\n};\n\n/** @public */\nexport class DataTableSortingHelper {\n /**\n * Gets the root element of the DataTable\n */\n get element(): HTMLDivElement {\n return screen.getByTestId(this.dataTestId);\n }\n\n constructor(\n private readonly dataTestId: string,\n private readonly rootHelper: DataTableHelper,\n ) {}\n\n /**\n * Get a column header by header name\n */\n async getColumnHeader(headerName: string | RegExp) {\n return (await within(this.element).findByText(headerName)).closest(\n '[role=\"columnheader\"]',\n );\n }\n\n /**\n * Will return the current sorting direction of the column provided by the parameter.\n */\n async getSortingDirection(\n /** Provide the rendered header string or a RegExp that matches the header cell. */\n headerName: string | RegExp,\n ): Promise<'none' | 'ascending' | 'descending' | 'other' | null> {\n const header = await this.getColumnHeader(headerName);\n if (header) {\n return header.getAttribute('aria-sort') as\n | 'none'\n | 'ascending'\n | 'descending'\n | 'other';\n }\n\n return null;\n }\n\n /**\n * Will return the current `sortDescFirst` attribute of the column provided by the parameter.\n */\n async getSortDescFirst(\n /** Provide the rendered header string or a RegExp that matches the header cell. */\n headerName: string | RegExp,\n ): Promise<boolean> {\n const header = await this.getColumnHeader(headerName);\n\n if (header) {\n return (header as HTMLElement).dataset.sortDescFirst === 'true';\n }\n return false;\n }\n\n /**\n * Lets you sort the column.\n */\n async sortColumn(\n /**\n * Header name that should be sorted.\n */\n headerName: string | RegExp,\n options?: {\n /**\n * The sorting direction needs to be specified when the column has sorting triggers located inside the actions menu.\n */\n direction?: 'ascending' | 'descending';\n /**\n * Enables multi-sorting. The table will sort by the specified column in addition to the columns that are already sorted.\n */\n multiSorting?: boolean;\n },\n ) {\n const userEvent = setupUserEvent({\n pointerEventsCheck: PointerEventsCheckLevel.Never,\n });\n\n const header = await this.getColumnHeader(headerName);\n\n const [currentSortDirection, sortDescFirst] = await Promise.all([\n this.getSortingDirection(headerName),\n this.getSortDescFirst(headerName),\n ]);\n\n const columnIndex = header?.getAttribute('data-column') || null;\n const headerRowIndex = header?.getAttribute('data-header-row') || null;\n\n if (columnIndex === null || headerRowIndex === null) {\n return;\n }\n\n const headerButtonTrigger = document.querySelector<HTMLElement>(\n `[data-testid=\"${this.dataTestId}\"] [data-header-row=\"${headerRowIndex}\"][data-column=\"${columnIndex}\"]`,\n );\n\n const actionType = headerButtonTrigger\n ?.getAttribute('aria-label')\n ?.includes('sorting')\n ? 'sortButton'\n : 'headerAction';\n\n if (!headerButtonTrigger || !actionType) {\n return;\n }\n\n if (actionType === 'headerAction') {\n const actionName = `Sort ${options?.direction}`;\n await this.rootHelper.userActions.activateHeaderAction(\n headerName,\n actionName,\n );\n\n return;\n }\n\n if (options?.multiSorting) {\n await userEvent.keyboard('[ShiftLeft>]');\n }\n\n const combination = getSortCombination(\n currentSortDirection,\n options?.direction,\n );\n if (!combination) {\n // default behaviour in case no direction was provided.\n await userEvent.click(headerButtonTrigger);\n return;\n }\n\n if (sortDescFirst) {\n switch (combination) {\n case 'from-none-to-ascending': {\n await userEvent.click(headerButtonTrigger);\n await userEvent.click(headerButtonTrigger);\n return;\n }\n case 'from-none-to-descending': {\n await userEvent.click(headerButtonTrigger);\n return;\n }\n case 'from-ascending-to-descending': {\n await userEvent.click(headerButtonTrigger);\n await userEvent.click(headerButtonTrigger);\n return;\n }\n case 'from-descending-to-ascending': {\n await userEvent.click(headerButtonTrigger);\n return;\n }\n }\n }\n\n switch (combination) {\n case 'from-none-to-ascending': {\n await userEvent.click(headerButtonTrigger);\n return;\n }\n case 'from-none-to-descending': {\n await userEvent.click(headerButtonTrigger);\n await userEvent.click(headerButtonTrigger);\n return;\n }\n case 'from-ascending-to-descending': {\n await userEvent.click(headerButtonTrigger);\n return;\n }\n case 'from-descending-to-ascending': {\n await userEvent.click(headerButtonTrigger);\n await userEvent.click(headerButtonTrigger);\n return;\n }\n }\n }\n}\n\n/** @public */\nexport class DataTableInteractiveRowsHelper {\n constructor(private readonly _rootHelper: DataTableHelper) {}\n\n /**\n * Returns the id of the currently active row or null if no rows are selected.\n */\n async getActivatedRowId(): Promise<string | null> {\n const activatedRow = await within(\n this._rootHelper.element,\n ).queryByLabelText(/Deactivate row with id/i, {\n selector: '[data-trigger=\"interactive-row\"]',\n });\n\n if (activatedRow) {\n return activatedRow.getAttribute('data-rowid') ?? null;\n }\n return null;\n }\n\n /**\n * Toggles the row identified by the given rowId as active.\n */\n async toggleActiveRow(rowId: string): Promise<void> {\n const activatedRow = await within(this._rootHelper.element).findByLabelText(\n /(Activate|Deactivate) row with id/i,\n {\n selector: `[data-rowid=\"${CSS.escape(\n rowId,\n )}\"][data-trigger=\"interactive-row\"]`,\n },\n );\n const userEvent = setupUserEvent();\n await userEvent.click(activatedRow);\n }\n}\n\n/** @public */\nexport class DataTableDownloadHelper {\n constructor(private readonly rootHelper: DataTableHelper) {}\n\n private async getDownloadMenuTrigger(): Promise<HTMLButtonElement> {\n const menuToggle = await within(\n this.rootHelper.element,\n ).getByLabelText<HTMLButtonElement>(/Download table data/, {\n suggest: false,\n selector: 'button',\n });\n\n return menuToggle;\n }\n\n private async openDownloadMenu(): Promise<void> {\n const isMenuOpen = await this.isMenuOpen();\n if (!isMenuOpen) {\n const trigger = await this.getDownloadMenuTrigger();\n fireEvent.click(trigger);\n }\n }\n\n private async isMenuOpen(): Promise<boolean> {\n const trigger = await this.getDownloadMenuTrigger();\n return trigger.getAttribute('aria-expanded') === 'true';\n }\n\n private async getMenuItem(name: string | RegExp): Promise<HTMLElement> {\n return screen.getByRole('menuitem', { suggest: false, hidden: true, name });\n }\n\n /**\n * Activates the _download all_ item in the DataTable.Toolbar menu.\n */\n async downloadAllCSV() {\n await this.openDownloadMenu();\n\n const downloadAll = await this.getMenuItem(/All/);\n fireEvent.click(downloadAll);\n }\n\n /**\n * Activates the _download current page_ item in the DataTable.Toolbar menu.\n */\n async downloadPageCSV() {\n await this.openDownloadMenu();\n\n const downloadPage = await this.getMenuItem(/Current page/);\n fireEvent.click(downloadPage);\n }\n\n /**\n * Activates the _download selected_ item in the DataTable.Toolbar menu.\n */\n async downloadSelectedRowsCSV() {\n await this.openDownloadMenu();\n\n const downloadSelected = await this.getMenuItem(/Selected rows/);\n fireEvent.click(downloadSelected);\n }\n}\n\n/** @public */\nexport class DataTableExpandableRowHelper {\n constructor(private readonly rootHelper: DataTableHelper) {}\n\n getExpandedRowIds(): Array<string> {\n const expandedRows =\n this.rootHelper.element.querySelectorAll<HTMLDivElement>(\n '[role=\"row\"][data-rowid$=\"-expanded\"]',\n );\n const result: Array<string> = [];\n for (const expandedRow of Array.from(expandedRows)) {\n const { rowid } = expandedRow.dataset;\n if (rowid) {\n result.push(rowid.replace('-expanded', ''));\n }\n }\n return result;\n }\n\n async expandRowById(rowId: string): Promise<void> {\n const rowDetailsTrigger = await within(\n this.rootHelper.element,\n ).findByLabelText(/Expand row with id/, {\n suggest: false,\n exact: false,\n selector: `[data-rowid=\"${CSS.escape(rowId)}\"] button`,\n });\n if (rowDetailsTrigger) {\n const expanded = rowDetailsTrigger.getAttribute('aria-expanded');\n if (expanded === 'false') {\n const userEvent = setupUserEvent();\n await userEvent.click(rowDetailsTrigger);\n }\n }\n }\n\n async collapseRowById(rowId: string): Promise<void> {\n const rowDetailsTrigger = await within(\n this.rootHelper.element,\n ).findByLabelText(/Collapse row with id/, {\n suggest: false,\n exact: false,\n selector: `[data-rowid=\"${CSS.escape(rowId)}\"] button`,\n });\n if (rowDetailsTrigger) {\n const expanded = rowDetailsTrigger.getAttribute('aria-expanded');\n if (expanded === 'true') {\n const userEvent = setupUserEvent();\n await userEvent.click(rowDetailsTrigger);\n }\n }\n }\n\n async toggleRowById(rowId: string): Promise<void> {\n const rowDetailsTrigger = await within(\n this.rootHelper.element,\n ).findByLabelText(/(Expand|Collapse) row with id/, {\n suggest: false,\n exact: false,\n selector: `[data-rowid=\"${CSS.escape(rowId)}\"] button`,\n });\n if (rowDetailsTrigger) {\n const userEvent = setupUserEvent();\n await userEvent.click(rowDetailsTrigger);\n }\n }\n}\n\n/** @public */\nexport class DataTableHelper {\n private get tableElement(): HTMLDivElement {\n return within(this.element).getByRole('grid', { hidden: true });\n }\n\n private getHeaderRow(index: number): Array<HTMLDivElement> {\n const headerCells = this.tableElement.querySelectorAll<HTMLDivElement>(\n `[role=\"columnheader\"][data-header-row=\"${index}\"]`,\n );\n return Array.from(headerCells);\n }\n\n private getAllCellsInBodyRow(index: number): Array<HTMLDivElement> {\n const rowCells = this.tableElement.querySelectorAll<HTMLDivElement>(\n `[data-rowgroup=\"body\"] [data-row=\"${index}\"] [role=\"cell\"]`,\n );\n return Array.from(rowCells);\n }\n\n userActions: DataTableUserActionHelper;\n pagination: DataTablePaginationHelper;\n sorting: DataTableSortingHelper;\n rowSelection: DataTableRowSelectionHelper;\n subRows: DataTableSubRowsHelper;\n interactiveRows: DataTableInteractiveRowsHelper;\n download: DataTableDownloadHelper;\n expandableRows: DataTableExpandableRowHelper;\n\n constructor(private readonly dataTestId: string) {\n this.userActions = new DataTableUserActionHelper(dataTestId);\n this.pagination = new DataTablePaginationHelper(dataTestId);\n this.sorting = new DataTableSortingHelper(dataTestId, this);\n this.rowSelection = new DataTableRowSelectionHelper(this);\n this.subRows = new DataTableSubRowsHelper(this);\n this.interactiveRows = new DataTableInteractiveRowsHelper(this);\n this.download = new DataTableDownloadHelper(this);\n this.expandableRows = new DataTableExpandableRowHelper(this);\n }\n\n /**\n * Gets the root element of the DataTable\n */\n get element(): HTMLDivElement {\n return screen.getByTestId(this.dataTestId);\n }\n\n get headerRowCount(): number {\n const headerCells = this.tableElement.querySelectorAll<HTMLDivElement>(\n '[role=\"columnheader\"]',\n );\n const uniqueRows = new Set<string>();\n for (const headerCell of Array.from(headerCells)) {\n const headerRowAttr = headerCell.dataset.headerRow;\n if (headerRowAttr) {\n uniqueRows.add(headerRowAttr);\n }\n }\n\n return uniqueRows.size;\n }\n\n getHeaderRowContent(index: number): Array<string | null> {\n return this.getHeaderRow(index).map((element) => element.textContent);\n }\n\n getRowContent(index: number): Array<string | null> {\n return this.getAllCellsInBodyRow(index).map(\n (element) => element.textContent,\n );\n }\n\n get rowCount(): number {\n const rows = this.tableElement.querySelectorAll<HTMLDivElement>(\n '[data-rowgroup=\"body\"] [role=\"row\"]:not([data-rowid*=\"expanded\"])',\n );\n return rows.length;\n }\n}\n\n/** @public */\nexport function getDataTableHelper(testid: string) {\n return new DataTableHelper(testid);\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -32,6 +32,7 @@ class FilterFieldPinnedAndRecentSuggestionBase {
|
|
|
32
32
|
constructor(suggestionRoot) {
|
|
33
33
|
this.suggestionRoot = suggestionRoot;
|
|
34
34
|
}
|
|
35
|
+
suggestionRoot;
|
|
35
36
|
get pinButtonElement() {
|
|
36
37
|
return this.suggestionRoot.querySelector(
|
|
37
38
|
"button[aria-checked]"
|
|
@@ -129,6 +130,7 @@ class FilterFieldHelper {
|
|
|
129
130
|
constructor(dataTestId) {
|
|
130
131
|
this.dataTestId = dataTestId;
|
|
131
132
|
}
|
|
133
|
+
dataTestId;
|
|
132
134
|
get filterFieldWrapper() {
|
|
133
135
|
return import_react.screen.getByTestId(this.dataTestId);
|
|
134
136
|
}
|
|
@@ -36,6 +36,7 @@ class DataTableSubRowsHelper {
|
|
|
36
36
|
constructor(rootHelper) {
|
|
37
37
|
this.rootHelper = rootHelper;
|
|
38
38
|
}
|
|
39
|
+
rootHelper;
|
|
39
40
|
async getSubRowButton(rowId) {
|
|
40
41
|
try {
|
|
41
42
|
return (0, import_react.within)(this.rootHelper.element).getByLabelText(
|
|
@@ -103,6 +104,7 @@ class DataTableRowSelectionHelper {
|
|
|
103
104
|
constructor(rootHelper) {
|
|
104
105
|
this.rootHelper = rootHelper;
|
|
105
106
|
}
|
|
107
|
+
rootHelper;
|
|
106
108
|
async getCheckboxById(id) {
|
|
107
109
|
return await (0, import_react.within)(
|
|
108
110
|
this.rootHelper.element
|
|
@@ -231,6 +233,7 @@ class DataTableUserActionHelper {
|
|
|
231
233
|
constructor(dataTestId) {
|
|
232
234
|
this.dataTestId = dataTestId;
|
|
233
235
|
}
|
|
236
|
+
dataTestId;
|
|
234
237
|
/**
|
|
235
238
|
* Gets the root element of the DataTable
|
|
236
239
|
*/
|
|
@@ -328,6 +331,7 @@ class DataTablePaginationHelper {
|
|
|
328
331
|
constructor(dataTestId) {
|
|
329
332
|
this.dataTestId = dataTestId;
|
|
330
333
|
}
|
|
334
|
+
dataTestId;
|
|
331
335
|
/**
|
|
332
336
|
* Gets the root element of the DataTable
|
|
333
337
|
*/
|
|
@@ -461,6 +465,8 @@ class DataTableSortingHelper {
|
|
|
461
465
|
this.dataTestId = dataTestId;
|
|
462
466
|
this.rootHelper = rootHelper;
|
|
463
467
|
}
|
|
468
|
+
dataTestId;
|
|
469
|
+
rootHelper;
|
|
464
470
|
/**
|
|
465
471
|
* Gets the root element of the DataTable
|
|
466
472
|
*/
|
|
@@ -586,6 +592,7 @@ class DataTableInteractiveRowsHelper {
|
|
|
586
592
|
constructor(_rootHelper) {
|
|
587
593
|
this._rootHelper = _rootHelper;
|
|
588
594
|
}
|
|
595
|
+
_rootHelper;
|
|
589
596
|
/**
|
|
590
597
|
* Returns the id of the currently active row or null if no rows are selected.
|
|
591
598
|
*/
|
|
@@ -620,6 +627,7 @@ class DataTableDownloadHelper {
|
|
|
620
627
|
constructor(rootHelper) {
|
|
621
628
|
this.rootHelper = rootHelper;
|
|
622
629
|
}
|
|
630
|
+
rootHelper;
|
|
623
631
|
async getDownloadMenuTrigger() {
|
|
624
632
|
const menuToggle = await (0, import_react.within)(
|
|
625
633
|
this.rootHelper.element
|
|
@@ -672,6 +680,7 @@ class DataTableExpandableRowHelper {
|
|
|
672
680
|
constructor(rootHelper) {
|
|
673
681
|
this.rootHelper = rootHelper;
|
|
674
682
|
}
|
|
683
|
+
rootHelper;
|
|
675
684
|
getExpandedRowIds() {
|
|
676
685
|
const expandedRows = this.rootHelper.element.querySelectorAll(
|
|
677
686
|
'[role="row"][data-rowid$="-expanded"]'
|
|
@@ -743,6 +752,7 @@ class DataTableHelper {
|
|
|
743
752
|
this.download = new DataTableDownloadHelper(this);
|
|
744
753
|
this.expandableRows = new DataTableExpandableRowHelper(this);
|
|
745
754
|
}
|
|
755
|
+
dataTestId;
|
|
746
756
|
get tableElement() {
|
|
747
757
|
return (0, import_react.within)(this.element).getByRole("grid", { hidden: true });
|
|
748
758
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynatrace/strato-components-testing",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.8.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"types": "./index.d.ts",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
|
-
"@dynatrace/strato-components": "^3.
|
|
40
|
+
"@dynatrace/strato-components": "^3.8.0",
|
|
41
41
|
"@testing-library/react": "^16.0.0",
|
|
42
42
|
"@testing-library/user-event": "^14.0.0",
|
|
43
43
|
"framer-motion": "^11.3.19 || ^12.0.0",
|