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