@expo/entity 0.34.0 → 0.36.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/AuthorizationResultBasedEntityLoader.d.ts +128 -0
- package/build/AuthorizationResultBasedEntityLoader.js +196 -0
- package/build/AuthorizationResultBasedEntityLoader.js.map +1 -0
- package/build/ComposedEntityCacheAdapter.js +1 -0
- package/build/ComposedEntityCacheAdapter.js.map +1 -1
- package/build/ComposedSecondaryEntityCache.js +1 -0
- package/build/ComposedSecondaryEntityCache.js.map +1 -1
- package/build/EnforcingEntityLoader.d.ts +5 -4
- package/build/EnforcingEntityLoader.js +4 -2
- package/build/EnforcingEntityLoader.js.map +1 -1
- package/build/Entity.d.ts +4 -31
- package/build/Entity.js +19 -46
- package/build/Entity.js.map +1 -1
- package/build/EntityAssociationLoader.d.ts +9 -9
- package/build/EntityAssociationLoader.js +37 -12
- package/build/EntityAssociationLoader.js.map +1 -1
- package/build/EntityCompanion.js +9 -1
- package/build/EntityCompanion.js.map +1 -1
- package/build/EntityCompanionProvider.d.ts +3 -1
- package/build/EntityCompanionProvider.js +10 -4
- package/build/EntityCompanionProvider.js.map +1 -1
- package/build/EntityConfiguration.d.ts +2 -1
- package/build/EntityConfiguration.js +19 -1
- package/build/EntityConfiguration.js.map +1 -1
- package/build/EntityDatabaseAdapter.d.ts +2 -2
- package/build/EntityDatabaseAdapter.js +5 -3
- package/build/EntityDatabaseAdapter.js.map +1 -1
- package/build/EntityFieldDefinition.d.ts +21 -10
- package/build/EntityFieldDefinition.js +8 -9
- package/build/EntityFieldDefinition.js.map +1 -1
- package/build/EntityFields.d.ts +10 -0
- package/build/EntityFields.js +15 -1
- package/build/EntityFields.js.map +1 -1
- package/build/EntityLoader.d.ts +12 -125
- package/build/EntityLoader.js +24 -239
- package/build/EntityLoader.js.map +1 -1
- package/build/EntityLoaderFactory.d.ts +1 -1
- package/build/EntityLoaderFactory.js +3 -0
- package/build/EntityLoaderFactory.js.map +1 -1
- package/build/EntityLoaderUtils.d.ts +58 -0
- package/build/EntityLoaderUtils.js +109 -0
- package/build/EntityLoaderUtils.js.map +1 -0
- package/build/EntityMutator.d.ts +1 -0
- package/build/EntityMutator.js +71 -56
- package/build/EntityMutator.js.map +1 -1
- package/build/EntityMutatorFactory.js +9 -0
- package/build/EntityMutatorFactory.js.map +1 -1
- package/build/EntityPrivacyPolicy.d.ts +11 -5
- package/build/EntityPrivacyPolicy.js +5 -7
- package/build/EntityPrivacyPolicy.js.map +1 -1
- package/build/EntityQueryContext.d.ts +2 -1
- package/build/EntityQueryContext.js +11 -6
- package/build/EntityQueryContext.js.map +1 -1
- package/build/EntityQueryContextProvider.d.ts +1 -1
- package/build/EntityQueryContextProvider.js +1 -1
- package/build/EntityQueryContextProvider.js.map +1 -1
- package/build/EntitySecondaryCacheLoader.js +5 -1
- package/build/EntitySecondaryCacheLoader.js.map +1 -1
- package/build/GenericEntityCacheAdapter.js +1 -0
- package/build/GenericEntityCacheAdapter.js.map +1 -1
- package/build/GenericSecondaryEntityCache.js +2 -0
- package/build/GenericSecondaryEntityCache.js.map +1 -1
- package/build/IEntityCacheAdapterProvider.d.ts +1 -1
- package/build/IEntityDatabaseAdapterProvider.d.ts +1 -1
- package/build/ReadonlyEntity.d.ts +1 -1
- package/build/ReadonlyEntity.js +9 -2
- package/build/ReadonlyEntity.js.map +1 -1
- package/build/ViewerContext.d.ts +2 -2
- package/build/ViewerContext.js +5 -3
- package/build/ViewerContext.js.map +1 -1
- package/build/ViewerScopedEntityCompanion.js +2 -0
- package/build/ViewerScopedEntityCompanion.js.map +1 -1
- package/build/ViewerScopedEntityCompanionProvider.d.ts +0 -1
- package/build/ViewerScopedEntityCompanionProvider.js +2 -1
- package/build/ViewerScopedEntityCompanionProvider.js.map +1 -1
- package/build/ViewerScopedEntityLoaderFactory.d.ts +1 -1
- package/build/ViewerScopedEntityLoaderFactory.js +2 -0
- package/build/ViewerScopedEntityLoaderFactory.js.map +1 -1
- package/build/ViewerScopedEntityMutatorFactory.js +2 -0
- package/build/ViewerScopedEntityMutatorFactory.js.map +1 -1
- package/build/__tests__/ComposedCacheAdapter-test.js +2 -0
- package/build/__tests__/ComposedCacheAdapter-test.js.map +1 -1
- package/build/__tests__/ComposedSecondaryEntityCache-test.js +1 -0
- package/build/__tests__/ComposedSecondaryEntityCache-test.js.map +1 -1
- package/build/__tests__/EnforcingEntityLoader-test.js +101 -113
- package/build/__tests__/EnforcingEntityLoader-test.js.map +1 -1
- package/build/__tests__/Entity-test.js +5 -137
- package/build/__tests__/Entity-test.js.map +1 -1
- package/build/__tests__/EntityAssociationLoader-test.js +37 -65
- package/build/__tests__/EntityAssociationLoader-test.js.map +1 -1
- package/build/__tests__/EntityCommonUseCases-test.js +31 -37
- package/build/__tests__/EntityCommonUseCases-test.js.map +1 -1
- package/build/__tests__/EntityCompanion-test.js +26 -3
- package/build/__tests__/EntityCompanion-test.js.map +1 -1
- package/build/__tests__/EntityConfiguration-test.js +103 -0
- package/build/__tests__/EntityConfiguration-test.js.map +1 -0
- package/build/__tests__/EntityDatabaseAdapter-test.js +6 -0
- package/build/__tests__/EntityDatabaseAdapter-test.js.map +1 -1
- package/build/__tests__/EntityEdges-test.js +89 -80
- package/build/__tests__/EntityEdges-test.js.map +1 -1
- package/build/__tests__/EntityFields-test.js +6 -0
- package/build/__tests__/EntityFields-test.js.map +1 -1
- package/build/__tests__/EntityLoader-constructor-test.js +17 -18
- package/build/__tests__/EntityLoader-constructor-test.js.map +1 -1
- package/build/__tests__/EntityLoader-test.js +93 -41
- package/build/__tests__/EntityLoader-test.js.map +1 -1
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js +18 -21
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +1 -1
- package/build/__tests__/EntityMutator-test.js +74 -29
- package/build/__tests__/EntityMutator-test.js.map +1 -1
- package/build/__tests__/EntityPrivacyPolicy-test.js +77 -59
- package/build/__tests__/EntityPrivacyPolicy-test.js.map +1 -1
- package/build/__tests__/EntityQueryContext-test.js +9 -0
- package/build/__tests__/EntityQueryContext-test.js.map +1 -1
- package/build/__tests__/EntitySecondaryCacheLoader-test.js +10 -10
- package/build/__tests__/EntitySecondaryCacheLoader-test.js.map +1 -1
- package/build/__tests__/EntitySelfReferentialEdges-test.js +59 -74
- package/build/__tests__/EntitySelfReferentialEdges-test.js.map +1 -1
- package/build/__tests__/ReadonlyEntity-test.js +13 -13
- package/build/__tests__/ReadonlyEntity-test.js.map +1 -1
- package/build/__tests__/ViewerContext-test.js +2 -2
- package/build/__tests__/ViewerContext-test.js.map +1 -1
- package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js.map +1 -1
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +26 -28
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +1 -1
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +25 -30
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +1 -1
- package/build/entityUtils.d.ts +1 -1
- package/build/entityUtils.js.map +1 -1
- package/build/errors/EntityCacheAdapterError.js +2 -5
- package/build/errors/EntityCacheAdapterError.js.map +1 -1
- package/build/errors/EntityDatabaseAdapterError.js +14 -35
- package/build/errors/EntityDatabaseAdapterError.js.map +1 -1
- package/build/errors/EntityError.js +1 -0
- package/build/errors/EntityError.js.map +1 -1
- package/build/errors/EntityInvalidFieldValueError.js +2 -2
- package/build/errors/EntityInvalidFieldValueError.js.map +1 -1
- package/build/errors/EntityNotAuthorizedError.js +3 -2
- package/build/errors/EntityNotAuthorizedError.js.map +1 -1
- package/build/errors/EntityNotFoundError.js +2 -2
- package/build/errors/EntityNotFoundError.js.map +1 -1
- package/build/index.d.ts +1 -0
- package/build/index.js +1 -0
- package/build/index.js.map +1 -1
- package/build/internal/EntityDataManager.d.ts +1 -1
- package/build/internal/EntityDataManager.js +7 -2
- package/build/internal/EntityDataManager.js.map +1 -1
- package/build/internal/EntityFieldTransformationUtils.d.ts +5 -5
- package/build/internal/EntityFieldTransformationUtils.js +5 -8
- package/build/internal/EntityFieldTransformationUtils.js.map +1 -1
- package/build/internal/EntityTableDataCoordinator.d.ts +1 -1
- package/build/internal/EntityTableDataCoordinator.js +5 -0
- package/build/internal/EntityTableDataCoordinator.js.map +1 -1
- package/build/internal/ReadThroughEntityCache.d.ts +1 -1
- package/build/internal/ReadThroughEntityCache.js +2 -0
- package/build/internal/ReadThroughEntityCache.js.map +1 -1
- package/build/internal/__tests__/EntityDataManager-test.js +11 -11
- package/build/internal/__tests__/EntityDataManager-test.js.map +1 -1
- package/build/internal/__tests__/EntityFieldTransformationUtils-test.js +6 -2
- package/build/internal/__tests__/EntityFieldTransformationUtils-test.js.map +1 -1
- package/build/internal/__tests__/ReadThroughEntityCache-test.js +33 -0
- package/build/internal/__tests__/ReadThroughEntityCache-test.js.map +1 -1
- package/build/metrics/IEntityMetricsAdapter.d.ts +1 -1
- package/build/rules/AlwaysAllowPrivacyPolicyRule.d.ts +1 -1
- package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -1
- package/build/rules/AlwaysDenyPrivacyPolicyRule.d.ts +1 -1
- package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -1
- package/build/rules/AlwaysSkipPrivacyPolicyRule.d.ts +1 -1
- package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -1
- package/build/rules/PrivacyPolicyRule.d.ts +1 -1
- package/build/rules/PrivacyPolicyRule.js.map +1 -1
- package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js.map +1 -1
- package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js.map +1 -1
- package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js.map +1 -1
- package/build/testfixtures/DateIDTestEntity.js +12 -15
- package/build/testfixtures/DateIDTestEntity.js.map +1 -1
- package/build/testfixtures/SimpleTestEntity.d.ts +8 -8
- package/build/testfixtures/SimpleTestEntity.js +12 -15
- package/build/testfixtures/SimpleTestEntity.js.map +1 -1
- package/build/testfixtures/TestEntity.d.ts +12 -12
- package/build/testfixtures/TestEntity.js +12 -15
- package/build/testfixtures/TestEntity.js.map +1 -1
- package/build/testfixtures/TestEntity2.d.ts +8 -8
- package/build/testfixtures/TestEntity2.js +12 -15
- package/build/testfixtures/TestEntity2.js.map +1 -1
- package/build/testfixtures/TestEntityNumberKey.js +12 -15
- package/build/testfixtures/TestEntityNumberKey.js.map +1 -1
- package/build/testfixtures/TestEntityWithMutationTriggers.d.ts +36 -0
- package/build/testfixtures/TestEntityWithMutationTriggers.js +82 -0
- package/build/testfixtures/TestEntityWithMutationTriggers.js.map +1 -0
- package/build/testfixtures/TestViewerContext.d.ts +0 -3
- package/build/testfixtures/TestViewerContext.js +0 -6
- package/build/testfixtures/TestViewerContext.js.map +1 -1
- package/build/utils/EntityPrivacyUtils.d.ts +34 -0
- package/build/utils/EntityPrivacyUtils.js +160 -0
- package/build/utils/EntityPrivacyUtils.js.map +1 -0
- package/build/utils/__tests__/EntityPrivacyUtils-test.d.ts +1 -0
- package/build/utils/__tests__/EntityPrivacyUtils-test.js +395 -0
- package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +1 -0
- package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.d.ts +1 -0
- package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js +26 -0
- package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js.map +1 -0
- package/build/utils/collections/maps.js.map +1 -1
- package/build/utils/mergeEntityMutationTriggerConfigurations.d.ts +4 -0
- package/build/utils/mergeEntityMutationTriggerConfigurations.js +28 -0
- package/build/utils/mergeEntityMutationTriggerConfigurations.js.map +1 -0
- package/build/utils/testing/PrivacyPolicyRuleTestUtils.d.ts +1 -1
- package/build/utils/testing/PrivacyPolicyRuleTestUtils.js.map +1 -1
- package/build/utils/testing/StubCacheAdapter.d.ts +3 -3
- package/build/utils/testing/StubCacheAdapter.js +3 -3
- package/build/utils/testing/StubCacheAdapter.js.map +1 -1
- package/build/utils/testing/StubDatabaseAdapter.d.ts +2 -2
- package/build/utils/testing/StubDatabaseAdapter.js +4 -2
- package/build/utils/testing/StubDatabaseAdapter.js.map +1 -1
- package/build/utils/testing/StubDatabaseAdapterProvider.d.ts +1 -1
- package/build/utils/testing/StubDatabaseAdapterProvider.js +1 -3
- package/build/utils/testing/StubDatabaseAdapterProvider.js.map +1 -1
- package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.d.ts +1 -0
- package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js +42 -0
- package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js.map +1 -0
- package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js +53 -0
- package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js.map +1 -1
- package/build/utils/testing/describeFieldTestCase.js.map +1 -1
- package/package.json +4 -3
- package/src/AuthorizationResultBasedEntityLoader.ts +297 -0
- package/src/ComposedEntityCacheAdapter.ts +6 -6
- package/src/ComposedSecondaryEntityCache.ts +8 -8
- package/src/EnforcingEntityLoader.ts +20 -19
- package/src/Entity.ts +26 -118
- package/src/EntityAssociationLoader.ts +56 -41
- package/src/EntityCompanion.ts +8 -4
- package/src/EntityCompanionProvider.ts +24 -16
- package/src/EntityConfiguration.ts +18 -7
- package/src/EntityDatabaseAdapter.ts +41 -41
- package/src/EntityFieldDefinition.ts +28 -18
- package/src/EntityFields.ts +15 -0
- package/src/EntityLoader.ts +63 -357
- package/src/EntityLoaderFactory.ts +10 -4
- package/src/EntityLoaderUtils.ts +149 -0
- package/src/EntityMutationInfo.ts +2 -2
- package/src/EntityMutationTriggerConfiguration.ts +5 -5
- package/src/EntityMutationValidator.ts +2 -2
- package/src/EntityMutator.ts +146 -144
- package/src/EntityMutatorFactory.ts +8 -8
- package/src/EntityPrivacyPolicy.ts +78 -28
- package/src/EntityQueryContext.ts +14 -13
- package/src/EntityQueryContextProvider.ts +6 -6
- package/src/EntitySecondaryCacheLoader.ts +13 -11
- package/src/GenericEntityCacheAdapter.ts +10 -10
- package/src/GenericSecondaryEntityCache.ts +6 -6
- package/src/IEntityCacheAdapter.ts +4 -4
- package/src/IEntityCacheAdapterProvider.ts +2 -2
- package/src/IEntityDatabaseAdapterProvider.ts +2 -2
- package/src/ReadonlyEntity.ts +8 -5
- package/src/ViewerContext.ts +10 -10
- package/src/ViewerScopedEntityCompanion.ts +4 -4
- package/src/ViewerScopedEntityCompanionProvider.ts +4 -5
- package/src/ViewerScopedEntityLoaderFactory.ts +10 -4
- package/src/ViewerScopedEntityMutatorFactory.ts +5 -5
- package/src/__tests__/ComposedCacheAdapter-test.ts +12 -10
- package/src/__tests__/ComposedSecondaryEntityCache-test.ts +8 -8
- package/src/__tests__/EnforcingEntityLoader-test.ts +236 -159
- package/src/__tests__/Entity-test.ts +5 -223
- package/src/__tests__/EntityAssociationLoader-test.ts +91 -169
- package/src/__tests__/EntityCommonUseCases-test.ts +36 -38
- package/src/__tests__/EntityCompanion-test.ts +57 -5
- package/src/__tests__/EntityConfiguration-test.ts +118 -0
- package/src/__tests__/EntityDatabaseAdapter-test.ts +11 -11
- package/src/__tests__/EntityEdges-test.ts +128 -118
- package/src/__tests__/EntityFields-test.ts +14 -2
- package/src/__tests__/EntityLoader-constructor-test.ts +21 -8
- package/src/__tests__/EntityLoader-test.ts +233 -105
- package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +17 -20
- package/src/__tests__/EntityMutator-test.ts +342 -163
- package/src/__tests__/EntityPrivacyPolicy-test.ts +166 -53
- package/src/__tests__/EntityQueryContext-test.ts +30 -12
- package/src/__tests__/EntitySecondaryCacheLoader-test.ts +17 -26
- package/src/__tests__/EntitySelfReferentialEdges-test.ts +67 -115
- package/src/__tests__/GenericEntityCacheAdapter-test.ts +2 -2
- package/src/__tests__/ReadonlyEntity-test.ts +13 -15
- package/src/__tests__/ViewerContext-test.ts +3 -4
- package/src/__tests__/ViewerScopedEntityCompanion-test.ts +2 -2
- package/src/__tests__/ViewerScopedEntityCompanionProvider-test.ts +2 -2
- package/src/__tests__/ViewerScopedEntityLoaderFactory-test.ts +2 -1
- package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +34 -45
- package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +22 -30
- package/src/__tests__/entityUtils-test.ts +2 -2
- package/src/entityUtils.ts +4 -4
- package/src/errors/EntityError.ts +4 -1
- package/src/errors/EntityInvalidFieldValueError.ts +2 -2
- package/src/errors/EntityNotAuthorizedError.ts +3 -3
- package/src/errors/EntityNotFoundError.ts +2 -2
- package/src/index.ts +1 -0
- package/src/internal/EntityDataManager.ts +25 -25
- package/src/internal/EntityFieldTransformationUtils.ts +39 -32
- package/src/internal/EntityTableDataCoordinator.ts +3 -3
- package/src/internal/ReadThroughEntityCache.ts +9 -9
- package/src/internal/__tests__/EntityDataManager-test.ts +62 -62
- package/src/internal/__tests__/EntityFieldTransformationUtils-test.ts +14 -10
- package/src/internal/__tests__/ReadThroughEntityCache-test.ts +74 -18
- package/src/metrics/EntityMetricsUtils.ts +4 -4
- package/src/metrics/IEntityMetricsAdapter.ts +1 -1
- package/src/rules/AlwaysAllowPrivacyPolicyRule.ts +9 -3
- package/src/rules/AlwaysDenyPrivacyPolicyRule.ts +9 -3
- package/src/rules/AlwaysSkipPrivacyPolicyRule.ts +9 -3
- package/src/rules/PrivacyPolicyRule.ts +9 -3
- package/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.ts +2 -1
- package/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.ts +2 -1
- package/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.ts +2 -1
- package/src/testfixtures/SimpleTestEntity.ts +8 -8
- package/src/testfixtures/TestEntity.ts +13 -16
- package/src/testfixtures/TestEntity2.ts +8 -8
- package/src/testfixtures/TestEntityWithMutationTriggers.ts +156 -0
- package/src/testfixtures/TestViewerContext.ts +1 -12
- package/src/utils/EntityPrivacyUtils.ts +325 -0
- package/src/utils/__tests__/EntityPrivacyUtils-test.ts +570 -0
- package/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.ts +29 -0
- package/src/utils/collections/__tests__/maps-test.ts +2 -2
- package/src/utils/collections/maps.ts +11 -11
- package/src/utils/mergeEntityMutationTriggerConfigurations.ts +44 -0
- package/src/utils/testing/PrivacyPolicyRuleTestUtils.ts +25 -22
- package/src/utils/testing/StubCacheAdapter.ts +17 -15
- package/src/utils/testing/StubDatabaseAdapter.ts +35 -30
- package/src/utils/testing/StubDatabaseAdapterProvider.ts +2 -2
- package/src/utils/testing/StubQueryContextProvider.ts +2 -2
- package/src/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.ts +42 -0
- package/src/utils/testing/__tests__/StubDatabaseAdapter-test.ts +111 -29
- package/src/utils/testing/createUnitTestEntityCompanionProvider.ts +2 -2
- package/src/utils/testing/describeFieldTestCase.ts +1 -1
- package/build/__tests__/EntityDataConfiguration-test.js +0 -68
- package/build/__tests__/EntityDataConfiguration-test.js.map +0 -1
- package/src/__tests__/EntityDataConfiguration-test.ts +0 -77
- /package/build/__tests__/{EntityDataConfiguration-test.d.ts → EntityConfiguration-test.d.ts} +0 -0
|
@@ -5,7 +5,9 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
5
5
|
import { OrderByOrdering } from '../EntityDatabaseAdapter';
|
|
6
6
|
import EntityLoader from '../EntityLoader';
|
|
7
7
|
import { EntityPrivacyPolicyEvaluationContext } from '../EntityPrivacyPolicy';
|
|
8
|
+
import ViewerContext from '../ViewerContext';
|
|
8
9
|
import { enforceResultsAsync } from '../entityUtils';
|
|
10
|
+
import EntityNotFoundError from '../errors/EntityNotFoundError';
|
|
9
11
|
import EntityDataManager from '../internal/EntityDataManager';
|
|
10
12
|
import ReadThroughEntityCache from '../internal/ReadThroughEntityCache';
|
|
11
13
|
import IEntityMetricsAdapter from '../metrics/IEntityMetricsAdapter';
|
|
@@ -14,7 +16,6 @@ import TestEntity, {
|
|
|
14
16
|
TestEntityPrivacyPolicy,
|
|
15
17
|
testEntityConfiguration,
|
|
16
18
|
} from '../testfixtures/TestEntity';
|
|
17
|
-
import TestViewerContext from '../testfixtures/TestViewerContext';
|
|
18
19
|
import { NoCacheStubCacheAdapterProvider } from '../utils/testing/StubCacheAdapter';
|
|
19
20
|
import StubDatabaseAdapter from '../utils/testing/StubDatabaseAdapter';
|
|
20
21
|
import StubQueryContextProvider from '../utils/testing/StubQueryContextProvider';
|
|
@@ -22,10 +23,13 @@ import StubQueryContextProvider from '../utils/testing/StubQueryContextProvider'
|
|
|
22
23
|
describe(EntityLoader, () => {
|
|
23
24
|
it('loads entities', async () => {
|
|
24
25
|
const dateToInsert = new Date();
|
|
25
|
-
const viewerContext = instance(mock(
|
|
26
|
-
const privacyPolicyEvaluationContext =
|
|
26
|
+
const viewerContext = instance(mock(ViewerContext));
|
|
27
|
+
const privacyPolicyEvaluationContext =
|
|
28
|
+
instance(
|
|
29
|
+
mock<EntityPrivacyPolicyEvaluationContext<TestFields, string, ViewerContext, TestEntity>>(),
|
|
30
|
+
);
|
|
27
31
|
const metricsAdapter = instance(mock<IEntityMetricsAdapter>());
|
|
28
|
-
const queryContext = StubQueryContextProvider.
|
|
32
|
+
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
29
33
|
|
|
30
34
|
const id1 = uuidv4();
|
|
31
35
|
const id2 = uuidv4();
|
|
@@ -55,8 +59,8 @@ describe(EntityLoader, () => {
|
|
|
55
59
|
},
|
|
56
60
|
],
|
|
57
61
|
],
|
|
58
|
-
])
|
|
59
|
-
)
|
|
62
|
+
]),
|
|
63
|
+
),
|
|
60
64
|
);
|
|
61
65
|
const privacyPolicy = new TestEntityPrivacyPolicy();
|
|
62
66
|
const cacheAdapterProvider = new NoCacheStubCacheAdapterProvider();
|
|
@@ -67,7 +71,7 @@ describe(EntityLoader, () => {
|
|
|
67
71
|
entityCache,
|
|
68
72
|
StubQueryContextProvider,
|
|
69
73
|
instance(mock<IEntityMetricsAdapter>()),
|
|
70
|
-
TestEntity.name
|
|
74
|
+
TestEntity.name,
|
|
71
75
|
);
|
|
72
76
|
const entityLoader = new EntityLoader(
|
|
73
77
|
viewerContext,
|
|
@@ -78,22 +82,28 @@ describe(EntityLoader, () => {
|
|
|
78
82
|
/* entitySelectedFields */ undefined,
|
|
79
83
|
privacyPolicy,
|
|
80
84
|
dataManager,
|
|
81
|
-
metricsAdapter
|
|
85
|
+
metricsAdapter,
|
|
86
|
+
);
|
|
87
|
+
const entity = await enforceAsyncResult(
|
|
88
|
+
entityLoader.withAuthorizationResults().loadByIDAsync(id1),
|
|
82
89
|
);
|
|
83
|
-
const entity = await enforceAsyncResult(entityLoader.loadByIDAsync(id1));
|
|
84
90
|
expect(entity.getID()).toEqual(id1);
|
|
85
91
|
expect(entity.getField('dateField')).toEqual(dateToInsert);
|
|
86
92
|
|
|
87
93
|
const entities = await enforceResultsAsync(
|
|
88
|
-
entityLoader.loadManyByFieldEqualingAsync('stringField', 'huh')
|
|
94
|
+
entityLoader.withAuthorizationResults().loadManyByFieldEqualingAsync('stringField', 'huh'),
|
|
89
95
|
);
|
|
90
96
|
expect(entities.map((m) => m.getID())).toEqual([id1, id2]);
|
|
91
97
|
|
|
92
|
-
const entityResultNumber3 = await entityLoader
|
|
98
|
+
const entityResultNumber3 = await entityLoader
|
|
99
|
+
.withAuthorizationResults()
|
|
100
|
+
.loadByFieldEqualingAsync('intField', 3);
|
|
93
101
|
expect(entityResultNumber3).not.toBeNull();
|
|
94
102
|
expect(entityResultNumber3!.enforceValue().getID()).toEqual(id2);
|
|
95
103
|
|
|
96
|
-
const entityResultNumber4 = await entityLoader
|
|
104
|
+
const entityResultNumber4 = await entityLoader
|
|
105
|
+
.withAuthorizationResults()
|
|
106
|
+
.loadByFieldEqualingAsync('intField', 4);
|
|
97
107
|
expect(entityResultNumber4).toBeNull();
|
|
98
108
|
|
|
99
109
|
const entityResultDuplicateValues = await entityLoader
|
|
@@ -102,25 +112,45 @@ describe(EntityLoader, () => {
|
|
|
102
112
|
expect(entityResultDuplicateValues.size).toBe(1);
|
|
103
113
|
expect(entityResultDuplicateValues.get('huh')?.map((m) => m.getID())).toEqual([id1, id2]);
|
|
104
114
|
|
|
105
|
-
await expect(
|
|
106
|
-
'
|
|
115
|
+
await expect(
|
|
116
|
+
entityLoader.withAuthorizationResults().loadByFieldEqualingAsync('stringField', 'huh'),
|
|
117
|
+
).rejects.toThrowError(
|
|
118
|
+
'loadByFieldEqualing: Multiple entities of type TestEntity found for stringField=huh',
|
|
107
119
|
);
|
|
108
120
|
|
|
109
|
-
await expect(
|
|
110
|
-
|
|
121
|
+
await expect(
|
|
122
|
+
entityLoader.withAuthorizationResults().loadByIDNullableAsync(uuidv4()),
|
|
123
|
+
).resolves.toBeNull();
|
|
124
|
+
await expect(
|
|
125
|
+
entityLoader.withAuthorizationResults().loadByIDNullableAsync(id1),
|
|
126
|
+
).resolves.not.toBeNull();
|
|
111
127
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
128
|
+
const nonExistentId = uuidv4();
|
|
129
|
+
const manyIdResults = await entityLoader
|
|
130
|
+
.withAuthorizationResults()
|
|
131
|
+
.loadManyByIDsNullableAsync([nonExistentId, id1]);
|
|
132
|
+
expect(manyIdResults.get(nonExistentId)).toBeNull();
|
|
133
|
+
expect(manyIdResults.get(id1)).not.toBeNull();
|
|
134
|
+
|
|
135
|
+
await expect(
|
|
136
|
+
enforceAsyncResult(entityLoader.withAuthorizationResults().loadByIDAsync(nonExistentId)),
|
|
137
|
+
).rejects.toThrow(EntityNotFoundError);
|
|
138
|
+
|
|
139
|
+
await expect(
|
|
140
|
+
entityLoader.withAuthorizationResults().loadByIDAsync('not-a-uuid'),
|
|
141
|
+
).rejects.toThrowError('Entity field not valid: TestEntity (customIdField = not-a-uuid)');
|
|
115
142
|
});
|
|
116
143
|
|
|
117
144
|
it('loads entities with loadManyByFieldEqualityConjunction', async () => {
|
|
118
145
|
const privacyPolicy = new TestEntityPrivacyPolicy();
|
|
119
146
|
const spiedPrivacyPolicy = spy(privacyPolicy);
|
|
120
|
-
const viewerContext = instance(mock(
|
|
121
|
-
const privacyPolicyEvaluationContext =
|
|
147
|
+
const viewerContext = instance(mock(ViewerContext));
|
|
148
|
+
const privacyPolicyEvaluationContext =
|
|
149
|
+
instance(
|
|
150
|
+
mock<EntityPrivacyPolicyEvaluationContext<TestFields, string, ViewerContext, TestEntity>>(),
|
|
151
|
+
);
|
|
122
152
|
const metricsAdapter = instance(mock<IEntityMetricsAdapter>());
|
|
123
|
-
const queryContext = StubQueryContextProvider.
|
|
153
|
+
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
124
154
|
|
|
125
155
|
const id1 = uuidv4();
|
|
126
156
|
const id2 = uuidv4();
|
|
@@ -159,8 +189,8 @@ describe(EntityLoader, () => {
|
|
|
159
189
|
},
|
|
160
190
|
],
|
|
161
191
|
],
|
|
162
|
-
])
|
|
163
|
-
)
|
|
192
|
+
]),
|
|
193
|
+
),
|
|
164
194
|
);
|
|
165
195
|
const cacheAdapterProvider = new NoCacheStubCacheAdapterProvider();
|
|
166
196
|
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(testEntityConfiguration);
|
|
@@ -170,7 +200,7 @@ describe(EntityLoader, () => {
|
|
|
170
200
|
entityCache,
|
|
171
201
|
StubQueryContextProvider,
|
|
172
202
|
instance(mock<IEntityMetricsAdapter>()),
|
|
173
|
-
TestEntity.name
|
|
203
|
+
TestEntity.name,
|
|
174
204
|
);
|
|
175
205
|
const entityLoader = new EntityLoader(
|
|
176
206
|
viewerContext,
|
|
@@ -181,19 +211,19 @@ describe(EntityLoader, () => {
|
|
|
181
211
|
/* entitySelectedFields */ undefined,
|
|
182
212
|
privacyPolicy,
|
|
183
213
|
dataManager,
|
|
184
|
-
metricsAdapter
|
|
214
|
+
metricsAdapter,
|
|
185
215
|
);
|
|
186
216
|
const entities = await enforceResultsAsync(
|
|
187
|
-
entityLoader.loadManyByFieldEqualityConjunctionAsync([
|
|
217
|
+
entityLoader.withAuthorizationResults().loadManyByFieldEqualityConjunctionAsync([
|
|
188
218
|
{
|
|
189
219
|
fieldName: 'stringField',
|
|
190
220
|
fieldValue: 'huh',
|
|
191
221
|
},
|
|
192
222
|
{
|
|
193
223
|
fieldName: 'intField',
|
|
194
|
-
|
|
224
|
+
fieldValues: [4],
|
|
195
225
|
},
|
|
196
|
-
])
|
|
226
|
+
]),
|
|
197
227
|
);
|
|
198
228
|
expect(entities).toHaveLength(2);
|
|
199
229
|
verify(
|
|
@@ -202,24 +232,29 @@ describe(EntityLoader, () => {
|
|
|
202
232
|
queryContext,
|
|
203
233
|
privacyPolicyEvaluationContext,
|
|
204
234
|
anyOfClass(TestEntity),
|
|
205
|
-
anything()
|
|
206
|
-
)
|
|
235
|
+
anything(),
|
|
236
|
+
),
|
|
207
237
|
).twice();
|
|
208
238
|
|
|
209
239
|
await expect(
|
|
210
|
-
entityLoader
|
|
211
|
-
|
|
212
|
-
|
|
240
|
+
entityLoader
|
|
241
|
+
.withAuthorizationResults()
|
|
242
|
+
.loadManyByFieldEqualityConjunctionAsync([
|
|
243
|
+
{ fieldName: 'customIdField', fieldValue: 'not-a-uuid' },
|
|
244
|
+
]),
|
|
213
245
|
).rejects.toThrowError('Entity field not valid: TestEntity (customIdField = not-a-uuid)');
|
|
214
246
|
});
|
|
215
247
|
|
|
216
248
|
it('loads entities with loadFirstByFieldEqualityConjunction', async () => {
|
|
217
249
|
const privacyPolicy = new TestEntityPrivacyPolicy();
|
|
218
250
|
const spiedPrivacyPolicy = spy(privacyPolicy);
|
|
219
|
-
const viewerContext = instance(mock(
|
|
220
|
-
const privacyPolicyEvaluationContext =
|
|
251
|
+
const viewerContext = instance(mock(ViewerContext));
|
|
252
|
+
const privacyPolicyEvaluationContext =
|
|
253
|
+
instance(
|
|
254
|
+
mock<EntityPrivacyPolicyEvaluationContext<TestFields, string, ViewerContext, TestEntity>>(),
|
|
255
|
+
);
|
|
221
256
|
const metricsAdapter = instance(mock<IEntityMetricsAdapter>());
|
|
222
|
-
const queryContext = StubQueryContextProvider.
|
|
257
|
+
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
223
258
|
|
|
224
259
|
const id1 = uuidv4();
|
|
225
260
|
const id2 = uuidv4();
|
|
@@ -258,8 +293,8 @@ describe(EntityLoader, () => {
|
|
|
258
293
|
},
|
|
259
294
|
],
|
|
260
295
|
],
|
|
261
|
-
])
|
|
262
|
-
)
|
|
296
|
+
]),
|
|
297
|
+
),
|
|
263
298
|
);
|
|
264
299
|
const cacheAdapterProvider = new NoCacheStubCacheAdapterProvider();
|
|
265
300
|
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(testEntityConfiguration);
|
|
@@ -269,7 +304,7 @@ describe(EntityLoader, () => {
|
|
|
269
304
|
entityCache,
|
|
270
305
|
StubQueryContextProvider,
|
|
271
306
|
instance(mock<IEntityMetricsAdapter>()),
|
|
272
|
-
TestEntity.name
|
|
307
|
+
TestEntity.name,
|
|
273
308
|
);
|
|
274
309
|
const entityLoader = new EntityLoader(
|
|
275
310
|
viewerContext,
|
|
@@ -280,21 +315,23 @@ describe(EntityLoader, () => {
|
|
|
280
315
|
/* entitySelectedFields */ undefined,
|
|
281
316
|
privacyPolicy,
|
|
282
317
|
dataManager,
|
|
283
|
-
metricsAdapter
|
|
284
|
-
);
|
|
285
|
-
const result = await entityLoader.loadFirstByFieldEqualityConjunctionAsync(
|
|
286
|
-
[
|
|
287
|
-
{
|
|
288
|
-
fieldName: 'stringField',
|
|
289
|
-
fieldValue: 'huh',
|
|
290
|
-
},
|
|
291
|
-
{
|
|
292
|
-
fieldName: 'intField',
|
|
293
|
-
fieldValue: 4,
|
|
294
|
-
},
|
|
295
|
-
],
|
|
296
|
-
{ orderBy: [{ fieldName: 'testIndexedField', order: OrderByOrdering.DESCENDING }] }
|
|
318
|
+
metricsAdapter,
|
|
297
319
|
);
|
|
320
|
+
const result = await entityLoader
|
|
321
|
+
.withAuthorizationResults()
|
|
322
|
+
.loadFirstByFieldEqualityConjunctionAsync(
|
|
323
|
+
[
|
|
324
|
+
{
|
|
325
|
+
fieldName: 'stringField',
|
|
326
|
+
fieldValue: 'huh',
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
fieldName: 'intField',
|
|
330
|
+
fieldValue: 4,
|
|
331
|
+
},
|
|
332
|
+
],
|
|
333
|
+
{ orderBy: [{ fieldName: 'testIndexedField', order: OrderByOrdering.DESCENDING }] },
|
|
334
|
+
);
|
|
298
335
|
expect(result).not.toBeNull();
|
|
299
336
|
expect(result!.ok).toBe(true);
|
|
300
337
|
expect(result!.enforceValue().getField('testIndexedField')).toEqual('5');
|
|
@@ -304,8 +341,69 @@ describe(EntityLoader, () => {
|
|
|
304
341
|
queryContext,
|
|
305
342
|
privacyPolicyEvaluationContext,
|
|
306
343
|
anyOfClass(TestEntity),
|
|
307
|
-
anything()
|
|
308
|
-
)
|
|
344
|
+
anything(),
|
|
345
|
+
),
|
|
346
|
+
).once();
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
it('loads entities with loadManyByRawWhereClauseAsync', async () => {
|
|
350
|
+
const privacyPolicy = new TestEntityPrivacyPolicy();
|
|
351
|
+
const spiedPrivacyPolicy = spy(privacyPolicy);
|
|
352
|
+
const viewerContext = instance(mock(ViewerContext));
|
|
353
|
+
const privacyPolicyEvaluationContext =
|
|
354
|
+
instance(
|
|
355
|
+
mock<EntityPrivacyPolicyEvaluationContext<TestFields, string, ViewerContext, TestEntity>>(),
|
|
356
|
+
);
|
|
357
|
+
const metricsAdapter = instance(mock<IEntityMetricsAdapter>());
|
|
358
|
+
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
359
|
+
|
|
360
|
+
const dataManagerMock = mock<EntityDataManager<TestFields>>(EntityDataManager);
|
|
361
|
+
when(
|
|
362
|
+
dataManagerMock.loadManyByRawWhereClauseAsync(
|
|
363
|
+
queryContext,
|
|
364
|
+
anything(),
|
|
365
|
+
anything(),
|
|
366
|
+
anything(),
|
|
367
|
+
),
|
|
368
|
+
).thenResolve([
|
|
369
|
+
{
|
|
370
|
+
customIdField: 'id',
|
|
371
|
+
stringField: 'huh',
|
|
372
|
+
intField: 4,
|
|
373
|
+
testIndexedField: '4',
|
|
374
|
+
dateField: new Date(),
|
|
375
|
+
nullableField: null,
|
|
376
|
+
},
|
|
377
|
+
]);
|
|
378
|
+
const dataManager = instance(dataManagerMock);
|
|
379
|
+
const entityLoader = new EntityLoader(
|
|
380
|
+
viewerContext,
|
|
381
|
+
queryContext,
|
|
382
|
+
privacyPolicyEvaluationContext,
|
|
383
|
+
testEntityConfiguration,
|
|
384
|
+
TestEntity,
|
|
385
|
+
/* entitySelectedFields */ undefined,
|
|
386
|
+
privacyPolicy,
|
|
387
|
+
dataManager,
|
|
388
|
+
metricsAdapter,
|
|
389
|
+
);
|
|
390
|
+
const result = await entityLoader
|
|
391
|
+
.withAuthorizationResults()
|
|
392
|
+
.loadManyByRawWhereClauseAsync('id = ?', [1], {
|
|
393
|
+
orderBy: [{ fieldName: 'testIndexedField', order: OrderByOrdering.DESCENDING }],
|
|
394
|
+
});
|
|
395
|
+
expect(result).toHaveLength(1);
|
|
396
|
+
expect(result[0]).not.toBeNull();
|
|
397
|
+
expect(result[0]!.ok).toBe(true);
|
|
398
|
+
expect(result[0]!.enforceValue().getField('testIndexedField')).toEqual('4');
|
|
399
|
+
verify(
|
|
400
|
+
spiedPrivacyPolicy.authorizeReadAsync(
|
|
401
|
+
viewerContext,
|
|
402
|
+
queryContext,
|
|
403
|
+
privacyPolicyEvaluationContext,
|
|
404
|
+
anyOfClass(TestEntity),
|
|
405
|
+
anything(),
|
|
406
|
+
),
|
|
309
407
|
).once();
|
|
310
408
|
});
|
|
311
409
|
|
|
@@ -313,10 +411,13 @@ describe(EntityLoader, () => {
|
|
|
313
411
|
const privacyPolicy = new TestEntityPrivacyPolicy();
|
|
314
412
|
const spiedPrivacyPolicy = spy(privacyPolicy);
|
|
315
413
|
|
|
316
|
-
const viewerContext = instance(mock(
|
|
317
|
-
const privacyPolicyEvaluationContext =
|
|
414
|
+
const viewerContext = instance(mock(ViewerContext));
|
|
415
|
+
const privacyPolicyEvaluationContext =
|
|
416
|
+
instance(
|
|
417
|
+
mock<EntityPrivacyPolicyEvaluationContext<TestFields, string, ViewerContext, TestEntity>>(),
|
|
418
|
+
);
|
|
318
419
|
const metricsAdapter = instance(mock<IEntityMetricsAdapter>());
|
|
319
|
-
const queryContext = StubQueryContextProvider.
|
|
420
|
+
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
320
421
|
|
|
321
422
|
const id1 = uuidv4();
|
|
322
423
|
const databaseAdapter = new StubDatabaseAdapter<TestFields>(
|
|
@@ -337,8 +438,8 @@ describe(EntityLoader, () => {
|
|
|
337
438
|
},
|
|
338
439
|
],
|
|
339
440
|
],
|
|
340
|
-
])
|
|
341
|
-
)
|
|
441
|
+
]),
|
|
442
|
+
),
|
|
342
443
|
);
|
|
343
444
|
const cacheAdapterProvider = new NoCacheStubCacheAdapterProvider();
|
|
344
445
|
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(testEntityConfiguration);
|
|
@@ -348,7 +449,7 @@ describe(EntityLoader, () => {
|
|
|
348
449
|
entityCache,
|
|
349
450
|
StubQueryContextProvider,
|
|
350
451
|
instance(mock<IEntityMetricsAdapter>()),
|
|
351
|
-
TestEntity.name
|
|
452
|
+
TestEntity.name,
|
|
352
453
|
);
|
|
353
454
|
const entityLoader = new EntityLoader(
|
|
354
455
|
viewerContext,
|
|
@@ -359,25 +460,30 @@ describe(EntityLoader, () => {
|
|
|
359
460
|
/* entitySelectedFields */ undefined,
|
|
360
461
|
privacyPolicy,
|
|
361
462
|
dataManager,
|
|
362
|
-
metricsAdapter
|
|
463
|
+
metricsAdapter,
|
|
464
|
+
);
|
|
465
|
+
const entity = await enforceAsyncResult(
|
|
466
|
+
entityLoader.withAuthorizationResults().loadByIDAsync(id1),
|
|
363
467
|
);
|
|
364
|
-
const entity = await enforceAsyncResult(entityLoader.loadByIDAsync(id1));
|
|
365
468
|
verify(
|
|
366
469
|
spiedPrivacyPolicy.authorizeReadAsync(
|
|
367
470
|
viewerContext,
|
|
368
471
|
queryContext,
|
|
369
472
|
privacyPolicyEvaluationContext,
|
|
370
473
|
entity,
|
|
371
|
-
anything()
|
|
372
|
-
)
|
|
474
|
+
anything(),
|
|
475
|
+
),
|
|
373
476
|
).once();
|
|
374
477
|
});
|
|
375
478
|
|
|
376
479
|
it('invalidates upon invalidate one', async () => {
|
|
377
|
-
const viewerContext = instance(mock(
|
|
378
|
-
const privacyPolicyEvaluationContext =
|
|
480
|
+
const viewerContext = instance(mock(ViewerContext));
|
|
481
|
+
const privacyPolicyEvaluationContext =
|
|
482
|
+
instance(
|
|
483
|
+
mock<EntityPrivacyPolicyEvaluationContext<TestFields, string, ViewerContext, TestEntity>>(),
|
|
484
|
+
);
|
|
379
485
|
const metricsAdapter = instance(mock<IEntityMetricsAdapter>());
|
|
380
|
-
const queryContext = StubQueryContextProvider.
|
|
486
|
+
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
381
487
|
const privacyPolicy = instance(mock(TestEntityPrivacyPolicy));
|
|
382
488
|
const dataManagerMock = mock<EntityDataManager<TestFields>>();
|
|
383
489
|
const dataManagerInstance = instance(dataManagerMock);
|
|
@@ -392,20 +498,23 @@ describe(EntityLoader, () => {
|
|
|
392
498
|
/* entitySelectedFields */ undefined,
|
|
393
499
|
privacyPolicy,
|
|
394
500
|
dataManagerInstance,
|
|
395
|
-
metricsAdapter
|
|
501
|
+
metricsAdapter,
|
|
396
502
|
);
|
|
397
|
-
await entityLoader.invalidateFieldsAsync({ customIdField: id1 } as any);
|
|
503
|
+
await entityLoader.utils().invalidateFieldsAsync({ customIdField: id1 } as any);
|
|
398
504
|
|
|
399
505
|
verify(
|
|
400
|
-
dataManagerMock.invalidateObjectFieldsAsync(deepEqual({ customIdField: id1 } as any))
|
|
506
|
+
dataManagerMock.invalidateObjectFieldsAsync(deepEqual({ customIdField: id1 } as any)),
|
|
401
507
|
).once();
|
|
402
508
|
});
|
|
403
509
|
|
|
404
510
|
it('invalidates upon invalidate by field', async () => {
|
|
405
|
-
const viewerContext = instance(mock(
|
|
406
|
-
const privacyPolicyEvaluationContext =
|
|
511
|
+
const viewerContext = instance(mock(ViewerContext));
|
|
512
|
+
const privacyPolicyEvaluationContext =
|
|
513
|
+
instance(
|
|
514
|
+
mock<EntityPrivacyPolicyEvaluationContext<TestFields, string, ViewerContext, TestEntity>>(),
|
|
515
|
+
);
|
|
407
516
|
const metricsAdapter = instance(mock<IEntityMetricsAdapter>());
|
|
408
|
-
const queryContext = StubQueryContextProvider.
|
|
517
|
+
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
409
518
|
const privacyPolicy = instance(mock(TestEntityPrivacyPolicy));
|
|
410
519
|
const dataManagerMock = mock<EntityDataManager<TestFields>>();
|
|
411
520
|
const dataManagerInstance = instance(dataManagerMock);
|
|
@@ -420,19 +529,22 @@ describe(EntityLoader, () => {
|
|
|
420
529
|
/* entitySelectedFields */ undefined,
|
|
421
530
|
privacyPolicy,
|
|
422
531
|
dataManagerInstance,
|
|
423
|
-
metricsAdapter
|
|
532
|
+
metricsAdapter,
|
|
424
533
|
);
|
|
425
|
-
await entityLoader.invalidateFieldsAsync({ customIdField: id1 } as any);
|
|
534
|
+
await entityLoader.utils().invalidateFieldsAsync({ customIdField: id1 } as any);
|
|
426
535
|
verify(
|
|
427
|
-
dataManagerMock.invalidateObjectFieldsAsync(deepEqual({ customIdField: id1 } as any))
|
|
536
|
+
dataManagerMock.invalidateObjectFieldsAsync(deepEqual({ customIdField: id1 } as any)),
|
|
428
537
|
).once();
|
|
429
538
|
});
|
|
430
539
|
|
|
431
540
|
it('invalidates upon invalidate by entity', async () => {
|
|
432
|
-
const viewerContext = instance(mock(
|
|
433
|
-
const privacyPolicyEvaluationContext =
|
|
541
|
+
const viewerContext = instance(mock(ViewerContext));
|
|
542
|
+
const privacyPolicyEvaluationContext =
|
|
543
|
+
instance(
|
|
544
|
+
mock<EntityPrivacyPolicyEvaluationContext<TestFields, string, ViewerContext, TestEntity>>(),
|
|
545
|
+
);
|
|
434
546
|
const metricsAdapter = instance(mock<IEntityMetricsAdapter>());
|
|
435
|
-
const queryContext = StubQueryContextProvider.
|
|
547
|
+
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
436
548
|
const privacyPolicy = instance(mock(TestEntityPrivacyPolicy));
|
|
437
549
|
const dataManagerMock = mock<EntityDataManager<TestFields>>();
|
|
438
550
|
const dataManagerInstance = instance(dataManagerMock);
|
|
@@ -451,25 +563,28 @@ describe(EntityLoader, () => {
|
|
|
451
563
|
/* entitySelectedFields */ undefined,
|
|
452
564
|
privacyPolicy,
|
|
453
565
|
dataManagerInstance,
|
|
454
|
-
metricsAdapter
|
|
566
|
+
metricsAdapter,
|
|
455
567
|
);
|
|
456
|
-
await entityLoader.invalidateEntityAsync(entityInstance);
|
|
568
|
+
await entityLoader.utils().invalidateEntityAsync(entityInstance);
|
|
457
569
|
verify(
|
|
458
|
-
dataManagerMock.invalidateObjectFieldsAsync(deepEqual({ customIdField: id1 } as any))
|
|
570
|
+
dataManagerMock.invalidateObjectFieldsAsync(deepEqual({ customIdField: id1 } as any)),
|
|
459
571
|
).once();
|
|
460
572
|
});
|
|
461
573
|
|
|
462
574
|
it('returns error result when not allowed', async () => {
|
|
463
|
-
const viewerContext = instance(mock(
|
|
464
|
-
const privacyPolicyEvaluationContext =
|
|
575
|
+
const viewerContext = instance(mock(ViewerContext));
|
|
576
|
+
const privacyPolicyEvaluationContext =
|
|
577
|
+
instance(
|
|
578
|
+
mock<EntityPrivacyPolicyEvaluationContext<TestFields, string, ViewerContext, TestEntity>>(),
|
|
579
|
+
);
|
|
465
580
|
const metricsAdapter = instance(mock<IEntityMetricsAdapter>());
|
|
466
|
-
const queryContext = StubQueryContextProvider.
|
|
581
|
+
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
467
582
|
const privacyPolicyMock = mock(TestEntityPrivacyPolicy);
|
|
468
583
|
const dataManagerMock = mock<EntityDataManager<TestFields>>();
|
|
469
584
|
|
|
470
585
|
const id1 = uuidv4();
|
|
471
586
|
when(
|
|
472
|
-
dataManagerMock.loadManyByFieldEqualingAsync(anything(), anything(), anything())
|
|
587
|
+
dataManagerMock.loadManyByFieldEqualingAsync(anything(), anything(), anything()),
|
|
473
588
|
).thenResolve(new Map().set(id1, [{ customIdField: id1 }]));
|
|
474
589
|
|
|
475
590
|
const rejectionError = new Error();
|
|
@@ -480,8 +595,8 @@ describe(EntityLoader, () => {
|
|
|
480
595
|
queryContext,
|
|
481
596
|
privacyPolicyEvaluationContext,
|
|
482
597
|
anyOfClass(TestEntity),
|
|
483
|
-
anything()
|
|
484
|
-
)
|
|
598
|
+
anything(),
|
|
599
|
+
),
|
|
485
600
|
).thenReject(rejectionError);
|
|
486
601
|
|
|
487
602
|
const privacyPolicy = instance(privacyPolicyMock);
|
|
@@ -496,27 +611,30 @@ describe(EntityLoader, () => {
|
|
|
496
611
|
/* entitySelectedFields */ undefined,
|
|
497
612
|
privacyPolicy,
|
|
498
613
|
dataManagerInstance,
|
|
499
|
-
metricsAdapter
|
|
614
|
+
metricsAdapter,
|
|
500
615
|
);
|
|
501
616
|
|
|
502
|
-
const entityResult = await entityLoader.loadByIDAsync(id1);
|
|
617
|
+
const entityResult = await entityLoader.withAuthorizationResults().loadByIDAsync(id1);
|
|
503
618
|
expect(entityResult.ok).toBe(false);
|
|
504
619
|
expect(entityResult.reason).toEqual(rejectionError);
|
|
505
620
|
expect(entityResult.value).toBe(undefined);
|
|
506
621
|
});
|
|
507
622
|
|
|
508
623
|
it('throws upon database adapter error', async () => {
|
|
509
|
-
const viewerContext = instance(mock(
|
|
510
|
-
const privacyPolicyEvaluationContext =
|
|
624
|
+
const viewerContext = instance(mock(ViewerContext));
|
|
625
|
+
const privacyPolicyEvaluationContext =
|
|
626
|
+
instance(
|
|
627
|
+
mock<EntityPrivacyPolicyEvaluationContext<TestFields, string, ViewerContext, TestEntity>>(),
|
|
628
|
+
);
|
|
511
629
|
const metricsAdapter = instance(mock<IEntityMetricsAdapter>());
|
|
512
|
-
const queryContext = StubQueryContextProvider.
|
|
630
|
+
const queryContext = StubQueryContextProvider.getQueryContext();
|
|
513
631
|
const privacyPolicy = instance(mock(TestEntityPrivacyPolicy));
|
|
514
632
|
const dataManagerMock = mock<EntityDataManager<TestFields>>();
|
|
515
633
|
|
|
516
634
|
const error = new Error();
|
|
517
635
|
|
|
518
636
|
when(
|
|
519
|
-
dataManagerMock.loadManyByFieldEqualingAsync(anything(), anything(), anything())
|
|
637
|
+
dataManagerMock.loadManyByFieldEqualingAsync(anything(), anything(), anything()),
|
|
520
638
|
).thenReject(error);
|
|
521
639
|
|
|
522
640
|
const dataManagerInstance = instance(dataManagerMock);
|
|
@@ -530,30 +648,40 @@ describe(EntityLoader, () => {
|
|
|
530
648
|
/* entitySelectedFields */ undefined,
|
|
531
649
|
privacyPolicy,
|
|
532
650
|
dataManagerInstance,
|
|
533
|
-
metricsAdapter
|
|
651
|
+
metricsAdapter,
|
|
534
652
|
);
|
|
535
653
|
|
|
536
654
|
const loadByValue = uuidv4();
|
|
537
655
|
|
|
538
|
-
await expect(
|
|
656
|
+
await expect(
|
|
657
|
+
entityLoader.withAuthorizationResults().loadByIDAsync(loadByValue),
|
|
658
|
+
).rejects.toEqual(error);
|
|
539
659
|
await expect(entityLoader.enforcing().loadByIDAsync(loadByValue)).rejects.toEqual(error);
|
|
540
|
-
await expect(
|
|
660
|
+
await expect(
|
|
661
|
+
entityLoader.withAuthorizationResults().loadManyByIDsAsync([loadByValue]),
|
|
662
|
+
).rejects.toEqual(error);
|
|
541
663
|
await expect(entityLoader.enforcing().loadManyByIDsAsync([loadByValue])).rejects.toEqual(error);
|
|
542
|
-
await expect(entityLoader.loadManyByIDsNullableAsync([loadByValue])).rejects.toEqual(error);
|
|
543
664
|
await expect(
|
|
544
|
-
entityLoader.
|
|
665
|
+
entityLoader.withAuthorizationResults().loadManyByIDsNullableAsync([loadByValue]),
|
|
666
|
+
).rejects.toEqual(error);
|
|
667
|
+
await expect(
|
|
668
|
+
entityLoader.enforcing().loadManyByIDsNullableAsync([loadByValue]),
|
|
545
669
|
).rejects.toEqual(error);
|
|
546
670
|
await expect(
|
|
547
|
-
entityLoader
|
|
671
|
+
entityLoader
|
|
672
|
+
.withAuthorizationResults()
|
|
673
|
+
.loadManyByFieldEqualingAsync('customIdField', loadByValue),
|
|
548
674
|
).rejects.toEqual(error);
|
|
549
675
|
await expect(
|
|
550
|
-
entityLoader.enforcing().loadManyByFieldEqualingAsync('customIdField', loadByValue)
|
|
676
|
+
entityLoader.enforcing().loadManyByFieldEqualingAsync('customIdField', loadByValue),
|
|
551
677
|
).rejects.toEqual(error);
|
|
552
678
|
await expect(
|
|
553
|
-
entityLoader
|
|
679
|
+
entityLoader
|
|
680
|
+
.withAuthorizationResults()
|
|
681
|
+
.loadManyByFieldEqualingManyAsync('customIdField', [loadByValue]),
|
|
554
682
|
).rejects.toEqual(error);
|
|
555
683
|
await expect(
|
|
556
|
-
entityLoader.enforcing().loadManyByFieldEqualingManyAsync('customIdField', [loadByValue])
|
|
684
|
+
entityLoader.enforcing().loadManyByFieldEqualingManyAsync('customIdField', [loadByValue]),
|
|
557
685
|
).rejects.toEqual(error);
|
|
558
686
|
});
|
|
559
687
|
});
|