Skip to content

Commit 057b5e3

Browse files
committed
增加 MongoDriver 和 KnexDriver 的断开连接方法,并在集成测试中调用断开连接;修复测试中对 ID 的引用以保持一致性
1 parent 74a289a commit 057b5e3

6 files changed

Lines changed: 38 additions & 20 deletions

File tree

packages/drivers/mongo/src/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ export class MongoDriver implements Driver {
214214

215215
// Bulk Operations
216216
async createMany(objectName: string, data: any[], options?: any): Promise<any> {
217+
if (!data || data.length === 0) return [];
217218
const collection = await this.getCollection(objectName);
218219
// Map all API documents to MongoDB format
219220
const mongoDocs = data.map(doc => {
@@ -255,5 +256,11 @@ export class MongoDriver implements Driver {
255256
// Map MongoDB documents to API format (convert _id to id)
256257
return this.mapFromMongoArray(results);
257258
}
259+
260+
async disconnect() {
261+
if (this.client) {
262+
await this.client.close();
263+
}
264+
}
258265
}
259266

packages/drivers/mongo/test/integration.test.ts

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ describe('MongoDriver Integration Tests', () => {
4040
afterEach(async () => {
4141
if (skipTests) return;
4242

43+
if (driver) {
44+
await driver.disconnect();
45+
}
46+
4347
try {
4448
// Clean up test database
4549
const client = new MongoClient(MONGO_URL, { serverSelectionTimeoutMS: 2000 });
@@ -64,7 +68,7 @@ describe('MongoDriver Integration Tests', () => {
6468
const result = await driver.create('users', data);
6569

6670
expect(result).toBeDefined();
67-
expect(result._id).toBeDefined();
71+
expect(result.id).toBeDefined();
6872
expect(result.name).toBe('Alice');
6973
expect(result.age).toBe(25);
7074
});
@@ -79,7 +83,7 @@ describe('MongoDriver Integration Tests', () => {
7983

8084
const result = await driver.create('users', data);
8185

82-
expect(result._id).toBe('custom-id-123');
86+
expect(result.id).toBe('custom-id-123');
8387
expect(result.name).toBe('Bob');
8488
});
8589

@@ -159,7 +163,7 @@ describe('MongoDriver Integration Tests', () => {
159163
if (skipTests) return;
160164
const created = await driver.create('users', { name: 'Alice', age: 25 });
161165

162-
const found = await driver.findOne('users', created._id);
166+
const found = await driver.findOne('users', created.id);
163167

164168
expect(found).toBeDefined();
165169
expect(found.name).toBe('Alice');
@@ -183,9 +187,9 @@ describe('MongoDriver Integration Tests', () => {
183187
if (skipTests) return;
184188
const created = await driver.create('users', { name: 'Alice', age: 25 });
185189

186-
await driver.update('users', created._id, { age: 26 });
190+
await driver.update('users', created.id, { age: 26 });
187191

188-
const updated = await driver.findOne('users', created._id);
192+
const updated = await driver.findOne('users', created.id);
189193
expect(updated.age).toBe(26);
190194
expect(updated.name).toBe('Alice'); // Should not be removed
191195
});
@@ -194,20 +198,20 @@ describe('MongoDriver Integration Tests', () => {
194198
if (skipTests) return;
195199
const created = await driver.create('users', { name: 'Alice', age: 25, score: 10 });
196200

197-
await driver.update('users', created._id, { $inc: { score: 5 } });
201+
await driver.update('users', created.id, { $inc: { score: 5 } });
198202

199-
const updated = await driver.findOne('users', created._id);
203+
const updated = await driver.findOne('users', created.id);
200204
expect(updated.score).toBe(15);
201205
});
202206

203207
test('should delete a document', async () => {
204208
if (skipTests) return;
205209
const created = await driver.create('users', { name: 'Alice', age: 25 });
206210

207-
const deleteCount = await driver.delete('users', created._id);
211+
const deleteCount = await driver.delete('users', created.id);
208212
expect(deleteCount).toBe(1);
209213

210-
const found = await driver.findOne('users', created._id);
214+
const found = await driver.findOne('users', created.id);
211215
expect(found).toBeNull();
212216
});
213217

@@ -371,7 +375,7 @@ describe('MongoDriver Integration Tests', () => {
371375
});
372376

373377
expect(results.length).toBe(3);
374-
expect(results[0]._id).toBe('3');
378+
expect(results[0].id).toBe('3');
375379
});
376380

377381
test('should combine skip and limit for pagination', async () => {
@@ -383,7 +387,7 @@ describe('MongoDriver Integration Tests', () => {
383387
});
384388

385389
expect(page1.length).toBe(2);
386-
expect(page1[0]._id).toBe('1');
390+
expect(page1[0].id).toBe('1');
387391

388392
const page2 = await driver.find('products', {
389393
sort: [['_id', 'asc']],
@@ -392,7 +396,7 @@ describe('MongoDriver Integration Tests', () => {
392396
});
393397

394398
expect(page2.length).toBe(2);
395-
expect(page2[0]._id).toBe('3');
399+
expect(page2[0].id).toBe('3');
396400
});
397401

398402
test('should select specific fields', async () => {
@@ -442,10 +446,10 @@ describe('MongoDriver Integration Tests', () => {
442446

443447
expect(results.length).toBe(2);
444448

445-
const alice = results.find(r => r._id === 'Alice');
449+
const alice = results.find(r => r.id === 'Alice');
446450
expect(alice.total).toBe(300);
447451

448-
const bob = results.find(r => r._id === 'Bob');
452+
const bob = results.find(r => r.id === 'Bob');
449453
expect(bob.total).toBe(150);
450454
});
451455

@@ -459,10 +463,10 @@ describe('MongoDriver Integration Tests', () => {
459463

460464
expect(results.length).toBe(2);
461465

462-
const completed = results.find(r => r._id === 'completed');
466+
const completed = results.find(r => r.id === 'completed');
463467
expect(completed.count).toBe(3);
464468

465-
const pending = results.find(r => r._id === 'pending');
469+
const pending = results.find(r => r.id === 'pending');
466470
expect(pending.count).toBe(1);
467471
});
468472

@@ -515,7 +519,7 @@ describe('MongoDriver Integration Tests', () => {
515519

516520
const created = await driver.create('users', data);
517521

518-
const found = await driver.findOne('users', created._id);
522+
const found = await driver.findOne('users', created.id);
519523
expect(found.address).toEqual(data.address);
520524
});
521525

@@ -529,7 +533,7 @@ describe('MongoDriver Integration Tests', () => {
529533

530534
const created = await driver.create('users', data);
531535

532-
const found = await driver.findOne('users', created._id);
536+
const found = await driver.findOne('users', created.id);
533537
expect(found.tags).toEqual(['developer', 'designer']);
534538
expect(found.scores).toEqual([10, 20, 30]);
535539
});

packages/drivers/sql/src/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,5 +467,9 @@ export class KnexDriver implements Driver {
467467
}
468468
return data;
469469
}
470+
471+
async disconnect() {
472+
await this.knex.destroy();
473+
}
470474
}
471475

packages/foundation/types/src/driver.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,8 @@ export interface Driver {
2323
beginTransaction?(): Promise<any>;
2424
commitTransaction?(trx: any): Promise<void>;
2525
rollbackTransaction?(trx: any): Promise<void>;
26+
27+
// Connection
28+
disconnect?(): Promise<void>;
2629
}
2730

packages/starters/basic/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"codegen": "objectql generate -s src -o src/types",
1919
"build": "npm run codegen && tsc && rsync -a --include '*/' --include '*.yml' --exclude '*' src/ dist/",
2020
"repl": "objectql repl",
21-
"test": "echo \"No tests specified\" && exit 0"
21+
"test": "echo \"No tests specified\""
2222
},
2323
"peerDependencies": {
2424
"@objectql/core": "workspace:*",

packages/starters/enterprise/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"scripts": {
1919
"codegen": "objectql generate -s src -o src/types",
2020
"build": "npm run codegen && tsc",
21-
"test": "echo \"No tests specified\" && exit 0"
21+
"test": "echo \"No tests specified\""
2222
},
2323
"peerDependencies": {
2424
"@objectql/core": "workspace:*",

0 commit comments

Comments
 (0)