@expo/entity-database-adapter-knex 0.45.0 → 0.46.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 (91) hide show
  1. package/build/src/EntityFields.js.map +1 -0
  2. package/build/{PostgresEntityDatabaseAdapter.d.ts → src/PostgresEntityDatabaseAdapter.d.ts} +2 -2
  3. package/build/{PostgresEntityDatabaseAdapter.js → src/PostgresEntityDatabaseAdapter.js} +10 -12
  4. package/build/src/PostgresEntityDatabaseAdapter.js.map +1 -0
  5. package/build/{PostgresEntityDatabaseAdapterProvider.d.ts → src/PostgresEntityDatabaseAdapterProvider.d.ts} +2 -2
  6. package/build/src/PostgresEntityDatabaseAdapterProvider.js +11 -0
  7. package/build/src/PostgresEntityDatabaseAdapterProvider.js.map +1 -0
  8. package/build/{PostgresEntityQueryContextProvider.d.ts → src/PostgresEntityQueryContextProvider.d.ts} +1 -1
  9. package/build/{PostgresEntityQueryContextProvider.js → src/PostgresEntityQueryContextProvider.js} +2 -1
  10. package/build/src/PostgresEntityQueryContextProvider.js.map +1 -0
  11. package/build/src/__integration-tests__/EntityCreationUtils-test.d.ts +1 -0
  12. package/build/src/__integration-tests__/EntityCreationUtils-test.js +105 -0
  13. package/build/src/__integration-tests__/EntityCreationUtils-test.js.map +1 -0
  14. package/build/src/__integration-tests__/PostgresEntityIntegration-test.d.ts +1 -0
  15. package/build/src/__integration-tests__/PostgresEntityIntegration-test.js +497 -0
  16. package/build/src/__integration-tests__/PostgresEntityIntegration-test.js.map +1 -0
  17. package/build/src/__integration-tests__/PostgresEntityQueryContextProvider-test.d.ts +1 -0
  18. package/build/src/__integration-tests__/PostgresEntityQueryContextProvider-test.js +294 -0
  19. package/build/src/__integration-tests__/PostgresEntityQueryContextProvider-test.js.map +1 -0
  20. package/build/src/__integration-tests__/PostgresInvalidSetup-test.d.ts +1 -0
  21. package/build/src/__integration-tests__/PostgresInvalidSetup-test.js +70 -0
  22. package/build/src/__integration-tests__/PostgresInvalidSetup-test.js.map +1 -0
  23. package/build/src/__integration-tests__/errors-test.d.ts +1 -0
  24. package/build/src/__integration-tests__/errors-test.js +128 -0
  25. package/build/src/__integration-tests__/errors-test.js.map +1 -0
  26. package/build/src/__testfixtures__/ErrorsTestEntity.d.ts +24 -0
  27. package/build/src/__testfixtures__/ErrorsTestEntity.js +107 -0
  28. package/build/src/__testfixtures__/ErrorsTestEntity.js.map +1 -0
  29. package/build/src/__testfixtures__/InvalidTestEntity.d.ts +19 -0
  30. package/build/src/__testfixtures__/InvalidTestEntity.js +62 -0
  31. package/build/src/__testfixtures__/InvalidTestEntity.js.map +1 -0
  32. package/build/src/__testfixtures__/PostgresTestEntity.d.ts +31 -0
  33. package/build/src/__testfixtures__/PostgresTestEntity.js +96 -0
  34. package/build/src/__testfixtures__/PostgresTestEntity.js.map +1 -0
  35. package/build/src/__testfixtures__/PostgresTriggerTestEntity.d.ts +19 -0
  36. package/build/src/__testfixtures__/PostgresTriggerTestEntity.js +101 -0
  37. package/build/src/__testfixtures__/PostgresTriggerTestEntity.js.map +1 -0
  38. package/build/src/__testfixtures__/PostgresUniqueTestEntity.d.ts +25 -0
  39. package/build/src/__testfixtures__/PostgresUniqueTestEntity.js +71 -0
  40. package/build/src/__testfixtures__/PostgresUniqueTestEntity.js.map +1 -0
  41. package/build/src/__testfixtures__/PostgresValidatorTestEntity.d.ts +19 -0
  42. package/build/src/__testfixtures__/PostgresValidatorTestEntity.js +77 -0
  43. package/build/src/__testfixtures__/PostgresValidatorTestEntity.js.map +1 -0
  44. package/build/src/__testfixtures__/createKnexIntegrationTestEntityCompanionProvider.d.ts +3 -0
  45. package/build/src/__testfixtures__/createKnexIntegrationTestEntityCompanionProvider.js +27 -0
  46. package/build/src/__testfixtures__/createKnexIntegrationTestEntityCompanionProvider.js.map +1 -0
  47. package/build/src/__tests__/EntityFields-test.d.ts +1 -0
  48. package/build/src/__tests__/EntityFields-test.js +8 -0
  49. package/build/src/__tests__/EntityFields-test.js.map +1 -0
  50. package/build/src/errors/__tests__/wrapNativePostgresCallAsync-test.d.ts +1 -0
  51. package/build/src/errors/__tests__/wrapNativePostgresCallAsync-test.js +22 -0
  52. package/build/src/errors/__tests__/wrapNativePostgresCallAsync-test.js.map +1 -0
  53. package/build/src/errors/wrapNativePostgresCallAsync.d.ts +1 -0
  54. package/build/{errors → src/errors}/wrapNativePostgresCallAsync.js +1 -1
  55. package/build/src/errors/wrapNativePostgresCallAsync.js.map +1 -0
  56. package/build/src/index.d.ts +9 -0
  57. package/build/src/index.js +27 -0
  58. package/build/src/index.js.map +1 -0
  59. package/build/tsconfig.tsbuildinfo +1 -0
  60. package/package.json +13 -26
  61. package/src/PostgresEntityDatabaseAdapter.ts +5 -5
  62. package/src/PostgresEntityDatabaseAdapterProvider.ts +3 -5
  63. package/src/PostgresEntityQueryContextProvider.ts +1 -1
  64. package/src/__integration-tests__/EntityCreationUtils-test.ts +2 -1
  65. package/src/__integration-tests__/PostgresEntityIntegration-test.ts +20 -19
  66. package/src/__integration-tests__/PostgresEntityQueryContextProvider-test.ts +3 -2
  67. package/src/__integration-tests__/PostgresInvalidSetup-test.ts +5 -4
  68. package/src/__integration-tests__/errors-test.ts +3 -2
  69. package/src/__testfixtures__/ErrorsTestEntity.ts +6 -6
  70. package/src/__testfixtures__/InvalidTestEntity.ts +6 -10
  71. package/src/__testfixtures__/PostgresTestEntity.ts +8 -12
  72. package/src/__testfixtures__/PostgresTriggerTestEntity.ts +7 -7
  73. package/src/__testfixtures__/PostgresUniqueTestEntity.ts +6 -6
  74. package/src/__testfixtures__/PostgresValidatorTestEntity.ts +6 -6
  75. package/src/__testfixtures__/createKnexIntegrationTestEntityCompanionProvider.ts +4 -4
  76. package/src/errors/__tests__/wrapNativePostgresCallAsync-test.ts +3 -1
  77. package/src/errors/wrapNativePostgresCallAsync.ts +2 -2
  78. package/src/index.ts +4 -4
  79. package/build/EntityFields.js.map +0 -1
  80. package/build/PostgresEntityDatabaseAdapter.js.map +0 -1
  81. package/build/PostgresEntityDatabaseAdapterProvider.js +0 -13
  82. package/build/PostgresEntityDatabaseAdapterProvider.js.map +0 -1
  83. package/build/PostgresEntityQueryContextProvider.js.map +0 -1
  84. package/build/errors/wrapNativePostgresCallAsync.d.ts +0 -1
  85. package/build/errors/wrapNativePostgresCallAsync.js.map +0 -1
  86. package/build/index.d.ts +0 -9
  87. package/build/index.js +0 -35
  88. package/build/index.js.map +0 -1
  89. package/build/tsconfig.build.tsbuildinfo +0 -1
  90. /package/build/{EntityFields.d.ts → src/EntityFields.d.ts} +0 -0
  91. /package/build/{EntityFields.js → src/EntityFields.js} +0 -0
