@expo/entity 0.46.0 → 0.48.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.
Files changed (215) hide show
  1. package/build/src/AuthorizationResultBasedEntityMutator.d.ts +5 -3
  2. package/build/src/AuthorizationResultBasedEntityMutator.js +75 -37
  3. package/build/src/AuthorizationResultBasedEntityMutator.js.map +1 -1
  4. package/build/src/EntityDeleter.js +1 -1
  5. package/build/src/EntityDeleter.js.map +1 -1
  6. package/build/src/EntityFields.d.ts +7 -0
  7. package/build/src/EntityFields.js +11 -1
  8. package/build/src/EntityFields.js.map +1 -1
  9. package/build/src/EntityMutatorFactory.d.ts +3 -2
  10. package/build/src/EntityMutatorFactory.js +4 -4
  11. package/build/src/EntityMutatorFactory.js.map +1 -1
  12. package/build/src/EntityUpdater.js +1 -1
  13. package/build/src/EntityUpdater.js.map +1 -1
  14. package/build/src/ViewerScopedEntityMutatorFactory.d.ts +3 -2
  15. package/build/src/ViewerScopedEntityMutatorFactory.js +4 -4
  16. package/build/src/ViewerScopedEntityMutatorFactory.js.map +1 -1
  17. package/package.json +5 -2
  18. package/src/AuthorizationResultBasedEntityMutator.ts +63 -49
  19. package/src/EntityDeleter.ts +1 -1
  20. package/src/EntityFields.ts +13 -0
  21. package/src/EntityMutatorFactory.ts +5 -0
  22. package/src/EntityUpdater.ts +1 -1
  23. package/src/ViewerScopedEntityMutatorFactory.ts +5 -2
  24. package/src/__tests__/EntityFields-test.ts +7 -0
  25. package/src/__tests__/EntityMutator-test.ts +217 -16
  26. package/build/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.d.ts +0 -1
  27. package/build/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js +0 -240
  28. package/build/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +0 -1
  29. package/build/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.d.ts +0 -26
  30. package/build/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js +0 -109
  31. package/build/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js.map +0 -1
  32. package/build/src/__tests__/AuthorizationResultBasedEntityLoader-test.d.ts +0 -1
  33. package/build/src/__tests__/AuthorizationResultBasedEntityLoader-test.js +0 -590
  34. package/build/src/__tests__/AuthorizationResultBasedEntityLoader-test.js.map +0 -1
  35. package/build/src/__tests__/ComposedCacheAdapter-test.d.ts +0 -1
  36. package/build/src/__tests__/ComposedCacheAdapter-test.js +0 -259
  37. package/build/src/__tests__/ComposedCacheAdapter-test.js.map +0 -1
  38. package/build/src/__tests__/ComposedSecondaryEntityCache-test.d.ts +0 -1
  39. package/build/src/__tests__/ComposedSecondaryEntityCache-test.js +0 -67
  40. package/build/src/__tests__/ComposedSecondaryEntityCache-test.js.map +0 -1
  41. package/build/src/__tests__/EnforcingEntityAssociationLoader-test.d.ts +0 -1
  42. package/build/src/__tests__/EnforcingEntityAssociationLoader-test.js +0 -113
  43. package/build/src/__tests__/EnforcingEntityAssociationLoader-test.js.map +0 -1
  44. package/build/src/__tests__/EnforcingEntityLoader-test.d.ts +0 -1
  45. package/build/src/__tests__/EnforcingEntityLoader-test.js +0 -316
  46. package/build/src/__tests__/EnforcingEntityLoader-test.js.map +0 -1
  47. package/build/src/__tests__/Entity-test.d.ts +0 -1
  48. package/build/src/__tests__/Entity-test.js +0 -92
  49. package/build/src/__tests__/Entity-test.js.map +0 -1
  50. package/build/src/__tests__/EntityAssociationLoader-test.d.ts +0 -1
  51. package/build/src/__tests__/EntityAssociationLoader-test.js +0 -28
  52. package/build/src/__tests__/EntityAssociationLoader-test.js.map +0 -1
  53. package/build/src/__tests__/EntityCommonUseCases-test.d.ts +0 -1
  54. package/build/src/__tests__/EntityCommonUseCases-test.js +0 -111
  55. package/build/src/__tests__/EntityCommonUseCases-test.js.map +0 -1
  56. package/build/src/__tests__/EntityCompanion-test.d.ts +0 -1
  57. package/build/src/__tests__/EntityCompanion-test.js +0 -42
  58. package/build/src/__tests__/EntityCompanion-test.js.map +0 -1
  59. package/build/src/__tests__/EntityCompanionProvider-test.d.ts +0 -1
  60. package/build/src/__tests__/EntityCompanionProvider-test.js +0 -53
  61. package/build/src/__tests__/EntityCompanionProvider-test.js.map +0 -1
  62. package/build/src/__tests__/EntityConfiguration-test.d.ts +0 -1
  63. package/build/src/__tests__/EntityConfiguration-test.js +0 -164
  64. package/build/src/__tests__/EntityConfiguration-test.js.map +0 -1
  65. package/build/src/__tests__/EntityDatabaseAdapter-test.d.ts +0 -1
  66. package/build/src/__tests__/EntityDatabaseAdapter-test.js +0 -189
  67. package/build/src/__tests__/EntityDatabaseAdapter-test.js.map +0 -1
  68. package/build/src/__tests__/EntityEdges-test.d.ts +0 -1
  69. package/build/src/__tests__/EntityEdges-test.js +0 -680
  70. package/build/src/__tests__/EntityEdges-test.js.map +0 -1
  71. package/build/src/__tests__/EntityFields-test.d.ts +0 -1
  72. package/build/src/__tests__/EntityFields-test.js +0 -61
  73. package/build/src/__tests__/EntityFields-test.js.map +0 -1
  74. package/build/src/__tests__/EntityLoader-test.d.ts +0 -1
  75. package/build/src/__tests__/EntityLoader-test.js +0 -34
  76. package/build/src/__tests__/EntityLoader-test.js.map +0 -1
  77. package/build/src/__tests__/EntityMutator-MutationCacheConsistency-test.d.ts +0 -1
  78. package/build/src/__tests__/EntityMutator-MutationCacheConsistency-test.js +0 -71
  79. package/build/src/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +0 -1
  80. package/build/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.d.ts +0 -1
  81. package/build/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.js +0 -54
  82. package/build/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.js.map +0 -1
  83. package/build/src/__tests__/EntityMutator-test.d.ts +0 -1
  84. package/build/src/__tests__/EntityMutator-test.js +0 -721
  85. package/build/src/__tests__/EntityMutator-test.js.map +0 -1
  86. package/build/src/__tests__/EntityPrivacyPolicy-test.d.ts +0 -1
  87. package/build/src/__tests__/EntityPrivacyPolicy-test.js +0 -429
  88. package/build/src/__tests__/EntityPrivacyPolicy-test.js.map +0 -1
  89. package/build/src/__tests__/EntityQueryContext-test.d.ts +0 -1
  90. package/build/src/__tests__/EntityQueryContext-test.js +0 -181
  91. package/build/src/__tests__/EntityQueryContext-test.js.map +0 -1
  92. package/build/src/__tests__/EntitySecondaryCacheLoader-test.d.ts +0 -1
  93. package/build/src/__tests__/EntitySecondaryCacheLoader-test.js +0 -58
  94. package/build/src/__tests__/EntitySecondaryCacheLoader-test.js.map +0 -1
  95. package/build/src/__tests__/EntitySelfReferentialEdges-test.d.ts +0 -1
  96. package/build/src/__tests__/EntitySelfReferentialEdges-test.js +0 -196
  97. package/build/src/__tests__/EntitySelfReferentialEdges-test.js.map +0 -1
  98. package/build/src/__tests__/GenericEntityCacheAdapter-test.d.ts +0 -1
  99. package/build/src/__tests__/GenericEntityCacheAdapter-test.js +0 -95
  100. package/build/src/__tests__/GenericEntityCacheAdapter-test.js.map +0 -1
  101. package/build/src/__tests__/ReadonlyEntity-test.d.ts +0 -1
  102. package/build/src/__tests__/ReadonlyEntity-test.js +0 -209
  103. package/build/src/__tests__/ReadonlyEntity-test.js.map +0 -1
  104. package/build/src/__tests__/ViewerContext-test.d.ts +0 -1
  105. package/build/src/__tests__/ViewerContext-test.js +0 -28
  106. package/build/src/__tests__/ViewerContext-test.js.map +0 -1
  107. package/build/src/__tests__/ViewerScopedEntityCompanion-test.d.ts +0 -1
  108. package/build/src/__tests__/ViewerScopedEntityCompanion-test.js +0 -18
  109. package/build/src/__tests__/ViewerScopedEntityCompanion-test.js.map +0 -1
  110. package/build/src/__tests__/ViewerScopedEntityCompanionProvider-test.d.ts +0 -1
  111. package/build/src/__tests__/ViewerScopedEntityCompanionProvider-test.js +0 -18
  112. package/build/src/__tests__/ViewerScopedEntityCompanionProvider-test.js.map +0 -1
  113. package/build/src/__tests__/ViewerScopedEntityLoaderFactory-test.d.ts +0 -1
  114. package/build/src/__tests__/ViewerScopedEntityLoaderFactory-test.js +0 -21
  115. package/build/src/__tests__/ViewerScopedEntityLoaderFactory-test.js.map +0 -1
  116. package/build/src/__tests__/ViewerScopedEntityMutatorFactory-test.d.ts +0 -1
  117. package/build/src/__tests__/ViewerScopedEntityMutatorFactory-test.js +0 -20
  118. package/build/src/__tests__/ViewerScopedEntityMutatorFactory-test.js.map +0 -1
  119. package/build/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.d.ts +0 -1
  120. package/build/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +0 -121
  121. package/build/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +0 -1
  122. package/build/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.d.ts +0 -1
  123. package/build/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +0 -119
  124. package/build/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +0 -1
  125. package/build/src/__tests__/entityUtils-test.d.ts +0 -1
  126. package/build/src/__tests__/entityUtils-test.js +0 -88
  127. package/build/src/__tests__/entityUtils-test.js.map +0 -1
  128. package/build/src/errors/__tests__/EntityDatabaseAdapterError-test.d.ts +0 -1
  129. package/build/src/errors/__tests__/EntityDatabaseAdapterError-test.js +0 -21
  130. package/build/src/errors/__tests__/EntityDatabaseAdapterError-test.js.map +0 -1
  131. package/build/src/internal/__tests__/CompositeFieldHolder-test.d.ts +0 -1
  132. package/build/src/internal/__tests__/CompositeFieldHolder-test.js +0 -25
  133. package/build/src/internal/__tests__/CompositeFieldHolder-test.js.map +0 -1
  134. package/build/src/internal/__tests__/CompositeFieldValueMap-test.d.ts +0 -1
  135. package/build/src/internal/__tests__/CompositeFieldValueMap-test.js +0 -40
  136. package/build/src/internal/__tests__/CompositeFieldValueMap-test.js.map +0 -1
  137. package/build/src/internal/__tests__/EntityDataManager-test.d.ts +0 -1
  138. package/build/src/internal/__tests__/EntityDataManager-test.js +0 -666
  139. package/build/src/internal/__tests__/EntityDataManager-test.js.map +0 -1
  140. package/build/src/internal/__tests__/EntityFieldTransformationUtils-test.d.ts +0 -1
  141. package/build/src/internal/__tests__/EntityFieldTransformationUtils-test.js +0 -135
  142. package/build/src/internal/__tests__/EntityFieldTransformationUtils-test.js.map +0 -1
  143. package/build/src/internal/__tests__/ReadThroughEntityCache-test.d.ts +0 -1
  144. package/build/src/internal/__tests__/ReadThroughEntityCache-test.js +0 -217
  145. package/build/src/internal/__tests__/ReadThroughEntityCache-test.js.map +0 -1
  146. package/build/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.d.ts +0 -1
  147. package/build/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js +0 -18
  148. package/build/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js.map +0 -1
  149. package/build/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.d.ts +0 -1
  150. package/build/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js +0 -18
  151. package/build/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js.map +0 -1
  152. package/build/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.d.ts +0 -1
  153. package/build/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js +0 -18
  154. package/build/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js.map +0 -1
  155. package/build/src/utils/__testfixtures__/PrivacyPolicyRuleTestUtils.d.ts +0 -28
  156. package/build/src/utils/__testfixtures__/PrivacyPolicyRuleTestUtils.js +0 -53
  157. package/build/src/utils/__testfixtures__/PrivacyPolicyRuleTestUtils.js.map +0 -1
  158. package/build/src/utils/__testfixtures__/SimpleTestEntity.d.ts +0 -20
  159. package/build/src/utils/__testfixtures__/SimpleTestEntity.js +0 -46
  160. package/build/src/utils/__testfixtures__/SimpleTestEntity.js.map +0 -1
  161. package/build/src/utils/__testfixtures__/StubCacheAdapter.d.ts +0 -29
  162. package/build/src/utils/__testfixtures__/StubCacheAdapter.js +0 -103
  163. package/build/src/utils/__testfixtures__/StubCacheAdapter.js.map +0 -1
  164. package/build/src/utils/__testfixtures__/StubDatabaseAdapter.d.ts +0 -26
  165. package/build/src/utils/__testfixtures__/StubDatabaseAdapter.js +0 -173
  166. package/build/src/utils/__testfixtures__/StubDatabaseAdapter.js.map +0 -1
  167. package/build/src/utils/__testfixtures__/StubDatabaseAdapterProvider.d.ts +0 -7
  168. package/build/src/utils/__testfixtures__/StubDatabaseAdapterProvider.js +0 -12
  169. package/build/src/utils/__testfixtures__/StubDatabaseAdapterProvider.js.map +0 -1
  170. package/build/src/utils/__testfixtures__/StubQueryContextProvider.d.ts +0 -7
  171. package/build/src/utils/__testfixtures__/StubQueryContextProvider.js +0 -17
  172. package/build/src/utils/__testfixtures__/StubQueryContextProvider.js.map +0 -1
  173. package/build/src/utils/__testfixtures__/TSMockitoExtensions.d.ts +0 -9
  174. package/build/src/utils/__testfixtures__/TSMockitoExtensions.js +0 -65
  175. package/build/src/utils/__testfixtures__/TSMockitoExtensions.js.map +0 -1
  176. package/build/src/utils/__testfixtures__/TestEntity.d.ts +0 -30
  177. package/build/src/utils/__testfixtures__/TestEntity.js +0 -96
  178. package/build/src/utils/__testfixtures__/TestEntity.js.map +0 -1
  179. package/build/src/utils/__testfixtures__/TestEntity2.d.ts +0 -20
  180. package/build/src/utils/__testfixtures__/TestEntity2.js +0 -49
  181. package/build/src/utils/__testfixtures__/TestEntity2.js.map +0 -1
  182. package/build/src/utils/__testfixtures__/TestEntityWithMutationTriggers.d.ts +0 -36
  183. package/build/src/utils/__testfixtures__/TestEntityWithMutationTriggers.js +0 -80
  184. package/build/src/utils/__testfixtures__/TestEntityWithMutationTriggers.js.map +0 -1
  185. package/build/src/utils/__testfixtures__/TestViewerContext.d.ts +0 -3
  186. package/build/src/utils/__testfixtures__/TestViewerContext.js +0 -8
  187. package/build/src/utils/__testfixtures__/TestViewerContext.js.map +0 -1
  188. package/build/src/utils/__testfixtures__/createUnitTestEntityCompanionProvider.d.ts +0 -7
  189. package/build/src/utils/__testfixtures__/createUnitTestEntityCompanionProvider.js +0 -33
  190. package/build/src/utils/__testfixtures__/createUnitTestEntityCompanionProvider.js.map +0 -1
  191. package/build/src/utils/__testfixtures__/describeFieldTestCase.d.ts +0 -2
  192. package/build/src/utils/__testfixtures__/describeFieldTestCase.js +0 -19
  193. package/build/src/utils/__testfixtures__/describeFieldTestCase.js.map +0 -1
  194. package/build/src/utils/__tests__/EntityCreationUtils-test.d.ts +0 -1
  195. package/build/src/utils/__tests__/EntityCreationUtils-test.js +0 -144
  196. package/build/src/utils/__tests__/EntityCreationUtils-test.js.map +0 -1
  197. package/build/src/utils/__tests__/EntityPrivacyUtils-test.d.ts +0 -1
  198. package/build/src/utils/__tests__/EntityPrivacyUtils-test.js +0 -460
  199. package/build/src/utils/__tests__/EntityPrivacyUtils-test.js.map +0 -1
  200. package/build/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.d.ts +0 -1
  201. package/build/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +0 -180
  202. package/build/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js.map +0 -1
  203. package/build/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.d.ts +0 -1
  204. package/build/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js +0 -27
  205. package/build/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js.map +0 -1
  206. package/build/src/utils/collections/__tests__/SerializableKeyMap-test.d.ts +0 -5
  207. package/build/src/utils/collections/__tests__/SerializableKeyMap-test.js +0 -99
  208. package/build/src/utils/collections/__tests__/SerializableKeyMap-test.js.map +0 -1
  209. package/build/src/utils/collections/__tests__/maps-test.d.ts +0 -1
  210. package/build/src/utils/collections/__tests__/maps-test.js +0 -121
  211. package/build/src/utils/collections/__tests__/maps-test.js.map +0 -1
  212. package/build/src/utils/collections/__tests__/sets-test.d.ts +0 -1
  213. package/build/src/utils/collections/__tests__/sets-test.js +0 -19
  214. package/build/src/utils/collections/__tests__/sets-test.js.map +0 -1
  215. package/build/tsconfig.tsbuildinfo +0 -1
