-
-
Notifications
You must be signed in to change notification settings - Fork 495
/
GH4234-one-to-one.test.ts
104 lines (82 loc) · 1.98 KB
/
GH4234-one-to-one.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import { Entity, OneToOne, PrimaryKey, ref, Ref, RequiredEntityData } from '@mikro-orm/core';
import { MikroORM } from '@mikro-orm/sqlite';
@Entity()
class Group {
@PrimaryKey()
id!: number;
@OneToOne({
entity: () => GroupMember,
mappedBy: member => member.group,
ref: true,
eager: true,
orphanRemoval: true,
})
groupMember?: Ref<GroupMember>;
constructor(params: RequiredEntityData<Group>) {
Object.assign(this, params);
}
}
@Entity()
class GroupMember {
@OneToOne({
entity: () => Member,
primary: true,
ref: true,
})
member!: Ref<Member>;
@OneToOne({
entity: () => Group,
primary: true,
ref: true,
})
group!: Ref<Group>;
constructor(params: RequiredEntityData<GroupMember>) {
Object.assign(this, params);
}
}
@Entity()
class Member {
@PrimaryKey()
id!: number;
@OneToOne({
entity: () => GroupMember,
mappedBy: group => group.member,
eager: true,
ref: true,
orphanRemoval: true,
})
groupMember?: Ref<GroupMember>;
constructor(params: RequiredEntityData<Member>) {
Object.assign(this, params);
}
}
let orm: MikroORM;
beforeAll(async () => {
orm = await MikroORM.init({
entities: [Group, Member, GroupMember],
dbName: ':memory:',
});
await orm.schema.refreshDatabase();
});
afterAll(() => orm.close(true));
test(`GH issue 4234 with 1:1`, async () => {
const groupId = 1;
const memberId = 2;
{
const group = new Group({ id: groupId });
const member = new Member({ id: memberId });
member.groupMember = ref(new GroupMember({ group, member }));
await orm.em.persist([group, member]).flush();
orm.em.clear();
}
{
await orm.em.findOne(Group, groupId);
const member = await orm.em.findOneOrFail(Member, memberId);
orm.em.assign(member, { groupMember: null });
await orm.em.flush();
await orm.em.flush();
}
orm.em.clear();
await orm.em.findOneOrFail(Member, memberId);
await orm.em.findOneOrFail(Group, groupId);
});