diff --git a/.eslintrc.js b/.eslintrc.js
index 6974c0a40b8..e4f2509671a 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -16,6 +16,7 @@ module.exports = {
],
extends: [
"eslint:recommended",
+ "plugin:testing-library/react",
"plugin:@typescript-eslint/recommended-requiring-type-checking",
"plugin:@typescript-eslint/recommended",
"plugin:import/recommended",
@@ -58,6 +59,13 @@ module.exports = {
"unused-imports/no-unused-imports": OFF, // look below
"no-autofix/unused-imports/no-unused-imports": ERR,
+ /**
+ * Rules for tests see https://github.com/testing-library/eslint-plugin-testing-library#supported-rules for details
+ * on default enabled rules or to remove rules.
+ */
+
+ "testing-library/no-global-regexp-flag-in-query": OFF,
+
/**
* Warnings
*/
@@ -143,5 +151,9 @@ module.exports = {
"@typescript-eslint/no-non-null-assertion": OFF,
},
},
+ {
+ files: ["**/__tests__/**/*.[jt]s?(x)", "**/?(*.)+(spec|test).[jt]s?(x)"],
+ extends: ["plugin:testing-library/react"],
+ },
],
}
diff --git a/package.json b/package.json
index 63870722a8c..091d45787d1 100644
--- a/package.json
+++ b/package.json
@@ -294,7 +294,7 @@
"eslint-plugin-prettier": "4.2.1",
"eslint-plugin-react": "7.32.1",
"eslint-plugin-react-hooks": "4.6.0",
- "eslint-plugin-testing-library": "5.9.1",
+ "eslint-plugin-testing-library": "6.2.0",
"eslint-plugin-unused-imports": "2.0.0",
"graphql": "16.8.1",
"graphql-request": "5.1.0",
diff --git a/src/app/Scenes/MyCollection/Screens/Artwork/Components/Field.tests.tsx b/src/app/Scenes/MyCollection/Screens/Artwork/Components/Field.tests.tsx
index 8c425e35a0a..0cbe5e072f4 100644
--- a/src/app/Scenes/MyCollection/Screens/Artwork/Components/Field.tests.tsx
+++ b/src/app/Scenes/MyCollection/Screens/Artwork/Components/Field.tests.tsx
@@ -1,47 +1,44 @@
-import { fireEvent, waitFor } from "@testing-library/react-native"
+import { fireEvent, screen } from "@testing-library/react-native"
import { Field } from "app/Scenes/MyCollection/Screens/Artwork/Components/Field"
import { renderWithWrappers } from "app/utils/tests/renderWithWrappers"
describe("Field", () => {
it("Value is truncated when truncateLimit is set", () => {
- const { queryByText } = renderWithWrappers(
-
- )
- expect(queryByText(longText)).toBeNull()
+ renderWithWrappers()
- expect(queryByText("Lorem")).not.toBeNull()
+ expect(screen.queryByText(longText)).not.toBeOnTheScreen()
+ expect(screen.getByText("Lorem")).toBeOnTheScreen()
})
it("Value is NOT truncated when truncateLimit is not given", () => {
- const { queryByText } = renderWithWrappers()
- expect(queryByText(longText)).not.toBeNull()
+ renderWithWrappers()
+
+ expect(screen.getByText(longText)).toBeOnTheScreen()
})
- it("Read More button is only present if value can be expanded", () => {
- const { queryByText: queryByTextOne } = renderWithWrappers(
-
- )
- expect(queryByTextOne("Read More")).toBeNull()
+ describe("Read More button is only present if value can be expanded", () => {
+ it("Read More button is not present if truncateLimit is not given", () => {
+ renderWithWrappers()
+ expect(screen.queryByText("Read More")).not.toBeOnTheScreen()
+ })
- const { queryByText: queryByTextTwo } = renderWithWrappers(
-
- )
- expect(queryByTextTwo("Read More")).not.toBeNull()
+ it("Read More button is not present if truncateLimit is given", () => {
+ renderWithWrappers(
+
+ )
+ expect(screen.getByText("Read More")).toBeOnTheScreen()
+ })
})
it('Pressing "Read More" expands the text value', async () => {
- const { findByTestId, queryByText } = renderWithWrappers(
-
- )
+ renderWithWrappers()
- expect(queryByText(longText)).toBeNull()
+ expect(screen.queryByText(longText)).not.toBeOnTheScreen()
- const button = await findByTestId("ReadMoreButton")
+ const button = screen.getByTestId("ReadMoreButton")
- waitFor(() => {
- fireEvent.press(button)
- expect(queryByText(longText)).not.toBeNull()
- })
+ fireEvent.press(button)
+ expect(screen.getByText(longText)).toBeOnTheScreen()
})
})
diff --git a/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterAdditionalGeneIDs.tests.tsx b/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterAdditionalGeneIDs.tests.tsx
index c104c8a31d4..13282f8cb01 100644
--- a/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterAdditionalGeneIDs.tests.tsx
+++ b/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterAdditionalGeneIDs.tests.tsx
@@ -1,5 +1,5 @@
import { OwnerType } from "@artsy/cohesion"
-import { fireEvent, waitFor } from "@testing-library/react-native"
+import { fireEvent, screen } from "@testing-library/react-native"
import { SavedSearchFilterAdditionalGeneIDs } from "app/Scenes/SavedSearchAlert/Components/SavedSearchFilterAdditionalGeneIDs"
import {
SavedSearchModel,
@@ -13,22 +13,22 @@ const black100Hex = "#000000"
describe("SavedSearchFilterAdditionalGeneIDs", () => {
it("shows all available categories unselected", () => {
- const { getByText } = renderWithWrappers(
+ renderWithWrappers(
)
gravityArtworkMediumCategories.slice(0, 7).forEach((option) => {
- expect(getByText(option.label)).toBeDefined()
- expect(getByText(option.label)).toHaveStyle({
+ expect(screen.getByText(option.label)).toBeOnTheScreen()
+ expect(screen.getByText(option.label)).toHaveStyle({
color: black100Hex,
})
})
})
it("shows the right selected categories", () => {
- const { getByText } = renderWithWrappers(
+ renderWithWrappers(
@@ -38,10 +38,10 @@ describe("SavedSearchFilterAdditionalGeneIDs", () => {
gravityArtworkMediumCategories.slice(0, 7).forEach((option) => {
if (option.value === "painting") {
- expect(getByText("Painting")).not.toHaveStyle({ color: black100Hex })
+ expect(screen.getByText("Painting")).not.toHaveStyle({ color: black100Hex })
} else {
- expect(getByText(option.label)).toBeDefined()
- expect(getByText(option.label)).toHaveStyle({
+ expect(screen.getByText(option.label)).toBeOnTheScreen()
+ expect(screen.getByText(option.label)).toHaveStyle({
color: black100Hex,
})
}
@@ -49,23 +49,21 @@ describe("SavedSearchFilterAdditionalGeneIDs", () => {
})
it("Updates selected categories filters on press", () => {
- const { getByText } = renderWithWrappers(
+ renderWithWrappers(
)
- expect(getByText("Work on Paper")).toHaveStyle({ color: black100Hex })
+ expect(screen.getByText("Work on Paper")).toHaveStyle({ color: black100Hex })
- fireEvent(getByText("Work on Paper"), "onPress")
+ fireEvent(screen.getByText("Work on Paper"), "onPress")
- waitFor(() => {
- expect(getByText("Work on Paper")).not.toHaveStyle({ color: black100Hex })
- })
+ expect(screen.getByText("Work on Paper")).not.toHaveStyle({ color: black100Hex })
})
it("Shows all categories if the user has already selected mediums", () => {
- const { getByText } = renderWithWrappers(
+ renderWithWrappers(
{
)
gravityArtworkMediumCategories.forEach((option) => {
- expect(getByText(option.label)).toBeDefined()
+ expect(screen.getByText(option.label)).toBeDefined()
})
})
})
diff --git a/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterColor.tests.tsx b/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterColor.tests.tsx
index da1354604b6..f1427025e88 100644
--- a/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterColor.tests.tsx
+++ b/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterColor.tests.tsx
@@ -1,5 +1,5 @@
import { OwnerType } from "@artsy/cohesion"
-import { fireEvent, waitFor } from "@testing-library/react-native"
+import { fireEvent } from "@testing-library/react-native"
import {
COLORS_INDEXED_BY_VALUE,
COLOR_OPTIONS,
@@ -56,9 +56,7 @@ describe("SavedSearchFilterColor", () => {
fireEvent(getByText("Red"), "onPress")
- waitFor(() => {
- expect(getByTestId("check-icon-Red")).toBeDefined()
- })
+ expect(getByTestId("check-icon-Red")).toBeDefined()
})
})
diff --git a/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterPriceRange.tests.tsx b/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterPriceRange.tests.tsx
index 7aa3b24af58..2392e43dd23 100644
--- a/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterPriceRange.tests.tsx
+++ b/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterPriceRange.tests.tsx
@@ -1,5 +1,5 @@
import { OwnerType } from "@artsy/cohesion"
-import { fireEvent, waitFor } from "@testing-library/react-native"
+import { fireEvent, screen, waitForElementToBeRemoved } from "@testing-library/react-native"
import { SavedSearchFilterPriceRangeQR } from "app/Scenes/SavedSearchAlert/Components/SavedSearchFilterPriceRange"
import {
SavedSearchModel,
@@ -9,7 +9,7 @@ import {
import { setupTestWrapper } from "app/utils/tests/setupTestWrapper"
describe("SavedSearchFilterPriceRange", () => {
- it("shows the right price range when available", () => {
+ it("shows the right price range when available", async () => {
const { renderWithRelay } = setupTestWrapper({
Component: () => (
@@ -18,17 +18,17 @@ describe("SavedSearchFilterPriceRange", () => {
),
})
- const { getByText } = renderWithRelay({
+ renderWithRelay({
Artist: () => ({
internalID: "artistID",
name: "Banksy",
}),
})
- waitFor(() => {
- expect(getByText("200")).toBeDefined()
- expect(getByText("3000")).toBeDefined()
- })
+ await waitForElementToBeRemoved(() => screen.getByTestId("loading-skeleton"))
+
+ expect(screen.getByLabelText("Minimum Price Range Input")).toHaveProp("value", "200")
+ expect(screen.getByLabelText("Maximum Price Range Input")).toHaveProp("value", "3000")
})
it("Updates the price range appropriately", async () => {
@@ -40,23 +40,23 @@ describe("SavedSearchFilterPriceRange", () => {
),
})
- const { getByTestId, getByText } = renderWithRelay({
+ renderWithRelay({
Artist: () => ({
internalID: "artistID",
name: "Banksy",
}),
})
- waitFor(() => {
- expect(getByText("200")).toBeDefined()
- expect(getByText("3000")).toBeDefined()
+ await waitForElementToBeRemoved(() => screen.getByTestId("loading-skeleton"))
- fireEvent.changeText(getByTestId("price-min-input"), "300")
- fireEvent.changeText(getByTestId("price-max-input"), "5000")
+ expect(screen.getByLabelText("Minimum Price Range Input")).toHaveProp("value", "200")
+ expect(screen.getByLabelText("Maximum Price Range Input")).toHaveProp("value", "3000")
- expect(getByText("300")).toBeDefined()
- expect(getByText("5000")).toBeDefined()
- })
+ fireEvent.changeText(screen.getByTestId("price-min-input"), "300")
+ fireEvent.changeText(screen.getByTestId("price-max-input"), "5000")
+
+ expect(screen.getByLabelText("Minimum Price Range Input")).toHaveProp("value", "300")
+ expect(screen.getByLabelText("Maximum Price Range Input")).toHaveProp("value", "5000")
})
})
diff --git a/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterRarity.tests.tsx b/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterRarity.tests.tsx
index b665271bc26..3677a58dc37 100644
--- a/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterRarity.tests.tsx
+++ b/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterRarity.tests.tsx
@@ -1,5 +1,5 @@
import { OwnerType } from "@artsy/cohesion"
-import { fireEvent, waitFor } from "@testing-library/react-native"
+import { fireEvent } from "@testing-library/react-native"
import { KNOWN_ATTRIBUTION_CLASS_OPTIONS } from "app/Components/ArtworkFilter/Filters/AttributionClassOptions"
import { SavedSearchFilterRarity } from "app/Scenes/SavedSearchAlert/Components/SavedSearchFilterRarity"
import {
@@ -41,20 +41,16 @@ describe("SavedSearchFilterRarity", () => {
expect(getByText("Open Edition")).toHaveStyle({ color: black100Hex })
})
- it("Updates selected filters on press", () => {
+ it("Updates selected filters on press", async () => {
const { getByText } = renderWithWrappers(
)
- expect(getByText("Unique")).toHaveStyle({ color: black100Hex })
-
fireEvent(getByText("Unique"), "onPress")
- waitFor(() => {
- expect(getByText("Unique")).not.toHaveStyle({ color: black100Hex })
- })
+ expect(getByText("Unique")).not.toHaveStyle({ color: black100Hex })
})
})
diff --git a/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterWaysToBuy.tests.tsx b/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterWaysToBuy.tests.tsx
index 88433d9b757..10075278292 100644
--- a/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterWaysToBuy.tests.tsx
+++ b/src/app/Scenes/SavedSearchAlert/Components/SavedSearchFilterWaysToBuy.tests.tsx
@@ -1,5 +1,5 @@
import { OwnerType } from "@artsy/cohesion"
-import { fireEvent, waitFor } from "@testing-library/react-native"
+import { fireEvent } from "@testing-library/react-native"
import { WAYS_TO_BUY_OPTIONS } from "app/Components/ArtworkFilter/Filters/WaysToBuyOptions"
import { SavedSearchFilterWaysToBuy } from "app/Scenes/SavedSearchAlert/Components/SavedSearchFilterWaysToBuy"
import {
@@ -58,9 +58,7 @@ describe("SavedSearchFilterWaysToBuy", () => {
fireEvent(getByText("Bid"), "onPress")
- waitFor(() => {
- expect(getByText("Bid")).not.toHaveStyle({ color: black100Hex })
- })
+ expect(getByText("Bid")).not.toHaveStyle({ color: black100Hex })
})
})
diff --git a/src/app/Scenes/SavedSearchAlert/SavedSearchAlertForm.tests.tsx b/src/app/Scenes/SavedSearchAlert/SavedSearchAlertForm.tests.tsx
index 97df7738b8a..5db20512174 100644
--- a/src/app/Scenes/SavedSearchAlert/SavedSearchAlertForm.tests.tsx
+++ b/src/app/Scenes/SavedSearchAlert/SavedSearchAlertForm.tests.tsx
@@ -1,5 +1,5 @@
import { OwnerType } from "@artsy/cohesion"
-import { fireEvent, waitFor, waitForElementToBeRemoved } from "@testing-library/react-native"
+import { fireEvent, screen, waitFor } from "@testing-library/react-native"
import { Aggregations } from "app/Components/ArtworkFilter/ArtworkFilterHelpers"
import {
SavedSearchEntity,
@@ -542,7 +542,7 @@ describe("SavedSearchAlertForm", () => {
expect(getByText("Prints")).toBeTruthy()
})
- it("should have removable filter pills", () => {
+ it("should have removable filter pills", async () => {
const { getByText } = renderWithWrappers()
// artist pill should appear and not be removable
expect(getByText("artistName")).toBeTruthy()
@@ -551,8 +551,8 @@ describe("SavedSearchAlertForm", () => {
fireEvent.press(getByText("Prints"))
fireEvent.press(getByText("Photography"))
- waitForElementToBeRemoved(() => getByText("Prints"))
- waitForElementToBeRemoved(() => getByText("Photography"))
+ expect(screen.queryByText("Prints")).not.toBeOnTheScreen()
+ expect(screen.queryByText("Photography")).not.toBeOnTheScreen()
})
})
diff --git a/src/app/Scenes/SavedSearchAlert/screens/SavedSearchFilterScreen.tests.tsx b/src/app/Scenes/SavedSearchAlert/screens/SavedSearchFilterScreen.tests.tsx
index 6527ffad5a1..0bf473a177a 100644
--- a/src/app/Scenes/SavedSearchAlert/screens/SavedSearchFilterScreen.tests.tsx
+++ b/src/app/Scenes/SavedSearchAlert/screens/SavedSearchFilterScreen.tests.tsx
@@ -1,5 +1,5 @@
import { OwnerType } from "@artsy/cohesion"
-import { fireEvent, waitFor } from "@testing-library/react-native"
+import { fireEvent, screen } from "@testing-library/react-native"
import {
SavedSearchModel,
SavedSearchStoreProvider,
@@ -12,22 +12,30 @@ import { Alert } from "react-native"
jest.spyOn(Alert, "alert")
describe("ClearAllButton", () => {
- it("Is enabled when there are active filters", () => {
- const { getByText } = renderWithWrappers(
+ beforeEach(() => {
+ ;(Alert.alert as jest.Mock).mockClear()
+ })
+
+ afterEach(() => {
+ jest.clearAllMocks()
+ })
+
+ it("Is enabled when there are active filters", async () => {
+ renderWithWrappers(
)
- fireEvent(getByText("Clear All"), "onPress")
+ expect(screen.getByText("Clear All")).toHaveAccessibilityState({ disabled: false })
+
+ fireEvent(screen.getByText("Clear All"), "onPress")
- waitFor(() => {
- expect(Alert.alert).toHaveBeenCalled()
- })
+ expect(Alert.alert).toHaveBeenCalled()
})
it("Is disabled on load", async () => {
- const { getByText } = renderWithWrappers(
+ renderWithWrappers(
{
)
- fireEvent(getByText("Clear All"), "onPress")
+ fireEvent(screen.getByText("Clear All"), "onPress")
- waitFor(() => {
- expect(Alert.alert).not.toHaveBeenCalled()
- })
+ expect(Alert.alert).not.toHaveBeenCalled()
})
it("Is disabled when array attrbutes are empty", async () => {
- const { getByText } = renderWithWrappers(
+ renderWithWrappers(
{
)
- fireEvent(getByText("Clear All"), "onPress")
+ fireEvent(screen.getByText("Clear All"), "onPress")
- waitFor(() => {
- expect(Alert.alert).not.toHaveBeenCalled()
- })
+ expect(Alert.alert).not.toHaveBeenCalled()
})
})
const initialData: SavedSearchModel = {
...savedSearchModel,
- attributes: {},
+ attributes: {
+ inquireableOnly: true,
+ offerable: true,
+ },
entity: {
artists: [{ id: "artistID", name: "Banksy" }],
owner: {
diff --git a/src/app/Scenes/SavedSearchAlert/screens/SavedSearchFilterScreen.tsx b/src/app/Scenes/SavedSearchAlert/screens/SavedSearchFilterScreen.tsx
index dbb1db701c5..6ac59912c6f 100644
--- a/src/app/Scenes/SavedSearchAlert/screens/SavedSearchFilterScreen.tsx
+++ b/src/app/Scenes/SavedSearchAlert/screens/SavedSearchFilterScreen.tsx
@@ -114,7 +114,6 @@ export const ClearAllButton = () => {
}}
>
diff --git a/src/app/utils/tests/renderWithWrappers.tsx b/src/app/utils/tests/renderWithWrappers.tsx
index f660d2d61e5..92e8d813bc2 100644
--- a/src/app/utils/tests/renderWithWrappers.tsx
+++ b/src/app/utils/tests/renderWithWrappers.tsx
@@ -24,8 +24,7 @@ const componentWithWrappers = (component: ReactElement) => {
}
/**
- * @deprecated
- * Use `renderWithWrappers` instead.
+ * @deprecated Use `renderWithWrappers` instead.
*
* Renders a React Component with our page wrappers
* @param component
@@ -62,6 +61,8 @@ class PureWrapper extends Component {
/**
* Renders a React Component with our page wrappers
* by using @testing-library/react-native
+ * IMPORTANT: It is meant to be used for non-Relay components
+ *
* @param component
*/
export const renderWithWrappers = (component: ReactElement, wrapperProps?: WrappersProps) => {
@@ -76,6 +77,10 @@ export const renderWithWrappers = (component: ReactElement, wrapperProps?: Wrapp
}
}
+/**
+ * @deprecated Use `setupTestWrapper` instead.
+ *
+ */
export const renderWithHookWrappersTL = (
component: ReactElement,
environment: Environment = getRelayEnvironment()
diff --git a/yarn.lock b/yarn.lock
index 6362f54c0d5..95c505e2599 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5431,6 +5431,14 @@
"@typescript-eslint/types" "5.57.0"
"@typescript-eslint/visitor-keys" "5.57.0"
+"@typescript-eslint/scope-manager@5.62.0":
+ version "5.62.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c"
+ integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==
+ dependencies:
+ "@typescript-eslint/types" "5.62.0"
+ "@typescript-eslint/visitor-keys" "5.62.0"
+
"@typescript-eslint/type-utils@5.57.0":
version "5.57.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.57.0.tgz#98e7531c4e927855d45bd362de922a619b4319f2"
@@ -5456,6 +5464,11 @@
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.57.0.tgz#727bfa2b64c73a4376264379cf1f447998eaa132"
integrity sha512-mxsod+aZRSyLT+jiqHw1KK6xrANm19/+VFALVFP5qa/aiJnlP38qpyaTd0fEKhWvQk6YeNZ5LGwI1pDpBRBhtQ==
+"@typescript-eslint/types@5.62.0":
+ version "5.62.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f"
+ integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==
+
"@typescript-eslint/typescript-estree@5.48.2":
version "5.48.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz#6e206b462942b32383582a6c9251c05021cc21b0"
@@ -5495,6 +5508,19 @@
semver "^7.3.7"
tsutils "^3.21.0"
+"@typescript-eslint/typescript-estree@5.62.0":
+ version "5.62.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b"
+ integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==
+ dependencies:
+ "@typescript-eslint/types" "5.62.0"
+ "@typescript-eslint/visitor-keys" "5.62.0"
+ debug "^4.3.4"
+ globby "^11.1.0"
+ is-glob "^4.0.3"
+ semver "^7.3.7"
+ tsutils "^3.21.0"
+
"@typescript-eslint/utils@5.51.0":
version "5.51.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.51.0.tgz#074f4fabd5b12afe9c8aa6fdee881c050f8b4d47"
@@ -5523,7 +5549,7 @@
eslint-scope "^5.1.1"
semver "^7.3.7"
-"@typescript-eslint/utils@^5.10.0", "@typescript-eslint/utils@^5.13.0":
+"@typescript-eslint/utils@^5.10.0":
version "5.48.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.2.tgz#3777a91dcb22b8499a25519e06eef2e9569295a3"
integrity sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow==
@@ -5537,6 +5563,20 @@
eslint-utils "^3.0.0"
semver "^7.3.7"
+"@typescript-eslint/utils@^5.58.0":
+ version "5.62.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86"
+ integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.2.0"
+ "@types/json-schema" "^7.0.9"
+ "@types/semver" "^7.3.12"
+ "@typescript-eslint/scope-manager" "5.62.0"
+ "@typescript-eslint/types" "5.62.0"
+ "@typescript-eslint/typescript-estree" "5.62.0"
+ eslint-scope "^5.1.1"
+ semver "^7.3.7"
+
"@typescript-eslint/visitor-keys@5.48.2":
version "5.48.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz#c247582a0bcce467461d7b696513bf9455000060"
@@ -5561,6 +5601,14 @@
"@typescript-eslint/types" "5.57.0"
eslint-visitor-keys "^3.3.0"
+"@typescript-eslint/visitor-keys@5.62.0":
+ version "5.62.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e"
+ integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==
+ dependencies:
+ "@typescript-eslint/types" "5.62.0"
+ eslint-visitor-keys "^3.3.0"
+
"@xmldom/xmldom@^0.8.8":
version "0.8.10"
resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99"
@@ -8550,12 +8598,12 @@ eslint-plugin-react@7.32.1:
semver "^6.3.0"
string.prototype.matchall "^4.0.8"
-eslint-plugin-testing-library@5.9.1:
- version "5.9.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.9.1.tgz#12e4bd34c48683ee98af4df2e3318ec9f51dcf8a"
- integrity sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ==
+eslint-plugin-testing-library@6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-6.2.0.tgz#af3340b783c881eb19ec5ac6b3a4bfe8ab4a1f74"
+ integrity sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==
dependencies:
- "@typescript-eslint/utils" "^5.13.0"
+ "@typescript-eslint/utils" "^5.58.0"
eslint-plugin-unused-imports@2.0.0:
version "2.0.0"