Thin MongoDB ODM built for Standard Schema
mongodb
zod
deno
1import { z } from "@zod/zod";
2import { connect, disconnect, type Input, Model } from "../mod.ts";
3import { MongoMemoryServer } from "mongodb-memory-server-core";
4
5export const userSchema = z.object({
6 name: z.string(),
7 email: z.email(),
8 age: z.number().int().positive().optional(),
9 createdAt: z.date().default(() => new Date()),
10});
11
12export type UserInsert = Input<typeof userSchema>;
13
14let mongoServer: MongoMemoryServer | null = null;
15let isSetup = false;
16
17export async function setupTestDb() {
18 if (!isSetup) {
19 // Start MongoDB Memory Server
20 mongoServer = await MongoMemoryServer.create();
21 const uri = mongoServer.getUri();
22
23 // Connect to the in-memory database
24 await connect(uri, "test_db");
25 isSetup = true;
26 }
27}
28
29export async function teardownTestDb() {
30 if (isSetup) {
31 await disconnect();
32 if (mongoServer) {
33 await mongoServer.stop();
34 mongoServer = null;
35 }
36 isSetup = false;
37 }
38}
39
40export function createUserModel(): Model<typeof userSchema> {
41 return new Model("users", userSchema);
42}
43
44export async function cleanupCollection(model: Model<typeof userSchema>) {
45 await model.delete({});
46}
47