Thin MongoDB ODM built for Standard Schema
mongodb
zod
deno
1import { z } from 'zod';
2import { defineModel, MongoModel, connect, disconnect, InferModel, InsertType } from '../src';
3import { ObjectId } from 'mongodb';
4
5const userSchema = defineModel(z.object({
6 name: z.string(),
7 email: z.string().email(),
8 age: z.number().int().positive().optional(),
9 createdAt: z.date().default(() => new Date()),
10}));
11
12type User = InferModel<typeof userSchema>;
13type UserInsert = InsertType<typeof userSchema>;
14
15async function runTests() {
16 try {
17 await connect('mongodb://localhost:27017', 'mizzleorm_test_db');
18 console.log('Connected to MongoDB for testing.');
19
20 const UserModel = new MongoModel('users', userSchema);
21
22 // Clean up before tests
23 await UserModel.delete({});
24 console.log('Cleaned up existing data.');
25
26 // Test 1: Insert a new user
27 const newUser: UserInsert = {
28 name: 'Test User',
29 email: 'test@example.com',
30 age: 25,
31 };
32 const insertResult = await UserModel.insertOne(newUser);
33 console.log('Test 1 (Insert): User inserted with ID:', insertResult.insertedId);
34 if (!insertResult.insertedId) {
35 throw new Error('Test 1 Failed: User not inserted.');
36 }
37
38 // Test 2: Find the inserted user
39 const foundUser = await UserModel.findOne({ _id: new ObjectId(insertResult.insertedId) });
40 console.log('Test 2 (Find One): Found user:', foundUser);
41 if (!foundUser || foundUser.email !== 'test@example.com') {
42 throw new Error('Test 2 Failed: User not found or data mismatch.');
43 }
44
45 // Test 3: Update the user
46 const updateResult = await UserModel.update(
47 { _id: new ObjectId(insertResult.insertedId) },
48 { age: 26 }
49 );
50 console.log('Test 3 (Update): Modified count:', updateResult.modifiedCount);
51 if (updateResult.modifiedCount !== 1) {
52 throw new Error('Test 3 Failed: User not updated.');
53 }
54 const updatedUser = await UserModel.findOne({ _id: new ObjectId(insertResult.insertedId) });
55 if (!updatedUser || updatedUser.age !== 26) {
56 throw new Error('Test 3 Failed: Updated user data mismatch.');
57 }
58
59 // Test 4: Delete the user
60 const deleteResult = await UserModel.delete({ _id: new ObjectId(insertResult.insertedId) });
61 console.log('Test 4 (Delete): Deleted count:', deleteResult.deletedCount);
62 if (deleteResult.deletedCount !== 1) {
63 throw new Error('Test 4 Failed: User not deleted.');
64 }
65 const deletedUser = await UserModel.findOne({ _id: new ObjectId(insertResult.insertedId) });
66 if (deletedUser) {
67 throw new Error('Test 4 Failed: User still exists after deletion.');
68 }
69
70 console.log('\nAll tests passed successfully!');
71
72 } catch (error) {
73 console.error('\nTests failed:', error);
74 process.exit(1);
75 } finally {
76 await disconnect();
77 console.log('Disconnected from MongoDB.');
78 }
79}
80
81runTests();
82
83