diff --git a/src/server/modules/auth/email/__tests__/email.router.test.ts b/src/server/modules/auth/email/__tests__/email.router.test.ts index 8084aa05..db570b45 100644 --- a/src/server/modules/auth/email/__tests__/email.router.test.ts +++ b/src/server/modules/auth/email/__tests__/email.router.test.ts @@ -8,15 +8,18 @@ import * as mailLib from '~/lib/mail' import { prisma } from '~/server/prisma' import { createTokenHash } from '../../auth.util' import { emailSessionRouter } from '../email.router' +import { createCallerFactory } from '~/server/trpc' + +const createCaller = createCallerFactory(emailSessionRouter) describe('auth.email', async () => { - let caller: Awaited> + let caller: Awaited> let session: ReturnType beforeEach(async () => { session = applySession() const ctx = await createMockRequest(session) - caller = emailSessionRouter.createCaller(ctx) + caller = createCaller(ctx) }) describe('login', async () => { diff --git a/src/server/modules/post/__tests__/post.router.test.ts b/src/server/modules/post/__tests__/post.router.test.ts index b480cfbb..16b7cde9 100644 --- a/src/server/modules/post/__tests__/post.router.test.ts +++ b/src/server/modules/post/__tests__/post.router.test.ts @@ -1,17 +1,20 @@ import { type User } from '@prisma/client' import { it, expect } from 'vitest' import { type RouterInput } from '~/utils/trpc' -import { appRouter } from '../../_app' import { applyAuthedSession, applySession, createMockRequest, } from 'tests/integration/helpers/iron-session' +import { createCallerFactory } from '~/server/trpc' +import { postRouter } from '../post.router' + +const createCaller = createCallerFactory(postRouter) describe('post.add', async () => { it('unauthed user should not be able to create a post', async () => { const ctx = await createMockRequest(applySession()) - const caller = appRouter.createCaller(ctx) + const caller = createCaller(ctx) const input: RouterInput['post']['add'] = { title: 'hello test', @@ -19,7 +22,7 @@ describe('post.add', async () => { contentHtml: '

hello test with a long input

', } - await expect(caller.post.add(input)).rejects.toThrowError() + await expect(caller.add(input)).rejects.toThrowError() }) it('post should be retrievable after creation', async () => { @@ -33,7 +36,7 @@ describe('post.add', async () => { image: null, } const ctx = await createMockRequest(await applyAuthedSession(defaultUser)) - const caller = appRouter.createCaller(ctx) + const caller = createCaller(ctx) const input: RouterInput['post']['add'] = { title: 'hello test', @@ -41,8 +44,8 @@ describe('post.add', async () => { contentHtml: '

hello test with a long input

', } - const post = await caller.post.add(input) - const byId = await caller.post.byId({ id: post.id }) + const post = await caller.add(input) + const byId = await caller.byId({ id: post.id }) expect(byId).toMatchObject(input) }) diff --git a/src/server/trpc.ts b/src/server/trpc.ts index ce84bb6e..e484bae0 100644 --- a/src/server/trpc.ts +++ b/src/server/trpc.ts @@ -195,3 +195,10 @@ export const middleware = t.middleware * @see https://trpc.io/docs/v10/merging-routers */ export const mergeRouters = t.mergeRouters + +/** + * Create a server-side caller + * @link https://trpc.io/docs/v11/server/server-side-calls + * Mostly used for test invocation + */ +export const createCallerFactory = t.createCallerFactory