@@ -0,0 +1,294 @@
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 globals_1 = require("@jest/globals");
8
+ const knex_1 = require("knex");
9
+ const nullthrows_1 = __importDefault(require("nullthrows"));
10
+ const PostgresEntityQueryContextProvider_1 = require("../PostgresEntityQueryContextProvider");
11
+ const PostgresUniqueTestEntity_1 = require("../__testfixtures__/PostgresUniqueTestEntity");
12
+ const createKnexIntegrationTestEntityCompanionProvider_1 = require("../__testfixtures__/createKnexIntegrationTestEntityCompanionProvider");
13
+ (0, globals_1.describe)(PostgresEntityQueryContextProvider_1.PostgresEntityQueryContextProvider, () => {
14
+ let knexInstance;
15
+ (0, globals_1.beforeAll)(() => {
16
+ knexInstance = (0, knex_1.knex)({
17
+ client: 'pg',
18
+ connection: {
19
+ user: (0, nullthrows_1.default)(process.env['PGUSER']),
20
+ password: (0, nullthrows_1.default)(process.env['PGPASSWORD']),
21
+ host: 'localhost',
22
+ port: parseInt((0, nullthrows_1.default)(process.env['PGPORT']), 10),
23
+ database: (0, nullthrows_1.default)(process.env['PGDATABASE']),
24
+ },
25
+ });
26
+ });
27
+ (0, globals_1.beforeEach)(async () => {
28
+ await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.createOrTruncatePostgresTableAsync(knexInstance);
29
+ });
30
+ (0, globals_1.afterAll)(async () => {
31
+ await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.dropPostgresTableAsync(knexInstance);
32
+ await knexInstance.destroy();
33
+ });
34
+ (0, globals_1.it)('supports nested transactions', async () => {
35
+ const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
36
+ await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.creator(vc1).setField('name', 'unique').createAsync();
37
+ const id = (await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.creator(vc1).setField('name', 'wat').createAsync()).getID();
38
+ await vc1.runInTransactionForDatabaseAdaptorFlavorAsync('postgres', async (queryContext) => {
39
+ const entity = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, queryContext).loadByIDAsync(id);
40
+ await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.updater(entity, queryContext)
41
+ .setField('name', 'wat2')
42
+ .updateAsync();
43
+ // ensure the outer transaction is not aborted due to postgres error in inner transaction,
44
+ // in this case the error triggered is a unique constraint violation from a conflict with the first entity created above
45
+ try {
46
+ await queryContext.runInNestedTransactionAsync(async (innerQueryContext) => {
47
+ const entity = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, innerQueryContext).loadByIDAsync(id);
48
+ await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.updater(entity, innerQueryContext)
49
+ .setField('name', 'unique')
50
+ .updateAsync();
51
+ });
52
+ }
53
+ catch { }
54
+ const entity2 = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, queryContext).loadByIDAsync(id);
55
+ await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.updater(entity2, queryContext)
56
+ .setField('name', 'wat3')
57
+ .updateAsync();
58
+ });
59
+ const entityLoaded = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1).loadByIDAsync(id);
60
+ (0, globals_1.expect)(entityLoaded.getField('name')).toEqual('wat3');
61
+ });
62
+ (0, globals_1.test)('dataloader consistency with nested transactions', async () => {
63
+ const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
64
+ // put it in local dataloader
65
+ const entity = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.creator(vc1)
66
+ .setField('name', 'who')
67
+ .createAsync();
68
+ const entityLoaded = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1).loadByIDAsync(entity.getID());
69
+ (0, globals_1.expect)(entityLoaded.getField('name')).toEqual('who');
70
+ await vc1.runInTransactionForDatabaseAdaptorFlavorAsync('postgres', async (queryContext) => {
71
+ const entityLoadedOuter = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1).loadByIDAsync(entity.getID());
72
+ (0, globals_1.expect)(entityLoadedOuter.getField('name')).toEqual('who');
73
+ await queryContext.runInNestedTransactionAsync(async (innerQueryContext) => {
74
+ const entityLoadedInner = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, innerQueryContext).loadByIDAsync(entity.getID());
75
+ const updatedEntity = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.updater(entityLoadedInner, innerQueryContext)
76
+ .setField('name', 'wat')
77
+ .updateAsync();
78
+ (0, globals_1.expect)(updatedEntity.getField('name')).toEqual('wat');
79
+ });
80
+ const entityLoadedAfterNested = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, queryContext).loadByIDAsync(entity.getID());
81
+ (0, globals_1.expect)(entityLoadedAfterNested.getField('name')).toEqual('wat');
82
+ });
83
+ const entityLoadedAfterTransaction = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1).loadByIDAsync(entity.getID());
84
+ (0, globals_1.expect)(entityLoadedAfterTransaction.getField('name')).toEqual('wat');
85
+ });
86
+ (0, globals_1.test)('dataloader consistency with nested transactions that throw', async () => {
87
+ const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
88
+ // put it in local dataloader
89
+ const entity = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.creator(vc1)
90
+ .setField('name', 'who')
91
+ .createAsync();
92
+ const entityLoaded = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1).loadByIDAsync(entity.getID());
93
+ (0, globals_1.expect)(entityLoaded.getField('name')).toEqual('who');
94
+ await vc1.runInTransactionForDatabaseAdaptorFlavorAsync('postgres', async (queryContext) => {
95
+ const entityLoadedOuter = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1).loadByIDAsync(entity.getID());
96
+ (0, globals_1.expect)(entityLoadedOuter.getField('name')).toEqual('who');
97
+ try {
98
+ await queryContext.runInNestedTransactionAsync(async (innerQueryContext) => {
99
+ const entityLoadedInner = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, innerQueryContext).loadByIDAsync(entity.getID());
100
+ const updatedEntity = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.updater(entityLoadedInner, innerQueryContext)
101
+ .setField('name', 'wat')
102
+ .updateAsync();
103
+ (0, globals_1.expect)(updatedEntity.getField('name')).toEqual('wat');
104
+ throw new Error('wat');
105
+ });
106
+ }
107
+ catch { }
108
+ const entityLoadedAfterNested = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, queryContext).loadByIDAsync(entity.getID());
109
+ (0, globals_1.expect)(entityLoadedAfterNested.getField('name')).toEqual('who');
110
+ });
111
+ const entityLoadedAfterTransaction = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1).loadByIDAsync(entity.getID());
112
+ (0, globals_1.expect)(entityLoadedAfterTransaction.getField('name')).toEqual('who');
113
+ });
114
+ (0, globals_1.test)('dataloader consistency with concurrent loads outside of transaction', async () => {
115
+ const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
116
+ // put it in local dataloader
117
+ const entity = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.creator(vc1)
118
+ .setField('name', 'who')
119
+ .createAsync();
120
+ const entityLoaded = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1).loadByIDAsync(entity.getID());
121
+ (0, globals_1.expect)(entityLoaded.getField('name')).toEqual('who');
122
+ let openBarrier1;
123
+ const barrier1 = new Promise((resolve) => {
124
+ openBarrier1 = resolve;
125
+ });
126
+ let openBarrier2;
127
+ const barrier2 = new Promise((resolve) => {
128
+ openBarrier2 = resolve;
129
+ });
130
+ await Promise.all([
131
+ vc1.runInTransactionForDatabaseAdaptorFlavorAsync('postgres', async (queryContext) => {
132
+ const entityLoadedOuter = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1).loadByIDAsync(entity.getID());
133
+ (0, globals_1.expect)(entityLoadedOuter.getField('name')).toEqual('who');
134
+ await queryContext.runInNestedTransactionAsync(async (innerQueryContext) => {
135
+ const entityLoadedInner = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, innerQueryContext).loadByIDAsync(entity.getID());
136
+ const updatedEntity = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.updater(entityLoadedInner, innerQueryContext)
137
+ .setField('name', 'wat')
138
+ .updateAsync();
139
+ (0, globals_1.expect)(updatedEntity.getField('name')).toEqual('wat');
140
+ const entityLoadedAfterUpdate = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, innerQueryContext).loadByIDAsync(entity.getID());
141
+ (0, globals_1.expect)(entityLoadedAfterUpdate.getField('name')).toEqual('wat');
142
+ });
143
+ openBarrier1();
144
+ await barrier2;
145
+ }),
146
+ (async () => {
147
+ await barrier1;
148
+ const entityLoadedOutsideOfTransactionsBeforeNestedCommit = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1).loadByIDAsync(entity.getID());
149
+ (0, globals_1.expect)(entityLoadedOutsideOfTransactionsBeforeNestedCommit.getField('name')).toEqual('who');
150
+ openBarrier2();
151
+ })(),
152
+ ]);
153
+ const entityLoadedAfterTransaction = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1).loadByIDAsync(entity.getID());
154
+ (0, globals_1.expect)(entityLoadedAfterTransaction.getField('name')).toEqual('wat');
155
+ });
156
+ (0, globals_1.test)('consistent behavior with and without transactional dataloader for concurrent loads outside of nested transaction', async () => {
157
+ // Subtransactions are not supported in postgres. See #194 for more info.
158
+ // Instead, savepoints and rollbacks are used to simulate subtransactions, which results in non-isolated read semantics.
159
+ //
160
+ // This test tests the same behavior exists whether there is a dataloader or not in transactions, thus indicating that
161
+ // the dataloader invalidation is not the issue.
162
+ const runTest = async (transactionalDataLoaderMode) => {
163
+ const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
164
+ await vc1.runInTransactionForDatabaseAdaptorFlavorAsync('postgres', async (outerQueryContext) => {
165
+ // put it in local dataloader
166
+ const entity = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.creator(vc1, outerQueryContext)
167
+ .setField('name', 'who')
168
+ .createAsync();
169
+ const entityLoaded = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, outerQueryContext).loadByIDAsync(entity.getID());
170
+ if (entityLoaded.getField('name') !== 'who') {
171
+ throw new Error('entity loaded wrong value');
172
+ }
173
+ let openBarrier1;
174
+ const barrier1 = new Promise((resolve) => {
175
+ openBarrier1 = resolve;
176
+ });
177
+ let openBarrier2;
178
+ const barrier2 = new Promise((resolve) => {
179
+ openBarrier2 = resolve;
180
+ });
181
+ await Promise.all([
182
+ outerQueryContext.runInNestedTransactionAsync(async (innerQueryContext) => {
183
+ const entityLoadedInner = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, innerQueryContext).loadByIDAsync(entity.getID());
184
+ const updatedEntity = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.updater(entityLoadedInner, innerQueryContext)
185
+ .setField('name', 'wat')
186
+ .updateAsync();
187
+ if (updatedEntity.getField('name') !== 'wat') {
188
+ throw new Error('entity updated wrong value');
189
+ }
190
+ const entityLoadedAfterUpdate = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, innerQueryContext).loadByIDAsync(entity.getID());
191
+ if (entityLoadedAfterUpdate.getField('name') !== 'wat') {
192
+ throw new Error('entity loaded wrong value after update');
193
+ }
194
+ openBarrier1();
195
+ await barrier2;
196
+ }),
197
+ (async () => {
198
+ await barrier1;
199
+ // if postgres supported nested transactions, this would read isolated from the nested transaction above
200
+ // but since it doesn't, this will read the updated value.
201
+ const entityLoadedInOuterTransactionBeforeNestedCommit = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, outerQueryContext).loadByIDAsync(entity.getID());
202
+ if (entityLoadedInOuterTransactionBeforeNestedCommit.getField('name') !== 'who') {
203
+ throw new Error('outer transaction read wrong value');
204
+ }
205
+ openBarrier2();
206
+ })(),
207
+ ]);
208
+ const entityLoadedAfterTransaction = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, outerQueryContext).loadByIDAsync(entity.getID());
209
+ if (entityLoadedAfterTransaction.getField('name') !== 'wat') {
210
+ throw new Error('entity loaded wrong value after transaction');
211
+ }
212
+ }, { transactionalDataLoaderMode });
213
+ };
214
+ await (0, globals_1.expect)(runTest(entity_1.TransactionalDataLoaderMode.DISABLED)).rejects.toThrow('outer transaction read wrong value');
215
+ await (0, globals_1.expect)(runTest(entity_1.TransactionalDataLoaderMode.ENABLED)).rejects.toThrow('outer transaction read wrong value');
216
+ await (0, globals_1.expect)(runTest(entity_1.TransactionalDataLoaderMode.ENABLED_BATCH_ONLY)).rejects.toThrow('outer transaction read wrong value');
217
+ });
218
+ (0, globals_1.test)('consistent behavior with and without transactional dataloader for concurrent mutations outside of nested transaction that reads', async () => {
219
+ // this test has a similar issue to the one above: absence of real nested transactions in postgres
220
+ // this should have the same behavior no matter if there is a dataloader or not in transactions
221
+ const runTest = async (transactionalDataLoaderMode) => {
222
+ const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
223
+ await vc1.runInTransactionForDatabaseAdaptorFlavorAsync('postgres', async (outerQueryContext) => {
224
+ // put it in local dataloader
225
+ const entity = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.creator(vc1, outerQueryContext)
226
+ .setField('name', 'who')
227
+ .createAsync();
228
+ const entityLoaded = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, outerQueryContext).loadByIDAsync(entity.getID());
229
+ if (entityLoaded.getField('name') !== 'who') {
230
+ throw new Error('entity loaded wrong value');
231
+ }
232
+ let openBarrier1;
233
+ const barrier1 = new Promise((resolve) => {
234
+ openBarrier1 = resolve;
235
+ });
236
+ let openBarrier2;
237
+ const barrier2 = new Promise((resolve) => {
238
+ openBarrier2 = resolve;
239
+ });
240
+ await Promise.all([
241
+ (async () => {
242
+ await barrier1;
243
+ const entityLoadedOuterAgain = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, outerQueryContext).loadByIDAsync(entity.getID());
244
+ const updatedEntity = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.updater(entityLoadedOuterAgain, outerQueryContext)
245
+ .setField('name', 'wat')
246
+ .updateAsync();
247
+ if (updatedEntity.getField('name') !== 'wat') {
248
+ throw new Error('entity updated wrong value');
249
+ }
250
+ openBarrier2();
251
+ })(),
252
+ outerQueryContext.runInNestedTransactionAsync(async (innerQueryContext) => {
253
+ const entityLoadedInner = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, innerQueryContext).loadByIDAsync(entity.getID());
254
+ if (entityLoadedInner.getField('name') !== 'who') {
255
+ throw new Error('entity loaded inner wrong value 1');
256
+ }
257
+ openBarrier1();
258
+ await barrier2;
259
+ const entityLoadedInnerAgain = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, innerQueryContext).loadByIDAsync(entity.getID());
260
+ if (entityLoadedInnerAgain.getField('name') !== 'who') {
261
+ throw new Error('entity loaded inner wrong value 2');
262
+ }
263
+ }),
264
+ ]);
265
+ const entityLoadedAfterTransaction = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, outerQueryContext).loadByIDAsync(entity.getID());
266
+ if (entityLoadedAfterTransaction.getField('name') !== 'wat') {
267
+ throw new Error('entity loaded wrong value after transaction');
268
+ }
269
+ }, { transactionalDataLoaderMode });
270
+ };
271
+ await (0, globals_1.expect)(runTest(entity_1.TransactionalDataLoaderMode.DISABLED)).rejects.toThrow('entity loaded inner wrong value 2');
272
+ await (0, globals_1.expect)(runTest(entity_1.TransactionalDataLoaderMode.ENABLED)).rejects.toThrow('entity loaded inner wrong value 2');
273
+ await (0, globals_1.expect)(runTest(entity_1.TransactionalDataLoaderMode.ENABLED_BATCH_ONLY)).rejects.toThrow('entity loaded inner wrong value 2');
274
+ });
275
+ (0, globals_1.it)('supports multi-nested transactions', async () => {
276
+ const vc1 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
277
+ const id = (await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.creator(vc1).setField('name', 'wat').createAsync()).getID();
278
+ await vc1.runInTransactionForDatabaseAdaptorFlavorAsync('postgres', async (queryContext) => {
279
+ await queryContext.runInNestedTransactionAsync(async (innerQueryContext) => {
280
+ await innerQueryContext.runInNestedTransactionAsync(async (innerQueryContex2) => {
281
+ await innerQueryContex2.runInNestedTransactionAsync(async (innerQueryContex3) => {
282
+ const entity = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1, innerQueryContex3).loadByIDAsync(id);
283
+ await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.updater(entity, innerQueryContex3)
284
+ .setField('name', 'wat3')
285
+ .updateAsync();
286
+ });
287
+ });
288
+ });
289
+ });
290
+ const entityLoaded = await PostgresUniqueTestEntity_1.PostgresUniqueTestEntity.loader(vc1).loadByIDAsync(id);
291
+ (0, globals_1.expect)(entityLoaded.getField('name')).toEqual('wat3');
292
+ });
293
+ });
294
+ //# sourceMappingURL=PostgresEntityQueryContextProvider-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgresEntityQueryContextProvider-test.js","sourceRoot":"","sources":["../../../src/__integration-tests__/PostgresEntityQueryContextProvider-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
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 globals_1 = require("@jest/globals");
9
+ const knex_1 = require("knex");
10
+ const nullthrows_1 = __importDefault(require("nullthrows"));
11
+ const InvalidTestEntity_1 = require("../__testfixtures__/InvalidTestEntity");
12
+ const createKnexIntegrationTestEntityCompanionProvider_1 = require("../__testfixtures__/createKnexIntegrationTestEntityCompanionProvider");
13
+ (0, globals_1.describe)('postgres entity integration', () => {
14
+ let knexInstance;
15
+ (0, globals_1.beforeAll)(() => {
16
+ knexInstance = (0, knex_1.knex)({
17
+ client: 'pg',
18
+ connection: {
19
+ user: (0, nullthrows_1.default)(process.env['PGUSER']),
20
+ password: (0, nullthrows_1.default)(process.env['PGPASSWORD']),
21
+ host: 'localhost',
22
+ port: parseInt((0, nullthrows_1.default)(process.env['PGPORT']), 10),
23
+ database: (0, nullthrows_1.default)(process.env['PGDATABASE']),
24
+ },
25
+ });
26
+ });
27
+ (0, globals_1.beforeEach)(async () => {
28
+ await InvalidTestEntity_1.InvalidTestEntity.createOrTruncatePostgresTableAsync(knexInstance);
29
+ });
30
+ (0, globals_1.afterAll)(async () => {
31
+ await InvalidTestEntity_1.InvalidTestEntity.dropPostgresTableAsync(knexInstance);
32
+ await knexInstance.destroy();
33
+ });
34
+ (0, globals_1.describe)('invalid operation result counts', () => {
35
+ (0, globals_1.it)('throws after deletion of multiple rows or no rows', async () => {
36
+ const vc = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
37
+ const entity1 = await (0, results_1.enforceAsyncResult)(InvalidTestEntity_1.InvalidTestEntity.creatorWithAuthorizationResults(vc)
38
+ .setField('id', 1)
39
+ .setField('name', 'hello')
40
+ .createAsync());
41
+ await (0, results_1.enforceAsyncResult)(InvalidTestEntity_1.InvalidTestEntity.creatorWithAuthorizationResults(vc)
42
+ .setField('id', 1)
43
+ .setField('name', 'world')
44
+ .createAsync());
45
+ await (0, globals_1.expect)(InvalidTestEntity_1.InvalidTestEntity.deleter(entity1).deleteAsync()).rejects.toThrow('Excessive deletions from database adapter delete');
46
+ });
47
+ (0, globals_1.it)('throws after update of multiple rows', async () => {
48
+ const vc = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
49
+ const entity1 = await (0, results_1.enforceAsyncResult)(InvalidTestEntity_1.InvalidTestEntity.creatorWithAuthorizationResults(vc)
50
+ .setField('id', 1)
51
+ .setField('name', 'hello')
52
+ .createAsync());
53
+ await (0, results_1.enforceAsyncResult)(InvalidTestEntity_1.InvalidTestEntity.creatorWithAuthorizationResults(vc)
54
+ .setField('id', 1)
55
+ .setField('name', 'world')
56
+ .createAsync());
57
+ await (0, globals_1.expect)(InvalidTestEntity_1.InvalidTestEntity.updater(entity1).setField('name', 'blah').updateAsync()).rejects.toThrow('Excessive results from database adapter update');
58
+ });
59
+ (0, globals_1.it)('throws after update of no rows', async () => {
60
+ const vc = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
61
+ const entity1 = await (0, results_1.enforceAsyncResult)(InvalidTestEntity_1.InvalidTestEntity.creatorWithAuthorizationResults(vc)
62
+ .setField('id', 1)
63
+ .setField('name', 'hello')
64
+ .createAsync());
65
+ await InvalidTestEntity_1.InvalidTestEntity.deleter(entity1).deleteAsync();
66
+ await (0, globals_1.expect)(InvalidTestEntity_1.InvalidTestEntity.updater(entity1).setField('name', 'blah').updateAsync()).rejects.toThrow('Empty results from database adapter update');
67
+ });
68
+ });
69
+ });
70
+ //# sourceMappingURL=PostgresInvalidSetup-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgresInvalidSetup-test.js","sourceRoot":"","sources":["../../../src/__integration-tests__/PostgresInvalidSetup-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,128 @@
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 globals_1 = require("@jest/globals");
8
+ const knex_1 = require("knex");
9
+ const nullthrows_1 = __importDefault(require("nullthrows"));
10
+ const ErrorsTestEntity_1 = require("../__testfixtures__/ErrorsTestEntity");
11
+ const createKnexIntegrationTestEntityCompanionProvider_1 = require("../__testfixtures__/createKnexIntegrationTestEntityCompanionProvider");
12
+ (0, globals_1.describe)('postgres errors', () => {
13
+ let knexInstance;
14
+ (0, globals_1.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
+ (0, globals_1.beforeEach)(async () => {
27
+ await ErrorsTestEntity_1.ErrorsTestEntity.createOrTruncatePostgresTableAsync(knexInstance);
28
+ });
29
+ (0, globals_1.afterAll)(async () => {
30
+ await ErrorsTestEntity_1.ErrorsTestEntity.dropPostgresTableAsync(knexInstance);
31
+ await knexInstance.destroy();
32
+ });
33
+ (0, globals_1.it)('throws EntityDatabaseAdapterTransientError on Knex timeout', async () => {
34
+ const vc = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
35
+ await ErrorsTestEntity_1.ErrorsTestEntity.creator(vc)
36
+ .setField('id', 1)
37
+ .setField('fieldNonNull', 'hello')
38
+ .createAsync();
39
+ const shortTimeoutKnexInstance = (0, knex_1.knex)({
40
+ client: 'pg',
41
+ connection: {
42
+ user: (0, nullthrows_1.default)(process.env['PGUSER']),
43
+ password: (0, nullthrows_1.default)(process.env['PGPASSWORD']),
44
+ host: 'localhost',
45
+ port: parseInt((0, nullthrows_1.default)(process.env['PGPORT']), 10),
46
+ database: (0, nullthrows_1.default)(process.env['PGDATABASE']),
47
+ },
48
+ acquireConnectionTimeout: 1,
49
+ });
50
+ const vc2 = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(shortTimeoutKnexInstance));
51
+ await (0, globals_1.expect)(ErrorsTestEntity_1.ErrorsTestEntity.loader(vc2).loadByIDAsync(1)).rejects.toThrow(entity_1.EntityDatabaseAdapterTransientError);
52
+ await shortTimeoutKnexInstance.destroy();
53
+ });
54
+ (0, globals_1.it)('throws EntityDatabaseAdapterNotNullConstraintError when not null is violated', async () => {
55
+ const vc = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
56
+ await (0, globals_1.expect)(ErrorsTestEntity_1.ErrorsTestEntity.creator(vc)
57
+ .setField('id', 1)
58
+ .setField('fieldNonNull', null)
59
+ .createAsync()).rejects.toThrow(entity_1.EntityDatabaseAdapterNotNullConstraintError);
60
+ });
61
+ (0, globals_1.it)('throws EntityDatabaseAdapterForeignKeyConstraintError when foreign key is violated', async () => {
62
+ const vc = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
63
+ await (0, globals_1.expect)(ErrorsTestEntity_1.ErrorsTestEntity.creator(vc)
64
+ .setField('id', 1)
65
+ .setField('fieldNonNull', 'hello')
66
+ .setField('fieldForeignKey', 2)
67
+ .createAsync()).rejects.toThrow(entity_1.EntityDatabaseAdapterForeignKeyConstraintError);
68
+ });
69
+ (0, globals_1.it)('throws EntityDatabaseAdapterUniqueConstraintError when primary key unique constraint is violated', async () => {
70
+ const vc = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
71
+ await ErrorsTestEntity_1.ErrorsTestEntity.creator(vc)
72
+ .setField('id', 1)
73
+ .setField('fieldNonNull', 'hello')
74
+ .createAsync();
75
+ await (0, globals_1.expect)(ErrorsTestEntity_1.ErrorsTestEntity.creator(vc)
76
+ .setField('id', 1)
77
+ .setField('fieldNonNull', 'hello')
78
+ .createAsync()).rejects.toThrow(entity_1.EntityDatabaseAdapterUniqueConstraintError);
79
+ });
80
+ (0, globals_1.it)('throws EntityDatabaseAdapterUniqueConstraintError when unique constraint is violated', async () => {
81
+ const vc = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
82
+ await ErrorsTestEntity_1.ErrorsTestEntity.creator(vc)
83
+ .setField('id', 2)
84
+ .setField('fieldNonNull', 'hello')
85
+ .setField('fieldUnique', 'hello')
86
+ .createAsync();
87
+ await (0, globals_1.expect)(ErrorsTestEntity_1.ErrorsTestEntity.creator(vc)
88
+ .setField('id', 1)
89
+ .setField('fieldNonNull', 'hello')
90
+ .setField('fieldUnique', 'hello')
91
+ .createAsync()).rejects.toThrow(entity_1.EntityDatabaseAdapterUniqueConstraintError);
92
+ });
93
+ (0, globals_1.it)('throws EntityDatabaseAdapterCheckConstraintError when check constraint is violated', async () => {
94
+ const vc = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
95
+ await (0, globals_1.expect)(ErrorsTestEntity_1.ErrorsTestEntity.creator(vc)
96
+ .setField('id', 1)
97
+ .setField('fieldNonNull', 'hello')
98
+ .setField('checkLessThan5', 2)
99
+ .createAsync()).resolves.toBeTruthy();
100
+ await (0, globals_1.expect)(ErrorsTestEntity_1.ErrorsTestEntity.creator(vc)
101
+ .setField('id', 2)
102
+ .setField('fieldNonNull', 'hello')
103
+ .setField('checkLessThan5', 10)
104
+ .createAsync()).rejects.toThrow(entity_1.EntityDatabaseAdapterCheckConstraintError);
105
+ });
106
+ (0, globals_1.it)('throws EntityDatabaseAdapterExclusionConstraintError when exclusion constraint is violated', async () => {
107
+ const vc = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
108
+ await (0, globals_1.expect)(ErrorsTestEntity_1.ErrorsTestEntity.creator(vc)
109
+ .setField('id', 1)
110
+ .setField('fieldNonNull', 'hello')
111
+ .setField('fieldExclusion', 'what')
112
+ .createAsync()).resolves.toBeTruthy();
113
+ await (0, globals_1.expect)(ErrorsTestEntity_1.ErrorsTestEntity.creator(vc)
114
+ .setField('id', 2)
115
+ .setField('fieldNonNull', 'hello')
116
+ .setField('fieldExclusion', 'what')
117
+ .createAsync()).rejects.toThrow(entity_1.EntityDatabaseAdapterExclusionConstraintError);
118
+ });
119
+ (0, globals_1.it)('throws EntityDatabaseAdapterUnknownError otherwise', async () => {
120
+ const vc = new entity_1.ViewerContext((0, createKnexIntegrationTestEntityCompanionProvider_1.createKnexIntegrationTestEntityCompanionProvider)(knexInstance));
121
+ await (0, globals_1.expect)(ErrorsTestEntity_1.ErrorsTestEntity.creator(vc)
122
+ .setField('id', 1)
123
+ .setField('fieldNonNull', 'hello')
124
+ .setField('nonExistentColumn', 'what')
125
+ .createAsync()).rejects.toThrow(entity_1.EntityDatabaseAdapterUnknownError);
126
+ });
127
+ });
128
+ //# sourceMappingURL=errors-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors-test.js","sourceRoot":"","sources":["../../../src/__integration-tests__/errors-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { AlwaysAllowPrivacyPolicyRule, Entity, EntityCompanionDefinition, EntityConfiguration, EntityPrivacyPolicy, ViewerContext } from '@expo/entity';
2
+ import { Knex } from 'knex';
3
+ type ErrorsTestEntityFields = {
4
+ id: number;
5
+ fieldNonNull: string;
6
+ fieldForeignKey: number | null;
7
+ fieldUnique: string | null;
8
+ checkLessThan5: number | null;
9
+ fieldExclusion: string | null;
10
+ nonExistentColumn: string | null;
11
+ };
12
+ export declare class ErrorsTestEntity extends Entity<ErrorsTestEntityFields, 'id', ViewerContext> {
13
+ static defineCompanionDefinition(): EntityCompanionDefinition<ErrorsTestEntityFields, 'id', ViewerContext, ErrorsTestEntity, ErrorsTestEntityPrivacyPolicy>;
14
+ static createOrTruncatePostgresTableAsync(knex: Knex): Promise<void>;
15
+ static dropPostgresTableAsync(knex: Knex): Promise<void>;
16
+ }
17
+ declare class ErrorsTestEntityPrivacyPolicy extends EntityPrivacyPolicy<ErrorsTestEntityFields, 'id', ViewerContext, ErrorsTestEntity> {
18
+ protected readonly createRules: AlwaysAllowPrivacyPolicyRule<ErrorsTestEntityFields, "id", ViewerContext, ErrorsTestEntity, keyof ErrorsTestEntityFields>[];
19
+ protected readonly readRules: AlwaysAllowPrivacyPolicyRule<ErrorsTestEntityFields, "id", ViewerContext, ErrorsTestEntity, keyof ErrorsTestEntityFields>[];
20
+ protected readonly updateRules: AlwaysAllowPrivacyPolicyRule<ErrorsTestEntityFields, "id", ViewerContext, ErrorsTestEntity, keyof ErrorsTestEntityFields>[];
21
+ protected readonly deleteRules: AlwaysAllowPrivacyPolicyRule<ErrorsTestEntityFields, "id", ViewerContext, ErrorsTestEntity, keyof ErrorsTestEntityFields>[];
22
+ }
23
+ export declare const ErrorsTestEntityConfiguration: EntityConfiguration<ErrorsTestEntityFields, "id">;
24
+ export {};