@nest-boot/mikro-orm 7.4.0 → 7.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/property-types/vector.type.spec.d.ts +1 -0
- package/dist/property-types/vector.type.spec.js +34 -0
- package/dist/property-types/vector.type.spec.js.map +1 -0
- package/dist/services/entity.service.spec.d.ts +1 -0
- package/dist/services/entity.service.spec.js +212 -0
- package/dist/services/entity.service.spec.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/load-config-from-env.util.spec.d.ts +1 -0
- package/dist/utils/load-config-from-env.util.spec.js +75 -0
- package/dist/utils/load-config-from-env.util.spec.js.map +1 -0
- package/package.json +9 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const mikro_orm_1 = require("pgvector/mikro-orm");
|
|
4
|
+
const vector_type_1 = require("./vector.type");
|
|
5
|
+
describe("VectorType", () => {
|
|
6
|
+
afterEach(() => {
|
|
7
|
+
jest.restoreAllMocks();
|
|
8
|
+
});
|
|
9
|
+
it("should pass configured dimensions to the base vector type", () => {
|
|
10
|
+
const getColumnType = jest
|
|
11
|
+
.spyOn(mikro_orm_1.VectorType.prototype, "getColumnType")
|
|
12
|
+
.mockReturnValue("vector(1536)");
|
|
13
|
+
const platform = {};
|
|
14
|
+
expect(new vector_type_1.VectorType(1536).getColumnType({
|
|
15
|
+
fieldNames: ["embedding"],
|
|
16
|
+
}, platform)).toBe("vector(1536)");
|
|
17
|
+
expect(getColumnType).toHaveBeenCalledWith({
|
|
18
|
+
dimensions: 1536,
|
|
19
|
+
fieldNames: ["embedding"],
|
|
20
|
+
}, platform);
|
|
21
|
+
});
|
|
22
|
+
it("should allow property dimensions to be used when no dimensions are configured", () => {
|
|
23
|
+
const getColumnType = jest
|
|
24
|
+
.spyOn(mikro_orm_1.VectorType.prototype, "getColumnType")
|
|
25
|
+
.mockReturnValue("vector(768)");
|
|
26
|
+
expect(new vector_type_1.VectorType().getColumnType({
|
|
27
|
+
dimensions: 768,
|
|
28
|
+
}, {})).toBe("vector(768)");
|
|
29
|
+
expect(getColumnType).toHaveBeenCalledWith({
|
|
30
|
+
dimensions: 768,
|
|
31
|
+
}, {});
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=vector.type.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector.type.spec.js","sourceRoot":"","sources":["../../src/property-types/vector.type.spec.ts"],"names":[],"mappings":";;AAAA,kDAAkE;AAElE,+CAA2C;AAE3C,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,aAAa,GAAG,IAAI;aACvB,KAAK,CAAC,sBAAc,CAAC,SAAS,EAAE,eAAe,CAAC;aAChD,eAAe,CAAC,cAAc,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,EAAW,CAAC;QAE7B,MAAM,CACJ,IAAI,wBAAU,CAAC,IAAI,CAAC,CAAC,aAAa,CAChC;YACE,UAAU,EAAE,CAAC,WAAW,CAAC;SACjB,EACV,QAAQ,CACT,CACF,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAEvB,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CACxC;YACE,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,CAAC,WAAW,CAAC;SAC1B,EACD,QAAQ,CACT,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,MAAM,aAAa,GAAG,IAAI;aACvB,KAAK,CAAC,sBAAc,CAAC,SAAS,EAAE,eAAe,CAAC;aAChD,eAAe,CAAC,aAAa,CAAC,CAAC;QAElC,MAAM,CACJ,IAAI,wBAAU,EAAE,CAAC,aAAa,CAC5B;YACE,UAAU,EAAE,GAAG;SACP,EACV,EAAW,CACZ,CACF,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEtB,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CACxC;YACE,UAAU,EAAE,GAAG;SAChB,EACD,EAAE,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const core_1 = require("@mikro-orm/core");
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const entity_service_1 = require("./entity.service");
|
|
6
|
+
class TestEntity {
|
|
7
|
+
}
|
|
8
|
+
function createEntity(id, data = {}) {
|
|
9
|
+
return Object.assign(new TestEntity(), {
|
|
10
|
+
id,
|
|
11
|
+
...data,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
function createEntityManager() {
|
|
15
|
+
const getById = jest.fn();
|
|
16
|
+
const em = {
|
|
17
|
+
assign: jest.fn(),
|
|
18
|
+
count: jest.fn(),
|
|
19
|
+
create: jest.fn((_entityClass, data) => createEntity(data.id, data)),
|
|
20
|
+
find: jest.fn(),
|
|
21
|
+
findOne: jest.fn(),
|
|
22
|
+
flush: jest.fn(),
|
|
23
|
+
getUnitOfWork: jest.fn(() => ({
|
|
24
|
+
getById,
|
|
25
|
+
})),
|
|
26
|
+
isInTransaction: jest.fn(() => false),
|
|
27
|
+
remove: jest.fn(),
|
|
28
|
+
transactional: jest.fn(async (handler) => await handler()),
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
em: em,
|
|
32
|
+
getById,
|
|
33
|
+
mocks: em,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
describe("EntityService", () => {
|
|
37
|
+
it("should create and flush an entity", async () => {
|
|
38
|
+
const { em, mocks } = createEntityManager();
|
|
39
|
+
const service = new entity_service_1.EntityService(TestEntity, em);
|
|
40
|
+
await expect(service.create({
|
|
41
|
+
id: 1,
|
|
42
|
+
name: "created",
|
|
43
|
+
})).resolves.toMatchObject({
|
|
44
|
+
id: 1,
|
|
45
|
+
name: "created",
|
|
46
|
+
});
|
|
47
|
+
expect(mocks.create).toHaveBeenCalledWith(TestEntity, {
|
|
48
|
+
id: 1,
|
|
49
|
+
name: "created",
|
|
50
|
+
}, {
|
|
51
|
+
persist: true,
|
|
52
|
+
});
|
|
53
|
+
expect(mocks.flush).toHaveBeenCalledTimes(1);
|
|
54
|
+
});
|
|
55
|
+
it("should find one entity by plain filter query", async () => {
|
|
56
|
+
const { em, mocks } = createEntityManager();
|
|
57
|
+
const entity = createEntity(1);
|
|
58
|
+
mocks.findOne.mockResolvedValue(entity);
|
|
59
|
+
const service = new entity_service_1.EntityService(TestEntity, em);
|
|
60
|
+
await expect(service.findOne({
|
|
61
|
+
name: "found",
|
|
62
|
+
})).resolves.toBe(entity);
|
|
63
|
+
expect(mocks.findOne).toHaveBeenCalledWith(TestEntity, {
|
|
64
|
+
name: "found",
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
it("should find one entity by id from unit of work", async () => {
|
|
68
|
+
const { em, getById, mocks } = createEntityManager();
|
|
69
|
+
const entity = createEntity(1);
|
|
70
|
+
getById.mockReturnValue(entity);
|
|
71
|
+
const service = new entity_service_1.EntityService(TestEntity, em);
|
|
72
|
+
await expect(service.findOne(1)).resolves.toBe(entity);
|
|
73
|
+
expect(getById).toHaveBeenCalledWith("TestEntity", 1);
|
|
74
|
+
expect(mocks.find).not.toHaveBeenCalled();
|
|
75
|
+
});
|
|
76
|
+
it("should fetch an entity by id when it is not in unit of work", async () => {
|
|
77
|
+
const { em, mocks } = createEntityManager();
|
|
78
|
+
const entity = createEntity(2);
|
|
79
|
+
mocks.find.mockResolvedValue([entity]);
|
|
80
|
+
const service = new entity_service_1.EntityService(TestEntity, em);
|
|
81
|
+
await expect(service.findOne(2)).resolves.toBe(entity);
|
|
82
|
+
expect(mocks.find).toHaveBeenCalledWith(TestEntity, {
|
|
83
|
+
id: {
|
|
84
|
+
$in: [2],
|
|
85
|
+
},
|
|
86
|
+
}, {
|
|
87
|
+
limit: 1,
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
it("should resolve entity references by their id", async () => {
|
|
91
|
+
const { em, mocks } = createEntityManager();
|
|
92
|
+
const entity = createEntity(3);
|
|
93
|
+
mocks.find.mockResolvedValue([entity]);
|
|
94
|
+
const service = new entity_service_1.EntityService(TestEntity, em);
|
|
95
|
+
await expect(service.findOne(createEntity(3))).resolves.toBe(entity);
|
|
96
|
+
});
|
|
97
|
+
it("should throw when findOneOrFail cannot find an entity", async () => {
|
|
98
|
+
const { em, mocks } = createEntityManager();
|
|
99
|
+
mocks.find.mockResolvedValue([]);
|
|
100
|
+
const service = new entity_service_1.EntityService(TestEntity, em);
|
|
101
|
+
await expect(service.findOneOrFail(404)).rejects.toBeInstanceOf(common_1.NotFoundException);
|
|
102
|
+
});
|
|
103
|
+
it("should pass through findAll and count calls", async () => {
|
|
104
|
+
const { em, mocks } = createEntityManager();
|
|
105
|
+
const entities = [createEntity(1)];
|
|
106
|
+
mocks.find.mockResolvedValue(entities);
|
|
107
|
+
mocks.count.mockResolvedValue(1);
|
|
108
|
+
const service = new entity_service_1.EntityService(TestEntity, em);
|
|
109
|
+
await expect(service.findAll({ name: "a" }, { limit: 5 })).resolves.toBe(entities);
|
|
110
|
+
await expect(service.count({ name: "a" }, { schema: "tenant_a" })).resolves.toBe(1);
|
|
111
|
+
expect(mocks.find).toHaveBeenCalledWith(TestEntity, {
|
|
112
|
+
name: "a",
|
|
113
|
+
}, {
|
|
114
|
+
limit: 5,
|
|
115
|
+
});
|
|
116
|
+
expect(mocks.count).toHaveBeenCalledWith(TestEntity, {
|
|
117
|
+
name: "a",
|
|
118
|
+
}, {
|
|
119
|
+
schema: "tenant_a",
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
it("should update existing entities and ignore undefined values", async () => {
|
|
123
|
+
const { em, mocks } = createEntityManager();
|
|
124
|
+
const entity = createEntity(1, {
|
|
125
|
+
name: "old",
|
|
126
|
+
});
|
|
127
|
+
mocks.find.mockResolvedValue([entity]);
|
|
128
|
+
const service = new entity_service_1.EntityService(TestEntity, em);
|
|
129
|
+
const options = {
|
|
130
|
+
mergeObjectProperties: true,
|
|
131
|
+
};
|
|
132
|
+
await expect(service.update(1, {
|
|
133
|
+
deletedAt: undefined,
|
|
134
|
+
name: "new",
|
|
135
|
+
}, options)).resolves.toBe(entity);
|
|
136
|
+
expect(mocks.assign).toHaveBeenCalledWith(entity, {
|
|
137
|
+
name: "new",
|
|
138
|
+
}, options);
|
|
139
|
+
expect(mocks.flush).toHaveBeenCalledTimes(1);
|
|
140
|
+
});
|
|
141
|
+
it("should throw when update cannot find an entity", async () => {
|
|
142
|
+
const { em, mocks } = createEntityManager();
|
|
143
|
+
mocks.find.mockResolvedValue([]);
|
|
144
|
+
const service = new entity_service_1.EntityService(TestEntity, em);
|
|
145
|
+
await expect(service.update(404, {
|
|
146
|
+
name: "missing",
|
|
147
|
+
})).rejects.toBeInstanceOf(common_1.NotFoundException);
|
|
148
|
+
});
|
|
149
|
+
it("should soft-delete entities when the soft-delete key exists", async () => {
|
|
150
|
+
const { em, mocks } = createEntityManager();
|
|
151
|
+
const entity = createEntity(1, {
|
|
152
|
+
deletedAt: undefined,
|
|
153
|
+
});
|
|
154
|
+
mocks.find.mockResolvedValue([entity]);
|
|
155
|
+
const service = new entity_service_1.EntityService(TestEntity, em);
|
|
156
|
+
await expect(service.remove(1)).resolves.toBe(entity);
|
|
157
|
+
expect(entity.deletedAt).toBeInstanceOf(Date);
|
|
158
|
+
expect(mocks.remove).not.toHaveBeenCalled();
|
|
159
|
+
expect(mocks.transactional).toHaveBeenCalledTimes(1);
|
|
160
|
+
});
|
|
161
|
+
it("should remove entities directly inside an existing transaction", async () => {
|
|
162
|
+
const { em, mocks } = createEntityManager();
|
|
163
|
+
const entity = createEntity(1);
|
|
164
|
+
mocks.find.mockResolvedValue([entity]);
|
|
165
|
+
mocks.isInTransaction.mockReturnValue(true);
|
|
166
|
+
const service = new entity_service_1.EntityService(TestEntity, em);
|
|
167
|
+
await expect(service.remove(1, false)).resolves.toBe(entity);
|
|
168
|
+
expect(mocks.remove).toHaveBeenCalledWith(entity);
|
|
169
|
+
expect(mocks.transactional).not.toHaveBeenCalled();
|
|
170
|
+
});
|
|
171
|
+
it("should throw when remove cannot find an entity", async () => {
|
|
172
|
+
const { em, mocks } = createEntityManager();
|
|
173
|
+
mocks.find.mockResolvedValue([]);
|
|
174
|
+
const service = new entity_service_1.EntityService(TestEntity, em);
|
|
175
|
+
await expect(service.remove(404)).rejects.toBeInstanceOf(common_1.NotFoundException);
|
|
176
|
+
});
|
|
177
|
+
it("should iterate entities by id chunks", async () => {
|
|
178
|
+
const { em, mocks } = createEntityManager();
|
|
179
|
+
const firstChunk = [createEntity(1), createEntity(2)];
|
|
180
|
+
const secondChunk = [createEntity(3)];
|
|
181
|
+
mocks.find
|
|
182
|
+
.mockResolvedValueOnce(firstChunk)
|
|
183
|
+
.mockResolvedValueOnce(secondChunk);
|
|
184
|
+
const callback = jest.fn();
|
|
185
|
+
const service = new entity_service_1.EntityService(TestEntity, em);
|
|
186
|
+
await expect(service.chunkById({
|
|
187
|
+
name: "active",
|
|
188
|
+
}, {
|
|
189
|
+
limit: 2,
|
|
190
|
+
}, callback)).resolves.toBe(service);
|
|
191
|
+
expect(callback).toHaveBeenNthCalledWith(1, firstChunk);
|
|
192
|
+
expect(callback).toHaveBeenNthCalledWith(2, secondChunk);
|
|
193
|
+
expect(mocks.find).toHaveBeenNthCalledWith(2, TestEntity, {
|
|
194
|
+
$and: [
|
|
195
|
+
{
|
|
196
|
+
name: "active",
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
id: {
|
|
200
|
+
$gt: 2,
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
],
|
|
204
|
+
}, {
|
|
205
|
+
limit: 2,
|
|
206
|
+
orderBy: {
|
|
207
|
+
id: core_1.QueryOrder.ASC,
|
|
208
|
+
},
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
//# sourceMappingURL=entity.service.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.service.spec.js","sourceRoot":"","sources":["../../src/services/entity.service.spec.ts"],"names":[],"mappings":"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"}
|