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.
112 lines (87 loc) • 3.71 kB
text/typescript
import {
Entity,
MikroORM,
ManyToOne,
OneToOne,
PrimaryKey,
Property,
Rel,
SimpleLogger,
PrimaryKeyProp,
} from '-orm/postgresql';
import { mockLogger } from '../helpers';
()
class Vendor {
()
id!: number;
()
prop!: string;
}
()
class TechnicianManager {
[PrimaryKeyProp]?: ['vendor', 'user'];
({ entity: () => Vendor, primary: true })
vendor!: Vendor;
({ entity: () => User, primary: true })
user!: Rel<User>;
}
()
class User {
()
id!: number;
(() => 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)',
]]);
});
});