@@ -1,721 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const results_1 = require("@expo/results");
4
- const globals_1 = require("@jest/globals");
5
- const ts_mockito_1 = require("ts-mockito");
6
- const uuid_1 = require("uuid");
7
- const AuthorizationResultBasedEntityLoader_1 = require("../AuthorizationResultBasedEntityLoader");
8
- const EntityCompanionProvider_1 = require("../EntityCompanionProvider");
9
- const EntityLoaderFactory_1 = require("../EntityLoaderFactory");
10
- const EntityLoaderUtils_1 = require("../EntityLoaderUtils");
11
- const EntityMutationInfo_1 = require("../EntityMutationInfo");
12
- const EntityMutationTriggerConfiguration_1 = require("../EntityMutationTriggerConfiguration");
13
- const EntityMutatorFactory_1 = require("../EntityMutatorFactory");
14
- const EntityQueryContext_1 = require("../EntityQueryContext");
15
- const ViewerContext_1 = require("../ViewerContext");
16
- const entityUtils_1 = require("../entityUtils");
17
- const EntityDataManager_1 = require("../internal/EntityDataManager");
18
- const ReadThroughEntityCache_1 = require("../internal/ReadThroughEntityCache");
19
- const IEntityMetricsAdapter_1 = require("../metrics/IEntityMetricsAdapter");
20
- const NoOpEntityMetricsAdapter_1 = require("../metrics/NoOpEntityMetricsAdapter");
21
- const SimpleTestEntity_1 = require("../utils/__testfixtures__/SimpleTestEntity");
22
- const StubCacheAdapter_1 = require("../utils/__testfixtures__/StubCacheAdapter");
23
- const StubDatabaseAdapter_1 = require("../utils/__testfixtures__/StubDatabaseAdapter");
24
- const StubQueryContextProvider_1 = require("../utils/__testfixtures__/StubQueryContextProvider");
25
- const TestEntity_1 = require("../utils/__testfixtures__/TestEntity");
26
- class TestMutationTrigger extends EntityMutationTriggerConfiguration_1.EntityMutationTrigger {
27
- async executeAsync(_viewerContext, _queryContext, _entity, _mutationInfo) { }
28
- }
29
- class TestNonTransactionalMutationTrigger extends EntityMutationTriggerConfiguration_1.EntityNonTransactionalMutationTrigger {
30
- async executeAsync(_viewerContext, _entity) { }
31
- }
32
- const setUpMutationValidatorSpies = (mutationValidators) => {
33
- return mutationValidators.map((validator) => (0, ts_mockito_1.spy)(validator));
34
- };
35
- const verifyValidatorCounts = (viewerContext, mutationValidatorSpies, expectedCalls, mutationInfo) => {
36
- for (const validator of mutationValidatorSpies) {
37
- (0, ts_mockito_1.verify)(validator.executeAsync(viewerContext, (0, ts_mockito_1.anyOfClass)(EntityQueryContext_1.EntityTransactionalQueryContext), (0, ts_mockito_1.anyOfClass)(TestEntity_1.TestEntity), (0, ts_mockito_1.deepEqual)(mutationInfo))).times(expectedCalls);
38
- }
39
- };
40
- const setUpMutationTriggerSpies = (mutationTriggers) => {
41
- return {
42
- beforeCreate: [(0, ts_mockito_1.spy)(mutationTriggers.beforeCreate[0])],
43
- afterCreate: [(0, ts_mockito_1.spy)(mutationTriggers.afterCreate[0])],
44
- beforeUpdate: [(0, ts_mockito_1.spy)(mutationTriggers.beforeUpdate[0])],
45
- afterUpdate: [(0, ts_mockito_1.spy)(mutationTriggers.afterUpdate[0])],
46
- beforeDelete: [(0, ts_mockito_1.spy)(mutationTriggers.beforeDelete[0])],
47
- afterDelete: [(0, ts_mockito_1.spy)(mutationTriggers.afterDelete[0])],
48
- beforeAll: [(0, ts_mockito_1.spy)(mutationTriggers.beforeAll[0])],
49
- afterAll: [(0, ts_mockito_1.spy)(mutationTriggers.afterAll[0])],
50
- afterCommit: [(0, ts_mockito_1.spy)(mutationTriggers.afterCommit[0])],
51
- };
52
- };
53
- const verifyTriggerCounts = (viewerContext, mutationTriggerSpies, executed, mutationInfo) => {
54
- Object.keys(executed).forEach((s) => {
55
- if (executed[s]) {
56
- (0, ts_mockito_1.verify)(mutationTriggerSpies[s][0].executeAsync(viewerContext, (0, ts_mockito_1.anyOfClass)(EntityQueryContext_1.EntityTransactionalQueryContext), (0, ts_mockito_1.anyOfClass)(TestEntity_1.TestEntity), (0, ts_mockito_1.deepEqual)(mutationInfo))).once();
57
- }
58
- else {
59
- (0, ts_mockito_1.verify)(mutationTriggerSpies[s][0].executeAsync(viewerContext, (0, ts_mockito_1.anyOfClass)(EntityQueryContext_1.EntityTransactionalQueryContext), (0, ts_mockito_1.anyOfClass)(TestEntity_1.TestEntity), (0, ts_mockito_1.deepEqual)(mutationInfo))).never();
60
- }
61
- });
62
- (0, ts_mockito_1.verify)(mutationTriggerSpies.beforeAll[0].executeAsync(viewerContext, (0, ts_mockito_1.anyOfClass)(EntityQueryContext_1.EntityTransactionalQueryContext), (0, ts_mockito_1.anyOfClass)(TestEntity_1.TestEntity), (0, ts_mockito_1.deepEqual)(mutationInfo))).once();
63
- (0, ts_mockito_1.verify)(mutationTriggerSpies.afterAll[0].executeAsync(viewerContext, (0, ts_mockito_1.anyOfClass)(EntityQueryContext_1.EntityTransactionalQueryContext), (0, ts_mockito_1.anyOfClass)(TestEntity_1.TestEntity), (0, ts_mockito_1.deepEqual)(mutationInfo))).once();
64
- (0, ts_mockito_1.verify)(mutationTriggerSpies.afterCommit[0].executeAsync(viewerContext, (0, ts_mockito_1.anyOfClass)(TestEntity_1.TestEntity), (0, ts_mockito_1.deepEqual)(mutationInfo))).once();
65
- };
66
- const createEntityMutatorFactory = (existingObjects) => {
67
- const mutationValidators = [new TestMutationTrigger()];
68
- const mutationTriggers = {
69
- beforeCreate: [new TestMutationTrigger()],
70
- afterCreate: [new TestMutationTrigger()],
71
- beforeUpdate: [new TestMutationTrigger()],
72
- afterUpdate: [new TestMutationTrigger()],
73
- beforeDelete: [new TestMutationTrigger()],
74
- afterDelete: [new TestMutationTrigger()],
75
- beforeAll: [new TestMutationTrigger()],
76
- afterAll: [new TestMutationTrigger()],
77
- afterCommit: [new TestNonTransactionalMutationTrigger()],
78
- };
79
- const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, new Map([[TestEntity_1.testEntityConfiguration.tableName, existingObjects]])));
80
- const customStubDatabaseAdapterProvider = {
81
- getDatabaseAdapter(_entityConfiguration) {
82
- return databaseAdapter;
83
- },
84
- };
85
- const metricsAdapter = new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter();
86
- const cacheAdapterProvider = new StubCacheAdapter_1.NoCacheStubCacheAdapterProvider();
87
- const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
88
- const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
89
- const queryContextProvider = new StubQueryContextProvider_1.StubQueryContextProvider();
90
- const companionProvider = new EntityCompanionProvider_1.EntityCompanionProvider(metricsAdapter, new Map([
91
- [
92
- 'postgres',
93
- {
94
- adapterProvider: customStubDatabaseAdapterProvider,
95
- queryContextProvider,
96
- },
97
- ],
98
- ]), new Map([
99
- [
100
- 'redis',
101
- {
102
- cacheAdapterProvider,
103
- },
104
- ],
105
- ]));
106
- const dataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, queryContextProvider, metricsAdapter, TestEntity_1.TestEntity.name);
107
- const entityLoaderFactory = new EntityLoaderFactory_1.EntityLoaderFactory(companionProvider.getCompanionForEntity(TestEntity_1.TestEntity), dataManager, metricsAdapter);
108
- const entityMutatorFactory = new EntityMutatorFactory_1.EntityMutatorFactory(companionProvider, TestEntity_1.testEntityConfiguration, TestEntity_1.TestEntity, companionProvider.getCompanionForEntity(TestEntity_1.TestEntity).privacyPolicy, mutationValidators, mutationTriggers, entityLoaderFactory, databaseAdapter, metricsAdapter);
109
- return {
110
- privacyPolicy: companionProvider.getCompanionForEntity(TestEntity_1.TestEntity).privacyPolicy,
111
- entityLoaderFactory,
112
- entityMutatorFactory,
113
- metricsAdapter,
114
- mutationValidators,
115
- mutationTriggers,
116
- };
117
- };
118
- (0, globals_1.describe)(EntityMutatorFactory_1.EntityMutatorFactory, () => {
119
- (0, globals_1.describe)('forCreate', () => {
120
- (0, globals_1.it)('creates entities', async () => {
121
- const viewerContext = (0, ts_mockito_1.mock)();
122
- const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
123
- const id1 = (0, uuid_1.v4)();
124
- const id2 = (0, uuid_1.v4)();
125
- const { entityMutatorFactory } = createEntityMutatorFactory([
126
- {
127
- customIdField: id1,
128
- stringField: 'huh',
129
- testIndexedField: '4',
130
- intField: 1,
131
- dateField: new Date(),
132
- nullableField: null,
133
- },
134
- {
135
- customIdField: id2,
136
- stringField: 'huh',
137
- testIndexedField: '5',
138
- intField: 1,
139
- dateField: new Date(),
140
- nullableField: null,
141
- },
142
- ]);
143
- const newEntity = await (0, results_1.enforceAsyncResult)(entityMutatorFactory
144
- .forCreate(viewerContext, queryContext)
145
- .setField('stringField', 'huh')
146
- .createAsync());
147
- (0, globals_1.expect)(newEntity).toBeTruthy();
148
- });
149
- (0, globals_1.it)('checks privacy', async () => {
150
- const viewerContext = (0, ts_mockito_1.mock)();
151
- const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
152
- const id1 = (0, uuid_1.v4)();
153
- const id2 = (0, uuid_1.v4)();
154
- const { privacyPolicy, entityMutatorFactory } = createEntityMutatorFactory([
155
- {
156
- customIdField: id1,
157
- stringField: 'huh',
158
- testIndexedField: '4',
159
- intField: 1,
160
- dateField: new Date(),
161
- nullableField: null,
162
- },
163
- {
164
- customIdField: id2,
165
- stringField: 'huh',
166
- testIndexedField: '5',
167
- intField: 1,
168
- dateField: new Date(),
169
- nullableField: null,
170
- },
171
- ]);
172
- const spiedPrivacyPolicy = (0, ts_mockito_1.spy)(privacyPolicy);
173
- await (0, results_1.enforceAsyncResult)(entityMutatorFactory
174
- .forCreate(viewerContext, queryContext)
175
- .setField('stringField', 'huh')
176
- .createAsync());
177
- (0, ts_mockito_1.verify)(spiedPrivacyPolicy.authorizeCreateAsync(viewerContext, (0, ts_mockito_1.anyOfClass)(EntityQueryContext_1.EntityTransactionalQueryContext), (0, ts_mockito_1.deepEqual)({ previousValue: null, cascadingDeleteCause: null }), (0, ts_mockito_1.anyOfClass)(TestEntity_1.TestEntity), (0, ts_mockito_1.anything)())).once();
178
- });
179
- (0, globals_1.it)('executes triggers', async () => {
180
- const viewerContext = (0, ts_mockito_1.mock)();
181
- const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
182
- const id1 = (0, uuid_1.v4)();
183
- const id2 = (0, uuid_1.v4)();
184
- const { mutationTriggers, entityMutatorFactory } = createEntityMutatorFactory([
185
- {
186
- customIdField: id1,
187
- stringField: 'huh',
188
- testIndexedField: '4',
189
- intField: 1,
190
- dateField: new Date(),
191
- nullableField: null,
192
- },
193
- {
194
- customIdField: id2,
195
- stringField: 'huh',
196
- testIndexedField: '5',
197
- intField: 1,
198
- dateField: new Date(),
199
- nullableField: null,
200
- },
201
- ]);
202
- const triggerSpies = setUpMutationTriggerSpies(mutationTriggers);
203
- await (0, results_1.enforceAsyncResult)(entityMutatorFactory
204
- .forCreate(viewerContext, queryContext)
205
- .setField('stringField', 'huh')
206
- .createAsync());
207
- verifyTriggerCounts(viewerContext, triggerSpies, {
208
- beforeCreate: true,
209
- afterCreate: true,
210
- beforeUpdate: false,
211
- afterUpdate: false,
212
- beforeDelete: false,
213
- afterDelete: false,
214
- }, { type: EntityMutationInfo_1.EntityMutationType.CREATE });
215
- });
216
- (0, globals_1.it)('executes validators', async () => {
217
- const viewerContext = (0, ts_mockito_1.mock)();
218
- const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
219
- const id1 = (0, uuid_1.v4)();
220
- const id2 = (0, uuid_1.v4)();
221
- const { mutationValidators, entityMutatorFactory } = createEntityMutatorFactory([
222
- {
223
- customIdField: id1,
224
- stringField: 'huh',
225
- testIndexedField: '4',
226
- intField: 1,
227
- dateField: new Date(),
228
- nullableField: null,
229
- },
230
- {
231
- customIdField: id2,
232
- stringField: 'huh',
233
- testIndexedField: '5',
234
- intField: 1,
235
- dateField: new Date(),
236
- nullableField: null,
237
- },
238
- ]);
239
- const validatorSpies = setUpMutationValidatorSpies(mutationValidators);
240
- await (0, results_1.enforceAsyncResult)(entityMutatorFactory
241
- .forCreate(viewerContext, queryContext)
242
- .setField('stringField', 'huh')
243
- .createAsync());
244
- verifyValidatorCounts(viewerContext, validatorSpies, 1, { type: EntityMutationInfo_1.EntityMutationType.CREATE });
245
- });
246
- });
247
- (0, globals_1.describe)('forUpdate', () => {
248
- (0, globals_1.it)('updates entities', async () => {
249
- const viewerContext = (0, ts_mockito_1.mock)();
250
- const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
251
- const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
252
- const id1 = (0, uuid_1.v4)();
253
- const id2 = (0, uuid_1.v4)();
254
- const { entityMutatorFactory, entityLoaderFactory } = createEntityMutatorFactory([
255
- {
256
- customIdField: id1,
257
- stringField: 'huh',
258
- testIndexedField: '3',
259
- intField: 3,
260
- dateField: new Date(),
261
- nullableField: null,
262
- },
263
- {
264
- customIdField: id2,
265
- stringField: 'huh',
266
- testIndexedField: '4',
267
- intField: 3,
268
- dateField: new Date(),
269
- nullableField: null,
270
- },
271
- ]);
272
- const existingEntity = await (0, results_1.enforceAsyncResult)(entityLoaderFactory
273
- .forLoad(viewerContext, queryContext, privacyPolicyEvaluationContext)
274
- .loadByIDAsync(id2));
275
- const updatedEntity = await (0, results_1.enforceAsyncResult)(entityMutatorFactory
276
- .forUpdate(existingEntity, queryContext)
277
- .setField('stringField', 'huh2')
278
- .updateAsync());
279
- (0, globals_1.expect)(updatedEntity).toBeTruthy();
280
- (0, globals_1.expect)(updatedEntity.getAllFields()).not.toMatchObject(existingEntity.getAllFields());
281
- (0, globals_1.expect)(updatedEntity.getField('stringField')).toEqual('huh2');
282
- const reloadedEntity = await (0, results_1.enforceAsyncResult)(entityLoaderFactory
283
- .forLoad(viewerContext, queryContext, privacyPolicyEvaluationContext)
284
- .loadByIDAsync(id2));
285
- (0, globals_1.expect)(reloadedEntity.getAllFields()).toMatchObject(updatedEntity.getAllFields());
286
- });
287
- (0, globals_1.it)('checks privacy', async () => {
288
- const viewerContext = (0, ts_mockito_1.mock)();
289
- const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
290
- const id1 = (0, uuid_1.v4)();
291
- const id2 = (0, uuid_1.v4)();
292
- const { privacyPolicy, entityMutatorFactory, entityLoaderFactory } = createEntityMutatorFactory([
293
- {
294
- customIdField: id1,
295
- stringField: 'huh',
296
- testIndexedField: '3',
297
- intField: 3,
298
- dateField: new Date(),
299
- nullableField: null,
300
- },
301
- {
302
- customIdField: id2,
303
- stringField: 'huh',
304
- testIndexedField: '4',
305
- intField: 3,
306
- dateField: new Date(),
307
- nullableField: null,
308
- },
309
- ]);
310
- const spiedPrivacyPolicy = (0, ts_mockito_1.spy)(privacyPolicy);
311
- const existingEntity = await (0, results_1.enforceAsyncResult)(entityLoaderFactory
312
- .forLoad(viewerContext, queryContext, { previousValue: null, cascadingDeleteCause: null })
313
- .loadByIDAsync(id2));
314
- await (0, results_1.enforceAsyncResult)(entityMutatorFactory
315
- .forUpdate(existingEntity, queryContext)
316
- .setField('stringField', 'huh2')
317
- .updateAsync());
318
- (0, ts_mockito_1.verify)(spiedPrivacyPolicy.authorizeUpdateAsync(viewerContext, (0, ts_mockito_1.anyOfClass)(EntityQueryContext_1.EntityTransactionalQueryContext), (0, ts_mockito_1.deepEqual)({ previousValue: existingEntity, cascadingDeleteCause: null }), (0, ts_mockito_1.anyOfClass)(TestEntity_1.TestEntity), (0, ts_mockito_1.anything)())).once();
319
- (0, ts_mockito_1.verify)(spiedPrivacyPolicy.authorizeReadAsync(viewerContext, (0, ts_mockito_1.anyOfClass)(EntityQueryContext_1.EntityTransactionalQueryContext), (0, ts_mockito_1.deepEqual)({ previousValue: existingEntity, cascadingDeleteCause: null }), (0, ts_mockito_1.anyOfClass)(TestEntity_1.TestEntity), (0, ts_mockito_1.anything)())).once();
320
- });
321
- (0, globals_1.it)('executes triggers', async () => {
322
- const viewerContext = (0, ts_mockito_1.mock)();
323
- const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
324
- const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
325
- const id1 = (0, uuid_1.v4)();
326
- const id2 = (0, uuid_1.v4)();
327
- const { mutationTriggers, entityMutatorFactory, entityLoaderFactory } = createEntityMutatorFactory([
328
- {
329
- customIdField: id1,
330
- stringField: 'huh',
331
- testIndexedField: '3',
332
- intField: 3,
333
- dateField: new Date(),
334
- nullableField: null,
335
- },
336
- {
337
- customIdField: id2,
338
- stringField: 'huh',
339
- testIndexedField: '4',
340
- intField: 3,
341
- dateField: new Date(),
342
- nullableField: null,
343
- },
344
- ]);
345
- const triggerSpies = setUpMutationTriggerSpies(mutationTriggers);
346
- const existingEntity = await (0, results_1.enforceAsyncResult)(entityLoaderFactory
347
- .forLoad(viewerContext, queryContext, privacyPolicyEvaluationContext)
348
- .loadByIDAsync(id2));
349
- await (0, results_1.enforceAsyncResult)(entityMutatorFactory
350
- .forUpdate(existingEntity, queryContext)
351
- .setField('stringField', 'huh2')
352
- .updateAsync());
353
- verifyTriggerCounts(viewerContext, triggerSpies, {
354
- beforeCreate: false,
355
- afterCreate: false,
356
- beforeUpdate: true,
357
- afterUpdate: true,
358
- beforeDelete: false,
359
- afterDelete: false,
360
- }, {
361
- type: EntityMutationInfo_1.EntityMutationType.UPDATE,
362
- previousValue: existingEntity,
363
- cascadingDeleteCause: null,
364
- });
365
- });
366
- (0, globals_1.it)('executes validators', async () => {
367
- const viewerContext = (0, ts_mockito_1.mock)();
368
- const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
369
- const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
370
- const id1 = (0, uuid_1.v4)();
371
- const id2 = (0, uuid_1.v4)();
372
- const { mutationValidators, entityMutatorFactory, entityLoaderFactory } = createEntityMutatorFactory([
373
- {
374
- customIdField: id1,
375
- stringField: 'huh',
376
- testIndexedField: '3',
377
- intField: 3,
378
- dateField: new Date(),
379
- nullableField: null,
380
- },
381
- {
382
- customIdField: id2,
383
- stringField: 'huh',
384
- testIndexedField: '4',
385
- intField: 3,
386
- dateField: new Date(),
387
- nullableField: null,
388
- },
389
- ]);
390
- const validatorSpies = setUpMutationValidatorSpies(mutationValidators);
391
- const existingEntity = await (0, results_1.enforceAsyncResult)(entityLoaderFactory
392
- .forLoad(viewerContext, queryContext, privacyPolicyEvaluationContext)
393
- .loadByIDAsync(id2));
394
- await (0, results_1.enforceAsyncResult)(entityMutatorFactory
395
- .forUpdate(existingEntity, queryContext)
396
- .setField('stringField', 'huh2')
397
- .updateAsync());
398
- verifyValidatorCounts(viewerContext, validatorSpies, 1, {
399
- type: EntityMutationInfo_1.EntityMutationType.UPDATE,
400
- previousValue: existingEntity,
401
- cascadingDeleteCause: null,
402
- });
403
- });
404
- (0, globals_1.it)('throws when id field is updated', async () => {
405
- const viewerContext = (0, ts_mockito_1.mock)();
406
- const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
407
- const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
408
- const id1 = (0, uuid_1.v4)();
409
- const { entityMutatorFactory, entityLoaderFactory } = createEntityMutatorFactory([
410
- {
411
- customIdField: id1,
412
- stringField: 'huh',
413
- testIndexedField: '4',
414
- intField: 3,
415
- dateField: new Date(),
416
- nullableField: null,
417
- },
418
- ]);
419
- const existingEntity = await (0, results_1.enforceAsyncResult)(entityLoaderFactory
420
- .forLoad(viewerContext, queryContext, privacyPolicyEvaluationContext)
421
- .loadByIDAsync(id1));
422
- await (0, globals_1.expect)((0, results_1.enforceAsyncResult)(entityMutatorFactory
423
- .forUpdate(existingEntity, queryContext)
424
- .setField('customIdField', (0, uuid_1.v4)())
425
- .updateAsync())).rejects.toThrow('id field updates not supported: (entityClass = TestEntity)');
426
- const reloadedEntity = await (0, results_1.enforceAsyncResult)(entityLoaderFactory
427
- .forLoad(viewerContext, queryContext, privacyPolicyEvaluationContext)
428
- .loadByIDAsync(id1));
429
- (0, globals_1.expect)(reloadedEntity.getAllFields()).toMatchObject(existingEntity.getAllFields());
430
- });
431
- });
432
- (0, globals_1.describe)('forDelete', () => {
433
- (0, globals_1.it)('deletes entities', async () => {
434
- const viewerContext = (0, ts_mockito_1.mock)();
435
- const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
436
- const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
437
- const id1 = (0, uuid_1.v4)();
438
- const { entityMutatorFactory, entityLoaderFactory } = createEntityMutatorFactory([
439
- {
440
- customIdField: id1,
441
- stringField: 'huh',
442
- testIndexedField: '3',
443
- intField: 3,
444
- dateField: new Date(),
445
- nullableField: null,
446
- },
447
- ]);
448
- const existingEntity = await (0, results_1.enforceAsyncResult)(entityLoaderFactory
449
- .forLoad(viewerContext, queryContext, privacyPolicyEvaluationContext)
450
- .loadByIDAsync(id1));
451
- (0, globals_1.expect)(existingEntity).toBeTruthy();
452
- await (0, results_1.enforceAsyncResult)(entityMutatorFactory.forDelete(existingEntity, queryContext).deleteAsync());
453
- await (0, globals_1.expect)((0, results_1.enforceAsyncResult)(entityLoaderFactory
454
- .forLoad(viewerContext, queryContext, privacyPolicyEvaluationContext)
455
- .loadByIDAsync(id1))).rejects.toBeInstanceOf(Error);
456
- });
457
- (0, globals_1.it)('checks privacy', async () => {
458
- const viewerContext = (0, ts_mockito_1.mock)();
459
- const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
460
- const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
461
- const id1 = (0, uuid_1.v4)();
462
- const { privacyPolicy, entityMutatorFactory, entityLoaderFactory } = createEntityMutatorFactory([
463
- {
464
- customIdField: id1,
465
- stringField: 'huh',
466
- testIndexedField: '3',
467
- intField: 3,
468
- dateField: new Date(),
469
- nullableField: null,
470
- },
471
- ]);
472
- const spiedPrivacyPolicy = (0, ts_mockito_1.spy)(privacyPolicy);
473
- const existingEntity = await (0, results_1.enforceAsyncResult)(entityLoaderFactory
474
- .forLoad(viewerContext, queryContext, privacyPolicyEvaluationContext)
475
- .loadByIDAsync(id1));
476
- await (0, results_1.enforceAsyncResult)(entityMutatorFactory.forDelete(existingEntity, queryContext).deleteAsync());
477
- (0, ts_mockito_1.verify)(spiedPrivacyPolicy.authorizeDeleteAsync(viewerContext, (0, ts_mockito_1.anyOfClass)(EntityQueryContext_1.EntityTransactionalQueryContext), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anyOfClass)(TestEntity_1.TestEntity), (0, ts_mockito_1.anything)())).once();
478
- });
479
- (0, globals_1.it)('executes triggers', async () => {
480
- const viewerContext = (0, ts_mockito_1.mock)();
481
- const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
482
- const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
483
- const id1 = (0, uuid_1.v4)();
484
- const { mutationTriggers, entityMutatorFactory, entityLoaderFactory } = createEntityMutatorFactory([
485
- {
486
- customIdField: id1,
487
- stringField: 'huh',
488
- testIndexedField: '3',
489
- intField: 3,
490
- dateField: new Date(),
491
- nullableField: null,
492
- },
493
- ]);
494
- const triggerSpies = setUpMutationTriggerSpies(mutationTriggers);
495
- const existingEntity = await (0, results_1.enforceAsyncResult)(entityLoaderFactory
496
- .forLoad(viewerContext, queryContext, privacyPolicyEvaluationContext)
497
- .loadByIDAsync(id1));
498
- await (0, results_1.enforceAsyncResult)(entityMutatorFactory.forDelete(existingEntity, queryContext).deleteAsync());
499
- verifyTriggerCounts(viewerContext, triggerSpies, {
500
- beforeCreate: false,
501
- afterCreate: false,
502
- beforeUpdate: false,
503
- afterUpdate: false,
504
- beforeDelete: true,
505
- afterDelete: true,
506
- }, { type: EntityMutationInfo_1.EntityMutationType.DELETE, cascadingDeleteCause: null });
507
- });
508
- (0, globals_1.it)('does not execute validators', async () => {
509
- const viewerContext = (0, ts_mockito_1.mock)();
510
- const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
511
- const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
512
- const id1 = (0, uuid_1.v4)();
513
- const { mutationValidators, entityMutatorFactory, entityLoaderFactory } = createEntityMutatorFactory([
514
- {
515
- customIdField: id1,
516
- stringField: 'huh',
517
- testIndexedField: '3',
518
- intField: 3,
519
- dateField: new Date(),
520
- nullableField: null,
521
- },
522
- ]);
523
- const validatorSpies = setUpMutationValidatorSpies(mutationValidators);
524
- const existingEntity = await (0, results_1.enforceAsyncResult)(entityLoaderFactory
525
- .forLoad(viewerContext, queryContext, privacyPolicyEvaluationContext)
526
- .loadByIDAsync(id1));
527
- await (0, results_1.enforceAsyncResult)(entityMutatorFactory.forDelete(existingEntity, queryContext).deleteAsync());
528
- verifyValidatorCounts(viewerContext, validatorSpies, 0, {
529
- type: EntityMutationInfo_1.EntityMutationType.DELETE,
530
- });
531
- });
532
- });
533
- (0, globals_1.it)('invalidates cache for fields upon create', async () => {
534
- const viewerContext = (0, ts_mockito_1.mock)();
535
- const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
536
- const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
537
- const id1 = (0, uuid_1.v4)();
538
- const { entityMutatorFactory, entityLoaderFactory } = createEntityMutatorFactory([
539
- {
540
- customIdField: id1,
541
- stringField: 'huh',
542
- testIndexedField: '3',
543
- intField: 3,
544
- dateField: new Date(),
545
- nullableField: null,
546
- },
547
- ]);
548
- const entites1 = await (0, entityUtils_1.enforceResultsAsync)(entityLoaderFactory
549
- .forLoad(viewerContext, queryContext, privacyPolicyEvaluationContext)
550
- .loadManyByFieldEqualingAsync('stringField', 'huh'));
551
- (0, globals_1.expect)(entites1).toHaveLength(1);
552
- const entitiesLoadedByComposite1 = await (0, entityUtils_1.enforceResultsAsync)(entityLoaderFactory
553
- .forLoad(viewerContext, queryContext, privacyPolicyEvaluationContext)
554
- .loadManyByCompositeFieldEqualingAsync(['stringField', 'intField'], {
555
- stringField: 'huh',
556
- intField: 3,
557
- }));
558
- (0, globals_1.expect)(entitiesLoadedByComposite1).toHaveLength(1);
559
- await (0, results_1.enforceAsyncResult)(entityMutatorFactory
560
- .forCreate(viewerContext, queryContext)
561
- .setField('stringField', 'huh')
562
- .setField('intField', 3)
563
- .createAsync());
564
- const entities2 = await (0, entityUtils_1.enforceResultsAsync)(entityLoaderFactory
565
- .forLoad(viewerContext, queryContext, privacyPolicyEvaluationContext)
566
- .loadManyByFieldEqualingAsync('stringField', 'huh'));
567
- (0, globals_1.expect)(entities2).toHaveLength(2);
568
- const entitiesLoadedByComposite2 = await (0, entityUtils_1.enforceResultsAsync)(entityLoaderFactory
569
- .forLoad(viewerContext, queryContext, privacyPolicyEvaluationContext)
570
- .loadManyByCompositeFieldEqualingAsync(['stringField', 'intField'], {
571
- stringField: 'huh',
572
- intField: 3,
573
- }));
574
- (0, globals_1.expect)(entitiesLoadedByComposite2).toHaveLength(2);
575
- });
576
- (0, globals_1.it)('throws error when field not valid', async () => {
577
- const viewerContext = (0, ts_mockito_1.mock)();
578
- const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
579
- const id1 = (0, uuid_1.v4)();
580
- const { entityMutatorFactory } = createEntityMutatorFactory([
581
- {
582
- customIdField: id1,
583
- stringField: 'huh',
584
- testIndexedField: '3',
585
- intField: 3,
586
- dateField: new Date(),
587
- nullableField: null,
588
- },
589
- ]);
590
- await (0, globals_1.expect)(entityMutatorFactory
591
- .forCreate(viewerContext, queryContext)
592
- .setField('stringField', 10)
593
- .createAsync()).rejects.toThrow('Entity field not valid: TestEntity (stringField = 10)');
594
- const createdEntity = await (0, results_1.enforceAsyncResult)(entityMutatorFactory
595
- .forCreate(viewerContext, queryContext)
596
- .setField('stringField', 'hello')
597
- .createAsync());
598
- await (0, globals_1.expect)(entityMutatorFactory
599
- .forUpdate(createdEntity, queryContext)
600
- .setField('stringField', 10)
601
- .updateAsync()).rejects.toThrow('Entity field not valid: TestEntity (stringField = 10)');
602
- });
603
- (0, globals_1.it)('returns error result when not authorized to create', async () => {
604
- const entityCompanionProvider = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(EntityCompanionProvider_1.EntityCompanionProvider));
605
- const viewerContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(ViewerContext_1.ViewerContext));
606
- const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
607
- const privacyPolicyMock = (0, ts_mockito_1.mock)(SimpleTestEntity_1.SimpleTestEntityPrivacyPolicy);
608
- const databaseAdapter = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
609
- const metricsAdapter = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
610
- const id1 = (0, uuid_1.v4)();
611
- const fakeEntity = new SimpleTestEntity_1.SimpleTestEntity({
612
- viewerContext,
613
- id: id1,
614
- selectedFields: {
615
- id: id1,
616
- },
617
- databaseFields: {
618
- id: id1,
619
- },
620
- });
621
- const entityLoaderMock = (0, ts_mockito_1.mock)(AuthorizationResultBasedEntityLoader_1.AuthorizationResultBasedEntityLoader);
622
- const entityLoaderUtilsMock = (0, ts_mockito_1.mock)(EntityLoaderUtils_1.EntityLoaderUtils);
623
- (0, ts_mockito_1.when)(entityLoaderUtilsMock.constructEntity((0, ts_mockito_1.anything)())).thenReturn(fakeEntity);
624
- (0, ts_mockito_1.when)(entityLoaderMock.utils).thenReturn((0, ts_mockito_1.instance)(entityLoaderUtilsMock));
625
- const entityLoader = (0, ts_mockito_1.instance)(entityLoaderMock);
626
- const entityLoaderFactoryMock = (0, ts_mockito_1.mock)(EntityLoaderFactory_1.EntityLoaderFactory);
627
- (0, ts_mockito_1.when)(entityLoaderFactoryMock.forLoad(viewerContext, (0, ts_mockito_1.anyOfClass)(EntityQueryContext_1.EntityTransactionalQueryContext), (0, ts_mockito_1.anything)())).thenReturn(entityLoader);
628
- const entityLoaderFactory = (0, ts_mockito_1.instance)(entityLoaderFactoryMock);
629
- const rejectionError = new Error();
630
- (0, ts_mockito_1.when)(privacyPolicyMock.authorizeCreateAsync(viewerContext, (0, ts_mockito_1.anyOfClass)(EntityQueryContext_1.EntityTransactionalQueryContext), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anyOfClass)(SimpleTestEntity_1.SimpleTestEntity), (0, ts_mockito_1.anything)())).thenReject(rejectionError);
631
- (0, ts_mockito_1.when)(privacyPolicyMock.authorizeUpdateAsync(viewerContext, (0, ts_mockito_1.anyOfClass)(EntityQueryContext_1.EntityTransactionalQueryContext), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anyOfClass)(SimpleTestEntity_1.SimpleTestEntity), (0, ts_mockito_1.anything)())).thenReject(rejectionError);
632
- (0, ts_mockito_1.when)(privacyPolicyMock.authorizeDeleteAsync(viewerContext, (0, ts_mockito_1.anyOfClass)(EntityQueryContext_1.EntityTransactionalQueryContext), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anyOfClass)(SimpleTestEntity_1.SimpleTestEntity), (0, ts_mockito_1.anything)())).thenReject(rejectionError);
633
- const entityMutatorFactory = new EntityMutatorFactory_1.EntityMutatorFactory(entityCompanionProvider, SimpleTestEntity_1.simpleTestEntityConfiguration, SimpleTestEntity_1.SimpleTestEntity, (0, ts_mockito_1.instance)(privacyPolicyMock), [], {}, entityLoaderFactory, databaseAdapter, metricsAdapter);
634
- const entityCreateResult = await entityMutatorFactory
635
- .forCreate(viewerContext, queryContext)
636
- .createAsync();
637
- (0, globals_1.expect)(entityCreateResult.ok).toBe(false);
638
- (0, globals_1.expect)(entityCreateResult.reason).toEqual(rejectionError);
639
- (0, globals_1.expect)(entityCreateResult.value).toBe(undefined);
640
- const entityUpdateResult = await entityMutatorFactory
641
- .forUpdate(fakeEntity, queryContext)
642
- .updateAsync();
643
- (0, globals_1.expect)(entityUpdateResult.ok).toBe(false);
644
- (0, globals_1.expect)(entityUpdateResult.reason).toEqual(rejectionError);
645
- (0, globals_1.expect)(entityUpdateResult.value).toBe(undefined);
646
- const entityDeleteResult = await entityMutatorFactory
647
- .forDelete(fakeEntity, queryContext)
648
- .deleteAsync();
649
- (0, globals_1.expect)(entityDeleteResult.ok).toBe(false);
650
- (0, globals_1.expect)(entityDeleteResult.reason).toEqual(rejectionError);
651
- (0, globals_1.expect)(entityDeleteResult.value).toBe(undefined);
652
- });
653
- (0, globals_1.it)('throws error when db adapter throws', async () => {
654
- const entityCompanionProviderMock = (0, ts_mockito_1.mock)(EntityCompanionProvider_1.EntityCompanionProvider);
655
- (0, ts_mockito_1.when)(entityCompanionProviderMock.getCompanionForEntity(SimpleTestEntity_1.SimpleTestEntity)).thenReturn({
656
- entityCompanionDefinition: SimpleTestEntity_1.SimpleTestEntity.defineCompanionDefinition(),
657
- });
658
- const entityCompanionProvider = (0, ts_mockito_1.instance)(entityCompanionProviderMock);
659
- const viewerContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(ViewerContext_1.ViewerContext));
660
- const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
661
- const privacyPolicy = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(SimpleTestEntity_1.SimpleTestEntityPrivacyPolicy));
662
- const databaseAdapterMock = (0, ts_mockito_1.mock)();
663
- const metricsAdapter = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
664
- const id1 = (0, uuid_1.v4)();
665
- const fakeEntity = new SimpleTestEntity_1.SimpleTestEntity({
666
- viewerContext,
667
- id: id1,
668
- selectedFields: {
669
- id: id1,
670
- },
671
- databaseFields: {
672
- id: id1,
673
- },
674
- });
675
- const entityLoaderMock = (0, ts_mockito_1.mock)(AuthorizationResultBasedEntityLoader_1.AuthorizationResultBasedEntityLoader);
676
- const entityLoaderUtilsMock = (0, ts_mockito_1.mock)(EntityLoaderUtils_1.EntityLoaderUtils);
677
- (0, ts_mockito_1.when)(entityLoaderUtilsMock.constructEntity((0, ts_mockito_1.anything)())).thenReturn(fakeEntity);
678
- (0, ts_mockito_1.when)(entityLoaderMock.utils).thenReturn((0, ts_mockito_1.instance)(entityLoaderUtilsMock));
679
- const entityLoader = (0, ts_mockito_1.instance)(entityLoaderMock);
680
- const entityLoaderFactoryMock = (0, ts_mockito_1.mock)(EntityLoaderFactory_1.EntityLoaderFactory);
681
- (0, ts_mockito_1.when)(entityLoaderFactoryMock.forLoad(viewerContext, (0, ts_mockito_1.anyOfClass)(EntityQueryContext_1.EntityTransactionalQueryContext), (0, ts_mockito_1.anything)())).thenReturn(entityLoader);
682
- const entityLoaderFactory = (0, ts_mockito_1.instance)(entityLoaderFactoryMock);
683
- const rejectionError = new Error();
684
- (0, ts_mockito_1.when)(databaseAdapterMock.insertAsync((0, ts_mockito_1.anyOfClass)(EntityQueryContext_1.EntityTransactionalQueryContext), (0, ts_mockito_1.anything)())).thenReject(rejectionError);
685
- (0, ts_mockito_1.when)(databaseAdapterMock.updateAsync((0, ts_mockito_1.anyOfClass)(EntityQueryContext_1.EntityTransactionalQueryContext), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)())).thenReject(rejectionError);
686
- (0, ts_mockito_1.when)(databaseAdapterMock.deleteAsync((0, ts_mockito_1.anyOfClass)(EntityQueryContext_1.EntityTransactionalQueryContext), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)())).thenReject(rejectionError);
687
- const entityMutatorFactory = new EntityMutatorFactory_1.EntityMutatorFactory(entityCompanionProvider, SimpleTestEntity_1.simpleTestEntityConfiguration, SimpleTestEntity_1.SimpleTestEntity, privacyPolicy, [], {}, entityLoaderFactory, (0, ts_mockito_1.instance)(databaseAdapterMock), metricsAdapter);
688
- await (0, globals_1.expect)(entityMutatorFactory.forCreate(viewerContext, queryContext).createAsync()).rejects.toEqual(rejectionError);
689
- await (0, globals_1.expect)(entityMutatorFactory.forUpdate(fakeEntity, queryContext).updateAsync()).rejects.toEqual(rejectionError);
690
- await (0, globals_1.expect)(entityMutatorFactory.forDelete(fakeEntity, queryContext).deleteAsync()).rejects.toEqual(rejectionError);
691
- });
692
- (0, globals_1.it)('records metrics appropriately', async () => {
693
- const viewerContext = (0, ts_mockito_1.mock)();
694
- const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
695
- const { entityMutatorFactory, metricsAdapter } = createEntityMutatorFactory([]);
696
- const spiedMetricsAdapter = (0, ts_mockito_1.spy)(metricsAdapter);
697
- const newEntity = await (0, results_1.enforceAsyncResult)(entityMutatorFactory
698
- .forCreate(viewerContext, queryContext)
699
- .setField('stringField', 'huh')
700
- .createAsync());
701
- await (0, results_1.enforceAsyncResult)(entityMutatorFactory
702
- .forUpdate(newEntity, queryContext)
703
- .setField('stringField', 'wat')
704
- .updateAsync());
705
- await (0, results_1.enforceAsyncResult)(entityMutatorFactory.forDelete(newEntity, queryContext).deleteAsync());
706
- (0, ts_mockito_1.verify)(spiedMetricsAdapter.logMutatorMutationEvent((0, ts_mockito_1.objectContaining)({
707
- type: IEntityMetricsAdapter_1.EntityMetricsMutationType.CREATE,
708
- entityClassName: TestEntity_1.TestEntity.name,
709
- }))).once();
710
- (0, ts_mockito_1.verify)(spiedMetricsAdapter.logMutatorMutationEvent((0, ts_mockito_1.objectContaining)({
711
- type: IEntityMetricsAdapter_1.EntityMetricsMutationType.UPDATE,
712
- entityClassName: TestEntity_1.TestEntity.name,
713
- }))).once();
714
- (0, ts_mockito_1.verify)(spiedMetricsAdapter.logMutatorMutationEvent((0, ts_mockito_1.objectContaining)({
715
- type: IEntityMetricsAdapter_1.EntityMetricsMutationType.DELETE,
716
- entityClassName: TestEntity_1.TestEntity.name,
717
- }))).once();
718
- (0, ts_mockito_1.verify)(spiedMetricsAdapter.logMutatorMutationEvent((0, ts_mockito_1.anything)())).thrice();
719
- });
720
- });
721
- //# sourceMappingURL=EntityMutator-test.js.map