Skip to content

Commit e66e635

Browse files
committed
v1.0.5
1 parent 481daf4 commit e66e635

2 files changed

Lines changed: 100 additions & 2 deletions

File tree

‎package.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "monsqlize",
3-
"version": "1.0.4",
3+
"version": "1.0.5",
44
"description": "A lightweight MongoDB ORM with multi-level caching, transaction support, and distributed features",
55
"main": "lib/index.js",
66
"module": "index.mjs",
@@ -120,4 +120,4 @@
120120
"mongodb": "^6.17.0",
121121
"ssh2": "^1.17.0"
122122
}
123-
}
123+
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
/**
2+
* 测试 Model timestamps 对 incrementOne 的支持
3+
*/
4+
5+
const MonSQLize = require('../../lib');
6+
const { Model } = MonSQLize;
7+
8+
(async () => {
9+
console.log('🧪 测试 incrementOne timestamps 支持\n');
10+
11+
// 定义 Model
12+
Model.define('users', {
13+
schema: (dsl) => dsl({
14+
username: 'string!',
15+
points: 'number'
16+
}),
17+
options: {
18+
timestamps: true // 启用时间戳
19+
}
20+
});
21+
22+
const msq = new MonSQLize({
23+
type: 'mongodb',
24+
databaseName: 'test_increment_timestamps',
25+
config: { uri: 'mongodb://localhost:27017' },
26+
logger: { level: 'debug' }
27+
});
28+
29+
try {
30+
await msq.connect();
31+
console.log('✅ 数据库连接成功\n');
32+
33+
const User = msq.model('users');
34+
35+
// 1. 插入测试数据
36+
console.log('=== 1. 插入测试数据 ===');
37+
const insertResult = await User.insertOne({
38+
username: 'testuser',
39+
points: 100
40+
});
41+
console.log('插入的文档:', insertResult.value);
42+
console.log(`createdAt: ${insertResult.value.createdAt}`);
43+
console.log(`updatedAt: ${insertResult.value.updatedAt}`);
44+
45+
const userId = insertResult.value._id;
46+
47+
// 等待 1 秒,确保时间戳会变化
48+
await new Promise(resolve => setTimeout(resolve, 1000));
49+
50+
// 2. 使用 incrementOne
51+
console.log('\n=== 2. 测试 incrementOne ===');
52+
const incrementResult = await User.incrementOne(
53+
{ _id: userId },
54+
'points',
55+
50
56+
);
57+
console.log('incrementOne 结果:', incrementResult.value);
58+
console.log(`更新后 points: ${incrementResult.value.points}`);
59+
console.log(`更新后 updatedAt: ${incrementResult.value.updatedAt}`);
60+
61+
// 3. 验证时间戳是否更新
62+
console.log('\n=== 3. 验证时间戳 ===');
63+
const finalDoc = await User.findOne({ _id: userId });
64+
console.log('最终文档:', finalDoc);
65+
console.log(`createdAt 未变化: ${finalDoc.createdAt.getTime() === insertResult.value.createdAt.getTime()}`);
66+
console.log(`updatedAt 已更新: ${finalDoc.updatedAt.getTime() > insertResult.value.createdAt.getTime()}`);
67+
68+
// 4. 测试手动时间戳不被覆盖
69+
console.log('\n=== 4. 测试手动时间戳不被覆盖 ===');
70+
const customTime = new Date('2020-01-01');
71+
const manualInsertResult = await User.insertOne({
72+
username: 'manual_user',
73+
points: 50,
74+
createdAt: customTime,
75+
updatedAt: customTime
76+
});
77+
console.log('手动设置时间戳:', manualInsertResult.value);
78+
console.log(`createdAt 保留: ${manualInsertResult.value.createdAt.getTime() === customTime.getTime()}`);
79+
console.log(`updatedAt 保留: ${manualInsertResult.value.updatedAt.getTime() === customTime.getTime()}`);
80+
81+
console.log('\n✅ 所有测试通过!');
82+
83+
} catch (error) {
84+
console.error('❌ 测试失败:', error.message);
85+
console.error(error.stack);
86+
} finally {
87+
// 清理测试数据
88+
try {
89+
await msq.db().dropDatabase();
90+
console.log('\n🗑️ 测试数据库已删除');
91+
} catch (e) {
92+
// 忽略清理错误
93+
}
94+
await msq.close();
95+
console.log('✅ 连接已关闭');
96+
}
97+
})();
98+

0 commit comments

Comments
 (0)