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.
70 lines (51 loc) • 1.56 kB
text/typescript
import { MikroORM, Entity, PrimaryKey, ManyToOne, Collection, OneToMany } from '@mikro-orm/sqlite';
()
class Competition {
()
id!: number;
('Registration', 'competition', { orphanRemoval: true })
registrations = new Collection<Registration>(this);
}
()
class User {
()
id!: number;
}
()
class Registration {
({ primary: true })
competition!: Competition;
({ primary: true })
user!: User;
}
let orm: MikroORM;
beforeAll(async () => {
orm = await MikroORM.init({
dbName: ':memory:',
entities: [Competition, User, Registration],
});
await orm.schema.createSchema();
});
afterAll(async () => {
await orm.close(true);
});
test(`GH issue 3666`, async () => {
const competition = new Competition();
const user1 = new User();
const user2 = new User();
const user3 = new User();
const registration1 = orm.em.create(Registration, { user: user1, competition });
const registration2 = orm.em.create(Registration, { user: user2, competition });
const registration3 = orm.em.create(Registration, { user: user3, competition });
await orm.em.flush();
let x = await orm.em.find(Registration, {});
expect(x).toHaveLength(3);
competition.registrations.set([registration2, registration3]);
await orm.em.flush();
x = await orm.em.find(Registration, {});
expect(x).toHaveLength(2);
competition.registrations.set([registration2]);
await orm.em.flush();
x = await orm.em.find(Registration, {});
expect(x).toHaveLength(1);
});