From 70c569f0ad293ee5c65d6aba2145c2a6f0a8f2da Mon Sep 17 00:00:00 2001 From: Harry Chen Date: Sat, 21 Sep 2024 20:34:44 +0800 Subject: [PATCH] fix: dataSourcePriority missing default value (#4061) --- packages/core/src/common/dataSourceManager.ts | 2 +- packages/mongoose/src/configuration.ts | 2 +- packages/mongoose/test/index.test.ts | 30 ++++++++++++++++++- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/packages/core/src/common/dataSourceManager.ts b/packages/core/src/common/dataSourceManager.ts index ac11976c7c0d..d295e542d0b1 100644 --- a/packages/core/src/common/dataSourceManager.ts +++ b/packages/core/src/common/dataSourceManager.ts @@ -24,7 +24,7 @@ export abstract class DataSourceManager< protected options: DataSourceManagerConfigOption = {}; protected modelMapping = new WeakMap(); private innerDefaultDataSourceName: string; - protected dataSourcePriority: Record; + protected dataSourcePriority: Record = {}; @Inject() protected appDir: string; diff --git a/packages/mongoose/src/configuration.ts b/packages/mongoose/src/configuration.ts index b99cd466b739..5b220ce7b128 100644 --- a/packages/mongoose/src/configuration.ts +++ b/packages/mongoose/src/configuration.ts @@ -51,7 +51,7 @@ export class MongooseConfiguration implements ILifeCycle { let clientName: any; for (const name of clientNames) { if ( - (await this.mongooseDataSourceManager.isConnected(name)) && + !(await this.mongooseDataSourceManager.isConnected(name)) && !this.mongooseDataSourceManager.isLowPriority(name) ) { clientName = name; diff --git a/packages/mongoose/test/index.test.ts b/packages/mongoose/test/index.test.ts index 76b9225a99e3..4eac3f8883d7 100644 --- a/packages/mongoose/test/index.test.ts +++ b/packages/mongoose/test/index.test.ts @@ -1,7 +1,9 @@ import { close, createLightApp } from '@midwayjs/mock'; import { join } from 'path'; import { Schema } from 'mongoose'; -import { MongooseConnectionServiceFactory, MongooseConnectionService } from '../src'; +import { MongooseConnectionServiceFactory, MongooseConnectionService } from "../src"; +import * as mongoose from '../src'; +import { MidwayHealthService } from '@midwayjs/core'; interface User { name: string; @@ -59,4 +61,30 @@ describe('/test/index.test.ts', () => { await service.init(); }).rejects.toThrowError(/instance not found/); }); + + it("should test health check", async () => { + const app = await createLightApp({ + imports: [ + mongoose + ], + globalConfig: { + mongoose: { + dataSource: { + default: { + uri: 'mongodb://a.b.c:27017/test', + options: { + serverSelectionTimeoutMS: 100, + }, + } + } + } + }, + }); + + const healthService = await app.getApplicationContext().getAsync(MidwayHealthService); + const re = await healthService.getStatus(); + expect(re.status).toBe(false); + expect(re.reason).toMatch("is not ready"); + await close(app); + }); });