From 152524c1e1284a1b7813875a5f84dd55d0e9b04a Mon Sep 17 00:00:00 2001 From: Max Eliseev Date: Thu, 24 Nov 2022 13:03:45 +0700 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D1=81=D0=B2=D0=B5=D0=B6=D0=B8=D0=B9=20tRP?= =?UTF-8?q?C,=20=D1=80=D0=BE=D1=83=D1=82=D0=B5=D1=80=20=D0=B8=20=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D0=BE=D0=B4=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D1=80=D0=B0=20=D0=B8=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D1=8B=20=D0=BA=20=D0=BD=D0=B8=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jest.config.js | 5 +- jest.resolver.cjs | 2 +- package-lock.json | 151 ++++++++++++++++++++++- package.json | 8 +- src/datasources/trpc.ts | 34 +++++ src/pages/_app.tsx | 3 +- src/pages/api/trpc/[trpc].ts | 9 ++ src/pages/example/greeting.tsx | 48 +++++++ src/server/context.ts | 16 +++ src/server/routers/greeting/index.ts | 9 ++ src/server/routers/greeting/name.test.ts | 35 ++++++ src/server/routers/greeting/name.ts | 21 ++++ src/server/routers/index.ts | 10 ++ src/server/trpc.ts | 8 ++ 14 files changed, 353 insertions(+), 6 deletions(-) create mode 100644 src/datasources/trpc.ts create mode 100644 src/pages/api/trpc/[trpc].ts create mode 100644 src/pages/example/greeting.tsx create mode 100644 src/server/context.ts create mode 100644 src/server/routers/greeting/index.ts create mode 100644 src/server/routers/greeting/name.test.ts create mode 100644 src/server/routers/greeting/name.ts create mode 100644 src/server/routers/index.ts create mode 100644 src/server/trpc.ts diff --git a/jest.config.js b/jest.config.js index 87ca726..253b03a 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,8 +1,9 @@ module.exports = { testEnvironment: "jsdom", testMatch: ["**/src/**/*.test.ts?(x)"], - resolver: "/jest.resolver.cjs", + moduleDirectories: ["node_modules", "src"], + modulePaths: ["/src"], transform: { - "^.+.tsx?$": ["ts-jest", {tsconfig: "/tsconfig.jest.json"}], + "^.+.tsx?$": ["ts-jest", {tsconfig: "/tsconfig.jest.json"}] } } diff --git a/jest.resolver.cjs b/jest.resolver.cjs index 629735c..c73d0df 100644 --- a/jest.resolver.cjs +++ b/jest.resolver.cjs @@ -10,4 +10,4 @@ module.exports = function (request, options) { } return resolver(options.basedir, request) -} \ No newline at end of file +} diff --git a/package-lock.json b/package-lock.json index ad2185c..046ab2b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,11 +11,17 @@ "license": "MIT", "dependencies": { "@gooditworks/monitoring": "1.5.4", + "@tanstack/react-query": "^4.16.1", + "@trpc/client": "^10.1.0", + "@trpc/next": "^10.1.0", + "@trpc/react-query": "^10.1.0", + "@trpc/server": "^10.1.0", "classnames": "2.3.2", "next": "13.0.4", "next-axiom": "0.15.1", "react": "18.2.0", - "react-dom": "18.2.0" + "react-dom": "18.2.0", + "zod": "^3.19.1" }, "devDependencies": { "@arkweid/lefthook": "0.7.7", @@ -2021,6 +2027,41 @@ "tslib": "^2.4.0" } }, + "node_modules/@tanstack/query-core": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.15.1.tgz", + "integrity": "sha512-+UfqJsNbPIVo0a9ANW0ZxtjiMfGLaaoIaL9vZeVycvmBuWywJGtSi7fgPVMCPdZQFOzMsaXaOsDtSKQD5xLRVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.16.1.tgz", + "integrity": "sha512-PDE9u49wSDykPazlCoLFevUpceLjQ0Mm8i6038HgtTEKb/aoVnUZdlUP7C392ds3Cd75+EGlHU7qpEX06R7d9Q==", + "dependencies": { + "@tanstack/query-core": "4.15.1", + "use-sync-external-store": "^1.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-native": "*" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, "node_modules/@testing-library/dom": { "version": "8.13.0", "dev": true, @@ -2073,6 +2114,48 @@ "node": ">= 10" } }, + "node_modules/@trpc/client": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@trpc/client/-/client-10.1.0.tgz", + "integrity": "sha512-E7L9l2OTa5lIdM0NYvQLJf/GLapskfiVLv0Jv7t6GVxEOFd+O4THWsWQgJVUUAz9iq805iMNkY3uqSvf4GJaWg==", + "peerDependencies": { + "@trpc/server": "10.1.0" + } + }, + "node_modules/@trpc/next": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@trpc/next/-/next-10.1.0.tgz", + "integrity": "sha512-bJ3zMbrSO+udhMi/8KZ1JY5VpXsucTOat08LdU5MPXzMFEQ+d0QehoM4PoZirO39batZfM0rmbCJ8w6P5hLCow==", + "dependencies": { + "react-ssr-prepass": "^1.5.0" + }, + "peerDependencies": { + "@tanstack/react-query": "^4.3.8", + "@trpc/client": "10.1.0", + "@trpc/react-query": "^10.0.0-proxy-beta.21", + "@trpc/server": "10.1.0", + "next": "*", + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@trpc/react-query": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@trpc/react-query/-/react-query-10.1.0.tgz", + "integrity": "sha512-Xjx3m73CDuBNrpAOF6scUQedYyp4LIxthwmdjw8Y+iR193XNwFTH+C8TZn5qOLVw9u/FM5YchAJjPPgUJyXBBQ==", + "peerDependencies": { + "@tanstack/react-query": "^4.3.8", + "@trpc/client": "10.1.0", + "@trpc/server": "10.1.0", + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@trpc/server": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@trpc/server/-/server-10.1.0.tgz", + "integrity": "sha512-UiRZPApLruhi1UKukTNsB9igFBEhEA0aMxy86Xp1OvbzuY00yoFcvDUYsBdBjp9mzIHR3yNjqrlfS/RNpPhZEw==" + }, "node_modules/@trysound/sax": { "version": "0.2.0", "dev": true, @@ -9877,6 +9960,14 @@ "dev": true, "license": "MIT" }, + "node_modules/react-ssr-prepass": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/react-ssr-prepass/-/react-ssr-prepass-1.5.0.tgz", + "integrity": "sha512-yFNHrlVEReVYKsLI5lF05tZoHveA5pGzjFbFJY/3pOqqjGOmMmqx83N4hIjN2n6E1AOa+eQEUxs3CgRnPmT0RQ==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/read-cache": { "version": "1.0.0", "dev": true, @@ -11766,6 +11857,14 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zod": { + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.19.1.tgz", + "integrity": "sha512-LYjZsEDhCdYET9ikFu6dVPGp2YH9DegXjdJToSzD9rO6fy4qiRYFoyEYwps88OseJlPyl2NOe2iJuhEhL7IpEA==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } }, "dependencies": { @@ -13134,6 +13233,20 @@ "tslib": "^2.4.0" } }, + "@tanstack/query-core": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.15.1.tgz", + "integrity": "sha512-+UfqJsNbPIVo0a9ANW0ZxtjiMfGLaaoIaL9vZeVycvmBuWywJGtSi7fgPVMCPdZQFOzMsaXaOsDtSKQD5xLRVQ==" + }, + "@tanstack/react-query": { + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.16.1.tgz", + "integrity": "sha512-PDE9u49wSDykPazlCoLFevUpceLjQ0Mm8i6038HgtTEKb/aoVnUZdlUP7C392ds3Cd75+EGlHU7qpEX06R7d9Q==", + "requires": { + "@tanstack/query-core": "4.15.1", + "use-sync-external-store": "^1.2.0" + } + }, "@testing-library/dom": { "version": "8.13.0", "dev": true, @@ -13169,6 +13282,31 @@ "version": "2.0.0", "dev": true }, + "@trpc/client": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@trpc/client/-/client-10.1.0.tgz", + "integrity": "sha512-E7L9l2OTa5lIdM0NYvQLJf/GLapskfiVLv0Jv7t6GVxEOFd+O4THWsWQgJVUUAz9iq805iMNkY3uqSvf4GJaWg==", + "requires": {} + }, + "@trpc/next": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@trpc/next/-/next-10.1.0.tgz", + "integrity": "sha512-bJ3zMbrSO+udhMi/8KZ1JY5VpXsucTOat08LdU5MPXzMFEQ+d0QehoM4PoZirO39batZfM0rmbCJ8w6P5hLCow==", + "requires": { + "react-ssr-prepass": "^1.5.0" + } + }, + "@trpc/react-query": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@trpc/react-query/-/react-query-10.1.0.tgz", + "integrity": "sha512-Xjx3m73CDuBNrpAOF6scUQedYyp4LIxthwmdjw8Y+iR193XNwFTH+C8TZn5qOLVw9u/FM5YchAJjPPgUJyXBBQ==", + "requires": {} + }, + "@trpc/server": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@trpc/server/-/server-10.1.0.tgz", + "integrity": "sha512-UiRZPApLruhi1UKukTNsB9igFBEhEA0aMxy86Xp1OvbzuY00yoFcvDUYsBdBjp9mzIHR3yNjqrlfS/RNpPhZEw==" + }, "@trysound/sax": { "version": "0.2.0", "dev": true @@ -18345,6 +18483,12 @@ "version": "17.0.2", "dev": true }, + "react-ssr-prepass": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/react-ssr-prepass/-/react-ssr-prepass-1.5.0.tgz", + "integrity": "sha512-yFNHrlVEReVYKsLI5lF05tZoHveA5pGzjFbFJY/3pOqqjGOmMmqx83N4hIjN2n6E1AOa+eQEUxs3CgRnPmT0RQ==", + "requires": {} + }, "read-cache": { "version": "1.0.0", "dev": true, @@ -19579,6 +19723,11 @@ "yocto-queue": { "version": "0.1.0", "dev": true + }, + "zod": { + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.19.1.tgz", + "integrity": "sha512-LYjZsEDhCdYET9ikFu6dVPGp2YH9DegXjdJToSzD9rO6fy4qiRYFoyEYwps88OseJlPyl2NOe2iJuhEhL7IpEA==" } } } diff --git a/package.json b/package.json index f09b686..d3469cb 100644 --- a/package.json +++ b/package.json @@ -27,11 +27,17 @@ }, "dependencies": { "@gooditworks/monitoring": "1.5.4", + "@tanstack/react-query": "^4.16.1", + "@trpc/client": "^10.1.0", + "@trpc/next": "^10.1.0", + "@trpc/react-query": "^10.1.0", + "@trpc/server": "^10.1.0", "classnames": "2.3.2", "next": "13.0.4", "next-axiom": "0.15.1", "react": "18.2.0", - "react-dom": "18.2.0" + "react-dom": "18.2.0", + "zod": "^3.19.1" }, "devDependencies": { "@arkweid/lefthook": "0.7.7", diff --git a/src/datasources/trpc.ts b/src/datasources/trpc.ts new file mode 100644 index 0000000..ec38ee8 --- /dev/null +++ b/src/datasources/trpc.ts @@ -0,0 +1,34 @@ +import {httpBatchLink} from "@trpc/client" +import {createTRPCNext} from "@trpc/next" + +import type {AppRouter} from "server/routers" + +const getBaseUrl = () => { + if (typeof window !== "undefined") { + return "" + } + + const vercelUrl = process.env.VERCEL_URL + const port = process.env.PORT ?? 3000 + + if (vercelUrl) { + return `https://${vercelUrl}` + } + + return `http://localhost:${port}` +} + +const trpc = createTRPCNext({ + ssr: true, + config({ctx}) { + const baseUrl = getBaseUrl() + const trpcUrl = `${baseUrl}/api/trpc` + const httpLink = httpBatchLink({url: trpcUrl}) + + return { + links: [httpLink] + } + } +}) + +export default trpc diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 37b2745..b2e8b43 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,5 +1,6 @@ import {AppProps} from "next/app" +import trpc from "datasources/trpc" import ErrorCapturer from "components/ErrorCapturer" import "styles/globals.css" @@ -13,4 +14,4 @@ const App = ({Component, pageProps}: AppProps) => { } export {reportWebVitals} from "next-axiom" -export default App +export default trpc.withTRPC(App) diff --git a/src/pages/api/trpc/[trpc].ts b/src/pages/api/trpc/[trpc].ts new file mode 100644 index 0000000..6bfb706 --- /dev/null +++ b/src/pages/api/trpc/[trpc].ts @@ -0,0 +1,9 @@ +import * as trpcNext from "@trpc/server/adapters/next" + +import appRouter from "server/routers" +import createContext from "server/context" + +export default trpcNext.createNextApiHandler({ + router: appRouter, + createContext +}) diff --git a/src/pages/example/greeting.tsx b/src/pages/example/greeting.tsx new file mode 100644 index 0000000..3af7d74 --- /dev/null +++ b/src/pages/example/greeting.tsx @@ -0,0 +1,48 @@ +import {ChangeEventHandler, FC, FormEventHandler, useState} from "react" + +import trpc from "datasources/trpc" + +const useGreetingName = trpc.greeting.greetName.useQuery + +const GreetingPage: FC = () => { + const [name, setName] = useState("") + const greeting = useGreetingName({name}, {enabled: false}) + + const onNameInputChange: ChangeEventHandler = ({target}) => { + setName(target.value) + } + + const onSubmit: FormEventHandler = event => { + event.preventDefault() + greeting.refetch() + } + + return ( +
+
+ + +
+ {greeting.data && ( +
+

{greeting.data.greeting}

+ {greeting.data.ip && ( +

btw, your ip is {greeting.data.ip}

+ )} +
+ )} +
+ ) +} + +export default GreetingPage diff --git a/src/server/context.ts b/src/server/context.ts new file mode 100644 index 0000000..bb22d2d --- /dev/null +++ b/src/server/context.ts @@ -0,0 +1,16 @@ +import {CreateNextContextOptions} from "@trpc/server/adapters/next" + +type Context = { + requestIp?: string +} + +const createContext = ({req}: CreateNextContextOptions): Context => { + const requestIp = req.socket.remoteAddress + + return { + requestIp + } +} + +export default createContext +export type {Context} diff --git a/src/server/routers/greeting/index.ts b/src/server/routers/greeting/index.ts new file mode 100644 index 0000000..dab7b17 --- /dev/null +++ b/src/server/routers/greeting/index.ts @@ -0,0 +1,9 @@ +import {router} from "server/trpc" + +import greetName from "./name" + +const greetingRouter = router({ + greetName +}) + +export default greetingRouter diff --git a/src/server/routers/greeting/name.test.ts b/src/server/routers/greeting/name.test.ts new file mode 100644 index 0000000..f7c44ba --- /dev/null +++ b/src/server/routers/greeting/name.test.ts @@ -0,0 +1,35 @@ +import greetingRouter from "./index" + +describe("greeting query works correctly", () => { + const name = "Max" + const expectedGreeting = "Hello, Max!" + + test("without name", async () => { + const caller = greetingRouter.createCaller({}) + const response = await caller.greetName({}) + + expect(response).toEqual({greeting: "Hello, Anonymous!"}) + }) + + test("with name", async () => { + const caller = greetingRouter.createCaller({}) + + const response = await caller.greetName({name}) + expect(response).toEqual({ + greeting: expectedGreeting + }) + }) + + const ip = "1.1.1.1" + + test("with ip from context", async () => { + const context = {requestIp: ip} + const caller = greetingRouter.createCaller(context) + + const response = await caller.greetName({name}) + expect(response).toEqual({ + greeting: expectedGreeting, + ip + }) + }) +}) diff --git a/src/server/routers/greeting/name.ts b/src/server/routers/greeting/name.ts new file mode 100644 index 0000000..c46b46f --- /dev/null +++ b/src/server/routers/greeting/name.ts @@ -0,0 +1,21 @@ +import {z} from "zod" + +import {procedure} from "server/trpc" + +const greetNameHandler = procedure + .input( + z.object({ + name: z.string().optional() + }) + ) + .query(({ctx, input}) => { + const name = input.name || "Anonymous" + const greeting = `Hello, ${name}!` + + return { + greeting, + ip: ctx.requestIp + } + }) + +export default greetNameHandler diff --git a/src/server/routers/index.ts b/src/server/routers/index.ts new file mode 100644 index 0000000..0bf2690 --- /dev/null +++ b/src/server/routers/index.ts @@ -0,0 +1,10 @@ +import {router} from "../trpc" + +import greeting from "./greeting" + +const appRouter = router({greeting}) + +type AppRouter = typeof appRouter + +export default appRouter +export type {AppRouter} diff --git a/src/server/trpc.ts b/src/server/trpc.ts new file mode 100644 index 0000000..a708dcd --- /dev/null +++ b/src/server/trpc.ts @@ -0,0 +1,8 @@ +import {initTRPC} from "@trpc/server" + +import {Context} from "./context" + +const t = initTRPC.context().create() +const {router, procedure} = t + +export {router, procedure} From 8cd1feb522e81c01028b4df120097a1c51ba60cd Mon Sep 17 00:00:00 2001 From: Max Eliseev Date: Thu, 24 Nov 2022 13:05:00 +0700 Subject: [PATCH 2/4] =?UTF-8?q?refactor:=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20import=20React?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Counter/Counter.test.tsx | 1 - src/components/Counter/Counter.tsx | 2 -- src/pages/index.tsx | 2 -- tsconfig.jest.json | 2 +- 4 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/components/Counter/Counter.test.tsx b/src/components/Counter/Counter.test.tsx index 1faf6a0..7aea8ae 100644 --- a/src/components/Counter/Counter.test.tsx +++ b/src/components/Counter/Counter.test.tsx @@ -1,4 +1,3 @@ -import React from "react" import {render} from "@testing-library/react" import Counter from "./Counter" diff --git a/src/components/Counter/Counter.tsx b/src/components/Counter/Counter.tsx index 252d111..ab6c482 100644 --- a/src/components/Counter/Counter.tsx +++ b/src/components/Counter/Counter.tsx @@ -1,5 +1,3 @@ -import React from "react" - interface Props { value: number onIncrement: () => void diff --git a/src/pages/index.tsx b/src/pages/index.tsx index e7173bb..4f5a6d1 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,5 +1,3 @@ -import React from "react" - import useCounter from "hooks/useCounter" import Counter from "components/Counter" diff --git a/tsconfig.jest.json b/tsconfig.jest.json index cedfe51..3c5f144 100644 --- a/tsconfig.jest.json +++ b/tsconfig.jest.json @@ -4,6 +4,6 @@ "compilerOptions": { "noEmit": true, "isolatedModules": false, - "jsx": "react" + "jsx": "react-jsx" } } From adc78da177fbc7433c62d37c23935f9eb3f9c402 Mon Sep 17 00:00:00 2001 From: Max Eliseev Date: Thu, 24 Nov 2022 13:17:08 +0700 Subject: [PATCH 3/4] =?UTF-8?q?chore:=20=D0=B4=D0=B5=D0=BC=D0=BE=D0=BD?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=BF=D0=BE=D0=BD=D0=B5=D0=BD=D1=82=D0=B0=20Counter=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D0=B0=20=D0=B2?= =?UTF-8?q?=20/examples?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/example/counter.tsx | 20 ++++++++++++++++++++ src/pages/index.tsx | 19 +++---------------- 2 files changed, 23 insertions(+), 16 deletions(-) create mode 100644 src/pages/example/counter.tsx diff --git a/src/pages/example/counter.tsx b/src/pages/example/counter.tsx new file mode 100644 index 0000000..2c3ac82 --- /dev/null +++ b/src/pages/example/counter.tsx @@ -0,0 +1,20 @@ +import {FC} from "react" + +import useCounter from "hooks/useCounter" +import Counter from "components/Counter" + +const CounterPage: FC = () => { + const {value, increment, decrement} = useCounter() + + if (value === 42) { + throw new Error("counter value is 42!") + } + + return ( +
+ +
+ ) +} + +export default CounterPage diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 4f5a6d1..8cccbe1 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,18 +1,5 @@ -import useCounter from "hooks/useCounter" -import Counter from "components/Counter" +import {FC} from "react" -const Index = () => { - const {value, increment, decrement} = useCounter() +const IndexPage: FC = () =>

TODO: put README there

- if (value === 42) { - throw new Error("counter value is 42!") - } - - return ( -
- -
- ) -} - -export default Index +export default IndexPage From 04ab2bccf00b6f3b745a0096e08b599c89c6b6e7 Mon Sep 17 00:00:00 2001 From: Max Eliseev Date: Thu, 24 Nov 2022 13:46:43 +0700 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20=D0=BF=D0=BE=D1=84=D0=B8=D0=BA=D1=88?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20e2e=20=D1=82=D0=B5=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/poms/counter.ts | 2 +- tests/started.test.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/poms/counter.ts b/tests/poms/counter.ts index 8fe25ba..93d72ed 100644 --- a/tests/poms/counter.ts +++ b/tests/poms/counter.ts @@ -13,7 +13,7 @@ class CounterPage { } async goto() { - await this.page.goto("/") + await this.page.goto("/example/counter") } getValue(): Promise { diff --git a/tests/started.test.ts b/tests/started.test.ts index 8089bb3..f7e4dac 100644 --- a/tests/started.test.ts +++ b/tests/started.test.ts @@ -3,7 +3,7 @@ import {test, expect} from "@playwright/test" // Checking if the server has started (basic smoke test) test("server started correctly", async ({page}) => { await page.goto("/") - const counterValue = page.locator("data-test=counter_value") + const headerValue = page.locator("h2") - expect(counterValue).toHaveText("0") + expect(headerValue).toContainText("TODO") })