UNPKG

undeexcepturi

Version:

TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.

81 lines (55 loc) 2.04 kB
import { Cascade, Collection, Entity, ManyToOne, MikroORM, OneToMany, OneToOne, PrimaryKey, PrimaryKeyProp } from '@mikro-orm/sqlite'; @Entity() export class NodeEntity { @PrimaryKey() id!: number; @ManyToOne({ entity: () => NodeEntity, deleteRule: 'cascade', updateRule: 'cascade', nullable: true }) parent?: NodeEntity | null; } @Entity() export class ElementEntity { [PrimaryKeyProp]?: 'node'; @OneToOne({ entity: () => NodeEntity, primary: true, deleteRule: 'cascade', updateRule: 'cascade' }) node!: NodeEntity; @OneToMany({ entity: () => DependentEntity, mappedBy: 'element', cascade: [Cascade.ALL] }) dependents = new Collection<DependentEntity>(this); } @Entity() export class DependentEntity { @PrimaryKey() id!: number; @ManyToOne(() => ElementEntity, { deleteRule: 'cascade' }) element!: ElementEntity; } describe('GH issue 2810', () => { let orm: MikroORM; beforeAll(async () => { orm = await MikroORM.init({ entities: [ElementEntity, DependentEntity, NodeEntity], dbName: ':memory:', }); await orm.schema.createSchema(); }); beforeEach(async () => await orm.schema.clearDatabase()); afterAll(async () => await orm.close(true)); test('create without existing parent', async () => { const element = orm.em.create(ElementEntity, {}); element.node = new NodeEntity(); element.node.parent = null; const dependent = new DependentEntity(); dependent.element = element; element.dependents.add(dependent); await orm.em.persistAndFlush(element); }); test('create with existing parent', async () => { const parent = orm.em.create(NodeEntity, {}); await orm.em.fork().persistAndFlush(parent); const element = new ElementEntity(); element.node = new NodeEntity(); element.node.parent = orm.em.getReference(NodeEntity, parent.id); const dependent = new DependentEntity(); dependent.element = element; element.dependents.add(dependent); await orm.em.persistAndFlush(element); }); });