@expo/entity-database-adapter-knex 0.40.0 → 0.42.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.
Files changed (63) hide show
  1. package/build/EntityFields.d.ts +3 -3
  2. package/build/EntityFields.js.map +1 -1
  3. package/build/PostgresEntityDatabaseAdapter.d.ts +2 -2
  4. package/build/PostgresEntityDatabaseAdapter.js +31 -5
  5. package/build/PostgresEntityDatabaseAdapter.js.map +1 -1
  6. package/build/PostgresEntityDatabaseAdapterProvider.d.ts +1 -1
  7. package/build/PostgresEntityDatabaseAdapterProvider.js.map +1 -1
  8. package/build/tsconfig.build.tsbuildinfo +1 -0
  9. package/package.json +9 -7
  10. package/src/EntityFields.ts +11 -3
  11. package/src/PostgresEntityDatabaseAdapter.ts +38 -7
  12. package/src/PostgresEntityDatabaseAdapterProvider.ts +3 -3
  13. package/src/__integration-tests__/PostgresEntityIntegration-test.ts +209 -250
  14. package/src/__integration-tests__/PostgresEntityQueryContextProvider-test.ts +17 -26
  15. package/src/__integration-tests__/PostgresInvalidSetup-test.ts +13 -18
  16. package/src/__integration-tests__/errors-test.ts +3 -15
  17. package/src/{testfixtures → __testfixtures__}/ErrorsTestEntity.ts +9 -12
  18. package/src/{testfixtures → __testfixtures__}/InvalidTestEntity.ts +12 -8
  19. package/src/{testfixtures → __testfixtures__}/PostgresTestEntity.ts +13 -9
  20. package/src/{testfixtures → __testfixtures__}/PostgresTriggerTestEntity.ts +29 -27
  21. package/src/{testfixtures → __testfixtures__}/PostgresUniqueTestEntity.ts +26 -24
  22. package/src/{testfixtures → __testfixtures__}/PostgresValidatorTestEntity.ts +28 -26
  23. package/src/{testfixtures → __testfixtures__}/createKnexIntegrationTestEntityCompanionProvider.ts +1 -1
  24. package/src/__tests__/EntityFields-test.ts +1 -1
  25. package/build/__integration-tests__/PostgresEntityIntegration-test.d.ts +0 -1
  26. package/build/__integration-tests__/PostgresEntityIntegration-test.js +0 -589
  27. package/build/__integration-tests__/PostgresEntityIntegration-test.js.map +0 -1
  28. package/build/__integration-tests__/PostgresEntityQueryContextProvider-test.d.ts +0 -1
  29. package/build/__integration-tests__/PostgresEntityQueryContextProvider-test.js +0 -95
  30. package/build/__integration-tests__/PostgresEntityQueryContextProvider-test.js.map +0 -1
  31. package/build/__integration-tests__/PostgresInvalidSetup-test.d.ts +0 -1
  32. package/build/__integration-tests__/PostgresInvalidSetup-test.js +0 -74
  33. package/build/__integration-tests__/PostgresInvalidSetup-test.js.map +0 -1
  34. package/build/__integration-tests__/errors-test.d.ts +0 -1
  35. package/build/__integration-tests__/errors-test.js +0 -139
  36. package/build/__integration-tests__/errors-test.js.map +0 -1
  37. package/build/__tests__/EntityFields-test.d.ts +0 -1
  38. package/build/__tests__/EntityFields-test.js +0 -8
  39. package/build/__tests__/EntityFields-test.js.map +0 -1
  40. package/build/errors/__tests__/wrapNativePostgresCallAsync-test.d.ts +0 -1
  41. package/build/errors/__tests__/wrapNativePostgresCallAsync-test.js +0 -24
  42. package/build/errors/__tests__/wrapNativePostgresCallAsync-test.js.map +0 -1
  43. package/build/testfixtures/ErrorsTestEntity.d.ts +0 -24
  44. package/build/testfixtures/ErrorsTestEntity.js +0 -106
  45. package/build/testfixtures/ErrorsTestEntity.js.map +0 -1
  46. package/build/testfixtures/InvalidTestEntity.d.ts +0 -19
  47. package/build/testfixtures/InvalidTestEntity.js +0 -61
  48. package/build/testfixtures/InvalidTestEntity.js.map +0 -1
  49. package/build/testfixtures/PostgresTestEntity.d.ts +0 -31
  50. package/build/testfixtures/PostgresTestEntity.js +0 -95
  51. package/build/testfixtures/PostgresTestEntity.js.map +0 -1
  52. package/build/testfixtures/PostgresTriggerTestEntity.d.ts +0 -19
  53. package/build/testfixtures/PostgresTriggerTestEntity.js +0 -101
  54. package/build/testfixtures/PostgresTriggerTestEntity.js.map +0 -1
  55. package/build/testfixtures/PostgresUniqueTestEntity.d.ts +0 -19
  56. package/build/testfixtures/PostgresUniqueTestEntity.js +0 -62
  57. package/build/testfixtures/PostgresUniqueTestEntity.js.map +0 -1
  58. package/build/testfixtures/PostgresValidatorTestEntity.d.ts +0 -19
  59. package/build/testfixtures/PostgresValidatorTestEntity.js +0 -77
  60. package/build/testfixtures/PostgresValidatorTestEntity.js.map +0 -1
  61. package/build/testfixtures/createKnexIntegrationTestEntityCompanionProvider.d.ts +0 -3
  62. package/build/testfixtures/createKnexIntegrationTestEntityCompanionProvider.js +0 -29
  63. package/build/testfixtures/createKnexIntegrationTestEntityCompanionProvider.js.map +0 -1
