@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
|
@@ -2,11 +2,11 @@ import { anyOfClass, anything, deepEqual, instance, mock, spy, verify, when } fr
|
|
|
2
2
|
|
|
3
3
|
import { EntityNonTransactionalQueryContext } from '../EntityQueryContext';
|
|
4
4
|
import EntitySecondaryCacheLoader, { ISecondaryEntityCache } from '../EntitySecondaryCacheLoader';
|
|
5
|
+
import ViewerContext from '../ViewerContext';
|
|
5
6
|
import SimpleTestEntity, {
|
|
6
7
|
SimpleTestEntityPrivacyPolicy,
|
|
7
8
|
SimpleTestFields,
|
|
8
9
|
} from '../testfixtures/SimpleTestEntity';
|
|
9
|
-
import TestViewerContext from '../testfixtures/TestViewerContext';
|
|
10
10
|
import { createUnitTestEntityCompanionProvider } from '../utils/testing/createUnitTestEntityCompanionProvider';
|
|
11
11
|
|
|
12
12
|
type TestLoadParams = { id: string };
|
|
@@ -15,12 +15,12 @@ class TestSecondaryRedisCacheLoader extends EntitySecondaryCacheLoader<
|
|
|
15
15
|
TestLoadParams,
|
|
16
16
|
SimpleTestFields,
|
|
17
17
|
string,
|
|
18
|
-
|
|
18
|
+
ViewerContext,
|
|
19
19
|
SimpleTestEntity,
|
|
20
20
|
SimpleTestEntityPrivacyPolicy
|
|
21
21
|
> {
|
|
22
22
|
protected async fetchObjectsFromDatabaseAsync(
|
|
23
|
-
_loadParamsArray: readonly Readonly<TestLoadParams>[]
|
|
23
|
+
_loadParamsArray: readonly Readonly<TestLoadParams>[],
|
|
24
24
|
): Promise<ReadonlyMap<Readonly<TestLoadParams>, Readonly<SimpleTestFields>>> {
|
|
25
25
|
// unused
|
|
26
26
|
return new Map();
|
|
@@ -30,50 +30,44 @@ class TestSecondaryRedisCacheLoader extends EntitySecondaryCacheLoader<
|
|
|
30
30
|
describe(EntitySecondaryCacheLoader, () => {
|
|
31
31
|
describe('loadManyAsync', () => {
|
|
32
32
|
it('calls into secondary cache with correct params', async () => {
|
|
33
|
-
const vc1 = new
|
|
33
|
+
const vc1 = new ViewerContext(createUnitTestEntityCompanionProvider());
|
|
34
34
|
|
|
35
|
-
const createdEntity = await SimpleTestEntity.creator(
|
|
36
|
-
vc1,
|
|
37
|
-
vc1.getQueryContext()
|
|
38
|
-
).enforceCreateAsync();
|
|
35
|
+
const createdEntity = await SimpleTestEntity.creator(vc1).enforceCreateAsync();
|
|
39
36
|
const loadParams = { id: createdEntity.getID() };
|
|
40
37
|
|
|
41
38
|
const secondaryEntityCacheMock =
|
|
42
39
|
mock<ISecondaryEntityCache<SimpleTestFields, TestLoadParams>>();
|
|
43
40
|
when(
|
|
44
|
-
secondaryEntityCacheMock.loadManyThroughAsync(deepEqual([loadParams]), anything())
|
|
41
|
+
secondaryEntityCacheMock.loadManyThroughAsync(deepEqual([loadParams]), anything()),
|
|
45
42
|
).thenResolve(new Map());
|
|
46
43
|
const secondaryEntityCache = instance(secondaryEntityCacheMock);
|
|
47
44
|
|
|
48
45
|
const secondaryCacheLoader = new TestSecondaryRedisCacheLoader(
|
|
49
46
|
secondaryEntityCache,
|
|
50
|
-
SimpleTestEntity.loader(vc1,
|
|
47
|
+
SimpleTestEntity.loader(vc1),
|
|
51
48
|
);
|
|
52
49
|
|
|
53
50
|
await secondaryCacheLoader.loadManyAsync([loadParams]);
|
|
54
51
|
|
|
55
52
|
verify(
|
|
56
|
-
secondaryEntityCacheMock.loadManyThroughAsync(deepEqual([loadParams]), anything())
|
|
53
|
+
secondaryEntityCacheMock.loadManyThroughAsync(deepEqual([loadParams]), anything()),
|
|
57
54
|
).once();
|
|
58
55
|
});
|
|
59
56
|
|
|
60
57
|
it('constructs and authorizes entities', async () => {
|
|
61
|
-
const vc1 = new
|
|
58
|
+
const vc1 = new ViewerContext(createUnitTestEntityCompanionProvider());
|
|
62
59
|
|
|
63
|
-
const createdEntity = await SimpleTestEntity.creator(
|
|
64
|
-
vc1,
|
|
65
|
-
vc1.getQueryContext()
|
|
66
|
-
).enforceCreateAsync();
|
|
60
|
+
const createdEntity = await SimpleTestEntity.creator(vc1).enforceCreateAsync();
|
|
67
61
|
const loadParams = { id: createdEntity.getID() };
|
|
68
62
|
|
|
69
63
|
const secondaryEntityCacheMock =
|
|
70
64
|
mock<ISecondaryEntityCache<SimpleTestFields, TestLoadParams>>();
|
|
71
65
|
when(
|
|
72
|
-
secondaryEntityCacheMock.loadManyThroughAsync(deepEqual([loadParams]), anything())
|
|
66
|
+
secondaryEntityCacheMock.loadManyThroughAsync(deepEqual([loadParams]), anything()),
|
|
73
67
|
).thenResolve(new Map([[loadParams, createdEntity.getAllFields()]]));
|
|
74
68
|
const secondaryEntityCache = instance(secondaryEntityCacheMock);
|
|
75
69
|
|
|
76
|
-
const loader = SimpleTestEntity.loader(vc1
|
|
70
|
+
const loader = SimpleTestEntity.loader(vc1);
|
|
77
71
|
const spiedPrivacyPolicy = spy(loader['privacyPolicy']);
|
|
78
72
|
const secondaryCacheLoader = new TestSecondaryRedisCacheLoader(secondaryEntityCache, loader);
|
|
79
73
|
|
|
@@ -86,26 +80,23 @@ describe(EntitySecondaryCacheLoader, () => {
|
|
|
86
80
|
anyOfClass(EntityNonTransactionalQueryContext),
|
|
87
81
|
anything(),
|
|
88
82
|
anything(),
|
|
89
|
-
anything()
|
|
90
|
-
)
|
|
83
|
+
anything(),
|
|
84
|
+
),
|
|
91
85
|
).once();
|
|
92
86
|
});
|
|
93
87
|
});
|
|
94
88
|
|
|
95
89
|
describe('invalidateManyAsync', () => {
|
|
96
90
|
it('calls invalidate on the secondary cache', async () => {
|
|
97
|
-
const vc1 = new
|
|
91
|
+
const vc1 = new ViewerContext(createUnitTestEntityCompanionProvider());
|
|
98
92
|
|
|
99
|
-
const createdEntity = await SimpleTestEntity.creator(
|
|
100
|
-
vc1,
|
|
101
|
-
vc1.getQueryContext()
|
|
102
|
-
).enforceCreateAsync();
|
|
93
|
+
const createdEntity = await SimpleTestEntity.creator(vc1).enforceCreateAsync();
|
|
103
94
|
const loadParams = { id: createdEntity.getID() };
|
|
104
95
|
|
|
105
96
|
const secondaryEntityCacheMock =
|
|
106
97
|
mock<ISecondaryEntityCache<SimpleTestFields, TestLoadParams>>();
|
|
107
98
|
const secondaryEntityCache = instance(secondaryEntityCacheMock);
|
|
108
|
-
const loader = SimpleTestEntity.loader(vc1
|
|
99
|
+
const loader = SimpleTestEntity.loader(vc1);
|
|
109
100
|
const secondaryCacheLoader = new TestSecondaryRedisCacheLoader(secondaryEntityCache, loader);
|
|
110
101
|
await secondaryCacheLoader.invalidateManyAsync([loadParams]);
|
|
111
102
|
|
|
@@ -87,52 +87,42 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE', () => {
|
|
|
87
87
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
88
88
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
89
89
|
|
|
90
|
-
const parentCategory = await CategoryEntity.creator(
|
|
91
|
-
|
|
92
|
-
viewerContext.getQueryContext()
|
|
93
|
-
).enforceCreateAsync();
|
|
94
|
-
const subCategory = await CategoryEntity.creator(viewerContext, viewerContext.getQueryContext())
|
|
90
|
+
const parentCategory = await CategoryEntity.creator(viewerContext).enforceCreateAsync();
|
|
91
|
+
const subCategory = await CategoryEntity.creator(viewerContext)
|
|
95
92
|
.setField('parent_category_id', parentCategory.getID())
|
|
96
93
|
.enforceCreateAsync();
|
|
97
|
-
const subSubCategory = await CategoryEntity.creator(
|
|
98
|
-
viewerContext,
|
|
99
|
-
viewerContext.getQueryContext()
|
|
100
|
-
)
|
|
94
|
+
const subSubCategory = await CategoryEntity.creator(viewerContext)
|
|
101
95
|
.setField('parent_category_id', subCategory.getID())
|
|
102
96
|
.enforceCreateAsync();
|
|
103
97
|
|
|
104
98
|
await expect(
|
|
105
|
-
CategoryEntity.loader(viewerContext
|
|
99
|
+
CategoryEntity.loader(viewerContext)
|
|
106
100
|
.enforcing()
|
|
107
|
-
.loadByIDNullableAsync(parentCategory.getID())
|
|
101
|
+
.loadByIDNullableAsync(parentCategory.getID()),
|
|
108
102
|
).resolves.not.toBeNull();
|
|
109
103
|
await expect(
|
|
110
|
-
CategoryEntity.loader(viewerContext
|
|
111
|
-
.enforcing()
|
|
112
|
-
.loadByIDNullableAsync(subCategory.getID())
|
|
104
|
+
CategoryEntity.loader(viewerContext).enforcing().loadByIDNullableAsync(subCategory.getID()),
|
|
113
105
|
).resolves.not.toBeNull();
|
|
114
106
|
await expect(
|
|
115
|
-
CategoryEntity.loader(viewerContext
|
|
107
|
+
CategoryEntity.loader(viewerContext)
|
|
116
108
|
.enforcing()
|
|
117
|
-
.loadByIDNullableAsync(subSubCategory.getID())
|
|
109
|
+
.loadByIDNullableAsync(subSubCategory.getID()),
|
|
118
110
|
).resolves.not.toBeNull();
|
|
119
111
|
|
|
120
|
-
await CategoryEntity.enforceDeleteAsync(parentCategory
|
|
112
|
+
await CategoryEntity.enforceDeleteAsync(parentCategory);
|
|
121
113
|
|
|
122
114
|
await expect(
|
|
123
|
-
CategoryEntity.loader(viewerContext
|
|
115
|
+
CategoryEntity.loader(viewerContext)
|
|
124
116
|
.enforcing()
|
|
125
|
-
.loadByIDNullableAsync(parentCategory.getID())
|
|
117
|
+
.loadByIDNullableAsync(parentCategory.getID()),
|
|
126
118
|
).resolves.toBeNull();
|
|
127
119
|
await expect(
|
|
128
|
-
CategoryEntity.loader(viewerContext
|
|
129
|
-
.enforcing()
|
|
130
|
-
.loadByIDNullableAsync(subCategory.getID())
|
|
120
|
+
CategoryEntity.loader(viewerContext).enforcing().loadByIDNullableAsync(subCategory.getID()),
|
|
131
121
|
).resolves.toBeNull();
|
|
132
122
|
await expect(
|
|
133
|
-
CategoryEntity.loader(viewerContext
|
|
123
|
+
CategoryEntity.loader(viewerContext)
|
|
134
124
|
.enforcing()
|
|
135
|
-
.loadByIDNullableAsync(subSubCategory.getID())
|
|
125
|
+
.loadByIDNullableAsync(subSubCategory.getID()),
|
|
136
126
|
).resolves.toBeNull();
|
|
137
127
|
});
|
|
138
128
|
|
|
@@ -142,28 +132,21 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE', () => {
|
|
|
142
132
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
143
133
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
144
134
|
|
|
145
|
-
const categoryA = await CategoryEntity.creator(
|
|
146
|
-
|
|
147
|
-
viewerContext.getQueryContext()
|
|
148
|
-
).enforceCreateAsync();
|
|
149
|
-
const categoryB = await CategoryEntity.creator(viewerContext, viewerContext.getQueryContext())
|
|
135
|
+
const categoryA = await CategoryEntity.creator(viewerContext).enforceCreateAsync();
|
|
136
|
+
const categoryB = await CategoryEntity.creator(viewerContext)
|
|
150
137
|
.setField('parent_category_id', categoryA.getID())
|
|
151
138
|
.enforceCreateAsync();
|
|
152
|
-
await CategoryEntity.updater(categoryA
|
|
139
|
+
await CategoryEntity.updater(categoryA)
|
|
153
140
|
.setField('parent_category_id', categoryB.getID())
|
|
154
141
|
.enforceUpdateAsync();
|
|
155
142
|
|
|
156
|
-
await CategoryEntity.enforceDeleteAsync(categoryA
|
|
143
|
+
await CategoryEntity.enforceDeleteAsync(categoryA);
|
|
157
144
|
|
|
158
145
|
await expect(
|
|
159
|
-
CategoryEntity.loader(viewerContext
|
|
160
|
-
.enforcing()
|
|
161
|
-
.loadByIDNullableAsync(categoryA.getID())
|
|
146
|
+
CategoryEntity.loader(viewerContext).enforcing().loadByIDNullableAsync(categoryA.getID()),
|
|
162
147
|
).resolves.toBeNull();
|
|
163
148
|
await expect(
|
|
164
|
-
CategoryEntity.loader(viewerContext
|
|
165
|
-
.enforcing()
|
|
166
|
-
.loadByIDNullableAsync(categoryB.getID())
|
|
149
|
+
CategoryEntity.loader(viewerContext).enforcing().loadByIDNullableAsync(categoryB.getID()),
|
|
167
150
|
).resolves.toBeNull();
|
|
168
151
|
});
|
|
169
152
|
});
|
|
@@ -175,56 +158,42 @@ describe('EntityEdgeDeletionBehavior.SET_NULL', () => {
|
|
|
175
158
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
176
159
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
177
160
|
|
|
178
|
-
const parentCategory = await CategoryEntity.creator(
|
|
179
|
-
|
|
180
|
-
viewerContext.getQueryContext()
|
|
181
|
-
).enforceCreateAsync();
|
|
182
|
-
const subCategory = await CategoryEntity.creator(viewerContext, viewerContext.getQueryContext())
|
|
161
|
+
const parentCategory = await CategoryEntity.creator(viewerContext).enforceCreateAsync();
|
|
162
|
+
const subCategory = await CategoryEntity.creator(viewerContext)
|
|
183
163
|
.setField('parent_category_id', parentCategory.getID())
|
|
184
164
|
.enforceCreateAsync();
|
|
185
|
-
const subSubCategory = await CategoryEntity.creator(
|
|
186
|
-
viewerContext,
|
|
187
|
-
viewerContext.getQueryContext()
|
|
188
|
-
)
|
|
165
|
+
const subSubCategory = await CategoryEntity.creator(viewerContext)
|
|
189
166
|
.setField('parent_category_id', subCategory.getID())
|
|
190
167
|
.enforceCreateAsync();
|
|
191
168
|
|
|
192
169
|
await expect(
|
|
193
|
-
CategoryEntity.loader(viewerContext
|
|
170
|
+
CategoryEntity.loader(viewerContext)
|
|
194
171
|
.enforcing()
|
|
195
|
-
.loadByIDNullableAsync(parentCategory.getID())
|
|
172
|
+
.loadByIDNullableAsync(parentCategory.getID()),
|
|
196
173
|
).resolves.not.toBeNull();
|
|
197
174
|
await expect(
|
|
198
|
-
CategoryEntity.loader(viewerContext
|
|
199
|
-
.enforcing()
|
|
200
|
-
.loadByIDNullableAsync(subCategory.getID())
|
|
175
|
+
CategoryEntity.loader(viewerContext).enforcing().loadByIDNullableAsync(subCategory.getID()),
|
|
201
176
|
).resolves.not.toBeNull();
|
|
202
177
|
await expect(
|
|
203
|
-
CategoryEntity.loader(viewerContext
|
|
178
|
+
CategoryEntity.loader(viewerContext)
|
|
204
179
|
.enforcing()
|
|
205
|
-
.loadByIDNullableAsync(subSubCategory.getID())
|
|
180
|
+
.loadByIDNullableAsync(subSubCategory.getID()),
|
|
206
181
|
).resolves.not.toBeNull();
|
|
207
182
|
|
|
208
|
-
await CategoryEntity.enforceDeleteAsync(parentCategory
|
|
183
|
+
await CategoryEntity.enforceDeleteAsync(parentCategory);
|
|
209
184
|
|
|
210
185
|
await expect(
|
|
211
|
-
CategoryEntity.loader(viewerContext
|
|
186
|
+
CategoryEntity.loader(viewerContext)
|
|
212
187
|
.enforcing()
|
|
213
|
-
.loadByIDNullableAsync(parentCategory.getID())
|
|
188
|
+
.loadByIDNullableAsync(parentCategory.getID()),
|
|
214
189
|
).resolves.toBeNull();
|
|
215
190
|
|
|
216
|
-
const loadedSubCategory = await CategoryEntity.loader(
|
|
217
|
-
viewerContext,
|
|
218
|
-
viewerContext.getQueryContext()
|
|
219
|
-
)
|
|
191
|
+
const loadedSubCategory = await CategoryEntity.loader(viewerContext)
|
|
220
192
|
.enforcing()
|
|
221
193
|
.loadByIDAsync(subCategory.getID());
|
|
222
194
|
expect(loadedSubCategory.getField('parent_category_id')).toBeNull();
|
|
223
195
|
|
|
224
|
-
const loadedSubSubCategory = await CategoryEntity.loader(
|
|
225
|
-
viewerContext,
|
|
226
|
-
viewerContext.getQueryContext()
|
|
227
|
-
)
|
|
196
|
+
const loadedSubSubCategory = await CategoryEntity.loader(viewerContext)
|
|
228
197
|
.enforcing()
|
|
229
198
|
.loadByIDAsync(subSubCategory.getID());
|
|
230
199
|
expect(loadedSubSubCategory.getField('parent_category_id')).not.toBeNull();
|
|
@@ -236,23 +205,17 @@ describe('EntityEdgeDeletionBehavior.SET_NULL', () => {
|
|
|
236
205
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
237
206
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
238
207
|
|
|
239
|
-
const categoryA = await CategoryEntity.creator(
|
|
240
|
-
|
|
241
|
-
viewerContext.getQueryContext()
|
|
242
|
-
).enforceCreateAsync();
|
|
243
|
-
const categoryB = await CategoryEntity.creator(viewerContext, viewerContext.getQueryContext())
|
|
208
|
+
const categoryA = await CategoryEntity.creator(viewerContext).enforceCreateAsync();
|
|
209
|
+
const categoryB = await CategoryEntity.creator(viewerContext)
|
|
244
210
|
.setField('parent_category_id', categoryA.getID())
|
|
245
211
|
.enforceCreateAsync();
|
|
246
|
-
await CategoryEntity.updater(categoryA
|
|
212
|
+
await CategoryEntity.updater(categoryA)
|
|
247
213
|
.setField('parent_category_id', categoryB.getID())
|
|
248
214
|
.enforceUpdateAsync();
|
|
249
215
|
|
|
250
|
-
await CategoryEntity.enforceDeleteAsync(categoryA
|
|
216
|
+
await CategoryEntity.enforceDeleteAsync(categoryA);
|
|
251
217
|
|
|
252
|
-
const loadedCategoryB = await CategoryEntity.loader(
|
|
253
|
-
viewerContext,
|
|
254
|
-
viewerContext.getQueryContext()
|
|
255
|
-
)
|
|
218
|
+
const loadedCategoryB = await CategoryEntity.loader(viewerContext)
|
|
256
219
|
.enforcing()
|
|
257
220
|
.loadByIDAsync(categoryB.getID());
|
|
258
221
|
expect(loadedCategoryB.getField('parent_category_id')).toBeNull();
|
|
@@ -262,44 +225,38 @@ describe('EntityEdgeDeletionBehavior.SET_NULL', () => {
|
|
|
262
225
|
describe('EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE', () => {
|
|
263
226
|
it('invalidates the cache', async () => {
|
|
264
227
|
const { CategoryEntity } = makeEntityClass(
|
|
265
|
-
EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE_ONLY
|
|
228
|
+
EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE_ONLY,
|
|
266
229
|
);
|
|
267
230
|
|
|
268
231
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
269
232
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
270
233
|
|
|
271
|
-
const parentCategory = await CategoryEntity.creator(
|
|
272
|
-
|
|
273
|
-
viewerContext.getQueryContext()
|
|
274
|
-
).enforceCreateAsync();
|
|
275
|
-
const subCategory = await CategoryEntity.creator(viewerContext, viewerContext.getQueryContext())
|
|
234
|
+
const parentCategory = await CategoryEntity.creator(viewerContext).enforceCreateAsync();
|
|
235
|
+
const subCategory = await CategoryEntity.creator(viewerContext)
|
|
276
236
|
.setField('parent_category_id', parentCategory.getID())
|
|
277
237
|
.enforceCreateAsync();
|
|
278
|
-
const subSubCategory = await CategoryEntity.creator(
|
|
279
|
-
viewerContext,
|
|
280
|
-
viewerContext.getQueryContext()
|
|
281
|
-
)
|
|
238
|
+
const subSubCategory = await CategoryEntity.creator(viewerContext)
|
|
282
239
|
.setField('parent_category_id', subCategory.getID())
|
|
283
240
|
.enforceCreateAsync();
|
|
284
241
|
|
|
285
242
|
await expect(
|
|
286
|
-
CategoryEntity.loader(viewerContext
|
|
243
|
+
CategoryEntity.loader(viewerContext)
|
|
287
244
|
.enforcing()
|
|
288
|
-
.loadByIDNullableAsync(parentCategory.getID())
|
|
245
|
+
.loadByIDNullableAsync(parentCategory.getID()),
|
|
289
246
|
).resolves.not.toBeNull();
|
|
290
247
|
await expect(
|
|
291
|
-
CategoryEntity.loader(viewerContext
|
|
248
|
+
CategoryEntity.loader(viewerContext)
|
|
292
249
|
.enforcing()
|
|
293
|
-
.loadByFieldEqualingAsync('parent_category_id', parentCategory.getID())
|
|
250
|
+
.loadByFieldEqualingAsync('parent_category_id', parentCategory.getID()),
|
|
294
251
|
).resolves.not.toBeNull();
|
|
295
252
|
await expect(
|
|
296
|
-
CategoryEntity.loader(viewerContext
|
|
253
|
+
CategoryEntity.loader(viewerContext)
|
|
297
254
|
.enforcing()
|
|
298
|
-
.loadByFieldEqualingAsync('parent_category_id', subCategory.getID())
|
|
255
|
+
.loadByFieldEqualingAsync('parent_category_id', subCategory.getID()),
|
|
299
256
|
).resolves.not.toBeNull();
|
|
300
257
|
|
|
301
258
|
const categoryCacheAdapter = viewerContext.getViewerScopedEntityCompanionForClass(
|
|
302
|
-
CategoryEntity
|
|
259
|
+
CategoryEntity,
|
|
303
260
|
)['entityCompanion']['tableDataCoordinator'][
|
|
304
261
|
'cacheAdapter'
|
|
305
262
|
] as InMemoryFullCacheStubCacheAdapter<CategoryFields>;
|
|
@@ -310,11 +267,11 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE', () => {
|
|
|
310
267
|
|
|
311
268
|
const subSubCategoryCachedBefore = await categoryCacheAdapter.loadManyAsync(
|
|
312
269
|
'parent_category_id',
|
|
313
|
-
[subCategory.getID()]
|
|
270
|
+
[subCategory.getID()],
|
|
314
271
|
);
|
|
315
272
|
expect(subSubCategoryCachedBefore.get(subCategory.getID())?.status).toEqual(CacheStatus.HIT);
|
|
316
273
|
|
|
317
|
-
await CategoryEntity.enforceDeleteAsync(parentCategory
|
|
274
|
+
await CategoryEntity.enforceDeleteAsync(parentCategory);
|
|
318
275
|
|
|
319
276
|
const subCategoryCachedAfter = await categoryCacheAdapter.loadManyAsync('parent_category_id', [
|
|
320
277
|
parentCategory.getID(),
|
|
@@ -323,59 +280,54 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE', () => {
|
|
|
323
280
|
|
|
324
281
|
const subSubCategoryCachedAfter = await categoryCacheAdapter.loadManyAsync(
|
|
325
282
|
'parent_category_id',
|
|
326
|
-
[subCategory.getID()]
|
|
283
|
+
[subCategory.getID()],
|
|
327
284
|
);
|
|
328
285
|
expect(subSubCategoryCachedAfter.get(subCategory.getID())?.status).toEqual(CacheStatus.MISS);
|
|
329
286
|
|
|
330
287
|
await expect(
|
|
331
|
-
CategoryEntity.loader(viewerContext
|
|
288
|
+
CategoryEntity.loader(viewerContext)
|
|
332
289
|
.enforcing()
|
|
333
|
-
.loadByIDNullableAsync(parentCategory.getID())
|
|
290
|
+
.loadByIDNullableAsync(parentCategory.getID()),
|
|
334
291
|
).resolves.toBeNull();
|
|
335
292
|
await expect(
|
|
336
|
-
CategoryEntity.loader(viewerContext
|
|
337
|
-
.enforcing()
|
|
338
|
-
.loadByIDNullableAsync(subCategory.getID())
|
|
293
|
+
CategoryEntity.loader(viewerContext).enforcing().loadByIDNullableAsync(subCategory.getID()),
|
|
339
294
|
).resolves.not.toBeNull();
|
|
340
295
|
await expect(
|
|
341
|
-
CategoryEntity.loader(viewerContext
|
|
296
|
+
CategoryEntity.loader(viewerContext)
|
|
342
297
|
.enforcing()
|
|
343
|
-
.loadByIDNullableAsync(subSubCategory.getID())
|
|
298
|
+
.loadByIDNullableAsync(subSubCategory.getID()),
|
|
344
299
|
).resolves.not.toBeNull();
|
|
345
300
|
});
|
|
346
301
|
|
|
347
302
|
it('handles cycles', async () => {
|
|
348
303
|
const { CategoryEntity } = makeEntityClass(
|
|
349
|
-
EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE_ONLY
|
|
304
|
+
EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE_ONLY,
|
|
350
305
|
);
|
|
351
306
|
|
|
352
307
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
353
308
|
const viewerContext = new TestViewerContext(companionProvider);
|
|
354
309
|
|
|
355
|
-
const categoryA = await CategoryEntity.creator(
|
|
356
|
-
|
|
357
|
-
viewerContext.getQueryContext()
|
|
358
|
-
).enforceCreateAsync();
|
|
359
|
-
const categoryB = await CategoryEntity.creator(viewerContext, viewerContext.getQueryContext())
|
|
310
|
+
const categoryA = await CategoryEntity.creator(viewerContext).enforceCreateAsync();
|
|
311
|
+
const categoryB = await CategoryEntity.creator(viewerContext)
|
|
360
312
|
.setField('parent_category_id', categoryA.getID())
|
|
361
313
|
.enforceCreateAsync();
|
|
362
|
-
await CategoryEntity.updater(categoryA
|
|
314
|
+
await CategoryEntity.updater(categoryA)
|
|
363
315
|
.setField('parent_category_id', categoryB.getID())
|
|
364
316
|
.enforceUpdateAsync();
|
|
365
317
|
|
|
366
318
|
await expect(
|
|
367
|
-
CategoryEntity.loader(viewerContext
|
|
319
|
+
CategoryEntity.loader(viewerContext)
|
|
368
320
|
.enforcing()
|
|
369
|
-
.loadByFieldEqualingAsync('parent_category_id', categoryA.getID())
|
|
321
|
+
.loadByFieldEqualingAsync('parent_category_id', categoryA.getID()),
|
|
370
322
|
).resolves.not.toBeNull();
|
|
371
323
|
await expect(
|
|
372
|
-
CategoryEntity.loader(viewerContext
|
|
324
|
+
CategoryEntity.loader(viewerContext)
|
|
373
325
|
.enforcing()
|
|
374
|
-
.loadByFieldEqualingAsync('parent_category_id', categoryB.getID())
|
|
326
|
+
.loadByFieldEqualingAsync('parent_category_id', categoryB.getID()),
|
|
375
327
|
).resolves.not.toBeNull();
|
|
376
328
|
|
|
377
329
|
const categoryCacheAdapter = viewerContext.getViewerScopedEntityCompanionForClass(
|
|
378
|
-
CategoryEntity
|
|
330
|
+
CategoryEntity,
|
|
379
331
|
)['entityCompanion']['tableDataCoordinator'][
|
|
380
332
|
'cacheAdapter'
|
|
381
333
|
] as InMemoryFullCacheStubCacheAdapter<CategoryFields>;
|
|
@@ -386,7 +338,7 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE', () => {
|
|
|
386
338
|
expect(categoriesCachedBefore.get(categoryA.getID())?.status).toEqual(CacheStatus.HIT);
|
|
387
339
|
expect(categoriesCachedBefore.get(categoryB.getID())?.status).toEqual(CacheStatus.HIT);
|
|
388
340
|
|
|
389
|
-
await CategoryEntity.enforceDeleteAsync(categoryA
|
|
341
|
+
await CategoryEntity.enforceDeleteAsync(categoryA);
|
|
390
342
|
|
|
391
343
|
const categoriesCachedAfter = await categoryCacheAdapter.loadManyAsync('parent_category_id', [
|
|
392
344
|
categoryA.getID(),
|
|
@@ -20,7 +20,7 @@ describe(GenericEntityCacheAdapter, () => {
|
|
|
20
20
|
['id.wat', { status: CacheStatus.HIT, item: { id: 'wat' } }],
|
|
21
21
|
['id.who', { status: CacheStatus.NEGATIVE }],
|
|
22
22
|
['id.why', { status: CacheStatus.MISS }],
|
|
23
|
-
])
|
|
23
|
+
]),
|
|
24
24
|
);
|
|
25
25
|
|
|
26
26
|
const cacheAdapter = new GenericEntityCacheAdapter(instance(mockGenericCacher));
|
|
@@ -55,7 +55,7 @@ describe(GenericEntityCacheAdapter, () => {
|
|
|
55
55
|
await cacheAdapter.cacheManyAsync('id', new Map([['wat', { id: 'wat' }]]));
|
|
56
56
|
|
|
57
57
|
verify(
|
|
58
|
-
mockGenericCacher.cacheManyAsync(deepEqual(new Map([['id.wat', { id: 'wat' }]])))
|
|
58
|
+
mockGenericCacher.cacheManyAsync(deepEqual(new Map([['id.wat', { id: 'wat' }]]))),
|
|
59
59
|
).once();
|
|
60
60
|
});
|
|
61
61
|
});
|
|
@@ -3,15 +3,15 @@ import { instance, mock } from 'ts-mockito';
|
|
|
3
3
|
import EntityAssociationLoader from '../EntityAssociationLoader';
|
|
4
4
|
import EntityLoader from '../EntityLoader';
|
|
5
5
|
import ReadonlyEntity from '../ReadonlyEntity';
|
|
6
|
+
import ViewerContext from '../ViewerContext';
|
|
6
7
|
import SimpleTestEntity from '../testfixtures/SimpleTestEntity';
|
|
7
8
|
import TestEntity from '../testfixtures/TestEntity';
|
|
8
|
-
import TestViewerContext from '../testfixtures/TestViewerContext';
|
|
9
9
|
import { createUnitTestEntityCompanionProvider } from '../utils/testing/createUnitTestEntityCompanionProvider';
|
|
10
10
|
|
|
11
11
|
describe(ReadonlyEntity, () => {
|
|
12
12
|
describe('getID', () => {
|
|
13
13
|
it('returns correct value', () => {
|
|
14
|
-
const viewerContext = instance(mock(
|
|
14
|
+
const viewerContext = instance(mock(ViewerContext));
|
|
15
15
|
const data = {
|
|
16
16
|
id: 'what',
|
|
17
17
|
};
|
|
@@ -27,7 +27,7 @@ describe(ReadonlyEntity, () => {
|
|
|
27
27
|
|
|
28
28
|
describe('toString', () => {
|
|
29
29
|
it('returns correct value', () => {
|
|
30
|
-
const viewerContext = instance(mock(
|
|
30
|
+
const viewerContext = instance(mock(ViewerContext));
|
|
31
31
|
const data = {
|
|
32
32
|
id: 'what',
|
|
33
33
|
};
|
|
@@ -43,7 +43,7 @@ describe(ReadonlyEntity, () => {
|
|
|
43
43
|
|
|
44
44
|
describe('getUniqueIdentifier', () => {
|
|
45
45
|
it('returns a different value for two different entities of the same type', () => {
|
|
46
|
-
const viewerContext = instance(mock(
|
|
46
|
+
const viewerContext = instance(mock(ViewerContext));
|
|
47
47
|
const testEntity = new SimpleTestEntity({
|
|
48
48
|
viewerContext,
|
|
49
49
|
id: '1',
|
|
@@ -68,8 +68,8 @@ describe(ReadonlyEntity, () => {
|
|
|
68
68
|
});
|
|
69
69
|
|
|
70
70
|
it('returns the same value even if different viewer context', () => {
|
|
71
|
-
const viewerContext = instance(mock(
|
|
72
|
-
const viewerContext2 = instance(mock(
|
|
71
|
+
const viewerContext = instance(mock(ViewerContext));
|
|
72
|
+
const viewerContext2 = instance(mock(ViewerContext));
|
|
73
73
|
const data = { id: '1' };
|
|
74
74
|
const testEntity = new SimpleTestEntity({
|
|
75
75
|
viewerContext,
|
|
@@ -87,7 +87,7 @@ describe(ReadonlyEntity, () => {
|
|
|
87
87
|
});
|
|
88
88
|
|
|
89
89
|
it('returns a different value for different entities even if same ID', () => {
|
|
90
|
-
const viewerContext = instance(mock(
|
|
90
|
+
const viewerContext = instance(mock(ViewerContext));
|
|
91
91
|
const data = { id: '1' };
|
|
92
92
|
const testEntity = new SimpleTestEntity({
|
|
93
93
|
viewerContext,
|
|
@@ -114,7 +114,7 @@ describe(ReadonlyEntity, () => {
|
|
|
114
114
|
});
|
|
115
115
|
|
|
116
116
|
it('cannot be created without an ID', () => {
|
|
117
|
-
const viewerContext = instance(mock(
|
|
117
|
+
const viewerContext = instance(mock(ViewerContext));
|
|
118
118
|
const dataWithoutID = {};
|
|
119
119
|
expect(() => {
|
|
120
120
|
// eslint-disable-next-line no-new
|
|
@@ -128,7 +128,7 @@ describe(ReadonlyEntity, () => {
|
|
|
128
128
|
});
|
|
129
129
|
|
|
130
130
|
it('returns correct viewerCo}ntext from instantiation', () => {
|
|
131
|
-
const viewerContext = instance(mock(
|
|
131
|
+
const viewerContext = instance(mock(ViewerContext));
|
|
132
132
|
const data = {
|
|
133
133
|
id: 'what',
|
|
134
134
|
};
|
|
@@ -142,7 +142,7 @@ describe(ReadonlyEntity, () => {
|
|
|
142
142
|
});
|
|
143
143
|
|
|
144
144
|
it('returns correct data for field getters', () => {
|
|
145
|
-
const viewerContext = instance(mock(
|
|
145
|
+
const viewerContext = instance(mock(ViewerContext));
|
|
146
146
|
const data = {
|
|
147
147
|
id: 'what',
|
|
148
148
|
};
|
|
@@ -159,7 +159,7 @@ describe(ReadonlyEntity, () => {
|
|
|
159
159
|
describe('associationLoader', () => {
|
|
160
160
|
it('returns a new association loader', () => {
|
|
161
161
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
162
|
-
const viewerContext = new
|
|
162
|
+
const viewerContext = new ViewerContext(companionProvider);
|
|
163
163
|
const data = {
|
|
164
164
|
id: 'what',
|
|
165
165
|
};
|
|
@@ -176,10 +176,8 @@ describe(ReadonlyEntity, () => {
|
|
|
176
176
|
describe('loader', () => {
|
|
177
177
|
it('creates a new EntityLoader', async () => {
|
|
178
178
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
179
|
-
const viewerContext = new
|
|
180
|
-
expect(
|
|
181
|
-
SimpleTestEntity.loader(viewerContext, viewerContext.getQueryContext())
|
|
182
|
-
).toBeInstanceOf(EntityLoader);
|
|
179
|
+
const viewerContext = new ViewerContext(companionProvider);
|
|
180
|
+
expect(SimpleTestEntity.loader(viewerContext)).toBeInstanceOf(EntityLoader);
|
|
183
181
|
});
|
|
184
182
|
});
|
|
185
183
|
});
|
|
@@ -3,12 +3,11 @@ import ViewerContext from '../ViewerContext';
|
|
|
3
3
|
import { createUnitTestEntityCompanionProvider } from '../utils/testing/createUnitTestEntityCompanionProvider';
|
|
4
4
|
|
|
5
5
|
describe(ViewerContext, () => {
|
|
6
|
-
describe('
|
|
6
|
+
describe('getQueryContextForDatabaseAdaptorFlavor', () => {
|
|
7
7
|
it('creates a new regular query context', () => {
|
|
8
8
|
const companionProvider = createUnitTestEntityCompanionProvider();
|
|
9
9
|
const viewerContext = new ViewerContext(companionProvider);
|
|
10
|
-
const queryContext =
|
|
11
|
-
viewerContext.getNonTransactionalQueryContextForDatabaseAdaptorFlavor('postgres');
|
|
10
|
+
const queryContext = viewerContext.getQueryContextForDatabaseAdaptorFlavor('postgres');
|
|
12
11
|
expect(queryContext).toBeInstanceOf(EntityQueryContext);
|
|
13
12
|
expect(queryContext.isInTransaction()).toBe(false);
|
|
14
13
|
});
|
|
@@ -23,7 +22,7 @@ describe(ViewerContext, () => {
|
|
|
23
22
|
'postgres',
|
|
24
23
|
async (queryContext) => {
|
|
25
24
|
return queryContext.isInTransaction();
|
|
26
|
-
}
|
|
25
|
+
},
|
|
27
26
|
);
|
|
28
27
|
expect(didCreateTransaction).toBe(true);
|
|
29
28
|
});
|
|
@@ -23,10 +23,10 @@ describe(ViewerScopedEntityCompanion, () => {
|
|
|
23
23
|
>();
|
|
24
24
|
const viewerScopedEntityCompanion = new ViewerScopedEntityCompanion(entityCompanion, vc);
|
|
25
25
|
expect(viewerScopedEntityCompanion.getLoaderFactory()).toBeInstanceOf(
|
|
26
|
-
ViewerScopedEntityLoaderFactory
|
|
26
|
+
ViewerScopedEntityLoaderFactory,
|
|
27
27
|
);
|
|
28
28
|
expect(viewerScopedEntityCompanion.getMutatorFactory()).toBeInstanceOf(
|
|
29
|
-
ViewerScopedEntityMutatorFactory
|
|
29
|
+
ViewerScopedEntityMutatorFactory,
|
|
30
30
|
);
|
|
31
31
|
});
|
|
32
32
|
});
|
|
@@ -12,10 +12,10 @@ describe(ViewerScopedEntityCompanionProvider, () => {
|
|
|
12
12
|
const entityCompanionProvider = instance(mock(EntityCompanionProvider));
|
|
13
13
|
const viewerScopedEntityCompanionProvider = new ViewerScopedEntityCompanionProvider(
|
|
14
14
|
entityCompanionProvider,
|
|
15
|
-
vc
|
|
15
|
+
vc,
|
|
16
16
|
);
|
|
17
17
|
expect(
|
|
18
|
-
viewerScopedEntityCompanionProvider.getViewerScopedCompanionForEntity(TestEntity)
|
|
18
|
+
viewerScopedEntityCompanionProvider.getViewerScopedCompanionForEntity(TestEntity),
|
|
19
19
|
).toBeInstanceOf(ViewerScopedEntityCompanion);
|
|
20
20
|
});
|
|
21
21
|
});
|
|
@@ -9,7 +9,8 @@ import ViewerScopedEntityLoaderFactory from '../ViewerScopedEntityLoaderFactory'
|
|
|
9
9
|
describe(ViewerScopedEntityLoaderFactory, () => {
|
|
10
10
|
it('correctly scopes viewer to entity loads', async () => {
|
|
11
11
|
const viewerContext = instance(mock(ViewerContext));
|
|
12
|
-
const privacyPolicyEvaluationContext =
|
|
12
|
+
const privacyPolicyEvaluationContext =
|
|
13
|
+
instance(mock<EntityPrivacyPolicyEvaluationContext<any, any, any, any, any>>());
|
|
13
14
|
const queryContext = instance(mock(EntityQueryContext));
|
|
14
15
|
const baseLoader = mock<EntityLoaderFactory<any, any, any, any, any, any>>(EntityLoaderFactory);
|
|
15
16
|
const baseLoaderInstance = instance(baseLoader);
|