test setup lackin
This commit is contained in:
2
test/aliases/db.ts
Normal file
2
test/aliases/db.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
import { db } from "test/db/setup";
|
||||
export { db };
|
||||
33
test/db/setup.ts
Normal file
33
test/db/setup.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import { vi, beforeAll , afterAll, beforeEach, afterEach } from "vitest";
|
||||
import { drizzle, type PgliteDatabase } from 'drizzle-orm/pglite';
|
||||
import * as schema from "~/server/dbschema/schema"
|
||||
import type * as DrizzleKit from 'drizzle-kit/api';
|
||||
import { createRequire } from 'node:module';
|
||||
import { PGlite } from "@electric-sql/pglite"
|
||||
|
||||
let clients: Record<string,PGlite> = {};
|
||||
export let db: PgliteDatabase<typeof schema>
|
||||
// beforeEach(async (test) => {
|
||||
const client = new PGlite()
|
||||
// workaround for https://github.com/drizzle-team/drizzle-orm/issues/2853
|
||||
const require = createRequire(import.meta.url);
|
||||
const { generateDrizzleJson, generateMigration } = require('drizzle-kit/api') as typeof DrizzleKit;
|
||||
// end of workaround
|
||||
|
||||
// workaround for https://github.com/drizzle-team/drizzle-orm/issues/3913
|
||||
async function pushSchema(db: PgliteDatabase<typeof schema>) {
|
||||
const prevJson = generateDrizzleJson({});
|
||||
const curJson = generateDrizzleJson(schema, prevJson.id, undefined, 'snake_case');
|
||||
const statements = await generateMigration(prevJson, curJson);
|
||||
for (const statement of statements) {
|
||||
let res = await db.execute(statement);
|
||||
}
|
||||
}
|
||||
db = drizzle({client:client,schema:schema,casing:'snake_case'});
|
||||
await pushSchema(db);
|
||||
// })
|
||||
|
||||
// afterEach(async (test) => {
|
||||
// const client = clients[test.task.id]
|
||||
// await client!.close()
|
||||
// })
|
||||
@@ -1,11 +0,0 @@
|
||||
import { vi } from "vitest";
|
||||
import { drizzle } from 'drizzle-orm/pglite';
|
||||
import { PGlite } from "@electric-sql/pglite";
|
||||
import * as schema from "~/server/db/schema"
|
||||
const client = new PGlite()
|
||||
const db = drizzle({client:client,schema:schema})
|
||||
vi.mock("~/server/db", () => {
|
||||
return {
|
||||
db: db
|
||||
}
|
||||
})
|
||||
9
test/trpc/GetBaseUrl.mock.ts
Normal file
9
test/trpc/GetBaseUrl.mock.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { vi } from "vitest";
|
||||
import { port } from "test/trpc/server"
|
||||
vi.mock("~/app/_trpc/GetBaseUrl", () => {
|
||||
return {
|
||||
default: vi.fn(() => {
|
||||
return `http://localhost:${port}`
|
||||
})
|
||||
}
|
||||
})
|
||||
0
test/trpc/portincrement.ts
Normal file
0
test/trpc/portincrement.ts
Normal file
27
test/trpc/server.ts
Normal file
27
test/trpc/server.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { createHTTPHandler } from "@trpc/server/adapters/standalone";
|
||||
import { createServer } from "http";
|
||||
import { trpcRouter } from "~/server/routers/_app";
|
||||
|
||||
const handler = createHTTPHandler({
|
||||
router: trpcRouter,
|
||||
createContext: () => ({}),
|
||||
});
|
||||
|
||||
export const port = Math.floor(Math.random() * 999 + 9000);
|
||||
|
||||
const server = createServer((req, res) => {
|
||||
if (req.url?.startsWith("/api/trpc")) {
|
||||
console.log('trpc call')
|
||||
// strip prefix so handler works the same way Next.js does
|
||||
req.url = req.url.replace(/^\/api\/trpc/, "");
|
||||
return handler(req, res);
|
||||
}
|
||||
res.statusCode = 404;
|
||||
res.end("Not Found");
|
||||
});
|
||||
console.log("server listening on port:",port)
|
||||
server.listen(port);
|
||||
|
||||
// afterEach(() => {
|
||||
// server.close();
|
||||
// });
|
||||
@@ -1,16 +0,0 @@
|
||||
import React from 'react'
|
||||
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
|
||||
import { trpc } from '~/app/_trpc/Client'
|
||||
import { createTestTrpcClient } from './vitest.trpcProxyClient'
|
||||
|
||||
export default function TrpcProvider({ children }:{children: React.ReactNode}) {
|
||||
const queryClient = new QueryClient()
|
||||
const trpcClient = createTestTrpcClient()
|
||||
console.log("using test provider")
|
||||
return (
|
||||
<trpc.Provider client={trpcClient} queryClient={queryClient}>
|
||||
<QueryClientProvider client={queryClient}>
|
||||
{children}
|
||||
</QueryClientProvider>
|
||||
</trpc.Provider>
|
||||
)}
|
||||
@@ -1,26 +0,0 @@
|
||||
import { createTRPCProxyClient, httpBatchLink } from '@trpc/client'
|
||||
import { fetchRequestHandler } from '@trpc/server/adapters/fetch'
|
||||
import { trpcRouter, type TrpcRouter } from '~/server/routers/_app'
|
||||
|
||||
// This simulates the server without HTTP
|
||||
function serverHandler(path: string, req: Request) {
|
||||
return fetchRequestHandler({
|
||||
endpoint: '/api/trpc',
|
||||
router: trpcRouter,
|
||||
req,
|
||||
createContext: () => ({}),
|
||||
})
|
||||
}
|
||||
|
||||
export function createTestTrpcClient() {
|
||||
return createTRPCProxyClient<TrpcRouter>({
|
||||
links: [
|
||||
httpBatchLink({
|
||||
url: 'http://localhost/api/trpc',
|
||||
fetch: (input, init) => {
|
||||
return serverHandler(input as string, new Request(input as string, init))
|
||||
},
|
||||
}),
|
||||
],
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user