-
-
Notifications
You must be signed in to change notification settings - Fork 495
/
GH3669.test.ts
102 lines (78 loc) · 3.64 KB
/
GH3669.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
import { Entity, ManyToOne, OneToOne, PrimaryKey, PrimaryKeyType, Property, Rel, SimpleLogger } from '@mikro-orm/core';
import { MikroORM } from '@mikro-orm/postgresql';
import { mockLogger } from '../helpers';
@Entity()
class Vendor {
@PrimaryKey()
id!: number;
@Property()
prop!: string;
}
@Entity()
class TechnicianManager {
[PrimaryKeyType]?: [number, number];
@ManyToOne({ entity: () => Vendor, primary: true })
vendor!: Vendor;
@OneToOne({ entity: () => User, primary: true })
user!: Rel<User>;
}
@Entity()
class User {
@PrimaryKey()
id!: number;
@OneToOne(() => TechnicianManager, tm => tm.user)
technicianManager!: TechnicianManager;
}
describe('GH issue 3669', () => {
let orm: MikroORM;
let loggerMock: jest.Mock;
beforeAll(async () => {
orm = await MikroORM.init({
entities: [TechnicianManager],
dbName: 'mikro_orm_test_3669',
loggerFactory: options => new SimpleLogger(options),
});
await orm.schema.refreshDatabase();
orm.em.create(User, {
id: 1,
technicianManager: {
user: 1,
vendor: { id: 2, prop: 'p' },
},
});
await orm.em.flush();
loggerMock = mockLogger(orm);
});
beforeEach(() => loggerMock.mockReset());
afterAll(() => orm.close(true));
test('$not operator on 1:1 inverse side', async () => {
await expect(orm.em.find(User, { $not: { technicianManager: null } })).resolves.toHaveLength(1);
expect(loggerMock.mock.calls).toEqual([[
'[query] select "u0".*, "t1"."vendor_id" as "technician_manager_vendor_id", "t1"."user_id" as "technician_manager_user_id" from "user" as "u0" left join "technician_manager" as "t1" on "u0"."id" = "t1"."user_id" where not (("t1"."vendor_id", "t1"."user_id") is null)',
]]);
});
test('$ne operator on 1:1 inverse side', async () => {
await expect(orm.em.find(User, { technicianManager: { $ne: null } })).resolves.toHaveLength(1);
expect(loggerMock.mock.calls).toEqual([[
'[query] select "u0".*, "t1"."vendor_id" as "technician_manager_vendor_id", "t1"."user_id" as "technician_manager_user_id" from "user" as "u0" left join "technician_manager" as "t1" on "u0"."id" = "t1"."user_id" where ("t1"."vendor_id", "t1"."user_id") is not null',
]]);
});
test('$eq operator on 1:1 inverse side', async () => {
await expect(orm.em.find(User, { technicianManager: { $eq: null } })).resolves.toEqual([]);
expect(loggerMock.mock.calls).toEqual([[
'[query] select "u0".*, "t1"."vendor_id" as "technician_manager_vendor_id", "t1"."user_id" as "technician_manager_user_id" from "user" as "u0" left join "technician_manager" as "t1" on "u0"."id" = "t1"."user_id" where ("t1"."vendor_id", "t1"."user_id") is null',
]]);
});
test('compare null to 1:1 inverse side', async () => {
await expect(orm.em.find(User, { technicianManager: null })).resolves.toEqual([]);
expect(loggerMock.mock.calls).toEqual([[
'[query] select "u0".*, "t1"."vendor_id" as "technician_manager_vendor_id", "t1"."user_id" as "technician_manager_user_id" from "user" as "u0" left join "technician_manager" as "t1" on "u0"."id" = "t1"."user_id" where ("t1"."vendor_id", "t1"."user_id") is null',
]]);
});
test('compare array PK to 1:1 inverse side', async () => {
await expect(orm.em.find(User, { technicianManager: [2, 1] })).resolves.toHaveLength(1);
expect(loggerMock.mock.calls).toEqual([[
'[query] select "u0".*, "t1"."vendor_id" as "technician_manager_vendor_id", "t1"."user_id" as "technician_manager_user_id" from "user" as "u0" left join "technician_manager" as "t1" on "u0"."id" = "t1"."user_id" where ("t1"."vendor_id", "t1"."user_id") = (2, 1)',
]]);
});
});