@expo/entity 0.38.0 → 0.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/AuthorizationResultBasedEntityAssociationLoader.d.ts +99 -0
- package/build/AuthorizationResultBasedEntityAssociationLoader.js +124 -0
- package/build/AuthorizationResultBasedEntityAssociationLoader.js.map +1 -0
- package/build/AuthorizationResultBasedEntityLoader.d.ts +1 -1
- package/build/AuthorizationResultBasedEntityLoader.js.map +1 -1
- package/build/{EntityMutator.d.ts → AuthorizationResultBasedEntityMutator.d.ts} +5 -17
- package/build/{EntityMutator.js → AuthorizationResultBasedEntityMutator.js} +22 -48
- package/build/AuthorizationResultBasedEntityMutator.js.map +1 -0
- package/build/EnforcingEntityAssociationLoader.d.ts +79 -0
- package/build/EnforcingEntityAssociationLoader.js +62 -0
- package/build/EnforcingEntityAssociationLoader.js.map +1 -0
- package/build/EnforcingEntityCreator.d.ts +24 -0
- package/build/EnforcingEntityCreator.js +32 -0
- package/build/EnforcingEntityCreator.js.map +1 -0
- package/build/EnforcingEntityDeleter.d.ts +17 -0
- package/build/EnforcingEntityDeleter.js +22 -0
- package/build/EnforcingEntityDeleter.js.map +1 -0
- package/build/EnforcingEntityUpdater.d.ts +24 -0
- package/build/EnforcingEntityUpdater.js +32 -0
- package/build/EnforcingEntityUpdater.js.map +1 -0
- package/build/Entity.d.ts +8 -12
- package/build/Entity.js +9 -34
- package/build/Entity.js.map +1 -1
- package/build/EntityAssociationLoader.d.ts +12 -91
- package/build/EntityAssociationLoader.js +20 -126
- package/build/EntityAssociationLoader.js.map +1 -1
- package/build/EntityCompanionProvider.d.ts +2 -2
- package/build/EntityCompanionProvider.js.map +1 -1
- package/build/EntityCreator.d.ts +27 -0
- package/build/EntityCreator.js +39 -0
- package/build/EntityCreator.js.map +1 -0
- package/build/EntityDatabaseAdapter.js +2 -2
- package/build/EntityDatabaseAdapter.js.map +1 -1
- package/build/EntityDeleter.d.ts +27 -0
- package/build/EntityDeleter.js +40 -0
- package/build/EntityDeleter.js.map +1 -0
- package/build/EntityLoader.d.ts +4 -14
- package/build/EntityLoader.js +7 -20
- package/build/EntityLoader.js.map +1 -1
- package/build/EntityLoaderFactory.d.ts +2 -2
- package/build/EntityLoaderFactory.js +4 -2
- package/build/EntityLoaderFactory.js.map +1 -1
- package/build/EntityMutatorFactory.d.ts +4 -4
- package/build/EntityMutatorFactory.js +4 -4
- package/build/EntityMutatorFactory.js.map +1 -1
- package/build/EntitySecondaryCacheLoader.d.ts +3 -3
- package/build/EntitySecondaryCacheLoader.js +1 -3
- package/build/EntitySecondaryCacheLoader.js.map +1 -1
- package/build/EntityUpdater.d.ts +27 -0
- package/build/EntityUpdater.js +40 -0
- package/build/EntityUpdater.js.map +1 -0
- package/build/ReadonlyEntity.d.ts +2 -2
- package/build/ReadonlyEntity.js +4 -6
- package/build/ReadonlyEntity.js.map +1 -1
- package/build/ViewerScopedEntityLoaderFactory.d.ts +2 -2
- package/build/ViewerScopedEntityLoaderFactory.js.map +1 -1
- package/build/ViewerScopedEntityMutatorFactory.d.ts +4 -4
- package/build/ViewerScopedEntityMutatorFactory.js.map +1 -1
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.d.ts +1 -0
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js +273 -0
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +1 -0
- package/build/__tests__/{EntityLoader-constructor-test.js → AuthorizationResultBasedEntityLoader-constructor-test.js} +11 -11
- package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js.map +1 -0
- package/build/__tests__/AuthorizationResultBasedEntityLoader-test.d.ts +1 -0
- package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js +401 -0
- package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js.map +1 -0
- package/build/__tests__/EnforcingEntityAssociationLoader-test.d.ts +1 -0
- package/build/__tests__/EnforcingEntityAssociationLoader-test.js +115 -0
- package/build/__tests__/EnforcingEntityAssociationLoader-test.js.map +1 -0
- package/build/__tests__/Entity-test.js +23 -5
- package/build/__tests__/Entity-test.js.map +1 -1
- package/build/__tests__/EntityAssociationLoader-test.js +14 -184
- package/build/__tests__/EntityAssociationLoader-test.js.map +1 -1
- package/build/__tests__/EntityCommonUseCases-test.js +34 -12
- package/build/__tests__/EntityCommonUseCases-test.js.map +1 -1
- package/build/__tests__/EntityCompanion-test.js +17 -7
- package/build/__tests__/EntityCompanion-test.js.map +1 -1
- package/build/__tests__/EntityDatabaseAdapter-test.js.map +1 -1
- package/build/__tests__/EntityEdges-test.js +41 -23
- package/build/__tests__/EntityEdges-test.js.map +1 -1
- package/build/__tests__/EntityLoader-test.js +22 -386
- package/build/__tests__/EntityLoader-test.js.map +1 -1
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js +4 -3
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +1 -1
- package/build/__tests__/EntityMutator-test.js +67 -70
- package/build/__tests__/EntityMutator-test.js.map +1 -1
- package/build/__tests__/EntityPrivacyPolicy-test.js +17 -7
- package/build/__tests__/EntityPrivacyPolicy-test.js.map +1 -1
- package/build/__tests__/EntitySecondaryCacheLoader-test.js +7 -7
- package/build/__tests__/EntitySecondaryCacheLoader-test.js.map +1 -1
- package/build/__tests__/EntitySelfReferentialEdges-test.js +36 -24
- package/build/__tests__/EntitySelfReferentialEdges-test.js.map +1 -1
- package/build/__tests__/ReadonlyEntity-test.js +1 -1
- package/build/__tests__/ReadonlyEntity-test.js.map +1 -1
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +4 -2
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +1 -1
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +7 -4
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +1 -1
- package/build/__tests__/entityUtils-test.js +8 -0
- package/build/__tests__/entityUtils-test.js.map +1 -1
- package/build/entityUtils.d.ts +7 -0
- package/build/entityUtils.js +20 -10
- package/build/entityUtils.js.map +1 -1
- package/build/errors/EntityCacheAdapterError.js +17 -7
- package/build/errors/EntityCacheAdapterError.js.map +1 -1
- package/build/errors/EntityDatabaseAdapterError.js +17 -7
- package/build/errors/EntityDatabaseAdapterError.js.map +1 -1
- package/build/errors/EntityInvalidFieldValueError.js +17 -7
- package/build/errors/EntityInvalidFieldValueError.js.map +1 -1
- package/build/errors/EntityNotAuthorizedError.js +17 -7
- package/build/errors/EntityNotAuthorizedError.js.map +1 -1
- package/build/errors/EntityNotFoundError.js +17 -7
- package/build/errors/EntityNotFoundError.js.map +1 -1
- package/build/index.d.ts +19 -11
- package/build/index.js +24 -7
- package/build/index.js.map +1 -1
- package/build/internal/EntityFieldTransformationUtils.js.map +1 -1
- package/build/internal/__tests__/EntityDataManager-test.js +42 -32
- package/build/internal/__tests__/EntityDataManager-test.js.map +1 -1
- package/build/internal/__tests__/ReadThroughEntityCache-test.js +17 -7
- package/build/internal/__tests__/ReadThroughEntityCache-test.js.map +1 -1
- package/build/rules/AlwaysAllowPrivacyPolicyRule.js +17 -7
- package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -1
- package/build/rules/AlwaysDenyPrivacyPolicyRule.js +17 -7
- package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -1
- package/build/rules/AlwaysSkipPrivacyPolicyRule.js +17 -7
- package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -1
- package/build/utils/EntityPrivacyUtils.d.ts +32 -4
- package/build/utils/EntityPrivacyUtils.js +68 -24
- package/build/utils/EntityPrivacyUtils.js.map +1 -1
- package/build/utils/__tests__/EntityPrivacyUtils-test.js +148 -23
- package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +1 -1
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +8 -5
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js.map +1 -1
- package/build/utils/collections/__tests__/maps-test.js +1 -1
- package/build/utils/collections/__tests__/maps-test.js.map +1 -1
- package/build/utils/collections/maps.js +2 -2
- package/build/utils/collections/maps.js.map +1 -1
- package/build/utils/mergeEntityMutationTriggerConfigurations.js +1 -2
- package/build/utils/mergeEntityMutationTriggerConfigurations.js.map +1 -1
- package/build/utils/testing/PrivacyPolicyRuleTestUtils.js +1 -1
- package/build/utils/testing/PrivacyPolicyRuleTestUtils.js.map +1 -1
- package/build/utils/testing/StubDatabaseAdapter.js +17 -7
- package/build/utils/testing/StubDatabaseAdapter.js.map +1 -1
- package/build/utils/testing/StubQueryContextProvider.d.ts +1 -3
- package/build/utils/testing/StubQueryContextProvider.js +1 -3
- package/build/utils/testing/StubQueryContextProvider.js.map +1 -1
- package/build/utils/testing/createUnitTestEntityCompanionProvider.js +2 -1
- package/build/utils/testing/createUnitTestEntityCompanionProvider.js.map +1 -1
- package/build/utils/testing/describeFieldTestCase.js +1 -1
- package/build/utils/testing/describeFieldTestCase.js.map +1 -1
- package/package.json +19 -3
- package/src/AuthorizationResultBasedEntityAssociationLoader.ts +492 -0
- package/src/AuthorizationResultBasedEntityLoader.ts +2 -2
- package/src/{EntityMutator.ts → AuthorizationResultBasedEntityMutator.ts} +62 -58
- package/src/EnforcingEntityAssociationLoader.ts +390 -0
- package/src/EnforcingEntityCreator.ts +55 -0
- package/src/EnforcingEntityDeleter.ts +44 -0
- package/src/EnforcingEntityUpdater.ts +55 -0
- package/src/Entity.ts +20 -65
- package/src/EntityAssociationLoader.ts +38 -495
- package/src/EntityCompanionProvider.ts +5 -2
- package/src/EntityCreator.ts +73 -0
- package/src/EntityDeleter.ts +73 -0
- package/src/EntityLoader.ts +10 -49
- package/src/EntityLoaderFactory.ts +20 -3
- package/src/EntityMutatorFactory.ts +32 -7
- package/src/EntitySecondaryCacheLoader.ts +5 -7
- package/src/EntityUpdater.ts +73 -0
- package/src/ReadonlyEntity.ts +14 -13
- package/src/ViewerScopedEntityLoaderFactory.ts +9 -2
- package/src/ViewerScopedEntityMutatorFactory.ts +29 -4
- package/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts +354 -0
- package/src/__tests__/{EntityLoader-constructor-test.ts → AuthorizationResultBasedEntityLoader-constructor-test.ts} +17 -10
- package/src/__tests__/AuthorizationResultBasedEntityLoader-test.ts +730 -0
- package/src/__tests__/EnforcingEntityAssociationLoader-test.ts +253 -0
- package/src/__tests__/Entity-test.ts +24 -5
- package/src/__tests__/EntityAssociationLoader-test.ts +16 -259
- package/src/__tests__/EntityCommonUseCases-test.ts +20 -8
- package/src/__tests__/EntityCompanion-test.ts +1 -1
- package/src/__tests__/EntityDatabaseAdapter-test.ts +6 -6
- package/src/__tests__/EntityEdges-test.ts +24 -16
- package/src/__tests__/EntityLoader-test.ts +25 -675
- package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +4 -3
- package/src/__tests__/EntityMutator-test.ts +116 -103
- package/src/__tests__/EntitySecondaryCacheLoader-test.ts +7 -7
- package/src/__tests__/EntitySelfReferentialEdges-test.ts +36 -24
- package/src/__tests__/ReadonlyEntity-test.ts +1 -1
- package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +4 -2
- package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +7 -4
- package/src/__tests__/entityUtils-test.ts +12 -0
- package/src/entityUtils.ts +24 -9
- package/src/index.ts +19 -11
- package/src/internal/EntityFieldTransformationUtils.ts +2 -2
- package/src/internal/__tests__/EntityDataManager-test.ts +29 -29
- package/src/utils/EntityPrivacyUtils.ts +188 -107
- package/src/utils/__tests__/EntityPrivacyUtils-test.ts +169 -29
- package/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.ts +8 -5
- package/src/utils/collections/__tests__/maps-test.ts +1 -1
- package/src/utils/testing/PrivacyPolicyRuleTestUtils.ts +1 -1
- package/src/utils/testing/StubDatabaseAdapter.ts +1 -1
- package/src/utils/testing/StubQueryContextProvider.ts +1 -3
- package/src/utils/testing/createUnitTestEntityCompanionProvider.ts +3 -1
- package/build/EntityMutator.js.map +0 -1
- package/build/__tests__/EntityLoader-constructor-test.js.map +0 -1
- /package/build/__tests__/{EntityLoader-constructor-test.d.ts → AuthorizationResultBasedEntityLoader-constructor-test.d.ts} +0 -0
|
@@ -87,13 +87,15 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE', () => {
|
|
|
87
87
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
88
88
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
89
89
|
|
|
90
|
-
const parentCategory = await CategoryEntity.creator(viewerContext).
|
|
90
|
+
const parentCategory = await CategoryEntity.creator(viewerContext).enforcing().createAsync();
|
|
91
91
|
const subCategory = await CategoryEntity.creator(viewerContext)
|
|
92
|
+
.enforcing()
|
|
92
93
|
.setField('parent_category_id', parentCategory.getID())
|
|
93
|
-
.
|
|
94
|
+
.createAsync();
|
|
94
95
|
const subSubCategory = await CategoryEntity.creator(viewerContext)
|
|
96
|
+
.enforcing()
|
|
95
97
|
.setField('parent_category_id', subCategory.getID())
|
|
96
|
-
.
|
|
98
|
+
.createAsync();
|
|
97
99
|
|
|
98
100
|
await expect(
|
|
99
101
|
CategoryEntity.loader(viewerContext)
|
|
@@ -109,7 +111,7 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE', () => {
|
|
|
109
111
|
.loadByIDNullableAsync(subSubCategory.getID()),
|
|
110
112
|
).resolves.not.toBeNull();
|
|
111
113
|
|
|
112
|
-
await CategoryEntity.
|
|
114
|
+
await CategoryEntity.deleter(parentCategory).enforcing().deleteAsync();
|
|
113
115
|
|
|
114
116
|
await expect(
|
|
115
117
|
CategoryEntity.loader(viewerContext)
|
|
@@ -132,15 +134,17 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE', () => {
|
|
|
132
134
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
133
135
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
134
136
|
|
|
135
|
-
const categoryA = await CategoryEntity.creator(viewerContext).
|
|
137
|
+
const categoryA = await CategoryEntity.creator(viewerContext).enforcing().createAsync();
|
|
136
138
|
const categoryB = await CategoryEntity.creator(viewerContext)
|
|
139
|
+
.enforcing()
|
|
137
140
|
.setField('parent_category_id', categoryA.getID())
|
|
138
|
-
.
|
|
141
|
+
.createAsync();
|
|
139
142
|
await CategoryEntity.updater(categoryA)
|
|
143
|
+
.enforcing()
|
|
140
144
|
.setField('parent_category_id', categoryB.getID())
|
|
141
|
-
.
|
|
145
|
+
.updateAsync();
|
|
142
146
|
|
|
143
|
-
await CategoryEntity.
|
|
147
|
+
await CategoryEntity.deleter(categoryA).enforcing().deleteAsync();
|
|
144
148
|
|
|
145
149
|
await expect(
|
|
146
150
|
CategoryEntity.loader(viewerContext).enforcing().loadByIDNullableAsync(categoryA.getID()),
|
|
@@ -158,13 +162,15 @@ describe('EntityEdgeDeletionBehavior.SET_NULL', () => {
|
|
|
158
162
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
159
163
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
160
164
|
|
|
161
|
-
const parentCategory = await CategoryEntity.creator(viewerContext).
|
|
165
|
+
const parentCategory = await CategoryEntity.creator(viewerContext).enforcing().createAsync();
|
|
162
166
|
const subCategory = await CategoryEntity.creator(viewerContext)
|
|
167
|
+
.enforcing()
|
|
163
168
|
.setField('parent_category_id', parentCategory.getID())
|
|
164
|
-
.
|
|
169
|
+
.createAsync();
|
|
165
170
|
const subSubCategory = await CategoryEntity.creator(viewerContext)
|
|
171
|
+
.enforcing()
|
|
166
172
|
.setField('parent_category_id', subCategory.getID())
|
|
167
|
-
.
|
|
173
|
+
.createAsync();
|
|
168
174
|
|
|
169
175
|
await expect(
|
|
170
176
|
CategoryEntity.loader(viewerContext)
|
|
@@ -180,7 +186,7 @@ describe('EntityEdgeDeletionBehavior.SET_NULL', () => {
|
|
|
180
186
|
.loadByIDNullableAsync(subSubCategory.getID()),
|
|
181
187
|
).resolves.not.toBeNull();
|
|
182
188
|
|
|
183
|
-
await CategoryEntity.
|
|
189
|
+
await CategoryEntity.deleter(parentCategory).enforcing().deleteAsync();
|
|
184
190
|
|
|
185
191
|
await expect(
|
|
186
192
|
CategoryEntity.loader(viewerContext)
|
|
@@ -205,15 +211,17 @@ describe('EntityEdgeDeletionBehavior.SET_NULL', () => {
|
|
|
205
211
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
206
212
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
207
213
|
|
|
208
|
-
const categoryA = await CategoryEntity.creator(viewerContext).
|
|
214
|
+
const categoryA = await CategoryEntity.creator(viewerContext).enforcing().createAsync();
|
|
209
215
|
const categoryB = await CategoryEntity.creator(viewerContext)
|
|
216
|
+
.enforcing()
|
|
210
217
|
.setField('parent_category_id', categoryA.getID())
|
|
211
|
-
.
|
|
218
|
+
.createAsync();
|
|
212
219
|
await CategoryEntity.updater(categoryA)
|
|
220
|
+
.enforcing()
|
|
213
221
|
.setField('parent_category_id', categoryB.getID())
|
|
214
|
-
.
|
|
222
|
+
.updateAsync();
|
|
215
223
|
|
|
216
|
-
await CategoryEntity.
|
|
224
|
+
await CategoryEntity.deleter(categoryA).enforcing().deleteAsync();
|
|
217
225
|
|
|
218
226
|
const loadedCategoryB = await CategoryEntity.loader(viewerContext)
|
|
219
227
|
.enforcing()
|
|
@@ -231,13 +239,15 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE', () => {
|
|
|
231
239
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
232
240
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
233
241
|
|
|
234
|
-
const parentCategory = await CategoryEntity.creator(viewerContext).
|
|
242
|
+
const parentCategory = await CategoryEntity.creator(viewerContext).enforcing().createAsync();
|
|
235
243
|
const subCategory = await CategoryEntity.creator(viewerContext)
|
|
244
|
+
.enforcing()
|
|
236
245
|
.setField('parent_category_id', parentCategory.getID())
|
|
237
|
-
.
|
|
246
|
+
.createAsync();
|
|
238
247
|
const subSubCategory = await CategoryEntity.creator(viewerContext)
|
|
248
|
+
.enforcing()
|
|
239
249
|
.setField('parent_category_id', subCategory.getID())
|
|
240
|
-
.
|
|
250
|
+
.createAsync();
|
|
241
251
|
|
|
242
252
|
await expect(
|
|
243
253
|
CategoryEntity.loader(viewerContext)
|
|
@@ -271,7 +281,7 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE', () => {
|
|
|
271
281
|
);
|
|
272
282
|
expect(subSubCategoryCachedBefore.get(subCategory.getID())?.status).toEqual(CacheStatus.HIT);
|
|
273
283
|
|
|
274
|
-
await CategoryEntity.
|
|
284
|
+
await CategoryEntity.deleter(parentCategory).enforcing().deleteAsync();
|
|
275
285
|
|
|
276
286
|
const subCategoryCachedAfter = await categoryCacheAdapter.loadManyAsync('parent_category_id', [
|
|
277
287
|
parentCategory.getID(),
|
|
@@ -307,13 +317,15 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE', () => {
|
|
|
307
317
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
308
318
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
309
319
|
|
|
310
|
-
const categoryA = await CategoryEntity.creator(viewerContext).
|
|
320
|
+
const categoryA = await CategoryEntity.creator(viewerContext).enforcing().createAsync();
|
|
311
321
|
const categoryB = await CategoryEntity.creator(viewerContext)
|
|
322
|
+
.enforcing()
|
|
312
323
|
.setField('parent_category_id', categoryA.getID())
|
|
313
|
-
.
|
|
324
|
+
.createAsync();
|
|
314
325
|
await CategoryEntity.updater(categoryA)
|
|
326
|
+
.enforcing()
|
|
315
327
|
.setField('parent_category_id', categoryB.getID())
|
|
316
|
-
.
|
|
328
|
+
.updateAsync();
|
|
317
329
|
|
|
318
330
|
await expect(
|
|
319
331
|
CategoryEntity.loader(viewerContext)
|
|
@@ -338,7 +350,7 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE', () => {
|
|
|
338
350
|
expect(categoriesCachedBefore.get(categoryA.getID())?.status).toEqual(CacheStatus.HIT);
|
|
339
351
|
expect(categoriesCachedBefore.get(categoryB.getID())?.status).toEqual(CacheStatus.HIT);
|
|
340
352
|
|
|
341
|
-
await CategoryEntity.
|
|
353
|
+
await CategoryEntity.deleter(categoryA).enforcing().deleteAsync();
|
|
342
354
|
|
|
343
355
|
const categoriesCachedAfter = await categoryCacheAdapter.loadManyAsync('parent_category_id', [
|
|
344
356
|
categoryA.getID(),
|
|
@@ -127,7 +127,7 @@ describe(ReadonlyEntity, () => {
|
|
|
127
127
|
}).toThrow();
|
|
128
128
|
});
|
|
129
129
|
|
|
130
|
-
it('returns correct
|
|
130
|
+
it('returns correct viewerContext from instantiation', () => {
|
|
131
131
|
const viewerContext = instance(mock(ViewerContext));
|
|
132
132
|
const data = {
|
|
133
133
|
id: 'what',
|
|
@@ -14,15 +14,17 @@ describe('Two entities backed by the same table', () => {
|
|
|
14
14
|
const viewerContext = new ViewerContext(companionProvider);
|
|
15
15
|
|
|
16
16
|
const one = await OneTestEntity.creator(viewerContext)
|
|
17
|
+
.enforcing()
|
|
17
18
|
.setField('entity_type', EntityType.ONE)
|
|
18
19
|
.setField('common_other_field', 'wat')
|
|
19
|
-
.
|
|
20
|
+
.createAsync();
|
|
20
21
|
|
|
21
22
|
const two = await TwoTestEntity.creator(viewerContext)
|
|
23
|
+
.enforcing()
|
|
22
24
|
.setField('entity_type', EntityType.TWO)
|
|
23
25
|
.setField('other_field', 'blah')
|
|
24
26
|
.setField('common_other_field', 'wat')
|
|
25
|
-
.
|
|
27
|
+
.createAsync();
|
|
26
28
|
|
|
27
29
|
expect(one).toBeInstanceOf(OneTestEntity);
|
|
28
30
|
expect(two).toBeInstanceOf(TwoTestEntity);
|
|
@@ -13,8 +13,9 @@ describe('Two entities backed by the same table', () => {
|
|
|
13
13
|
const viewerContext = new ViewerContext(companionProvider);
|
|
14
14
|
|
|
15
15
|
const entity1 = await OneTestEntity.creator(viewerContext)
|
|
16
|
+
.enforcing()
|
|
16
17
|
.setField('fake_field', 'hello')
|
|
17
|
-
.
|
|
18
|
+
.createAsync();
|
|
18
19
|
expect(entity1).toBeInstanceOf(OneTestEntity);
|
|
19
20
|
|
|
20
21
|
const entity2 = await TwoTestEntity.loader(viewerContext)
|
|
@@ -23,9 +24,10 @@ describe('Two entities backed by the same table', () => {
|
|
|
23
24
|
expect(entity2).toBeInstanceOf(TwoTestEntity);
|
|
24
25
|
|
|
25
26
|
const updated2 = await TwoTestEntity.updater(entity2)
|
|
27
|
+
.enforcing()
|
|
26
28
|
.setField('fake_field', 'world')
|
|
27
29
|
.setField('other_field', 'wat')
|
|
28
|
-
.
|
|
30
|
+
.updateAsync();
|
|
29
31
|
expect(updated2.getAllFields()).toMatchObject({
|
|
30
32
|
id: updated2.getID(),
|
|
31
33
|
other_field: 'wat',
|
|
@@ -46,9 +48,10 @@ describe('Two entities backed by the same table', () => {
|
|
|
46
48
|
const viewerContext = new ViewerContext(companionProvider);
|
|
47
49
|
|
|
48
50
|
const entity = await TwoTestEntity.creator(viewerContext)
|
|
51
|
+
.enforcing()
|
|
49
52
|
.setField('fake_field', 'hello')
|
|
50
53
|
.setField('other_field', 'huh')
|
|
51
|
-
.
|
|
54
|
+
.createAsync();
|
|
52
55
|
|
|
53
56
|
const loadedEntity = await TwoTestEntity.loader(viewerContext)
|
|
54
57
|
.enforcing()
|
|
@@ -62,7 +65,7 @@ describe('Two entities backed by the same table', () => {
|
|
|
62
65
|
const loaded1 = await OneTestEntity.loader(viewerContext)
|
|
63
66
|
.enforcing()
|
|
64
67
|
.loadByIDAsync(entity.getID());
|
|
65
|
-
await OneTestEntity.updater(loaded1).setField('fake_field', 'world').
|
|
68
|
+
await OneTestEntity.updater(loaded1).enforcing().setField('fake_field', 'world').updateAsync();
|
|
66
69
|
|
|
67
70
|
const loaded2 = await TwoTestEntity.loader(viewerContext)
|
|
68
71
|
.enforcing()
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
successfulResultsFilterMap,
|
|
8
8
|
failedResultsFilterMap,
|
|
9
9
|
pick,
|
|
10
|
+
partitionArray,
|
|
10
11
|
} from '../entityUtils';
|
|
11
12
|
|
|
12
13
|
describe(enforceResultsAsync, () => {
|
|
@@ -97,3 +98,14 @@ describe(pick, () => {
|
|
|
97
98
|
});
|
|
98
99
|
});
|
|
99
100
|
});
|
|
101
|
+
|
|
102
|
+
describe(partitionArray, () => {
|
|
103
|
+
it('partitions array', () => {
|
|
104
|
+
type A = true;
|
|
105
|
+
type B = false;
|
|
106
|
+
const arr: (A | B)[] = [true, false, true, true, false];
|
|
107
|
+
const [as, bs] = partitionArray<A, B>(arr, (val: A | B): val is A => val === true);
|
|
108
|
+
expect(as).toMatchObject([true, true, true]);
|
|
109
|
+
expect(bs).toMatchObject([false, false]);
|
|
110
|
+
});
|
|
111
|
+
});
|
package/src/entityUtils.ts
CHANGED
|
@@ -71,22 +71,37 @@ export const failedResultsFilterMap = <K, T>(
|
|
|
71
71
|
return ret;
|
|
72
72
|
};
|
|
73
73
|
|
|
74
|
+
export type PartitionArrayPredicate<T, U> = (val: T | U) => val is T;
|
|
75
|
+
|
|
74
76
|
/**
|
|
75
|
-
* Partition array of values
|
|
76
|
-
* @param
|
|
77
|
+
* Partition an array of values into two arrays based on evaluation of a binary predicate.
|
|
78
|
+
* @param values - array of values to partition
|
|
79
|
+
* @param predicate - binary predicate to evaluate partition group of each value
|
|
77
80
|
*/
|
|
78
|
-
export const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
+
export const partitionArray = <T, U>(
|
|
82
|
+
values: (T | U)[],
|
|
83
|
+
predicate: PartitionArrayPredicate<T, U>,
|
|
84
|
+
): [T[], U[]] => {
|
|
85
|
+
const ts: T[] = [];
|
|
86
|
+
const us: U[] = [];
|
|
81
87
|
|
|
82
|
-
for (const
|
|
83
|
-
if (
|
|
84
|
-
|
|
88
|
+
for (const value of values) {
|
|
89
|
+
if (predicate(value)) {
|
|
90
|
+
ts.push(value);
|
|
85
91
|
} else {
|
|
86
|
-
|
|
92
|
+
us.push(value);
|
|
87
93
|
}
|
|
88
94
|
}
|
|
89
95
|
|
|
96
|
+
return [ts, us];
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Partition array of values and errors into an array of values and an array of errors.
|
|
101
|
+
* @param valuesAndErrors - array of values and errors
|
|
102
|
+
*/
|
|
103
|
+
export const partitionErrors = <T>(valuesAndErrors: (T | Error)[]): [T[], Error[]] => {
|
|
104
|
+
const [errors, values] = partitionArray<Error, T>(valuesAndErrors, isError);
|
|
90
105
|
return [values, errors];
|
|
91
106
|
};
|
|
92
107
|
|
package/src/index.ts
CHANGED
|
@@ -4,31 +4,38 @@
|
|
|
4
4
|
* @module @expo/entity
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
export { default as AuthorizationResultBasedEntityAssociationLoader } from './AuthorizationResultBasedEntityAssociationLoader';
|
|
8
|
+
export * from './AuthorizationResultBasedEntityAssociationLoader';
|
|
7
9
|
export { default as AuthorizationResultBasedEntityLoader } from './AuthorizationResultBasedEntityLoader';
|
|
10
|
+
export * from './AuthorizationResultBasedEntityMutator';
|
|
8
11
|
export { default as ComposedEntityCacheAdapter } from './ComposedEntityCacheAdapter';
|
|
9
12
|
export { default as ComposedSecondaryEntityCache } from './ComposedSecondaryEntityCache';
|
|
13
|
+
export { default as EnforcingEntityAssociationLoader } from './EnforcingEntityAssociationLoader';
|
|
14
|
+
export { default as EnforcingEntityCreator } from './EnforcingEntityCreator';
|
|
15
|
+
export { default as EnforcingEntityDeleter } from './EnforcingEntityDeleter';
|
|
10
16
|
export { default as EnforcingEntityLoader } from './EnforcingEntityLoader';
|
|
17
|
+
export { default as EnforcingEntityUpdater } from './EnforcingEntityUpdater';
|
|
11
18
|
export { default as Entity } from './Entity';
|
|
12
19
|
export * from './Entity';
|
|
13
20
|
export { default as EntityAssociationLoader } from './EntityAssociationLoader';
|
|
14
|
-
export * from './EntityAssociationLoader';
|
|
15
21
|
export { default as EntityCompanion } from './EntityCompanion';
|
|
16
22
|
export * from './EntityCompanion';
|
|
17
23
|
export { default as EntityCompanionProvider } from './EntityCompanionProvider';
|
|
18
24
|
export * from './EntityCompanionProvider';
|
|
19
25
|
export { default as EntityConfiguration } from './EntityConfiguration';
|
|
26
|
+
export { default as EntityCreator } from './EntityCreator';
|
|
20
27
|
export { default as EntityDatabaseAdapter } from './EntityDatabaseAdapter';
|
|
21
28
|
export * from './EntityDatabaseAdapter';
|
|
29
|
+
export { default as EntityDeleter } from './EntityDeleter';
|
|
22
30
|
export * from './EntityFieldDefinition';
|
|
23
31
|
export * from './EntityFields';
|
|
24
32
|
export { default as EntityLoader } from './EntityLoader';
|
|
25
33
|
export { default as EntityLoaderFactory } from './EntityLoaderFactory';
|
|
26
34
|
export { default as EntityLoaderUtils } from './EntityLoaderUtils';
|
|
27
35
|
export * from './EntityMutationInfo';
|
|
28
|
-
export { default as EntityMutationTriggerConfiguration } from './EntityMutationTriggerConfiguration';
|
|
36
|
+
export { type default as EntityMutationTriggerConfiguration } from './EntityMutationTriggerConfiguration';
|
|
29
37
|
export * from './EntityMutationTriggerConfiguration';
|
|
30
38
|
export { default as EntityMutationValidator } from './EntityMutationValidator';
|
|
31
|
-
export * from './EntityMutator';
|
|
32
39
|
export { default as EntityMutatorFactory } from './EntityMutatorFactory';
|
|
33
40
|
export { default as EntityPrivacyPolicy } from './EntityPrivacyPolicy';
|
|
34
41
|
export * from './EntityPrivacyPolicy';
|
|
@@ -36,19 +43,20 @@ export * from './EntityQueryContext';
|
|
|
36
43
|
export { default as EntityQueryContextProvider } from './EntityQueryContextProvider';
|
|
37
44
|
export { default as EntitySecondaryCacheLoader } from './EntitySecondaryCacheLoader';
|
|
38
45
|
export * from './EntitySecondaryCacheLoader';
|
|
46
|
+
export { default as EntityUpdater } from './EntityUpdater';
|
|
47
|
+
export * from './entityUtils';
|
|
39
48
|
export { default as GenericEntityCacheAdapter } from './GenericEntityCacheAdapter';
|
|
40
49
|
export { default as GenericSecondaryEntityCache } from './GenericSecondaryEntityCache';
|
|
41
|
-
export { default as IEntityCacheAdapter } from './IEntityCacheAdapter';
|
|
42
|
-
export { default as IEntityCacheAdapterProvider } from './IEntityCacheAdapterProvider';
|
|
43
|
-
export { default as IEntityDatabaseAdapterProvider } from './IEntityDatabaseAdapterProvider';
|
|
44
|
-
export { default as IEntityGenericCacher } from './IEntityGenericCacher';
|
|
50
|
+
export { type default as IEntityCacheAdapter } from './IEntityCacheAdapter';
|
|
51
|
+
export { type default as IEntityCacheAdapterProvider } from './IEntityCacheAdapterProvider';
|
|
52
|
+
export { type default as IEntityDatabaseAdapterProvider } from './IEntityDatabaseAdapterProvider';
|
|
53
|
+
export { type default as IEntityGenericCacher } from './IEntityGenericCacher';
|
|
45
54
|
export { default as ReadonlyEntity } from './ReadonlyEntity';
|
|
46
55
|
export { default as ViewerContext } from './ViewerContext';
|
|
47
56
|
export { default as ViewerScopedEntityCompanion } from './ViewerScopedEntityCompanion';
|
|
48
57
|
export { default as ViewerScopedEntityCompanionProvider } from './ViewerScopedEntityCompanionProvider';
|
|
49
58
|
export { default as ViewerScopedEntityLoaderFactory } from './ViewerScopedEntityLoaderFactory';
|
|
50
59
|
export { default as ViewerScopedEntityMutatorFactory } from './ViewerScopedEntityMutatorFactory';
|
|
51
|
-
export * from './entityUtils';
|
|
52
60
|
export { default as EntityCacheAdapterError } from './errors/EntityCacheAdapterError';
|
|
53
61
|
export * from './errors/EntityCacheAdapterError';
|
|
54
62
|
export { default as EntityDatabaseAdapterError } from './errors/EntityDatabaseAdapterError';
|
|
@@ -64,7 +72,7 @@ export { default as EntityTableDataCoordinator } from './internal/EntityTableDat
|
|
|
64
72
|
export { default as ReadThroughEntityCache } from './internal/ReadThroughEntityCache';
|
|
65
73
|
export * from './internal/ReadThroughEntityCache';
|
|
66
74
|
export * from './metrics/EntityMetricsUtils';
|
|
67
|
-
export { default as IEntityMetricsAdapter } from './metrics/IEntityMetricsAdapter';
|
|
75
|
+
export { type default as IEntityMetricsAdapter } from './metrics/IEntityMetricsAdapter';
|
|
68
76
|
export * from './metrics/IEntityMetricsAdapter';
|
|
69
77
|
export { default as NoOpEntityMetricsAdapter } from './metrics/NoOpEntityMetricsAdapter';
|
|
70
78
|
export { default as AlwaysAllowPrivacyPolicyRule } from './rules/AlwaysAllowPrivacyPolicyRule';
|
|
@@ -75,10 +83,10 @@ export * from './rules/PrivacyPolicyRule';
|
|
|
75
83
|
export * from './utils/EntityPrivacyUtils';
|
|
76
84
|
export * from './utils/mergeEntityMutationTriggerConfigurations';
|
|
77
85
|
export * from './utils/collections/maps';
|
|
86
|
+
export * from './utils/testing/createUnitTestEntityCompanionProvider';
|
|
87
|
+
export { default as describeFieldTestCase } from './utils/testing/describeFieldTestCase';
|
|
78
88
|
export * from './utils/testing/PrivacyPolicyRuleTestUtils';
|
|
79
89
|
export * from './utils/testing/StubCacheAdapter';
|
|
80
90
|
export { default as StubDatabaseAdapter } from './utils/testing/StubDatabaseAdapter';
|
|
81
91
|
export { default as StubDatabaseAdapterProvider } from './utils/testing/StubDatabaseAdapterProvider';
|
|
82
92
|
export { default as StubQueryContextProvider } from './utils/testing/StubQueryContextProvider';
|
|
83
|
-
export * from './utils/testing/createUnitTestEntityCompanionProvider';
|
|
84
|
-
export { default as describeFieldTestCase } from './utils/testing/describeFieldTestCase';
|
|
@@ -26,7 +26,7 @@ export const getDatabaseFieldForEntityField = <TFields extends Record<string, an
|
|
|
26
26
|
): string => {
|
|
27
27
|
const databaseField = entityConfiguration.entityToDBFieldsKeyMapping.get(entityField);
|
|
28
28
|
invariant(databaseField, `database field mapping missing for ${String(entityField)}`);
|
|
29
|
-
return databaseField
|
|
29
|
+
return databaseField;
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
export const transformDatabaseObjectToFields = <TFields extends Record<string, any>>(
|
|
@@ -60,7 +60,7 @@ export const transformFieldsToDatabaseObject = <TFields extends Record<string, a
|
|
|
60
60
|
const val = fields[k]!;
|
|
61
61
|
const databaseKey = entityConfiguration.entityToDBFieldsKeyMapping.get(k as any);
|
|
62
62
|
invariant(databaseKey, `must be database key for field: ${k}`);
|
|
63
|
-
databaseObject[databaseKey
|
|
63
|
+
databaseObject[databaseKey] = maybeTransformFieldValueToDatabaseValue(
|
|
64
64
|
entityConfiguration,
|
|
65
65
|
fieldTransformerMap,
|
|
66
66
|
k,
|
|
@@ -74,11 +74,11 @@ describe(EntityDataManager, () => {
|
|
|
74
74
|
const entityDataManager = new EntityDataManager(
|
|
75
75
|
databaseAdapter,
|
|
76
76
|
entityCache,
|
|
77
|
-
StubQueryContextProvider,
|
|
77
|
+
new StubQueryContextProvider(),
|
|
78
78
|
new NoOpEntityMetricsAdapter(),
|
|
79
79
|
TestEntity.name,
|
|
80
80
|
);
|
|
81
|
-
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
81
|
+
const queryContext = new StubQueryContextProvider().getQueryContext();
|
|
82
82
|
|
|
83
83
|
const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
84
84
|
const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
@@ -122,11 +122,11 @@ describe(EntityDataManager, () => {
|
|
|
122
122
|
const entityDataManager = new EntityDataManager(
|
|
123
123
|
databaseAdapter,
|
|
124
124
|
entityCache,
|
|
125
|
-
StubQueryContextProvider,
|
|
125
|
+
new StubQueryContextProvider(),
|
|
126
126
|
new NoOpEntityMetricsAdapter(),
|
|
127
127
|
TestEntity.name,
|
|
128
128
|
);
|
|
129
|
-
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
129
|
+
const queryContext = new StubQueryContextProvider().getQueryContext();
|
|
130
130
|
|
|
131
131
|
const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
132
132
|
const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
@@ -170,16 +170,16 @@ describe(EntityDataManager, () => {
|
|
|
170
170
|
const entityDataManager = new EntityDataManager(
|
|
171
171
|
databaseAdapter,
|
|
172
172
|
entityCache,
|
|
173
|
-
StubQueryContextProvider,
|
|
173
|
+
new StubQueryContextProvider(),
|
|
174
174
|
new NoOpEntityMetricsAdapter(),
|
|
175
175
|
TestEntity.name,
|
|
176
176
|
);
|
|
177
|
-
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
177
|
+
const queryContext = new StubQueryContextProvider().getQueryContext();
|
|
178
178
|
// use second data manager to ensure that cache is hit instead of data loader
|
|
179
179
|
const entityDataManager2 = new EntityDataManager(
|
|
180
180
|
databaseAdapter,
|
|
181
181
|
entityCache,
|
|
182
|
-
StubQueryContextProvider,
|
|
182
|
+
new StubQueryContextProvider(),
|
|
183
183
|
new NoOpEntityMetricsAdapter(),
|
|
184
184
|
TestEntity.name,
|
|
185
185
|
);
|
|
@@ -214,11 +214,11 @@ describe(EntityDataManager, () => {
|
|
|
214
214
|
const entityDataManager = new EntityDataManager(
|
|
215
215
|
databaseAdapter,
|
|
216
216
|
entityCache,
|
|
217
|
-
StubQueryContextProvider,
|
|
217
|
+
new StubQueryContextProvider(),
|
|
218
218
|
new NoOpEntityMetricsAdapter(),
|
|
219
219
|
TestEntity.name,
|
|
220
220
|
);
|
|
221
|
-
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
221
|
+
const queryContext = new StubQueryContextProvider().getQueryContext();
|
|
222
222
|
|
|
223
223
|
const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
224
224
|
const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
@@ -250,11 +250,11 @@ describe(EntityDataManager, () => {
|
|
|
250
250
|
const entityDataManager = new EntityDataManager(
|
|
251
251
|
databaseAdapter,
|
|
252
252
|
entityCache,
|
|
253
|
-
StubQueryContextProvider,
|
|
253
|
+
new StubQueryContextProvider(),
|
|
254
254
|
new NoOpEntityMetricsAdapter(),
|
|
255
255
|
TestEntity.name,
|
|
256
256
|
);
|
|
257
|
-
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
257
|
+
const queryContext = new StubQueryContextProvider().getQueryContext();
|
|
258
258
|
|
|
259
259
|
const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
260
260
|
const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
@@ -294,11 +294,11 @@ describe(EntityDataManager, () => {
|
|
|
294
294
|
const entityDataManager = new EntityDataManager(
|
|
295
295
|
databaseAdapter,
|
|
296
296
|
entityCache,
|
|
297
|
-
StubQueryContextProvider,
|
|
297
|
+
new StubQueryContextProvider(),
|
|
298
298
|
new NoOpEntityMetricsAdapter(),
|
|
299
299
|
TestEntity.name,
|
|
300
300
|
);
|
|
301
|
-
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
301
|
+
const queryContext = new StubQueryContextProvider().getQueryContext();
|
|
302
302
|
|
|
303
303
|
const objectInQuestion = objects.get(testEntityConfiguration.tableName)![1]!;
|
|
304
304
|
|
|
@@ -306,11 +306,11 @@ describe(EntityDataManager, () => {
|
|
|
306
306
|
const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
307
307
|
|
|
308
308
|
await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'testIndexedField', [
|
|
309
|
-
objectInQuestion['testIndexedField']
|
|
309
|
+
objectInQuestion['testIndexedField'],
|
|
310
310
|
]);
|
|
311
311
|
await entityDataManager.invalidateObjectFieldsAsync(objectInQuestion);
|
|
312
312
|
await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'testIndexedField', [
|
|
313
|
-
objectInQuestion['testIndexedField']
|
|
313
|
+
objectInQuestion['testIndexedField'],
|
|
314
314
|
]);
|
|
315
315
|
|
|
316
316
|
expect(dbSpy).toHaveBeenCalledTimes(2);
|
|
@@ -333,11 +333,11 @@ describe(EntityDataManager, () => {
|
|
|
333
333
|
const entityDataManager = new EntityDataManager(
|
|
334
334
|
databaseAdapter,
|
|
335
335
|
entityCache,
|
|
336
|
-
StubQueryContextProvider,
|
|
336
|
+
new StubQueryContextProvider(),
|
|
337
337
|
new NoOpEntityMetricsAdapter(),
|
|
338
338
|
TestEntity.name,
|
|
339
339
|
);
|
|
340
|
-
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
340
|
+
const queryContext = new StubQueryContextProvider().getQueryContext();
|
|
341
341
|
|
|
342
342
|
const objectInQuestion = objects.get(testEntityConfiguration.tableName)![1]!;
|
|
343
343
|
|
|
@@ -345,11 +345,11 @@ describe(EntityDataManager, () => {
|
|
|
345
345
|
const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
346
346
|
|
|
347
347
|
await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'testIndexedField', [
|
|
348
|
-
objectInQuestion['testIndexedField']
|
|
348
|
+
objectInQuestion['testIndexedField'],
|
|
349
349
|
]);
|
|
350
350
|
await entityDataManager.invalidateObjectFieldsAsync(objectInQuestion);
|
|
351
351
|
await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'customIdField', [
|
|
352
|
-
objectInQuestion['customIdField']
|
|
352
|
+
objectInQuestion['customIdField'],
|
|
353
353
|
]);
|
|
354
354
|
|
|
355
355
|
expect(dbSpy).toHaveBeenCalledTimes(2);
|
|
@@ -372,7 +372,7 @@ describe(EntityDataManager, () => {
|
|
|
372
372
|
const entityDataManager = new EntityDataManager(
|
|
373
373
|
databaseAdapter,
|
|
374
374
|
entityCache,
|
|
375
|
-
StubQueryContextProvider,
|
|
375
|
+
new StubQueryContextProvider(),
|
|
376
376
|
new NoOpEntityMetricsAdapter(),
|
|
377
377
|
TestEntity.name,
|
|
378
378
|
);
|
|
@@ -380,7 +380,7 @@ describe(EntityDataManager, () => {
|
|
|
380
380
|
const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
381
381
|
const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
382
382
|
|
|
383
|
-
const entityDatas = await StubQueryContextProvider.runInTransactionAsync(
|
|
383
|
+
const entityDatas = await new StubQueryContextProvider().runInTransactionAsync(
|
|
384
384
|
async (queryContext) => {
|
|
385
385
|
return await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'customIdField', [
|
|
386
386
|
'1',
|
|
@@ -411,11 +411,11 @@ describe(EntityDataManager, () => {
|
|
|
411
411
|
const entityDataManager = new EntityDataManager(
|
|
412
412
|
databaseAdapter,
|
|
413
413
|
entityCache,
|
|
414
|
-
StubQueryContextProvider,
|
|
414
|
+
new StubQueryContextProvider(),
|
|
415
415
|
new NoOpEntityMetricsAdapter(),
|
|
416
416
|
TestEntity.name,
|
|
417
417
|
);
|
|
418
|
-
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
418
|
+
const queryContext = new StubQueryContextProvider().getQueryContext();
|
|
419
419
|
|
|
420
420
|
const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyByFieldEqualityConjunctionAsync');
|
|
421
421
|
const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
@@ -457,11 +457,11 @@ describe(EntityDataManager, () => {
|
|
|
457
457
|
const entityDataManager = new EntityDataManager(
|
|
458
458
|
databaseAdapter,
|
|
459
459
|
entityCache,
|
|
460
|
-
StubQueryContextProvider,
|
|
460
|
+
new StubQueryContextProvider(),
|
|
461
461
|
new NoOpEntityMetricsAdapter(),
|
|
462
462
|
TestEntity.name,
|
|
463
463
|
);
|
|
464
|
-
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
464
|
+
const queryContext = new StubQueryContextProvider().getQueryContext();
|
|
465
465
|
|
|
466
466
|
await expect(
|
|
467
467
|
entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'customIdField', ['2']),
|
|
@@ -484,11 +484,11 @@ describe(EntityDataManager, () => {
|
|
|
484
484
|
const entityDataManager = new EntityDataManager(
|
|
485
485
|
databaseAdapter,
|
|
486
486
|
entityCache,
|
|
487
|
-
StubQueryContextProvider,
|
|
487
|
+
new StubQueryContextProvider(),
|
|
488
488
|
metricsAdapter,
|
|
489
489
|
TestEntity.name,
|
|
490
490
|
);
|
|
491
|
-
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
491
|
+
const queryContext = new StubQueryContextProvider().getQueryContext();
|
|
492
492
|
|
|
493
493
|
await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'customIdField', ['1']);
|
|
494
494
|
verify(
|
|
@@ -587,11 +587,11 @@ describe(EntityDataManager, () => {
|
|
|
587
587
|
const entityDataManager = new EntityDataManager(
|
|
588
588
|
databaseAdapter,
|
|
589
589
|
entityCache,
|
|
590
|
-
StubQueryContextProvider,
|
|
590
|
+
new StubQueryContextProvider(),
|
|
591
591
|
new NoOpEntityMetricsAdapter(),
|
|
592
592
|
TestEntity.name,
|
|
593
593
|
);
|
|
594
|
-
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
594
|
+
const queryContext = new StubQueryContextProvider().getQueryContext();
|
|
595
595
|
|
|
596
596
|
await expect(
|
|
597
597
|
entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'nullableField', [null as any]),
|