@expo/entity 0.39.0 → 0.41.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 +122 -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 +26 -8
- package/build/Entity.js +38 -25
- 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/EntityCreator.d.ts +27 -0
- package/build/EntityCreator.js +39 -0
- package/build/EntityCreator.js.map +1 -0
- 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 +24 -5
- package/build/ReadonlyEntity.js +33 -7
- 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 +242 -0
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +1 -0
- package/build/__tests__/{EntityLoader-constructor-test.js → AuthorizationResultBasedEntityLoader-constructor-test.js} +10 -10
- 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 +63 -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 -20
- 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__/EntityEdges-test.js +57 -71
- 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 +6 -9
- 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 +47 -81
- package/build/__tests__/EntitySelfReferentialEdges-test.js.map +1 -1
- package/build/__tests__/ReadonlyEntity-test.js +40 -7
- package/build/__tests__/ReadonlyEntity-test.js.map +1 -1
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +6 -10
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +1 -1
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +10 -22
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.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/__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.js +4 -8
- package/build/utils/EntityPrivacyUtils.js.map +1 -1
- package/build/utils/__tests__/EntityPrivacyUtils-test.js +38 -28
- package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +1 -1
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +5 -5
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.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/package.json +19 -3
- package/src/AuthorizationResultBasedEntityAssociationLoader.ts +490 -0
- package/src/AuthorizationResultBasedEntityLoader.ts +1 -1
- 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 +140 -29
- package/src/EntityAssociationLoader.ts +38 -495
- 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 +121 -7
- package/src/ViewerScopedEntityLoaderFactory.ts +9 -2
- package/src/ViewerScopedEntityMutatorFactory.ts +29 -4
- package/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts +323 -0
- package/src/__tests__/{EntityLoader-constructor-test.ts → AuthorizationResultBasedEntityLoader-constructor-test.ts} +16 -9
- package/src/__tests__/AuthorizationResultBasedEntityLoader-test.ts +730 -0
- package/src/__tests__/EnforcingEntityAssociationLoader-test.ts +253 -0
- package/src/__tests__/Entity-test.ts +77 -5
- package/src/__tests__/EntityAssociationLoader-test.ts +15 -260
- package/src/__tests__/EntityCommonUseCases-test.ts +24 -15
- package/src/__tests__/EntityEdges-test.ts +44 -64
- package/src/__tests__/EntityLoader-test.ts +29 -681
- package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +8 -9
- package/src/__tests__/EntityMutator-test.ts +116 -103
- package/src/__tests__/EntitySecondaryCacheLoader-test.ts +7 -7
- package/src/__tests__/EntitySelfReferentialEdges-test.ts +65 -81
- package/src/__tests__/ReadonlyEntity-test.ts +47 -7
- package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +15 -15
- package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +19 -22
- package/src/index.ts +19 -11
- package/src/internal/__tests__/EntityDataManager-test.ts +25 -25
- package/src/utils/EntityPrivacyUtils.ts +10 -13
- package/src/utils/__tests__/EntityPrivacyUtils-test.ts +21 -23
- package/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.ts +5 -5
- 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
|
@@ -118,15 +118,21 @@ it('runs through a common workflow', async () => {
|
|
|
118
118
|
const vc2 = new TestUserViewerContext(entityCompanionProvider, uuidv4());
|
|
119
119
|
|
|
120
120
|
const blahOwner1 = await enforceAsyncResult(
|
|
121
|
-
BlahEntity.
|
|
121
|
+
BlahEntity.creatorWithAuthorizationResults(vc1)
|
|
122
|
+
.setField('ownerID', vc1.getUserID())
|
|
123
|
+
.createAsync(),
|
|
122
124
|
);
|
|
123
125
|
|
|
124
126
|
await enforceAsyncResult(
|
|
125
|
-
BlahEntity.
|
|
127
|
+
BlahEntity.creatorWithAuthorizationResults(vc1)
|
|
128
|
+
.setField('ownerID', vc1.getUserID())
|
|
129
|
+
.createAsync(),
|
|
126
130
|
);
|
|
127
131
|
|
|
128
132
|
const blahOwner2 = await enforceAsyncResult(
|
|
129
|
-
BlahEntity.
|
|
133
|
+
BlahEntity.creatorWithAuthorizationResults(vc2)
|
|
134
|
+
.setField('ownerID', vc2.getUserID())
|
|
135
|
+
.createAsync(),
|
|
130
136
|
);
|
|
131
137
|
|
|
132
138
|
// sanity check created objects
|
|
@@ -136,40 +142,43 @@ it('runs through a common workflow', async () => {
|
|
|
136
142
|
// check that two people can't read each others data
|
|
137
143
|
await expect(
|
|
138
144
|
enforceAsyncResult(
|
|
139
|
-
BlahEntity.
|
|
145
|
+
BlahEntity.loaderWithAuthorizationResults(vc1).loadByIDAsync(blahOwner2.getID()),
|
|
140
146
|
),
|
|
141
147
|
).rejects.toBeInstanceOf(EntityNotAuthorizedError);
|
|
142
148
|
await expect(
|
|
143
149
|
enforceAsyncResult(
|
|
144
|
-
BlahEntity.
|
|
150
|
+
BlahEntity.loaderWithAuthorizationResults(vc2).loadByIDAsync(blahOwner1.getID()),
|
|
145
151
|
),
|
|
146
152
|
).rejects.toBeInstanceOf(EntityNotAuthorizedError);
|
|
147
153
|
|
|
148
154
|
// check that all of owner 1's objects can be loaded
|
|
149
155
|
const results = await enforceResultsAsync(
|
|
150
|
-
BlahEntity.
|
|
151
|
-
|
|
152
|
-
|
|
156
|
+
BlahEntity.loaderWithAuthorizationResults(vc1).loadManyByFieldEqualingAsync(
|
|
157
|
+
'ownerID',
|
|
158
|
+
vc1.getUserID(),
|
|
159
|
+
),
|
|
153
160
|
);
|
|
154
161
|
expect(results).toHaveLength(2);
|
|
155
162
|
|
|
156
163
|
// check that two people can't create objects owned by others
|
|
157
164
|
await expect(
|
|
158
165
|
enforceAsyncResult(
|
|
159
|
-
BlahEntity.
|
|
166
|
+
BlahEntity.creatorWithAuthorizationResults(vc2)
|
|
167
|
+
.setField('ownerID', blahOwner1.getID())
|
|
168
|
+
.createAsync(),
|
|
160
169
|
),
|
|
161
170
|
).rejects.toBeInstanceOf(EntityNotAuthorizedError);
|
|
162
171
|
|
|
163
172
|
// check that empty load many returns nothing
|
|
164
|
-
const results2 = await BlahEntity.
|
|
165
|
-
|
|
166
|
-
|
|
173
|
+
const results2 = await BlahEntity.loaderWithAuthorizationResults(
|
|
174
|
+
vc1,
|
|
175
|
+
).loadManyByFieldEqualingManyAsync('ownerID', []);
|
|
167
176
|
for (const value in results2.values) {
|
|
168
177
|
expect(value).toHaveLength(0);
|
|
169
178
|
}
|
|
170
179
|
|
|
171
180
|
// check that the user can't delete their own data (as specified by privacy rules)
|
|
172
|
-
await expect(
|
|
173
|
-
|
|
174
|
-
);
|
|
181
|
+
await expect(
|
|
182
|
+
enforceAsyncResult(BlahEntity.deleterWithAuthorizationResults(blahOwner2).deleteAsync()),
|
|
183
|
+
).rejects.toBeInstanceOf(EntityNotAuthorizedError);
|
|
175
184
|
});
|
|
@@ -527,40 +527,36 @@ describe('EntityMutator.processEntityDeletionForInboundEdgesAsync', () => {
|
|
|
527
527
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
528
528
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
529
529
|
|
|
530
|
-
const parent = await ParentEntity.creator(viewerContext).
|
|
530
|
+
const parent = await ParentEntity.creator(viewerContext).createAsync();
|
|
531
531
|
const child = await ChildEntity.creator(viewerContext)
|
|
532
532
|
.setField('parent_id', parent.getID())
|
|
533
|
-
.
|
|
533
|
+
.createAsync();
|
|
534
534
|
const grandchild = await GrandChildEntity.creator(viewerContext)
|
|
535
535
|
.setField('parent_id', child.getID())
|
|
536
|
-
.
|
|
536
|
+
.createAsync();
|
|
537
537
|
|
|
538
538
|
await expect(
|
|
539
|
-
ParentEntity.loader(viewerContext).
|
|
539
|
+
ParentEntity.loader(viewerContext).loadByIDNullableAsync(parent.getID()),
|
|
540
540
|
).resolves.not.toBeNull();
|
|
541
541
|
await expect(
|
|
542
|
-
ChildEntity.loader(viewerContext).
|
|
542
|
+
ChildEntity.loader(viewerContext).loadByIDNullableAsync(child.getID()),
|
|
543
543
|
).resolves.not.toBeNull();
|
|
544
544
|
await expect(
|
|
545
|
-
GrandChildEntity.loader(viewerContext)
|
|
546
|
-
.enforcing()
|
|
547
|
-
.loadByIDNullableAsync(grandchild.getID()),
|
|
545
|
+
GrandChildEntity.loader(viewerContext).loadByIDNullableAsync(grandchild.getID()),
|
|
548
546
|
).resolves.not.toBeNull();
|
|
549
547
|
|
|
550
548
|
privacyPolicyEvaluationRecords.shouldRecord = true;
|
|
551
|
-
await ParentEntity.
|
|
549
|
+
await ParentEntity.deleter(parent).deleteAsync();
|
|
552
550
|
privacyPolicyEvaluationRecords.shouldRecord = false;
|
|
553
551
|
|
|
554
552
|
await expect(
|
|
555
|
-
ParentEntity.loader(viewerContext).
|
|
553
|
+
ParentEntity.loader(viewerContext).loadByIDNullableAsync(parent.getID()),
|
|
556
554
|
).resolves.toBeNull();
|
|
557
555
|
await expect(
|
|
558
|
-
ChildEntity.loader(viewerContext).
|
|
556
|
+
ChildEntity.loader(viewerContext).loadByIDNullableAsync(child.getID()),
|
|
559
557
|
).resolves.toBeNull();
|
|
560
558
|
await expect(
|
|
561
|
-
GrandChildEntity.loader(viewerContext)
|
|
562
|
-
.enforcing()
|
|
563
|
-
.loadByIDNullableAsync(grandchild.getID()),
|
|
559
|
+
GrandChildEntity.loader(viewerContext).loadByIDNullableAsync(grandchild.getID()),
|
|
564
560
|
).resolves.toBeNull();
|
|
565
561
|
|
|
566
562
|
// two calls for each trigger, one beforeDelete, one afterDelete
|
|
@@ -649,42 +645,38 @@ describe('EntityMutator.processEntityDeletionForInboundEdgesAsync', () => {
|
|
|
649
645
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
650
646
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
651
647
|
|
|
652
|
-
const parent = await ParentEntity.creator(viewerContext).
|
|
648
|
+
const parent = await ParentEntity.creator(viewerContext).createAsync();
|
|
653
649
|
const child = await ChildEntity.creator(viewerContext)
|
|
654
650
|
.setField('parent_id', parent.getID())
|
|
655
|
-
.
|
|
651
|
+
.createAsync();
|
|
656
652
|
const grandchild = await GrandChildEntity.creator(viewerContext)
|
|
657
653
|
.setField('parent_id', child.getID())
|
|
658
|
-
.
|
|
654
|
+
.createAsync();
|
|
659
655
|
|
|
660
656
|
await expect(
|
|
661
|
-
ParentEntity.loader(viewerContext).
|
|
657
|
+
ParentEntity.loader(viewerContext).loadByIDNullableAsync(parent.getID()),
|
|
662
658
|
).resolves.not.toBeNull();
|
|
663
659
|
await expect(
|
|
664
|
-
ChildEntity.loader(viewerContext).
|
|
660
|
+
ChildEntity.loader(viewerContext).loadByIDNullableAsync(child.getID()),
|
|
665
661
|
).resolves.not.toBeNull();
|
|
666
662
|
await expect(
|
|
667
|
-
GrandChildEntity.loader(viewerContext)
|
|
668
|
-
.enforcing()
|
|
669
|
-
.loadByIDNullableAsync(grandchild.getID()),
|
|
663
|
+
GrandChildEntity.loader(viewerContext).loadByIDNullableAsync(grandchild.getID()),
|
|
670
664
|
).resolves.not.toBeNull();
|
|
671
665
|
|
|
672
666
|
privacyPolicyEvaluationRecords.shouldRecord = true;
|
|
673
|
-
await ParentEntity.
|
|
667
|
+
await ParentEntity.deleter(parent).deleteAsync();
|
|
674
668
|
privacyPolicyEvaluationRecords.shouldRecord = false;
|
|
675
669
|
|
|
676
670
|
await expect(
|
|
677
|
-
ParentEntity.loader(viewerContext).
|
|
671
|
+
ParentEntity.loader(viewerContext).loadByIDNullableAsync(parent.getID()),
|
|
678
672
|
).resolves.toBeNull();
|
|
679
673
|
|
|
680
|
-
const loadedChild = await ChildEntity.loader(viewerContext)
|
|
681
|
-
.enforcing()
|
|
682
|
-
.loadByIDAsync(child.getID());
|
|
674
|
+
const loadedChild = await ChildEntity.loader(viewerContext).loadByIDAsync(child.getID());
|
|
683
675
|
expect(loadedChild.getField('parent_id')).toBeNull();
|
|
684
676
|
|
|
685
|
-
const loadedGrandchild = await GrandChildEntity.loader(viewerContext)
|
|
686
|
-
.
|
|
687
|
-
|
|
677
|
+
const loadedGrandchild = await GrandChildEntity.loader(viewerContext).loadByIDAsync(
|
|
678
|
+
grandchild.getID(),
|
|
679
|
+
);
|
|
688
680
|
expect(loadedGrandchild.getField('parent_id')).toEqual(loadedChild.getID());
|
|
689
681
|
|
|
690
682
|
// two calls for only parent trigger, one beforeDelete, one afterDelete
|
|
@@ -762,26 +754,22 @@ describe('EntityMutator.processEntityDeletionForInboundEdgesAsync', () => {
|
|
|
762
754
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
763
755
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
764
756
|
|
|
765
|
-
const parent = await ParentEntity.creator(viewerContext).
|
|
757
|
+
const parent = await ParentEntity.creator(viewerContext).createAsync();
|
|
766
758
|
const child = await ChildEntity.creator(viewerContext)
|
|
767
759
|
.setField('parent_id', parent.getID())
|
|
768
|
-
.
|
|
760
|
+
.createAsync();
|
|
769
761
|
const grandchild = await GrandChildEntity.creator(viewerContext)
|
|
770
762
|
.setField('parent_id', child.getID())
|
|
771
|
-
.
|
|
763
|
+
.createAsync();
|
|
772
764
|
|
|
773
765
|
await expect(
|
|
774
|
-
ParentEntity.loader(viewerContext).
|
|
766
|
+
ParentEntity.loader(viewerContext).loadByIDNullableAsync(parent.getID()),
|
|
775
767
|
).resolves.not.toBeNull();
|
|
776
768
|
await expect(
|
|
777
|
-
ChildEntity.loader(viewerContext)
|
|
778
|
-
.enforcing()
|
|
779
|
-
.loadByFieldEqualingAsync('parent_id', parent.getID()),
|
|
769
|
+
ChildEntity.loader(viewerContext).loadByFieldEqualingAsync('parent_id', parent.getID()),
|
|
780
770
|
).resolves.not.toBeNull();
|
|
781
771
|
await expect(
|
|
782
|
-
GrandChildEntity.loader(viewerContext)
|
|
783
|
-
.enforcing()
|
|
784
|
-
.loadByFieldEqualingAsync('parent_id', child.getID()),
|
|
772
|
+
GrandChildEntity.loader(viewerContext).loadByFieldEqualingAsync('parent_id', child.getID()),
|
|
785
773
|
).resolves.not.toBeNull();
|
|
786
774
|
|
|
787
775
|
const childCacheAdapter = viewerContext.getViewerScopedEntityCompanionForClass(ChildEntity)[
|
|
@@ -803,7 +791,7 @@ describe('EntityMutator.processEntityDeletionForInboundEdgesAsync', () => {
|
|
|
803
791
|
expect(grandChildCachedBefore.get(child.getID())?.status).toEqual(CacheStatus.HIT);
|
|
804
792
|
|
|
805
793
|
privacyPolicyEvaluationRecords.shouldRecord = true;
|
|
806
|
-
await ParentEntity.
|
|
794
|
+
await ParentEntity.deleter(parent).deleteAsync();
|
|
807
795
|
privacyPolicyEvaluationRecords.shouldRecord = false;
|
|
808
796
|
|
|
809
797
|
const childCachedAfter = await childCacheAdapter.loadManyAsync('parent_id', [parent.getID()]);
|
|
@@ -815,17 +803,15 @@ describe('EntityMutator.processEntityDeletionForInboundEdgesAsync', () => {
|
|
|
815
803
|
expect(grandChildCachedAfter.get(child.getID())?.status).toEqual(CacheStatus.HIT);
|
|
816
804
|
|
|
817
805
|
await expect(
|
|
818
|
-
ParentEntity.loader(viewerContext).
|
|
806
|
+
ParentEntity.loader(viewerContext).loadByIDNullableAsync(parent.getID()),
|
|
819
807
|
).resolves.toBeNull();
|
|
820
808
|
|
|
821
|
-
const loadedChild = await ChildEntity.loader(viewerContext)
|
|
822
|
-
.enforcing()
|
|
823
|
-
.loadByIDAsync(child.getID());
|
|
809
|
+
const loadedChild = await ChildEntity.loader(viewerContext).loadByIDAsync(child.getID());
|
|
824
810
|
expect(loadedChild).not.toBeNull();
|
|
825
811
|
|
|
826
|
-
const loadedGrandchild = await GrandChildEntity.loader(viewerContext)
|
|
827
|
-
.
|
|
828
|
-
|
|
812
|
+
const loadedGrandchild = await GrandChildEntity.loader(viewerContext).loadByIDAsync(
|
|
813
|
+
grandchild.getID(),
|
|
814
|
+
);
|
|
829
815
|
expect(loadedGrandchild.getField('parent_id')).toEqual(loadedChild.getID());
|
|
830
816
|
|
|
831
817
|
// two calls for only parent trigger, one beforeDelete, one afterDelete
|
|
@@ -901,26 +887,22 @@ describe('EntityMutator.processEntityDeletionForInboundEdgesAsync', () => {
|
|
|
901
887
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
902
888
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
903
889
|
|
|
904
|
-
const parent = await ParentEntity.creator(viewerContext).
|
|
890
|
+
const parent = await ParentEntity.creator(viewerContext).createAsync();
|
|
905
891
|
const child = await ChildEntity.creator(viewerContext)
|
|
906
892
|
.setField('parent_id', parent.getID())
|
|
907
|
-
.
|
|
893
|
+
.createAsync();
|
|
908
894
|
const grandchild = await GrandChildEntity.creator(viewerContext)
|
|
909
895
|
.setField('parent_id', child.getID())
|
|
910
|
-
.
|
|
896
|
+
.createAsync();
|
|
911
897
|
|
|
912
898
|
await expect(
|
|
913
|
-
ParentEntity.loader(viewerContext).
|
|
899
|
+
ParentEntity.loader(viewerContext).loadByIDNullableAsync(parent.getID()),
|
|
914
900
|
).resolves.not.toBeNull();
|
|
915
901
|
await expect(
|
|
916
|
-
ChildEntity.loader(viewerContext)
|
|
917
|
-
.enforcing()
|
|
918
|
-
.loadByFieldEqualingAsync('parent_id', parent.getID()),
|
|
902
|
+
ChildEntity.loader(viewerContext).loadByFieldEqualingAsync('parent_id', parent.getID()),
|
|
919
903
|
).resolves.not.toBeNull();
|
|
920
904
|
await expect(
|
|
921
|
-
GrandChildEntity.loader(viewerContext)
|
|
922
|
-
.enforcing()
|
|
923
|
-
.loadByFieldEqualingAsync('parent_id', child.getID()),
|
|
905
|
+
GrandChildEntity.loader(viewerContext).loadByFieldEqualingAsync('parent_id', child.getID()),
|
|
924
906
|
).resolves.not.toBeNull();
|
|
925
907
|
|
|
926
908
|
const childCacheAdapter = viewerContext.getViewerScopedEntityCompanionForClass(ChildEntity)[
|
|
@@ -942,7 +924,7 @@ describe('EntityMutator.processEntityDeletionForInboundEdgesAsync', () => {
|
|
|
942
924
|
expect(grandChildCachedBefore.get(child.getID())?.status).toEqual(CacheStatus.HIT);
|
|
943
925
|
|
|
944
926
|
privacyPolicyEvaluationRecords.shouldRecord = true;
|
|
945
|
-
await ParentEntity.
|
|
927
|
+
await ParentEntity.deleter(parent).deleteAsync();
|
|
946
928
|
privacyPolicyEvaluationRecords.shouldRecord = false;
|
|
947
929
|
|
|
948
930
|
const childCachedAfter = await childCacheAdapter.loadManyAsync('parent_id', [parent.getID()]);
|
|
@@ -954,15 +936,13 @@ describe('EntityMutator.processEntityDeletionForInboundEdgesAsync', () => {
|
|
|
954
936
|
expect(grandChildCachedAfter.get(child.getID())?.status).toEqual(CacheStatus.MISS);
|
|
955
937
|
|
|
956
938
|
await expect(
|
|
957
|
-
ParentEntity.loader(viewerContext).
|
|
939
|
+
ParentEntity.loader(viewerContext).loadByIDNullableAsync(parent.getID()),
|
|
958
940
|
).resolves.toBeNull();
|
|
959
941
|
await expect(
|
|
960
|
-
ChildEntity.loader(viewerContext).
|
|
942
|
+
ChildEntity.loader(viewerContext).loadByIDNullableAsync(child.getID()),
|
|
961
943
|
).resolves.not.toBeNull();
|
|
962
944
|
await expect(
|
|
963
|
-
GrandChildEntity.loader(viewerContext)
|
|
964
|
-
.enforcing()
|
|
965
|
-
.loadByIDNullableAsync(grandchild.getID()),
|
|
945
|
+
GrandChildEntity.loader(viewerContext).loadByIDNullableAsync(grandchild.getID()),
|
|
966
946
|
).resolves.not.toBeNull();
|
|
967
947
|
|
|
968
948
|
// two calls for each trigger, one beforeDelete, one afterDelete
|