@expo/entity 0.40.0 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/AuthorizationResultBasedEntityAssociationLoader.d.ts +16 -16
- package/build/AuthorizationResultBasedEntityAssociationLoader.js +2 -4
- package/build/AuthorizationResultBasedEntityAssociationLoader.js.map +1 -1
- package/build/AuthorizationResultBasedEntityLoader.d.ts +39 -67
- package/build/AuthorizationResultBasedEntityLoader.js +85 -62
- package/build/AuthorizationResultBasedEntityLoader.js.map +1 -1
- package/build/AuthorizationResultBasedEntityMutator.d.ts +16 -16
- package/build/AuthorizationResultBasedEntityMutator.js.map +1 -1
- package/build/ComposedEntityCacheAdapter.d.ts +7 -6
- package/build/ComposedEntityCacheAdapter.js +28 -28
- package/build/ComposedEntityCacheAdapter.js.map +1 -1
- package/build/ComposedSecondaryEntityCache.d.ts +1 -1
- package/build/ComposedSecondaryEntityCache.js.map +1 -1
- package/build/EnforcingEntityAssociationLoader.d.ts +15 -15
- package/build/EnforcingEntityAssociationLoader.js.map +1 -1
- package/build/EnforcingEntityCreator.d.ts +2 -2
- package/build/EnforcingEntityDeleter.d.ts +2 -2
- package/build/EnforcingEntityLoader.d.ts +104 -18
- package/build/EnforcingEntityLoader.js +113 -12
- package/build/EnforcingEntityLoader.js.map +1 -1
- package/build/EnforcingEntityUpdater.d.ts +2 -2
- package/build/Entity.d.ts +32 -10
- package/build/Entity.js +41 -3
- package/build/Entity.js.map +1 -1
- package/build/EntityAssociationLoader.d.ts +3 -3
- package/build/EntityCompanion.d.ts +5 -5
- package/build/EntityCompanion.js.map +1 -1
- package/build/EntityCompanionProvider.d.ts +6 -6
- package/build/EntityCompanionProvider.js.map +1 -1
- package/build/EntityConfiguration.d.ts +46 -5
- package/build/EntityConfiguration.js +39 -1
- package/build/EntityConfiguration.js.map +1 -1
- package/build/EntityCreator.d.ts +4 -4
- package/build/EntityDatabaseAdapter.d.ts +15 -14
- package/build/EntityDatabaseAdapter.js +20 -12
- package/build/EntityDatabaseAdapter.js.map +1 -1
- package/build/EntityDeleter.d.ts +4 -4
- package/build/EntityFieldDefinition.d.ts +20 -10
- package/build/EntityFieldDefinition.js +3 -1
- package/build/EntityFieldDefinition.js.map +1 -1
- package/build/EntityFields.d.ts +14 -12
- package/build/EntityFields.js.map +1 -1
- package/build/EntityLoader.d.ts +5 -5
- package/build/EntityLoaderFactory.d.ts +3 -3
- package/build/EntityLoaderFactory.js.map +1 -1
- package/build/EntityLoaderUtils.d.ts +2 -2
- package/build/EntityLoaderUtils.js +27 -1
- package/build/EntityLoaderUtils.js.map +1 -1
- package/build/EntityMutationInfo.d.ts +2 -2
- package/build/EntityMutationTriggerConfiguration.d.ts +14 -14
- package/build/EntityMutationTriggerConfiguration.js.map +1 -1
- package/build/EntityMutationValidator.d.ts +2 -2
- package/build/EntityMutatorFactory.d.ts +5 -5
- package/build/EntityMutatorFactory.js.map +1 -1
- package/build/EntityPrivacyPolicy.d.ts +14 -14
- package/build/EntityPrivacyPolicy.js.map +1 -1
- package/build/EntitySecondaryCacheLoader.d.ts +4 -4
- package/build/EntityUpdater.d.ts +4 -4
- package/build/GenericEntityCacheAdapter.d.ts +7 -6
- package/build/GenericEntityCacheAdapter.js +13 -14
- package/build/GenericEntityCacheAdapter.js.map +1 -1
- package/build/GenericSecondaryEntityCache.d.ts +3 -3
- package/build/GenericSecondaryEntityCache.js.map +1 -1
- package/build/IEntityCacheAdapter.d.ts +17 -16
- package/build/IEntityCacheAdapterProvider.d.ts +1 -1
- package/build/IEntityDatabaseAdapterProvider.d.ts +1 -1
- package/build/IEntityGenericCacher.d.ts +15 -5
- package/build/ReadonlyEntity.d.ts +27 -8
- package/build/ReadonlyEntity.js +31 -3
- package/build/ReadonlyEntity.js.map +1 -1
- package/build/ViewerContext.d.ts +1 -1
- package/build/ViewerScopedEntityCompanion.d.ts +5 -5
- package/build/ViewerScopedEntityCompanionProvider.d.ts +1 -1
- package/build/ViewerScopedEntityLoaderFactory.d.ts +3 -3
- package/build/ViewerScopedEntityMutatorFactory.d.ts +5 -5
- package/build/entityUtils.d.ts +1 -1
- package/build/entityUtils.js.map +1 -1
- package/build/errors/EntityInvalidFieldValueError.d.ts +2 -2
- package/build/errors/EntityNotAuthorizedError.d.ts +1 -1
- package/build/errors/EntityNotFoundError.d.ts +2 -2
- package/build/index.d.ts +7 -7
- package/build/index.js +8 -13
- package/build/index.js.map +1 -1
- package/build/internal/CompositeFieldHolder.d.ts +48 -0
- package/build/internal/CompositeFieldHolder.js +116 -0
- package/build/internal/CompositeFieldHolder.js.map +1 -0
- package/build/internal/CompositeFieldValueMap.d.ts +15 -0
- package/build/internal/CompositeFieldValueMap.js +51 -0
- package/build/internal/CompositeFieldValueMap.js.map +1 -0
- package/build/internal/EntityDataManager.d.ts +16 -16
- package/build/internal/EntityDataManager.js +42 -45
- package/build/internal/EntityDataManager.js.map +1 -1
- package/build/internal/EntityFieldTransformationUtils.d.ts +5 -5
- package/build/internal/EntityFieldTransformationUtils.js.map +1 -1
- package/build/internal/EntityLoadInterfaces.d.ts +104 -0
- package/build/internal/EntityLoadInterfaces.js +25 -0
- package/build/internal/EntityLoadInterfaces.js.map +1 -0
- package/build/internal/EntityTableDataCoordinator.d.ts +6 -6
- package/build/internal/EntityTableDataCoordinator.js.map +1 -1
- package/build/internal/ReadThroughEntityCache.d.ts +17 -16
- package/build/internal/ReadThroughEntityCache.js +36 -36
- package/build/internal/ReadThroughEntityCache.js.map +1 -1
- package/build/internal/SingleFieldHolder.d.ts +34 -0
- package/build/internal/SingleFieldHolder.js +90 -0
- package/build/internal/SingleFieldHolder.js.map +1 -0
- package/build/metrics/EntityMetricsUtils.d.ts +2 -1
- package/build/metrics/EntityMetricsUtils.js.map +1 -1
- package/build/metrics/IEntityMetricsAdapter.d.ts +5 -0
- package/build/metrics/IEntityMetricsAdapter.js.map +1 -1
- package/build/rules/AlwaysAllowPrivacyPolicyRule.d.ts +2 -2
- package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -1
- package/build/rules/AlwaysDenyPrivacyPolicyRule.d.ts +2 -2
- package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -1
- package/build/rules/AlwaysSkipPrivacyPolicyRule.d.ts +2 -2
- package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -1
- package/build/rules/PrivacyPolicyRule.d.ts +2 -2
- package/build/tsconfig.build.tsbuildinfo +1 -0
- package/build/utils/EntityPrivacyUtils.d.ts +4 -4
- package/build/utils/EntityPrivacyUtils.js.map +1 -1
- package/build/utils/collections/SerializableKeyMap.d.ts +27 -0
- package/build/utils/collections/SerializableKeyMap.js +60 -0
- package/build/utils/collections/SerializableKeyMap.js.map +1 -0
- package/build/utils/collections/maps.js +1 -2
- package/build/utils/collections/maps.js.map +1 -1
- package/build/utils/collections/sets.d.ts +1 -0
- package/build/utils/collections/sets.js +7 -0
- package/build/utils/collections/sets.js.map +1 -0
- package/build/utils/mergeEntityMutationTriggerConfigurations.d.ts +1 -1
- package/package.json +8 -5
- package/src/AuthorizationResultBasedEntityAssociationLoader.ts +58 -53
- package/src/AuthorizationResultBasedEntityLoader.ts +194 -81
- package/src/AuthorizationResultBasedEntityMutator.ts +71 -45
- package/src/ComposedEntityCacheAdapter.ts +55 -46
- package/src/ComposedSecondaryEntityCache.ts +5 -2
- package/src/EnforcingEntityAssociationLoader.ts +52 -44
- package/src/EnforcingEntityCreator.ts +5 -5
- package/src/EnforcingEntityDeleter.ts +5 -5
- package/src/EnforcingEntityLoader.ts +158 -21
- package/src/EnforcingEntityUpdater.ts +5 -5
- package/src/Entity.ts +185 -29
- package/src/EntityAssociationLoader.ts +6 -6
- package/src/EntityCompanion.ts +11 -11
- package/src/EntityCompanionProvider.ts +21 -18
- package/src/EntityConfiguration.ts +123 -9
- package/src/EntityCreator.ts +7 -7
- package/src/EntityDatabaseAdapter.ts +51 -28
- package/src/EntityDeleter.ts +7 -7
- package/src/EntityFieldDefinition.ts +32 -12
- package/src/EntityFields.ts +49 -12
- package/src/EntityLoader.ts +8 -8
- package/src/EntityLoaderFactory.ts +8 -8
- package/src/EntityLoaderUtils.ts +39 -10
- package/src/EntityMutationInfo.ts +6 -6
- package/src/EntityMutationTriggerConfiguration.ts +68 -20
- package/src/EntityMutationValidator.ts +4 -4
- package/src/EntityMutatorFactory.ts +13 -13
- package/src/EntityPrivacyPolicy.ts +50 -26
- package/src/EntitySecondaryCacheLoader.ts +6 -6
- package/src/EntityUpdater.ts +7 -7
- package/src/GenericEntityCacheAdapter.ts +39 -28
- package/src/GenericSecondaryEntityCache.ts +6 -3
- package/src/IEntityCacheAdapter.ts +45 -25
- package/src/IEntityCacheAdapterProvider.ts +3 -3
- package/src/IEntityDatabaseAdapterProvider.ts +3 -3
- package/src/IEntityGenericCacher.ts +33 -5
- package/src/ReadonlyEntity.ts +129 -16
- package/src/ViewerContext.ts +5 -5
- package/src/ViewerScopedEntityCompanion.ts +7 -7
- package/src/ViewerScopedEntityCompanionProvider.ts +6 -6
- package/src/ViewerScopedEntityLoaderFactory.ts +7 -7
- package/src/ViewerScopedEntityMutatorFactory.ts +8 -8
- package/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts +41 -72
- package/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.ts +14 -13
- package/src/__tests__/AuthorizationResultBasedEntityLoader-test.ts +367 -69
- package/src/__tests__/ComposedCacheAdapter-test.ts +235 -117
- package/src/__tests__/EnforcingEntityLoader-test.ts +135 -1
- package/src/__tests__/Entity-test.ts +64 -11
- package/src/__tests__/EntityAssociationLoader-test.ts +6 -8
- package/src/__tests__/EntityCommonUseCases-test.ts +25 -28
- package/src/__tests__/EntityCompanion-test.ts +4 -4
- package/src/__tests__/EntityCompanionProvider-test.ts +9 -8
- package/src/__tests__/EntityConfiguration-test.ts +85 -6
- package/src/__tests__/EntityDatabaseAdapter-test.ts +113 -17
- package/src/__tests__/EntityEdges-test.ts +135 -138
- package/src/__tests__/EntityFields-test.ts +2 -2
- package/src/__tests__/EntityLoader-test.ts +5 -7
- package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +17 -19
- package/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.ts +73 -0
- package/src/__tests__/EntityMutator-test.ts +74 -46
- package/src/__tests__/EntityPrivacyPolicy-test.ts +51 -74
- package/src/__tests__/EntityQueryContext-test.ts +1 -1
- package/src/__tests__/EntitySecondaryCacheLoader-test.ts +9 -9
- package/src/__tests__/EntitySelfReferentialEdges-test.ts +119 -122
- package/src/__tests__/GenericEntityCacheAdapter-test.ts +83 -28
- package/src/__tests__/ReadonlyEntity-test.ts +49 -9
- package/src/__tests__/ViewerContext-test.ts +1 -1
- package/src/__tests__/ViewerScopedEntityCompanion-test.ts +5 -2
- package/src/__tests__/ViewerScopedEntityCompanionProvider-test.ts +1 -1
- package/src/__tests__/ViewerScopedEntityMutatorFactory-test.ts +12 -3
- package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +25 -27
- package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +28 -34
- package/src/entityUtils.ts +4 -1
- package/src/errors/EntityInvalidFieldValueError.ts +5 -5
- package/src/errors/EntityNotAuthorizedError.ts +3 -3
- package/src/errors/EntityNotFoundError.ts +5 -5
- package/src/index.ts +7 -7
- package/src/internal/CompositeFieldHolder.ts +218 -0
- package/src/internal/CompositeFieldValueMap.ts +78 -0
- package/src/internal/EntityDataManager.ts +107 -96
- package/src/internal/EntityFieldTransformationUtils.ts +33 -14
- package/src/internal/EntityLoadInterfaces.ts +143 -0
- package/src/internal/EntityTableDataCoordinator.ts +8 -5
- package/src/internal/ReadThroughEntityCache.ts +63 -50
- package/src/internal/SingleFieldHolder.ts +131 -0
- package/src/internal/__tests__/CompositeFieldHolder-test.ts +25 -0
- package/src/internal/__tests__/CompositeFieldValueMap-test.ts +43 -0
- package/src/internal/__tests__/EntityDataManager-test.ts +308 -91
- package/src/internal/__tests__/EntityFieldTransformationUtils-test.ts +3 -2
- package/src/internal/__tests__/ReadThroughEntityCache-test.ts +315 -107
- package/src/metrics/EntityMetricsUtils.ts +7 -2
- package/src/metrics/IEntityMetricsAdapter.ts +6 -0
- package/src/rules/AlwaysAllowPrivacyPolicyRule.ts +5 -5
- package/src/rules/AlwaysDenyPrivacyPolicyRule.ts +5 -5
- package/src/rules/AlwaysSkipPrivacyPolicyRule.ts +5 -5
- package/src/rules/PrivacyPolicyRule.ts +4 -4
- package/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.ts +1 -1
- package/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.ts +1 -1
- package/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.ts +1 -1
- package/src/utils/EntityPrivacyUtils.ts +72 -30
- package/src/utils/{testing → __testfixtures__}/PrivacyPolicyRuleTestUtils.ts +26 -26
- package/src/{testfixtures → utils/__testfixtures__}/SimpleTestEntity.ts +16 -15
- package/src/utils/__testfixtures__/StubCacheAdapter.ts +164 -0
- package/src/utils/{testing → __testfixtures__}/StubDatabaseAdapter.ts +19 -12
- package/src/utils/{testing → __testfixtures__}/StubDatabaseAdapterProvider.ts +4 -4
- package/src/utils/__testfixtures__/TSMockitoExtensions.ts +69 -0
- package/src/{testfixtures → utils/__testfixtures__}/TestEntity.ts +21 -15
- package/src/{testfixtures → utils/__testfixtures__}/TestEntity2.ts +16 -15
- package/src/{testfixtures → utils/__testfixtures__}/TestEntityWithMutationTriggers.ts +23 -22
- package/src/{testfixtures → utils/__testfixtures__}/TestViewerContext.ts +1 -1
- package/src/utils/{testing → __testfixtures__}/describeFieldTestCase.ts +1 -1
- package/src/utils/__tests__/EntityPrivacyUtils-test.ts +81 -113
- package/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.ts +31 -30
- package/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.ts +1 -1
- package/src/utils/collections/SerializableKeyMap.ts +84 -0
- package/src/utils/collections/__tests__/SerializableKeyMap-test.ts +119 -0
- package/src/utils/collections/__tests__/sets-test.ts +17 -0
- package/src/utils/collections/maps.ts +7 -8
- package/src/utils/collections/sets.ts +3 -0
- package/src/utils/mergeEntityMutationTriggerConfigurations.ts +5 -5
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.d.ts +0 -1
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js +0 -273
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +0 -1
- package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.d.ts +0 -26
- package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js +0 -110
- package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js.map +0 -1
- package/build/__tests__/AuthorizationResultBasedEntityLoader-test.d.ts +0 -1
- package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js +0 -401
- package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js.map +0 -1
- package/build/__tests__/ComposedCacheAdapter-test.d.ts +0 -1
- package/build/__tests__/ComposedCacheAdapter-test.js +0 -229
- package/build/__tests__/ComposedCacheAdapter-test.js.map +0 -1
- package/build/__tests__/ComposedSecondaryEntityCache-test.d.ts +0 -1
- package/build/__tests__/ComposedSecondaryEntityCache-test.js +0 -66
- package/build/__tests__/ComposedSecondaryEntityCache-test.js.map +0 -1
- package/build/__tests__/EnforcingEntityAssociationLoader-test.d.ts +0 -1
- package/build/__tests__/EnforcingEntityAssociationLoader-test.js +0 -115
- package/build/__tests__/EnforcingEntityAssociationLoader-test.js.map +0 -1
- package/build/__tests__/EnforcingEntityLoader-test.d.ts +0 -1
- package/build/__tests__/EnforcingEntityLoader-test.js +0 -253
- package/build/__tests__/EnforcingEntityLoader-test.js.map +0 -1
- package/build/__tests__/Entity-test.d.ts +0 -1
- package/build/__tests__/Entity-test.js +0 -54
- package/build/__tests__/Entity-test.js.map +0 -1
- package/build/__tests__/EntityAssociationLoader-test.d.ts +0 -1
- package/build/__tests__/EntityAssociationLoader-test.js +0 -30
- package/build/__tests__/EntityAssociationLoader-test.js.map +0 -1
- package/build/__tests__/EntityCommonUseCases-test.d.ts +0 -1
- package/build/__tests__/EntityCommonUseCases-test.js +0 -154
- package/build/__tests__/EntityCommonUseCases-test.js.map +0 -1
- package/build/__tests__/EntityCompanion-test.d.ts +0 -1
- package/build/__tests__/EntityCompanion-test.js +0 -77
- package/build/__tests__/EntityCompanion-test.js.map +0 -1
- package/build/__tests__/EntityCompanionProvider-test.d.ts +0 -1
- package/build/__tests__/EntityCompanionProvider-test.js +0 -54
- package/build/__tests__/EntityCompanionProvider-test.js.map +0 -1
- package/build/__tests__/EntityConfiguration-test.d.ts +0 -1
- package/build/__tests__/EntityConfiguration-test.js +0 -103
- package/build/__tests__/EntityConfiguration-test.js.map +0 -1
- package/build/__tests__/EntityDatabaseAdapter-test.d.ts +0 -1
- package/build/__tests__/EntityDatabaseAdapter-test.js +0 -146
- package/build/__tests__/EntityDatabaseAdapter-test.js.map +0 -1
- package/build/__tests__/EntityEdges-test.d.ts +0 -1
- package/build/__tests__/EntityEdges-test.js +0 -755
- package/build/__tests__/EntityEdges-test.js.map +0 -1
- package/build/__tests__/EntityFields-test.d.ts +0 -1
- package/build/__tests__/EntityFields-test.js +0 -63
- package/build/__tests__/EntityFields-test.js.map +0 -1
- package/build/__tests__/EntityLoader-test.d.ts +0 -1
- package/build/__tests__/EntityLoader-test.js +0 -36
- package/build/__tests__/EntityLoader-test.js.map +0 -1
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.d.ts +0 -1
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js +0 -77
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +0 -1
- package/build/__tests__/EntityMutator-test.d.ts +0 -1
- package/build/__tests__/EntityMutator-test.js +0 -741
- package/build/__tests__/EntityMutator-test.js.map +0 -1
- package/build/__tests__/EntityPrivacyPolicy-test.d.ts +0 -1
- package/build/__tests__/EntityPrivacyPolicy-test.js +0 -463
- package/build/__tests__/EntityPrivacyPolicy-test.js.map +0 -1
- package/build/__tests__/EntityQueryContext-test.d.ts +0 -1
- package/build/__tests__/EntityQueryContext-test.js +0 -116
- package/build/__tests__/EntityQueryContext-test.js.map +0 -1
- package/build/__tests__/EntitySecondaryCacheLoader-test.d.ts +0 -1
- package/build/__tests__/EntitySecondaryCacheLoader-test.js +0 -60
- package/build/__tests__/EntitySecondaryCacheLoader-test.js.map +0 -1
- package/build/__tests__/EntitySelfReferentialEdges-test.d.ts +0 -1
- package/build/__tests__/EntitySelfReferentialEdges-test.js +0 -247
- package/build/__tests__/EntitySelfReferentialEdges-test.js.map +0 -1
- package/build/__tests__/GenericEntityCacheAdapter-test.d.ts +0 -1
- package/build/__tests__/GenericEntityCacheAdapter-test.js +0 -80
- package/build/__tests__/GenericEntityCacheAdapter-test.js.map +0 -1
- package/build/__tests__/ReadonlyEntity-test.d.ts +0 -1
- package/build/__tests__/ReadonlyEntity-test.js +0 -178
- package/build/__tests__/ReadonlyEntity-test.js.map +0 -1
- package/build/__tests__/ViewerContext-test.d.ts +0 -1
- package/build/__tests__/ViewerContext-test.js +0 -30
- package/build/__tests__/ViewerContext-test.js.map +0 -1
- package/build/__tests__/ViewerScopedEntityCompanion-test.d.ts +0 -1
- package/build/__tests__/ViewerScopedEntityCompanion-test.js +0 -20
- package/build/__tests__/ViewerScopedEntityCompanion-test.js.map +0 -1
- package/build/__tests__/ViewerScopedEntityCompanionProvider-test.d.ts +0 -1
- package/build/__tests__/ViewerScopedEntityCompanionProvider-test.js +0 -20
- package/build/__tests__/ViewerScopedEntityCompanionProvider-test.js.map +0 -1
- package/build/__tests__/ViewerScopedEntityLoaderFactory-test.d.ts +0 -1
- package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js +0 -23
- package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js.map +0 -1
- package/build/__tests__/ViewerScopedEntityMutatorFactory-test.d.ts +0 -1
- package/build/__tests__/ViewerScopedEntityMutatorFactory-test.js +0 -22
- package/build/__tests__/ViewerScopedEntityMutatorFactory-test.js.map +0 -1
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.d.ts +0 -1
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +0 -129
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +0 -1
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.d.ts +0 -1
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +0 -136
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +0 -1
- package/build/__tests__/entityUtils-test.d.ts +0 -1
- package/build/__tests__/entityUtils-test.js +0 -87
- package/build/__tests__/entityUtils-test.js.map +0 -1
- package/build/internal/__tests__/EntityDataManager-test.d.ts +0 -1
- package/build/internal/__tests__/EntityDataManager-test.js +0 -373
- package/build/internal/__tests__/EntityDataManager-test.js.map +0 -1
- package/build/internal/__tests__/EntityFieldTransformationUtils-test.d.ts +0 -1
- package/build/internal/__tests__/EntityFieldTransformationUtils-test.js +0 -136
- package/build/internal/__tests__/EntityFieldTransformationUtils-test.js.map +0 -1
- package/build/internal/__tests__/ReadThroughEntityCache-test.d.ts +0 -1
- package/build/internal/__tests__/ReadThroughEntityCache-test.js +0 -206
- package/build/internal/__tests__/ReadThroughEntityCache-test.js.map +0 -1
- package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.d.ts +0 -1
- package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js +0 -21
- package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js.map +0 -1
- package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.d.ts +0 -1
- package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js +0 -21
- package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js.map +0 -1
- package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.d.ts +0 -1
- package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js +0 -21
- package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js.map +0 -1
- package/build/testfixtures/DateIDTestEntity.d.ts +0 -19
- package/build/testfixtures/DateIDTestEntity.js +0 -48
- package/build/testfixtures/DateIDTestEntity.js.map +0 -1
- package/build/testfixtures/SimpleTestEntity.d.ts +0 -20
- package/build/testfixtures/SimpleTestEntity.js +0 -48
- package/build/testfixtures/SimpleTestEntity.js.map +0 -1
- package/build/testfixtures/TestEntity.d.ts +0 -30
- package/build/testfixtures/TestEntity.js +0 -93
- package/build/testfixtures/TestEntity.js.map +0 -1
- package/build/testfixtures/TestEntity2.d.ts +0 -20
- package/build/testfixtures/TestEntity2.js +0 -51
- package/build/testfixtures/TestEntity2.js.map +0 -1
- package/build/testfixtures/TestEntityNumberKey.d.ts +0 -19
- package/build/testfixtures/TestEntityNumberKey.js +0 -48
- package/build/testfixtures/TestEntityNumberKey.js.map +0 -1
- package/build/testfixtures/TestEntityWithMutationTriggers.d.ts +0 -36
- package/build/testfixtures/TestEntityWithMutationTriggers.js +0 -82
- package/build/testfixtures/TestEntityWithMutationTriggers.js.map +0 -1
- package/build/testfixtures/TestViewerContext.d.ts +0 -3
- package/build/testfixtures/TestViewerContext.js +0 -10
- package/build/testfixtures/TestViewerContext.js.map +0 -1
- package/build/utils/__tests__/EntityPrivacyUtils-test.d.ts +0 -1
- package/build/utils/__tests__/EntityPrivacyUtils-test.js +0 -520
- package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +0 -1
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.d.ts +0 -1
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +0 -181
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js.map +0 -1
- package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.d.ts +0 -1
- package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js +0 -26
- package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js.map +0 -1
- package/build/utils/collections/__tests__/maps-test.d.ts +0 -1
- package/build/utils/collections/__tests__/maps-test.js +0 -120
- package/build/utils/collections/__tests__/maps-test.js.map +0 -1
- package/build/utils/testing/PrivacyPolicyRuleTestUtils.d.ts +0 -28
- package/build/utils/testing/PrivacyPolicyRuleTestUtils.js +0 -52
- package/build/utils/testing/PrivacyPolicyRuleTestUtils.js.map +0 -1
- package/build/utils/testing/StubCacheAdapter.d.ts +0 -27
- package/build/utils/testing/StubCacheAdapter.js +0 -86
- package/build/utils/testing/StubCacheAdapter.js.map +0 -1
- package/build/utils/testing/StubDatabaseAdapter.d.ts +0 -25
- package/build/utils/testing/StubDatabaseAdapter.js +0 -191
- package/build/utils/testing/StubDatabaseAdapter.js.map +0 -1
- package/build/utils/testing/StubDatabaseAdapterProvider.d.ts +0 -7
- package/build/utils/testing/StubDatabaseAdapterProvider.js +0 -14
- package/build/utils/testing/StubDatabaseAdapterProvider.js.map +0 -1
- package/build/utils/testing/StubQueryContextProvider.d.ts +0 -7
- package/build/utils/testing/StubQueryContextProvider.js +0 -19
- package/build/utils/testing/StubQueryContextProvider.js.map +0 -1
- package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.d.ts +0 -1
- package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js +0 -42
- package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js.map +0 -1
- package/build/utils/testing/__tests__/StubDatabaseAdapter-test.d.ts +0 -1
- package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js +0 -402
- package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js.map +0 -1
- package/build/utils/testing/createUnitTestEntityCompanionProvider.d.ts +0 -7
- package/build/utils/testing/createUnitTestEntityCompanionProvider.js +0 -36
- package/build/utils/testing/createUnitTestEntityCompanionProvider.js.map +0 -1
- package/build/utils/testing/describeFieldTestCase.d.ts +0 -2
- package/build/utils/testing/describeFieldTestCase.js +0 -18
- package/build/utils/testing/describeFieldTestCase.js.map +0 -1
- package/src/testfixtures/DateIDTestEntity.ts +0 -59
- package/src/testfixtures/TestEntityNumberKey.ts +0 -59
- package/src/utils/testing/StubCacheAdapter.ts +0 -122
- package/src/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.ts +0 -42
- package/src/utils/testing/__tests__/StubDatabaseAdapter-test.ts +0 -548
- /package/src/utils/{testing → __testfixtures__}/StubQueryContextProvider.ts +0 -0
- /package/src/utils/{testing → __testfixtures__}/createUnitTestEntityCompanionProvider.ts +0 -0
|
@@ -5,10 +5,11 @@ import { EntityEdgeDeletionBehavior } from '../EntityFieldDefinition';
|
|
|
5
5
|
import { UUIDField } from '../EntityFields';
|
|
6
6
|
import EntityPrivacyPolicy from '../EntityPrivacyPolicy';
|
|
7
7
|
import { CacheStatus } from '../internal/ReadThroughEntityCache';
|
|
8
|
+
import { SingleFieldHolder, SingleFieldValueHolder } from '../internal/SingleFieldHolder';
|
|
8
9
|
import AlwaysAllowPrivacyPolicyRule from '../rules/AlwaysAllowPrivacyPolicyRule';
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import { createUnitTestEntityCompanionProvider } from '../utils/
|
|
10
|
+
import { InMemoryFullCacheStubCacheAdapter } from '../utils/__testfixtures__/StubCacheAdapter';
|
|
11
|
+
import TestViewerContext from '../utils/__testfixtures__/TestViewerContext';
|
|
12
|
+
import { createUnitTestEntityCompanionProvider } from '../utils/__testfixtures__/createUnitTestEntityCompanionProvider';
|
|
12
13
|
|
|
13
14
|
interface CategoryFields {
|
|
14
15
|
id: string;
|
|
@@ -17,31 +18,31 @@ interface CategoryFields {
|
|
|
17
18
|
|
|
18
19
|
class CategoryPrivacyPolicy extends EntityPrivacyPolicy<
|
|
19
20
|
CategoryFields,
|
|
20
|
-
|
|
21
|
+
'id',
|
|
21
22
|
TestViewerContext,
|
|
22
23
|
any,
|
|
23
24
|
any
|
|
24
25
|
> {
|
|
25
26
|
protected override readonly readRules = [
|
|
26
|
-
new AlwaysAllowPrivacyPolicyRule<CategoryFields,
|
|
27
|
+
new AlwaysAllowPrivacyPolicyRule<CategoryFields, 'id', TestViewerContext, any, any>(),
|
|
27
28
|
];
|
|
28
29
|
protected override readonly createRules = [
|
|
29
|
-
new AlwaysAllowPrivacyPolicyRule<CategoryFields,
|
|
30
|
+
new AlwaysAllowPrivacyPolicyRule<CategoryFields, 'id', TestViewerContext, any, any>(),
|
|
30
31
|
];
|
|
31
32
|
protected override readonly updateRules = [
|
|
32
|
-
new AlwaysAllowPrivacyPolicyRule<CategoryFields,
|
|
33
|
+
new AlwaysAllowPrivacyPolicyRule<CategoryFields, 'id', TestViewerContext, any, any>(),
|
|
33
34
|
];
|
|
34
35
|
protected override readonly deleteRules = [
|
|
35
|
-
new AlwaysAllowPrivacyPolicyRule<CategoryFields,
|
|
36
|
+
new AlwaysAllowPrivacyPolicyRule<CategoryFields, 'id', TestViewerContext, any, any>(),
|
|
36
37
|
];
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
40
41
|
const makeEntityClass = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) => {
|
|
41
|
-
class CategoryEntity extends Entity<CategoryFields,
|
|
42
|
+
class CategoryEntity extends Entity<CategoryFields, 'id', TestViewerContext> {
|
|
42
43
|
static defineCompanionDefinition(): EntityCompanionDefinition<
|
|
43
44
|
CategoryFields,
|
|
44
|
-
|
|
45
|
+
'id',
|
|
45
46
|
TestViewerContext,
|
|
46
47
|
CategoryEntity,
|
|
47
48
|
CategoryPrivacyPolicy
|
|
@@ -54,7 +55,7 @@ const makeEntityClass = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) => {
|
|
|
54
55
|
}
|
|
55
56
|
}
|
|
56
57
|
|
|
57
|
-
const categoryEntityConfiguration = new EntityConfiguration<CategoryFields>({
|
|
58
|
+
const categoryEntityConfiguration = new EntityConfiguration<CategoryFields, 'id'>({
|
|
58
59
|
idField: 'id',
|
|
59
60
|
tableName: 'categories',
|
|
60
61
|
inboundEdges: [CategoryEntity],
|
|
@@ -87,44 +88,34 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE', () => {
|
|
|
87
88
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
88
89
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
89
90
|
|
|
90
|
-
const parentCategory = await CategoryEntity.creator(viewerContext).
|
|
91
|
+
const parentCategory = await CategoryEntity.creator(viewerContext).createAsync();
|
|
91
92
|
const subCategory = await CategoryEntity.creator(viewerContext)
|
|
92
|
-
.enforcing()
|
|
93
93
|
.setField('parent_category_id', parentCategory.getID())
|
|
94
94
|
.createAsync();
|
|
95
95
|
const subSubCategory = await CategoryEntity.creator(viewerContext)
|
|
96
|
-
.enforcing()
|
|
97
96
|
.setField('parent_category_id', subCategory.getID())
|
|
98
97
|
.createAsync();
|
|
99
98
|
|
|
100
99
|
await expect(
|
|
101
|
-
CategoryEntity.loader(viewerContext)
|
|
102
|
-
.enforcing()
|
|
103
|
-
.loadByIDNullableAsync(parentCategory.getID()),
|
|
100
|
+
CategoryEntity.loader(viewerContext).loadByIDNullableAsync(parentCategory.getID()),
|
|
104
101
|
).resolves.not.toBeNull();
|
|
105
102
|
await expect(
|
|
106
|
-
CategoryEntity.loader(viewerContext).
|
|
103
|
+
CategoryEntity.loader(viewerContext).loadByIDNullableAsync(subCategory.getID()),
|
|
107
104
|
).resolves.not.toBeNull();
|
|
108
105
|
await expect(
|
|
109
|
-
CategoryEntity.loader(viewerContext)
|
|
110
|
-
.enforcing()
|
|
111
|
-
.loadByIDNullableAsync(subSubCategory.getID()),
|
|
106
|
+
CategoryEntity.loader(viewerContext).loadByIDNullableAsync(subSubCategory.getID()),
|
|
112
107
|
).resolves.not.toBeNull();
|
|
113
108
|
|
|
114
|
-
await CategoryEntity.deleter(parentCategory).
|
|
109
|
+
await CategoryEntity.deleter(parentCategory).deleteAsync();
|
|
115
110
|
|
|
116
111
|
await expect(
|
|
117
|
-
CategoryEntity.loader(viewerContext)
|
|
118
|
-
.enforcing()
|
|
119
|
-
.loadByIDNullableAsync(parentCategory.getID()),
|
|
112
|
+
CategoryEntity.loader(viewerContext).loadByIDNullableAsync(parentCategory.getID()),
|
|
120
113
|
).resolves.toBeNull();
|
|
121
114
|
await expect(
|
|
122
|
-
CategoryEntity.loader(viewerContext).
|
|
115
|
+
CategoryEntity.loader(viewerContext).loadByIDNullableAsync(subCategory.getID()),
|
|
123
116
|
).resolves.toBeNull();
|
|
124
117
|
await expect(
|
|
125
|
-
CategoryEntity.loader(viewerContext)
|
|
126
|
-
.enforcing()
|
|
127
|
-
.loadByIDNullableAsync(subSubCategory.getID()),
|
|
118
|
+
CategoryEntity.loader(viewerContext).loadByIDNullableAsync(subSubCategory.getID()),
|
|
128
119
|
).resolves.toBeNull();
|
|
129
120
|
});
|
|
130
121
|
|
|
@@ -134,23 +125,21 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE', () => {
|
|
|
134
125
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
135
126
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
136
127
|
|
|
137
|
-
const categoryA = await CategoryEntity.creator(viewerContext).
|
|
128
|
+
const categoryA = await CategoryEntity.creator(viewerContext).createAsync();
|
|
138
129
|
const categoryB = await CategoryEntity.creator(viewerContext)
|
|
139
|
-
.enforcing()
|
|
140
130
|
.setField('parent_category_id', categoryA.getID())
|
|
141
131
|
.createAsync();
|
|
142
132
|
await CategoryEntity.updater(categoryA)
|
|
143
|
-
.enforcing()
|
|
144
133
|
.setField('parent_category_id', categoryB.getID())
|
|
145
134
|
.updateAsync();
|
|
146
135
|
|
|
147
|
-
await CategoryEntity.deleter(categoryA).
|
|
136
|
+
await CategoryEntity.deleter(categoryA).deleteAsync();
|
|
148
137
|
|
|
149
138
|
await expect(
|
|
150
|
-
CategoryEntity.loader(viewerContext).
|
|
139
|
+
CategoryEntity.loader(viewerContext).loadByIDNullableAsync(categoryA.getID()),
|
|
151
140
|
).resolves.toBeNull();
|
|
152
141
|
await expect(
|
|
153
|
-
CategoryEntity.loader(viewerContext).
|
|
142
|
+
CategoryEntity.loader(viewerContext).loadByIDNullableAsync(categoryB.getID()),
|
|
154
143
|
).resolves.toBeNull();
|
|
155
144
|
});
|
|
156
145
|
});
|
|
@@ -162,46 +151,38 @@ describe('EntityEdgeDeletionBehavior.SET_NULL', () => {
|
|
|
162
151
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
163
152
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
164
153
|
|
|
165
|
-
const parentCategory = await CategoryEntity.creator(viewerContext).
|
|
154
|
+
const parentCategory = await CategoryEntity.creator(viewerContext).createAsync();
|
|
166
155
|
const subCategory = await CategoryEntity.creator(viewerContext)
|
|
167
|
-
.enforcing()
|
|
168
156
|
.setField('parent_category_id', parentCategory.getID())
|
|
169
157
|
.createAsync();
|
|
170
158
|
const subSubCategory = await CategoryEntity.creator(viewerContext)
|
|
171
|
-
.enforcing()
|
|
172
159
|
.setField('parent_category_id', subCategory.getID())
|
|
173
160
|
.createAsync();
|
|
174
161
|
|
|
175
162
|
await expect(
|
|
176
|
-
CategoryEntity.loader(viewerContext)
|
|
177
|
-
.enforcing()
|
|
178
|
-
.loadByIDNullableAsync(parentCategory.getID()),
|
|
163
|
+
CategoryEntity.loader(viewerContext).loadByIDNullableAsync(parentCategory.getID()),
|
|
179
164
|
).resolves.not.toBeNull();
|
|
180
165
|
await expect(
|
|
181
|
-
CategoryEntity.loader(viewerContext).
|
|
166
|
+
CategoryEntity.loader(viewerContext).loadByIDNullableAsync(subCategory.getID()),
|
|
182
167
|
).resolves.not.toBeNull();
|
|
183
168
|
await expect(
|
|
184
|
-
CategoryEntity.loader(viewerContext)
|
|
185
|
-
.enforcing()
|
|
186
|
-
.loadByIDNullableAsync(subSubCategory.getID()),
|
|
169
|
+
CategoryEntity.loader(viewerContext).loadByIDNullableAsync(subSubCategory.getID()),
|
|
187
170
|
).resolves.not.toBeNull();
|
|
188
171
|
|
|
189
|
-
await CategoryEntity.deleter(parentCategory).
|
|
172
|
+
await CategoryEntity.deleter(parentCategory).deleteAsync();
|
|
190
173
|
|
|
191
174
|
await expect(
|
|
192
|
-
CategoryEntity.loader(viewerContext)
|
|
193
|
-
.enforcing()
|
|
194
|
-
.loadByIDNullableAsync(parentCategory.getID()),
|
|
175
|
+
CategoryEntity.loader(viewerContext).loadByIDNullableAsync(parentCategory.getID()),
|
|
195
176
|
).resolves.toBeNull();
|
|
196
177
|
|
|
197
|
-
const loadedSubCategory = await CategoryEntity.loader(viewerContext)
|
|
198
|
-
.
|
|
199
|
-
|
|
178
|
+
const loadedSubCategory = await CategoryEntity.loader(viewerContext).loadByIDAsync(
|
|
179
|
+
subCategory.getID(),
|
|
180
|
+
);
|
|
200
181
|
expect(loadedSubCategory.getField('parent_category_id')).toBeNull();
|
|
201
182
|
|
|
202
|
-
const loadedSubSubCategory = await CategoryEntity.loader(viewerContext)
|
|
203
|
-
.
|
|
204
|
-
|
|
183
|
+
const loadedSubSubCategory = await CategoryEntity.loader(viewerContext).loadByIDAsync(
|
|
184
|
+
subSubCategory.getID(),
|
|
185
|
+
);
|
|
205
186
|
expect(loadedSubSubCategory.getField('parent_category_id')).not.toBeNull();
|
|
206
187
|
});
|
|
207
188
|
|
|
@@ -211,21 +192,19 @@ describe('EntityEdgeDeletionBehavior.SET_NULL', () => {
|
|
|
211
192
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
212
193
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
213
194
|
|
|
214
|
-
const categoryA = await CategoryEntity.creator(viewerContext).
|
|
195
|
+
const categoryA = await CategoryEntity.creator(viewerContext).createAsync();
|
|
215
196
|
const categoryB = await CategoryEntity.creator(viewerContext)
|
|
216
|
-
.enforcing()
|
|
217
197
|
.setField('parent_category_id', categoryA.getID())
|
|
218
198
|
.createAsync();
|
|
219
199
|
await CategoryEntity.updater(categoryA)
|
|
220
|
-
.enforcing()
|
|
221
200
|
.setField('parent_category_id', categoryB.getID())
|
|
222
201
|
.updateAsync();
|
|
223
202
|
|
|
224
|
-
await CategoryEntity.deleter(categoryA).
|
|
203
|
+
await CategoryEntity.deleter(categoryA).deleteAsync();
|
|
225
204
|
|
|
226
|
-
const loadedCategoryB = await CategoryEntity.loader(viewerContext)
|
|
227
|
-
.
|
|
228
|
-
|
|
205
|
+
const loadedCategoryB = await CategoryEntity.loader(viewerContext).loadByIDAsync(
|
|
206
|
+
categoryB.getID(),
|
|
207
|
+
);
|
|
229
208
|
expect(loadedCategoryB.getField('parent_category_id')).toBeNull();
|
|
230
209
|
});
|
|
231
210
|
});
|
|
@@ -239,73 +218,77 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE', () => {
|
|
|
239
218
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
240
219
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
241
220
|
|
|
242
|
-
const parentCategory = await CategoryEntity.creator(viewerContext).
|
|
221
|
+
const parentCategory = await CategoryEntity.creator(viewerContext).createAsync();
|
|
243
222
|
const subCategory = await CategoryEntity.creator(viewerContext)
|
|
244
|
-
.enforcing()
|
|
245
223
|
.setField('parent_category_id', parentCategory.getID())
|
|
246
224
|
.createAsync();
|
|
247
225
|
const subSubCategory = await CategoryEntity.creator(viewerContext)
|
|
248
|
-
.enforcing()
|
|
249
226
|
.setField('parent_category_id', subCategory.getID())
|
|
250
227
|
.createAsync();
|
|
251
228
|
|
|
252
229
|
await expect(
|
|
253
|
-
CategoryEntity.loader(viewerContext)
|
|
254
|
-
.enforcing()
|
|
255
|
-
.loadByIDNullableAsync(parentCategory.getID()),
|
|
230
|
+
CategoryEntity.loader(viewerContext).loadByIDNullableAsync(parentCategory.getID()),
|
|
256
231
|
).resolves.not.toBeNull();
|
|
257
232
|
await expect(
|
|
258
|
-
CategoryEntity.loader(viewerContext)
|
|
259
|
-
|
|
260
|
-
|
|
233
|
+
CategoryEntity.loader(viewerContext).loadByFieldEqualingAsync(
|
|
234
|
+
'parent_category_id',
|
|
235
|
+
parentCategory.getID(),
|
|
236
|
+
),
|
|
261
237
|
).resolves.not.toBeNull();
|
|
262
238
|
await expect(
|
|
263
|
-
CategoryEntity.loader(viewerContext)
|
|
264
|
-
|
|
265
|
-
|
|
239
|
+
CategoryEntity.loader(viewerContext).loadByFieldEqualingAsync(
|
|
240
|
+
'parent_category_id',
|
|
241
|
+
subCategory.getID(),
|
|
242
|
+
),
|
|
266
243
|
).resolves.not.toBeNull();
|
|
267
244
|
|
|
268
245
|
const categoryCacheAdapter = viewerContext.getViewerScopedEntityCompanionForClass(
|
|
269
246
|
CategoryEntity,
|
|
270
247
|
)['entityCompanion']['tableDataCoordinator'][
|
|
271
248
|
'cacheAdapter'
|
|
272
|
-
] as InMemoryFullCacheStubCacheAdapter<CategoryFields>;
|
|
273
|
-
const subCategoryCachedBefore = await categoryCacheAdapter.loadManyAsync(
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
249
|
+
] as InMemoryFullCacheStubCacheAdapter<CategoryFields, 'id'>;
|
|
250
|
+
const subCategoryCachedBefore = await categoryCacheAdapter.loadManyAsync(
|
|
251
|
+
new SingleFieldHolder('parent_category_id'),
|
|
252
|
+
[new SingleFieldValueHolder(parentCategory.getID())],
|
|
253
|
+
);
|
|
254
|
+
expect(
|
|
255
|
+
subCategoryCachedBefore.get(new SingleFieldValueHolder(parentCategory.getID()))?.status,
|
|
256
|
+
).toEqual(CacheStatus.HIT);
|
|
277
257
|
|
|
278
258
|
const subSubCategoryCachedBefore = await categoryCacheAdapter.loadManyAsync(
|
|
279
|
-
'parent_category_id',
|
|
280
|
-
[subCategory.getID()],
|
|
259
|
+
new SingleFieldHolder('parent_category_id'),
|
|
260
|
+
[new SingleFieldValueHolder(subCategory.getID())],
|
|
281
261
|
);
|
|
282
|
-
expect(
|
|
262
|
+
expect(
|
|
263
|
+
subSubCategoryCachedBefore.get(new SingleFieldValueHolder(subCategory.getID()))?.status,
|
|
264
|
+
).toEqual(CacheStatus.HIT);
|
|
283
265
|
|
|
284
|
-
await CategoryEntity.deleter(parentCategory).
|
|
266
|
+
await CategoryEntity.deleter(parentCategory).deleteAsync();
|
|
285
267
|
|
|
286
|
-
const subCategoryCachedAfter = await categoryCacheAdapter.loadManyAsync(
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
268
|
+
const subCategoryCachedAfter = await categoryCacheAdapter.loadManyAsync(
|
|
269
|
+
new SingleFieldHolder('parent_category_id'),
|
|
270
|
+
[new SingleFieldValueHolder(parentCategory.getID())],
|
|
271
|
+
);
|
|
272
|
+
expect(
|
|
273
|
+
subCategoryCachedAfter.get(new SingleFieldValueHolder(parentCategory.getID()))?.status,
|
|
274
|
+
).toEqual(CacheStatus.MISS);
|
|
290
275
|
|
|
291
276
|
const subSubCategoryCachedAfter = await categoryCacheAdapter.loadManyAsync(
|
|
292
|
-
'parent_category_id',
|
|
293
|
-
[subCategory.getID()],
|
|
277
|
+
new SingleFieldHolder('parent_category_id'),
|
|
278
|
+
[new SingleFieldValueHolder(subCategory.getID())],
|
|
294
279
|
);
|
|
295
|
-
expect(
|
|
280
|
+
expect(
|
|
281
|
+
subSubCategoryCachedAfter.get(new SingleFieldValueHolder(subCategory.getID()))?.status,
|
|
282
|
+
).toEqual(CacheStatus.MISS);
|
|
296
283
|
|
|
297
284
|
await expect(
|
|
298
|
-
CategoryEntity.loader(viewerContext)
|
|
299
|
-
.enforcing()
|
|
300
|
-
.loadByIDNullableAsync(parentCategory.getID()),
|
|
285
|
+
CategoryEntity.loader(viewerContext).loadByIDNullableAsync(parentCategory.getID()),
|
|
301
286
|
).resolves.toBeNull();
|
|
302
287
|
await expect(
|
|
303
|
-
CategoryEntity.loader(viewerContext).
|
|
288
|
+
CategoryEntity.loader(viewerContext).loadByIDNullableAsync(subCategory.getID()),
|
|
304
289
|
).resolves.not.toBeNull();
|
|
305
290
|
await expect(
|
|
306
|
-
CategoryEntity.loader(viewerContext)
|
|
307
|
-
.enforcing()
|
|
308
|
-
.loadByIDNullableAsync(subSubCategory.getID()),
|
|
291
|
+
CategoryEntity.loader(viewerContext).loadByIDNullableAsync(subSubCategory.getID()),
|
|
309
292
|
).resolves.not.toBeNull();
|
|
310
293
|
});
|
|
311
294
|
|
|
@@ -317,46 +300,60 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE', () => {
|
|
|
317
300
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
318
301
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
319
302
|
|
|
320
|
-
const categoryA = await CategoryEntity.creator(viewerContext).
|
|
303
|
+
const categoryA = await CategoryEntity.creator(viewerContext).createAsync();
|
|
321
304
|
const categoryB = await CategoryEntity.creator(viewerContext)
|
|
322
|
-
.enforcing()
|
|
323
305
|
.setField('parent_category_id', categoryA.getID())
|
|
324
306
|
.createAsync();
|
|
325
307
|
await CategoryEntity.updater(categoryA)
|
|
326
|
-
.enforcing()
|
|
327
308
|
.setField('parent_category_id', categoryB.getID())
|
|
328
309
|
.updateAsync();
|
|
329
310
|
|
|
330
311
|
await expect(
|
|
331
|
-
CategoryEntity.loader(viewerContext)
|
|
332
|
-
|
|
333
|
-
|
|
312
|
+
CategoryEntity.loader(viewerContext).loadByFieldEqualingAsync(
|
|
313
|
+
'parent_category_id',
|
|
314
|
+
categoryA.getID(),
|
|
315
|
+
),
|
|
334
316
|
).resolves.not.toBeNull();
|
|
335
317
|
await expect(
|
|
336
|
-
CategoryEntity.loader(viewerContext)
|
|
337
|
-
|
|
338
|
-
|
|
318
|
+
CategoryEntity.loader(viewerContext).loadByFieldEqualingAsync(
|
|
319
|
+
'parent_category_id',
|
|
320
|
+
categoryB.getID(),
|
|
321
|
+
),
|
|
339
322
|
).resolves.not.toBeNull();
|
|
340
323
|
|
|
341
324
|
const categoryCacheAdapter = viewerContext.getViewerScopedEntityCompanionForClass(
|
|
342
325
|
CategoryEntity,
|
|
343
326
|
)['entityCompanion']['tableDataCoordinator'][
|
|
344
327
|
'cacheAdapter'
|
|
345
|
-
] as InMemoryFullCacheStubCacheAdapter<CategoryFields>;
|
|
346
|
-
const categoriesCachedBefore = await categoryCacheAdapter.loadManyAsync(
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
categoryB.getID(),
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
328
|
+
] as InMemoryFullCacheStubCacheAdapter<CategoryFields, 'id'>;
|
|
329
|
+
const categoriesCachedBefore = await categoryCacheAdapter.loadManyAsync(
|
|
330
|
+
new SingleFieldHolder('parent_category_id'),
|
|
331
|
+
[
|
|
332
|
+
new SingleFieldValueHolder(categoryA.getID()),
|
|
333
|
+
new SingleFieldValueHolder(categoryB.getID()),
|
|
334
|
+
],
|
|
335
|
+
);
|
|
336
|
+
expect(
|
|
337
|
+
categoriesCachedBefore.get(new SingleFieldValueHolder(categoryA.getID()))?.status,
|
|
338
|
+
).toEqual(CacheStatus.HIT);
|
|
339
|
+
expect(
|
|
340
|
+
categoriesCachedBefore.get(new SingleFieldValueHolder(categoryB.getID()))?.status,
|
|
341
|
+
).toEqual(CacheStatus.HIT);
|
|
342
|
+
|
|
343
|
+
await CategoryEntity.deleter(categoryA).deleteAsync();
|
|
344
|
+
|
|
345
|
+
const categoriesCachedAfter = await categoryCacheAdapter.loadManyAsync(
|
|
346
|
+
new SingleFieldHolder('parent_category_id'),
|
|
347
|
+
[
|
|
348
|
+
new SingleFieldValueHolder(categoryA.getID()),
|
|
349
|
+
new SingleFieldValueHolder(categoryB.getID()),
|
|
350
|
+
],
|
|
351
|
+
);
|
|
352
|
+
expect(
|
|
353
|
+
categoriesCachedAfter.get(new SingleFieldValueHolder(categoryA.getID()))?.status,
|
|
354
|
+
).toEqual(CacheStatus.MISS);
|
|
355
|
+
expect(
|
|
356
|
+
categoriesCachedAfter.get(new SingleFieldValueHolder(categoryB.getID()))?.status,
|
|
357
|
+
).toEqual(CacheStatus.MISS);
|
|
361
358
|
});
|
|
362
359
|
});
|
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import { mock, when, instance, anything, verify,
|
|
1
|
+
import { mock, when, instance, anything, verify, deepEqual } from 'ts-mockito';
|
|
2
2
|
|
|
3
3
|
import GenericEntityCacheAdapter from '../GenericEntityCacheAdapter';
|
|
4
4
|
import IEntityGenericCacher from '../IEntityGenericCacher';
|
|
5
5
|
import { CacheStatus } from '../internal/ReadThroughEntityCache';
|
|
6
|
+
import {
|
|
7
|
+
SingleFieldHolder,
|
|
8
|
+
SingleFieldValueHolder,
|
|
9
|
+
SingleFieldValueHolderMap,
|
|
10
|
+
} from '../internal/SingleFieldHolder';
|
|
11
|
+
import { deepEqualEntityAware } from '../utils/__testfixtures__/TSMockitoExtensions';
|
|
6
12
|
|
|
7
13
|
type BlahFields = {
|
|
8
14
|
id: string;
|
|
@@ -11,9 +17,14 @@ type BlahFields = {
|
|
|
11
17
|
describe(GenericEntityCacheAdapter, () => {
|
|
12
18
|
describe('loadManyAsync', () => {
|
|
13
19
|
it('returns appropriate cache results', async () => {
|
|
14
|
-
const mockGenericCacher = mock<IEntityGenericCacher<BlahFields>>();
|
|
15
|
-
when(
|
|
16
|
-
|
|
20
|
+
const mockGenericCacher = mock<IEntityGenericCacher<BlahFields, 'id'>>();
|
|
21
|
+
when(
|
|
22
|
+
mockGenericCacher.makeCacheKeyForStorage(
|
|
23
|
+
deepEqualEntityAware(new SingleFieldHolder('id')),
|
|
24
|
+
anything(),
|
|
25
|
+
),
|
|
26
|
+
).thenCall((fieldHolder, fieldValueHolder) => {
|
|
27
|
+
return `${fieldHolder.fieldName}.${fieldValueHolder.fieldValue}`;
|
|
17
28
|
});
|
|
18
29
|
when(mockGenericCacher.loadManyAsync(deepEqual(['id.wat', 'id.who', 'id.why']))).thenResolve(
|
|
19
30
|
new Map([
|
|
@@ -25,34 +36,56 @@ describe(GenericEntityCacheAdapter, () => {
|
|
|
25
36
|
|
|
26
37
|
const cacheAdapter = new GenericEntityCacheAdapter(instance(mockGenericCacher));
|
|
27
38
|
|
|
28
|
-
const results = await cacheAdapter.loadManyAsync('id', [
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
39
|
+
const results = await cacheAdapter.loadManyAsync(new SingleFieldHolder('id'), [
|
|
40
|
+
new SingleFieldValueHolder('wat'),
|
|
41
|
+
new SingleFieldValueHolder('who'),
|
|
42
|
+
new SingleFieldValueHolder('why'),
|
|
43
|
+
]);
|
|
44
|
+
expect(results.get(new SingleFieldValueHolder('wat'))).toMatchObject({
|
|
45
|
+
status: CacheStatus.HIT,
|
|
46
|
+
item: { id: 'wat' },
|
|
47
|
+
});
|
|
48
|
+
expect(results.get(new SingleFieldValueHolder('who'))).toMatchObject({
|
|
49
|
+
status: CacheStatus.NEGATIVE,
|
|
50
|
+
});
|
|
51
|
+
expect(results.get(new SingleFieldValueHolder('why'))).toMatchObject({
|
|
52
|
+
status: CacheStatus.MISS,
|
|
53
|
+
});
|
|
32
54
|
expect(results.size).toBe(3);
|
|
33
55
|
|
|
34
56
|
verify(mockGenericCacher.loadManyAsync(anything())).once();
|
|
35
57
|
});
|
|
36
58
|
|
|
37
|
-
it('returns empty map when passed empty array of
|
|
38
|
-
const mockGenericCacher = mock<IEntityGenericCacher<BlahFields>>();
|
|
59
|
+
it('returns empty map when passed empty array of load values', async () => {
|
|
60
|
+
const mockGenericCacher = mock<IEntityGenericCacher<BlahFields, 'id'>>();
|
|
39
61
|
when(mockGenericCacher.loadManyAsync(deepEqual([]))).thenResolve(new Map([]));
|
|
40
62
|
|
|
41
63
|
const cacheAdapter = new GenericEntityCacheAdapter(instance(mockGenericCacher));
|
|
42
|
-
const results = await cacheAdapter.loadManyAsync(
|
|
43
|
-
|
|
64
|
+
const results = await cacheAdapter.loadManyAsync(
|
|
65
|
+
new SingleFieldHolder<BlahFields, 'id', 'id'>('id'),
|
|
66
|
+
[] as SingleFieldValueHolder<BlahFields, 'id'>[],
|
|
67
|
+
);
|
|
68
|
+
expect(results).toEqual(new SingleFieldValueHolderMap(new Map()));
|
|
44
69
|
});
|
|
45
70
|
});
|
|
46
71
|
|
|
47
72
|
describe('cacheManyAsync', () => {
|
|
48
73
|
it('correctly caches all objects', async () => {
|
|
49
|
-
const mockGenericCacher = mock<IEntityGenericCacher<BlahFields>>();
|
|
50
|
-
when(
|
|
51
|
-
|
|
74
|
+
const mockGenericCacher = mock<IEntityGenericCacher<BlahFields, 'id'>>();
|
|
75
|
+
when(
|
|
76
|
+
mockGenericCacher.makeCacheKeyForStorage(
|
|
77
|
+
deepEqualEntityAware(new SingleFieldHolder('id')),
|
|
78
|
+
anything(),
|
|
79
|
+
),
|
|
80
|
+
).thenCall((fieldHolder, fieldValueHolder) => {
|
|
81
|
+
return `${fieldHolder.fieldName}.${fieldValueHolder.fieldValue}`;
|
|
52
82
|
});
|
|
53
83
|
|
|
54
84
|
const cacheAdapter = new GenericEntityCacheAdapter(instance(mockGenericCacher));
|
|
55
|
-
await cacheAdapter.cacheManyAsync(
|
|
85
|
+
await cacheAdapter.cacheManyAsync(
|
|
86
|
+
new SingleFieldHolder('id'),
|
|
87
|
+
new Map([[new SingleFieldValueHolder('wat'), { id: 'wat' }]]),
|
|
88
|
+
);
|
|
56
89
|
|
|
57
90
|
verify(
|
|
58
91
|
mockGenericCacher.cacheManyAsync(deepEqual(new Map([['id.wat', { id: 'wat' }]]))),
|
|
@@ -62,13 +95,20 @@ describe(GenericEntityCacheAdapter, () => {
|
|
|
62
95
|
|
|
63
96
|
describe('cacheDBMissesAsync', () => {
|
|
64
97
|
it('correctly caches misses', async () => {
|
|
65
|
-
const mockGenericCacher = mock<IEntityGenericCacher<BlahFields>>();
|
|
66
|
-
when(
|
|
67
|
-
|
|
98
|
+
const mockGenericCacher = mock<IEntityGenericCacher<BlahFields, 'id'>>();
|
|
99
|
+
when(
|
|
100
|
+
mockGenericCacher.makeCacheKeyForStorage(
|
|
101
|
+
deepEqualEntityAware(new SingleFieldHolder('id')),
|
|
102
|
+
anything(),
|
|
103
|
+
),
|
|
104
|
+
).thenCall((fieldHolder, fieldValueHolder) => {
|
|
105
|
+
return `${fieldHolder.fieldName}.${fieldValueHolder.fieldValue}`;
|
|
68
106
|
});
|
|
69
107
|
|
|
70
108
|
const cacheAdapter = new GenericEntityCacheAdapter(instance(mockGenericCacher));
|
|
71
|
-
await cacheAdapter.cacheDBMissesAsync('id', [
|
|
109
|
+
await cacheAdapter.cacheDBMissesAsync(new SingleFieldHolder('id'), [
|
|
110
|
+
new SingleFieldValueHolder('wat'),
|
|
111
|
+
]);
|
|
72
112
|
|
|
73
113
|
verify(mockGenericCacher.cacheDBMissesAsync(deepEqual(['id.wat']))).once();
|
|
74
114
|
});
|
|
@@ -76,25 +116,40 @@ describe(GenericEntityCacheAdapter, () => {
|
|
|
76
116
|
|
|
77
117
|
describe('invalidateManyAsync', () => {
|
|
78
118
|
it('invalidates correctly', async () => {
|
|
79
|
-
const mockGenericCacher = mock<IEntityGenericCacher<BlahFields>>();
|
|
80
|
-
when(
|
|
81
|
-
|
|
119
|
+
const mockGenericCacher = mock<IEntityGenericCacher<BlahFields, 'id'>>();
|
|
120
|
+
when(
|
|
121
|
+
mockGenericCacher.makeCacheKeysForInvalidation(
|
|
122
|
+
deepEqualEntityAware(new SingleFieldHolder('id')),
|
|
123
|
+
anything(),
|
|
124
|
+
),
|
|
125
|
+
).thenCall((fieldHolder, fieldValueHolder) => {
|
|
126
|
+
return `${fieldHolder.fieldName}.${fieldValueHolder.fieldValue}`;
|
|
82
127
|
});
|
|
83
128
|
|
|
84
129
|
const cacheAdapter = new GenericEntityCacheAdapter(instance(mockGenericCacher));
|
|
85
|
-
await cacheAdapter.invalidateManyAsync('id', [
|
|
130
|
+
await cacheAdapter.invalidateManyAsync(new SingleFieldHolder('id'), [
|
|
131
|
+
new SingleFieldValueHolder('wat'),
|
|
132
|
+
]);
|
|
86
133
|
|
|
87
134
|
verify(mockGenericCacher.invalidateManyAsync(deepEqual(['id.wat']))).once();
|
|
88
135
|
});
|
|
89
136
|
|
|
90
137
|
it('returns when passed empty array of fieldValues', async () => {
|
|
91
|
-
const mockGenericCacher = mock<IEntityGenericCacher<BlahFields>>();
|
|
92
|
-
when(
|
|
93
|
-
|
|
138
|
+
const mockGenericCacher = mock<IEntityGenericCacher<BlahFields, 'id'>>();
|
|
139
|
+
when(
|
|
140
|
+
mockGenericCacher.makeCacheKeysForInvalidation(
|
|
141
|
+
deepEqualEntityAware(new SingleFieldHolder('id')),
|
|
142
|
+
anything(),
|
|
143
|
+
),
|
|
144
|
+
).thenCall((fieldHolder, fieldValueHolder) => {
|
|
145
|
+
return `${fieldHolder.fieldName}.${fieldValueHolder.fieldValue}`;
|
|
94
146
|
});
|
|
95
147
|
|
|
96
148
|
const cacheAdapter = new GenericEntityCacheAdapter(instance(mockGenericCacher));
|
|
97
|
-
await cacheAdapter.invalidateManyAsync(
|
|
149
|
+
await cacheAdapter.invalidateManyAsync(
|
|
150
|
+
new SingleFieldHolder<BlahFields, 'id', 'id'>('id'),
|
|
151
|
+
[] as SingleFieldValueHolder<BlahFields, 'id'>[],
|
|
152
|
+
);
|
|
98
153
|
|
|
99
154
|
verify(mockGenericCacher.invalidateManyAsync(deepEqual([]))).once();
|
|
100
155
|
});
|