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.
94 lines (73 loc) • 2.14 kB
text/typescript
import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property, MikroORM } from '@mikro-orm/sqlite';
export class PersonEntity {
id!: number;
name!: string;
tasks = new Collection<TaskEntity>(this);
}
export class TaskEntity {
id!: number;
description!: string;
person!: PersonEntity;
}
describe('GH #2729', () => {
let orm: MikroORM;
beforeAll(async () => {
orm = await MikroORM.init({
dbName: ':memory:',
entities: [PersonEntity, TaskEntity],
});
await orm.schema.createSchema();
await orm.em.insert(TaskEntity, {
description: 'person zero task',
person: await orm.em.insert(PersonEntity, {
id: 0,
name: 'zero',
}),
});
await orm.em.insert(TaskEntity, {
description: 'person one task',
person: await orm.em.insert(PersonEntity, {
id: 1,
name: 'one',
}),
});
await orm.em.insert(TaskEntity, {
description: 'person two task',
person: await orm.em.insert(PersonEntity, {
id: 2,
name: 'two',
}),
});
});
afterAll(async () => {
await orm.close();
});
it('relations with PK 0', async () => {
const persons = await orm.em.fork().find(PersonEntity, {});
expect(persons).toHaveLength(3);
const tasks = await orm.em.fork().find(TaskEntity, {}, { orderBy: { id: 'asc' } });
expect(tasks).toHaveLength(3);
expect(tasks[0].person.id).toBe(0);
expect(tasks[1].person.id).toBe(1);
expect(tasks[2].person.id).toBe(2);
const tasks2 = await orm.em.fork().find(TaskEntity, {}, { populate: ['person'], orderBy: { id: 'asc' } });
expect(tasks2[1].person.id).toBe(1);
expect(tasks2[1].person.name).toBe('one');
expect(tasks2[2].person.id).toBe(2);
expect(tasks2[2].person.name).toBe('two');
expect(tasks2[0].person.id).toBe(0);
expect(tasks2[0].person.name).toBe('zero');
});
});