@@ -1,589 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const entity_1 = require("@expo/entity");
7
- const results_1 = require("@expo/results");
8
- const knex_1 = require("knex");
9
- const nullthrows_1 = __importDefault(require("nullthrows"));
10
- const promises_1 = require("timers/promises");
11
- const PostgresTestEntity_1 = __importDefault(require("../testfixtures/PostgresTestEntity"));
12
- const PostgresTriggerTestEntity_1 = __importDefault(require("../testfixtures/PostgresTriggerTestEntity"));
13
- const PostgresValidatorTestEntity_1 = __importDefault(require("../testfixtures/PostgresValidatorTestEntity"));
14
- const createKnexIntegrationTestEntityCompanionProvider_1 = require("../testfixtures/createKnexIntegrationTestEntityCompanionProvider");
15
- describe('postgres entity integration', () => {
16
- let knexInstance;
17
- beforeAll(() => {
18
- knexInstance = (0, knex_1.knex)({
19
- client: 'pg',
20
- connection: {
21
- user: (0, nullthrows_1.default)(process.env['PGUSER']),
22
- password: (0, nullthrows_1.default)(process.env['PGPASSWORD']),
23
- host: 'localhost',
24
- port: parseInt((0, nullthrows_1.default)(process.env['PGPORT']), 10),
25
- database: (0, nullthrows_1.default)(process.env['PGDATABASE']),
26
- },
27
- });
28
- });
29
- beforeEach(async () => {
30
- await PostgresTestEntity_1.default.createOrTruncatePostgresTableAsync(knexInstance);
31
- });
32
- afterAll(async () => {
33
- await PostgresTestEntity_1.default.dropPostgresTableAsync(knexInstance);
34
- await knexInstance.destroy();
35
- });
36
- it('supports parallel partial updates', async () => {
37
- const vc = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
38
- const entity = await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc)
39
- .withAuthorizationResults()
40
- .setField('name', 'hello')
41
- .createAsync());
42
- // update two different fields at the same time (from the same entity)
43
- await Promise.all([
44
- PostgresTestEntity_1.default.updater(entity).enforcing().setField('hasACat', true).updateAsync(),
45
- PostgresTestEntity_1.default.updater(entity).enforcing().setField('hasADog', false).updateAsync(),
46
- ]);
47
- const loadedEntity = await PostgresTestEntity_1.default.loader(vc)
48
- .enforcing()
49
- .loadByIDAsync(entity.getID());
50
- expect(loadedEntity.getField('hasACat')).toBe(true);
51
- expect(loadedEntity.getField('hasADog')).toBe(false);
52
- });
53
- describe('empty creates and updates', () => {
54
- it('allows empty create', async () => {
55
- const vc = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
56
- const entity = await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc).withAuthorizationResults().createAsync());
57
- expect(entity.getID()).toBeTruthy();
58
- });
59
- it('throws knex error upon empty update', async () => {
60
- const vc = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
61
- const entity = await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc)
62
- .withAuthorizationResults()
63
- .setField('name', 'hello')
64
- .createAsync());
65
- await expect(PostgresTestEntity_1.default.updater(entity).enforcing().updateAsync()).rejects.toThrow();
66
- });
67
- it('throws error upon empty update for stub database adapter to match behavior', async () => {
68
- const vc = new entity_1.ViewerContext((0, entity_1.createUnitTestEntityCompanionProvider)());
69
- const entity = await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc)
70
- .withAuthorizationResults()
71
- .setField('name', 'hello')
72
- .createAsync());
73
- await expect(PostgresTestEntity_1.default.updater(entity).enforcing().updateAsync()).rejects.toThrow();
74
- });
75
- });
76
- it('supports transactions', async () => {
77
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
78
- // put one in the DB
79
- const firstEntity = await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
80
- .withAuthorizationResults()
81
- .setField('name', 'hello')
82
- .createAsync());
83
- await PostgresTestEntity_1.default.loader(vc1).enforcing().loadByIDAsync(firstEntity.getID());
84
- const errorToThrow = new Error('Intentional error');
85
- await expect(vc1.runInTransactionForDatabaseAdaptorFlavorAsync('postgres', async (queryContext) => {
86
- // put another in the DB that will be rolled back due to error thrown
87
- await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1, queryContext)
88
- .withAuthorizationResults()
89
- .setField('name', 'hello')
90
- .createAsync());
91
- throw errorToThrow;
92
- }, {})).rejects.toEqual(errorToThrow);
93
- const entities = await PostgresTestEntity_1.default.loader(vc1)
94
- .enforcing()
95
- .loadManyByFieldEqualingAsync('name', 'hello');
96
- expect(entities).toHaveLength(1);
97
- });
98
- describe('isolation levels', () => {
99
- test.each(Object.values(entity_1.TransactionIsolationLevel))('isolation level: %p', async (isolationLevel) => {
100
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
101
- const firstEntity = await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
102
- .withAuthorizationResults()
103
- .setField('name', 'hello')
104
- .createAsync());
105
- const loadAndUpdateAsync = async (newName, delay) => {
106
- try {
107
- await vc1.runInTransactionForDatabaseAdaptorFlavorAsync('postgres', async (queryContext) => {
108
- const entity = await PostgresTestEntity_1.default.loader(vc1, queryContext)
109
- .enforcing()
110
- .loadByIDAsync(firstEntity.getID());
111
- await (0, promises_1.setTimeout)(delay);
112
- await PostgresTestEntity_1.default.updater(entity, queryContext)
113
- .enforcing()
114
- .setField('name', entity.getField('name') + ',' + newName)
115
- .updateAsync();
116
- }, { isolationLevel });
117
- return {};
118
- }
119
- catch (e) {
120
- return { error: e };
121
- }
122
- };
123
- // do some parallel updates to trigger serializable error in at least some of them
124
- const results = await Promise.all([
125
- loadAndUpdateAsync('hello2', 0),
126
- loadAndUpdateAsync('hello3', 100),
127
- loadAndUpdateAsync('hello4', 200),
128
- loadAndUpdateAsync('hello5', 300),
129
- ]);
130
- if (isolationLevel === entity_1.TransactionIsolationLevel.READ_COMMITTED) {
131
- // read committed seems executes the transactions and doesn't produce a consistent result, but doesn't throw
132
- expect(results.filter((r) => !!r.error).length > 0).toBe(false);
133
- }
134
- else {
135
- // all other isolation levels throw since they're doing nonrepeatable reads
136
- expect(results.filter((r) => r.error?.cause?.code === '40001').length > 0).toBe(true);
137
- }
138
- });
139
- });
140
- describe('JSON fields', () => {
141
- it('supports both types of array fields', async () => {
142
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
143
- const entity = await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
144
- .withAuthorizationResults()
145
- .setField('stringArray', ['hello', 'world'])
146
- .setField('jsonArrayField', ['hello', 'world'])
147
- .createAsync());
148
- expect(entity.getField('stringArray')).toEqual(['hello', 'world']);
149
- expect(entity.getField('jsonArrayField')).toEqual(['hello', 'world']);
150
- });
151
- it('supports object field', async () => {
152
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
153
- const entity = await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
154
- .withAuthorizationResults()
155
- .setField('jsonObjectField', { hello: 'world' })
156
- .createAsync());
157
- expect(entity.getField('jsonObjectField')).toEqual({ hello: 'world' });
158
- });
159
- it('supports MaybeJSONArray field', async () => {
160
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
161
- const entity1 = await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
162
- .withAuthorizationResults()
163
- .setField('maybeJsonArrayField', ['hello', 'world'])
164
- .createAsync());
165
- const entity2 = await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
166
- .withAuthorizationResults()
167
- .setField('maybeJsonArrayField', { hello: 'world' })
168
- .createAsync());
169
- expect(entity1.getField('maybeJsonArrayField')).toEqual(['hello', 'world']);
170
- expect(entity2.getField('maybeJsonArrayField')).toEqual({ hello: 'world' });
171
- });
172
- });
173
- describe('BIGINT fields', () => {
174
- it('supports BIGINT fields', async () => {
175
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
176
- let entity = await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
177
- .withAuthorizationResults()
178
- .setField('bigintField', '72057594037928038')
179
- .createAsync());
180
- expect(entity.getField('bigintField')).toEqual('72057594037928038');
181
- entity = await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.updater(entity)
182
- .withAuthorizationResults()
183
- .setField('bigintField', '10')
184
- .updateAsync());
185
- expect(entity.getField('bigintField')).toEqual('10');
186
- entity = await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.updater(entity)
187
- .withAuthorizationResults()
188
- .setField('bigintField', '-10')
189
- .updateAsync());
190
- expect(entity.getField('bigintField')).toEqual('-10');
191
- });
192
- });
193
- describe('conjunction field equality loading', () => {
194
- it('supports single fieldValue and multiple fieldValues', async () => {
195
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
196
- await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
197
- .withAuthorizationResults()
198
- .setField('name', 'hello')
199
- .setField('hasACat', false)
200
- .setField('hasADog', true)
201
- .createAsync());
202
- await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
203
- .withAuthorizationResults()
204
- .setField('name', 'world')
205
- .setField('hasACat', false)
206
- .setField('hasADog', true)
207
- .createAsync());
208
- await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
209
- .withAuthorizationResults()
210
- .setField('name', 'wat')
211
- .setField('hasACat', false)
212
- .setField('hasADog', false)
213
- .createAsync());
214
- const results = await PostgresTestEntity_1.default.loader(vc1)
215
- .enforcing()
216
- .loadManyByFieldEqualityConjunctionAsync([
217
- {
218
- fieldName: 'hasACat',
219
- fieldValue: false,
220
- },
221
- {
222
- fieldName: 'hasADog',
223
- fieldValue: true,
224
- },
225
- ]);
226
- expect(results).toHaveLength(2);
227
- const results2 = await PostgresTestEntity_1.default.loader(vc1)
228
- .enforcing()
229
- .loadManyByFieldEqualityConjunctionAsync([
230
- { fieldName: 'hasADog', fieldValues: [true, false] },
231
- ]);
232
- expect(results2).toHaveLength(3);
233
- });
234
- it('supports query modifiers', async () => {
235
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
236
- await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
237
- .withAuthorizationResults()
238
- .setField('name', 'a')
239
- .createAsync());
240
- await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
241
- .withAuthorizationResults()
242
- .setField('name', 'b')
243
- .createAsync());
244
- await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
245
- .withAuthorizationResults()
246
- .setField('name', 'c')
247
- .createAsync());
248
- const results = await PostgresTestEntity_1.default.loader(vc1)
249
- .enforcing()
250
- .loadManyByFieldEqualityConjunctionAsync([], {
251
- limit: 2,
252
- offset: 1,
253
- orderBy: [
254
- {
255
- fieldName: 'name',
256
- order: entity_1.OrderByOrdering.DESCENDING,
257
- },
258
- ],
259
- });
260
- expect(results).toHaveLength(2);
261
- expect(results.map((e) => e.getField('name'))).toEqual(['b', 'a']);
262
- });
263
- it('supports null field values', async () => {
264
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
265
- await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
266
- .withAuthorizationResults()
267
- .setField('name', 'a')
268
- .setField('hasADog', true)
269
- .createAsync());
270
- await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
271
- .withAuthorizationResults()
272
- .setField('name', 'b')
273
- .setField('hasADog', true)
274
- .createAsync());
275
- await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
276
- .withAuthorizationResults()
277
- .setField('name', null)
278
- .setField('hasADog', true)
279
- .createAsync());
280
- await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
281
- .withAuthorizationResults()
282
- .setField('name', null)
283
- .setField('hasADog', false)
284
- .createAsync());
285
- const results = await PostgresTestEntity_1.default.loader(vc1)
286
- .enforcing()
287
- .loadManyByFieldEqualityConjunctionAsync([{ fieldName: 'name', fieldValue: null }]);
288
- expect(results).toHaveLength(2);
289
- expect(results[0].getField('name')).toBeNull();
290
- const results2 = await PostgresTestEntity_1.default.loader(vc1)
291
- .enforcing()
292
- .loadManyByFieldEqualityConjunctionAsync([
293
- { fieldName: 'name', fieldValues: ['a', null] },
294
- { fieldName: 'hasADog', fieldValue: true },
295
- ], {
296
- orderBy: [
297
- {
298
- fieldName: 'name',
299
- order: entity_1.OrderByOrdering.DESCENDING,
300
- },
301
- ],
302
- });
303
- expect(results2).toHaveLength(2);
304
- expect(results2.map((e) => e.getField('name'))).toEqual([null, 'a']);
305
- });
306
- });
307
- describe('raw where clause loading', () => {
308
- it('loads by raw where clause', async () => {
309
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
310
- await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
311
- .withAuthorizationResults()
312
- .setField('name', 'hello')
313
- .setField('hasACat', false)
314
- .setField('hasADog', true)
315
- .createAsync());
316
- const results = await PostgresTestEntity_1.default.loader(vc1)
317
- .enforcing()
318
- .loadManyByRawWhereClauseAsync('name = ?', ['hello']);
319
- expect(results).toHaveLength(1);
320
- });
321
- it('throws with invalid where clause', async () => {
322
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
323
- await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
324
- .withAuthorizationResults()
325
- .setField('name', 'hello')
326
- .setField('hasACat', false)
327
- .setField('hasADog', true)
328
- .createAsync());
329
- await expect(PostgresTestEntity_1.default.loader(vc1)
330
- .enforcing()
331
- .loadManyByRawWhereClauseAsync('invalid_column = ?', ['hello'])).rejects.toThrow();
332
- });
333
- it('supports query modifiers', async () => {
334
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
335
- await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
336
- .withAuthorizationResults()
337
- .setField('name', 'a')
338
- .setField('hasADog', true)
339
- .createAsync());
340
- await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
341
- .withAuthorizationResults()
342
- .setField('name', 'b')
343
- .setField('hasADog', true)
344
- .createAsync());
345
- await (0, results_1.enforceAsyncResult)(PostgresTestEntity_1.default.creator(vc1)
346
- .withAuthorizationResults()
347
- .setField('name', 'c')
348
- .setField('hasADog', true)
349
- .createAsync());
350
- const results = await PostgresTestEntity_1.default.loader(vc1)
351
- .enforcing()
352
- .loadManyByRawWhereClauseAsync('has_a_dog = ?', [true], {
353
- limit: 2,
354
- offset: 1,
355
- orderBy: [
356
- {
357
- fieldName: 'name',
358
- order: entity_1.OrderByOrdering.ASCENDING,
359
- },
360
- ],
361
- });
362
- expect(results).toHaveLength(2);
363
- expect(results.map((e) => e.getField('name'))).toEqual(['b', 'c']);
364
- const resultsMultipleOrderBy = await PostgresTestEntity_1.default.loader(vc1)
365
- .enforcing()
366
- .loadManyByRawWhereClauseAsync('has_a_dog = ?', [true], {
367
- orderBy: [
368
- {
369
- fieldName: 'hasADog',
370
- order: entity_1.OrderByOrdering.ASCENDING,
371
- },
372
- {
373
- fieldName: 'name',
374
- order: entity_1.OrderByOrdering.DESCENDING,
375
- },
376
- ],
377
- });
378
- expect(resultsMultipleOrderBy).toHaveLength(3);
379
- expect(resultsMultipleOrderBy.map((e) => e.getField('name'))).toEqual(['c', 'b', 'a']);
380
- const resultsOrderByRaw = await PostgresTestEntity_1.default.loader(vc1)
381
- .enforcing()
382
- .loadManyByRawWhereClauseAsync('has_a_dog = ?', [true], {
383
- orderByRaw: 'has_a_dog ASC, name DESC',
384
- });
385
- expect(resultsOrderByRaw).toHaveLength(3);
386
- expect(resultsOrderByRaw.map((e) => e.getField('name'))).toEqual(['c', 'b', 'a']);
387
- });
388
- });
389
- describe('trigger transaction behavior', () => {
390
- describe('create', () => {
391
- it('rolls back transaction when trigger throws except afterCommit', async () => {
392
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
393
- await expect(PostgresTriggerTestEntity_1.default.creator(vc1)
394
- .enforcing()
395
- .setField('name', 'beforeCreate')
396
- .createAsync()).rejects.toThrowError('name cannot have value beforeCreate');
397
- await expect(PostgresTriggerTestEntity_1.default.loader(vc1)
398
- .enforcing()
399
- .loadByFieldEqualingAsync('name', 'beforeCreate')).resolves.toBeNull();
400
- await expect(PostgresTriggerTestEntity_1.default.creator(vc1)
401
- .enforcing()
402
- .setField('name', 'afterCreate')
403
- .createAsync()).rejects.toThrowError('name cannot have value afterCreate');
404
- await expect(PostgresTriggerTestEntity_1.default.loader(vc1)
405
- .enforcing()
406
- .loadByFieldEqualingAsync('name', 'afterCreate')).resolves.toBeNull();
407
- await expect(PostgresTriggerTestEntity_1.default.creator(vc1)
408
- .enforcing()
409
- .setField('name', 'beforeAll')
410
- .createAsync()).rejects.toThrowError('name cannot have value beforeAll');
411
- await expect(PostgresTriggerTestEntity_1.default.loader(vc1)
412
- .enforcing()
413
- .loadByFieldEqualingAsync('name', 'beforeAll')).resolves.toBeNull();
414
- await expect(PostgresTriggerTestEntity_1.default.creator(vc1)
415
- .enforcing()
416
- .setField('name', 'afterAll')
417
- .createAsync()).rejects.toThrowError('name cannot have value afterAll');
418
- await expect(PostgresTriggerTestEntity_1.default.loader(vc1)
419
- .enforcing()
420
- .loadByFieldEqualingAsync('name', 'afterAll')).resolves.toBeNull();
421
- await expect(PostgresTriggerTestEntity_1.default.creator(vc1)
422
- .enforcing()
423
- .setField('name', 'afterCommit')
424
- .createAsync()).rejects.toThrowError('name cannot have value afterCommit');
425
- await expect(PostgresTriggerTestEntity_1.default.loader(vc1)
426
- .enforcing()
427
- .loadByFieldEqualingAsync('name', 'afterCommit')).resolves.not.toBeNull();
428
- });
429
- });
430
- describe('update', () => {
431
- it('rolls back transaction when trigger throws except afterCommit', async () => {
432
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
433
- const entity = await PostgresTriggerTestEntity_1.default.creator(vc1)
434
- .enforcing()
435
- .setField('name', 'blah')
436
- .createAsync();
437
- await expect(PostgresTriggerTestEntity_1.default.updater(entity)
438
- .enforcing()
439
- .setField('name', 'beforeUpdate')
440
- .updateAsync()).rejects.toThrowError('name cannot have value beforeUpdate');
441
- await expect(PostgresTriggerTestEntity_1.default.loader(vc1)
442
- .enforcing()
443
- .loadByFieldEqualingAsync('name', 'beforeUpdate')).resolves.toBeNull();
444
- await expect(PostgresTriggerTestEntity_1.default.updater(entity)
445
- .enforcing()
446
- .setField('name', 'afterUpdate')
447
- .updateAsync()).rejects.toThrowError('name cannot have value afterUpdate');
448
- await expect(PostgresTriggerTestEntity_1.default.loader(vc1)
449
- .enforcing()
450
- .loadByFieldEqualingAsync('name', 'afterUpdate')).resolves.toBeNull();
451
- await expect(PostgresTriggerTestEntity_1.default.updater(entity)
452
- .enforcing()
453
- .setField('name', 'beforeAll')
454
- .updateAsync()).rejects.toThrowError('name cannot have value beforeAll');
455
- await expect(PostgresTriggerTestEntity_1.default.loader(vc1)
456
- .enforcing()
457
- .loadByFieldEqualingAsync('name', 'beforeAll')).resolves.toBeNull();
458
- await expect(PostgresTriggerTestEntity_1.default.updater(entity)
459
- .enforcing()
460
- .setField('name', 'afterAll')
461
- .updateAsync()).rejects.toThrowError('name cannot have value afterAll');
462
- await expect(PostgresTriggerTestEntity_1.default.loader(vc1)
463
- .enforcing()
464
- .loadByFieldEqualingAsync('name', 'afterAll')).resolves.toBeNull();
465
- await expect(PostgresTriggerTestEntity_1.default.updater(entity)
466
- .enforcing()
467
- .setField('name', 'afterCommit')
468
- .updateAsync()).rejects.toThrowError('name cannot have value afterCommit');
469
- await expect(PostgresTriggerTestEntity_1.default.loader(vc1)
470
- .enforcing()
471
- .loadByFieldEqualingAsync('name', 'afterCommit')).resolves.not.toBeNull();
472
- });
473
- });
474
- describe('delete', () => {
475
- it('rolls back transaction when trigger throws except afterCommit', async () => {
476
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
477
- const entityBeforeDelete = await PostgresTriggerTestEntity_1.default.creator(vc1)
478
- .enforcing()
479
- .setField('name', 'beforeDelete')
480
- .createAsync();
481
- await expect(PostgresTriggerTestEntity_1.default.deleter(entityBeforeDelete).enforcing().deleteAsync()).rejects.toThrowError('name cannot have value beforeDelete');
482
- await expect(PostgresTriggerTestEntity_1.default.loader(vc1)
483
- .enforcing()
484
- .loadByFieldEqualingAsync('name', 'beforeDelete')).resolves.not.toBeNull();
485
- const entityAfterDelete = await PostgresTriggerTestEntity_1.default.creator(vc1)
486
- .enforcing()
487
- .setField('name', 'afterDelete')
488
- .createAsync();
489
- await expect(PostgresTriggerTestEntity_1.default.deleter(entityAfterDelete).enforcing().deleteAsync()).rejects.toThrowError('name cannot have value afterDelete');
490
- await expect(PostgresTriggerTestEntity_1.default.loader(vc1)
491
- .enforcing()
492
- .loadByFieldEqualingAsync('name', 'afterDelete')).resolves.not.toBeNull();
493
- });
494
- });
495
- describe('validation transaction behavior', () => {
496
- describe('create', () => {
497
- it('rolls back transaction when trigger throws ', async () => {
498
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
499
- await expect(PostgresValidatorTestEntity_1.default.creator(vc1)
500
- .enforcing()
501
- .setField('name', 'beforeCreateAndBeforeUpdate')
502
- .createAsync()).rejects.toThrowError('name cannot have value beforeCreateAndBeforeUpdate');
503
- await expect(PostgresValidatorTestEntity_1.default.loader(vc1)
504
- .enforcing()
505
- .loadByFieldEqualingAsync('name', 'beforeCreateAndBeforeUpdate')).resolves.toBeNull();
506
- });
507
- });
508
- describe('update', () => {
509
- it('rolls back transaction when trigger throws ', async () => {
510
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
511
- const entity = await PostgresValidatorTestEntity_1.default.creator(vc1)
512
- .enforcing()
513
- .setField('name', 'blah')
514
- .createAsync();
515
- await expect(PostgresValidatorTestEntity_1.default.updater(entity)
516
- .enforcing()
517
- .setField('name', 'beforeCreateAndBeforeUpdate')
518
- .updateAsync()).rejects.toThrowError('name cannot have value beforeCreateAndBeforeUpdate');
519
- await expect(PostgresValidatorTestEntity_1.default.loader(vc1)
520
- .enforcing()
521
- .loadByFieldEqualingAsync('name', 'beforeCreateAndBeforeUpdate')).resolves.toBeNull();
522
- });
523
- });
524
- describe('delete', () => {
525
- it('validation should not run on a delete mutation', async () => {
526
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
527
- const entityToDelete = await PostgresValidatorTestEntity_1.default.creator(vc1)
528
- .enforcing()
529
- .setField('name', 'shouldBeDeleted')
530
- .createAsync();
531
- await PostgresValidatorTestEntity_1.default.deleter(entityToDelete).enforcing().deleteAsync();
532
- await expect(PostgresValidatorTestEntity_1.default.loader(vc1)
533
- .enforcing()
534
- .loadByFieldEqualingAsync('name', 'shouldBeDeleted')).resolves.toBeNull();
535
- });
536
- });
537
- });
538
- });
539
- describe('queryContext callback behavior', () => {
540
- it('calls callbacks correctly', async () => {
541
- const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
542
- let preCommitCallCount = 0;
543
- let preCommitInnerCallCount = 0;
544
- let postCommitCallCount = 0;
545
- await vc1.runInTransactionForDatabaseAdaptorFlavorAsync('postgres', async (queryContext) => {
546
- queryContext.appendPostCommitCallback(async () => {
547
- postCommitCallCount++;
548
- });
549
- queryContext.appendPreCommitCallback(async () => {
550
- preCommitCallCount++;
551
- }, 0);
552
- await queryContext.runInNestedTransactionAsync(async (innerQueryContext) => {
553
- innerQueryContext.appendPostCommitCallback(async () => {
554
- postCommitCallCount++;
555
- });
556
- innerQueryContext.appendPreCommitCallback(async () => {
557
- preCommitInnerCallCount++;
558
- }, 0);
559
- });
560
- // this one throws so its post commit shouldn't execute
561
- try {
562
- await queryContext.runInNestedTransactionAsync(async (innerQueryContext) => {
563
- innerQueryContext.appendPostCommitCallback(async () => {
564
- postCommitCallCount++;
565
- });
566
- innerQueryContext.appendPreCommitCallback(async () => {
567
- preCommitInnerCallCount++;
568
- throw Error('wat');
569
- }, 0);
570
- });
571
- }
572
- catch { }
573
- });
574
- await expect(vc1.runInTransactionForDatabaseAdaptorFlavorAsync('postgres', async (queryContext) => {
575
- queryContext.appendPostCommitCallback(async () => {
576
- postCommitCallCount++;
577
- });
578
- queryContext.appendPreCommitCallback(async () => {
579
- preCommitCallCount++;
580
- throw Error('wat');
581
- }, 0);
582
- })).rejects.toThrowError('wat');
583
- expect(preCommitCallCount).toBe(2);
584
- expect(preCommitInnerCallCount).toBe(2);
585
- expect(postCommitCallCount).toBe(2);
586
- });
587
- });
588
- });
589
- //# sourceMappingURL=PostgresEntityIntegration-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PostgresEntityIntegration-test.js","sourceRoot":"","sources":["../../src/__integration-tests__/PostgresEntityIntegration-test.ts"],"names":[],"mappings":"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"}