From e721ad757ecf6df7da466c589bce772f4589fc72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Tue, 28 Feb 2023 20:37:30 +0100 Subject: [PATCH] fix(core): log abstract entity names during discovery Closes #4080 --- packages/core/src/metadata/EntitySchema.ts | 2 +- tests/issues/GH4080.test.ts | 87 ++++++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 tests/issues/GH4080.test.ts diff --git a/packages/core/src/metadata/EntitySchema.ts b/packages/core/src/metadata/EntitySchema.ts index 80fbba8d556d..e2f0f4ca694e 100644 --- a/packages/core/src/metadata/EntitySchema.ts +++ b/packages/core/src/metadata/EntitySchema.ts @@ -224,7 +224,7 @@ export class EntitySchema { } get name(): EntityName { - return this._meta.name!; + return this._meta.className; } /** diff --git a/tests/issues/GH4080.test.ts b/tests/issues/GH4080.test.ts new file mode 100644 index 000000000000..5d94de093b91 --- /dev/null +++ b/tests/issues/GH4080.test.ts @@ -0,0 +1,87 @@ +import { EntitySchema, SimpleLogger } from '@mikro-orm/core'; +import { MikroORM } from '@mikro-orm/sqlite'; + +abstract class BaseClass { + + id?: number; + +} + +interface BaseInterface { + id?: number; +} + +class DerivedClass extends BaseClass { + + name?: string; + +} + +class ImplementingClass implements BaseInterface { + + id?: number; + name?: string; + +} + +const BaseClassSchema = new EntitySchema({ + name: 'BaseClass', + abstract: true, + properties: { + id: { type: Number, primary: true }, + }, +}); + +const BaseInterfaceSchema = new EntitySchema({ + name: 'BaseInterface', + abstract: true, + properties: { + id: { type: Number, primary: true }, + }, +}); + +const DerivedClassSchema = new EntitySchema({ + class: DerivedClass, + extends: 'BaseClass', + properties: { + name: { type: String }, + }, +}); + +const ImplementingClassSchema = new EntitySchema({ + class: ImplementingClass, + extends: 'BaseInterface', + properties: { + name: { type: String }, + }, +}); + +let orm: MikroORM; + +beforeAll(async () => { + const logger = jest.fn(); + orm = await MikroORM.init({ + entities: [ + BaseClassSchema, + DerivedClassSchema, + BaseInterfaceSchema, + ImplementingClassSchema, + ], + dbName: `:memory:`, + logger: msg => logger(msg), + loggerFactory: options => new SimpleLogger(options), + debug: true, + }); + expect(logger.mock.calls.toString()).not.toMatch('undefined'); + await orm.schema.refreshDatabase(); +}); + +afterAll(() => orm.close(true)); + +test('4080', async () => { + orm.em.create(DerivedClassSchema, { name: 'foo' }); + await orm.em.flush(); + orm.em.clear(); + + await orm.em.findOneOrFail(DerivedClassSchema, { name: 'foo' }); +});