@expo/entity 0.46.0 → 0.47.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 (216) 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 -3
  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/LICENSE +0 -21
  27. package/build/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.d.ts +0 -1
  28. package/build/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js +0 -240
  29. package/build/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +0 -1
  30. package/build/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.d.ts +0 -26
  31. package/build/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js +0 -109
  32. package/build/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js.map +0 -1
  33. package/build/src/__tests__/AuthorizationResultBasedEntityLoader-test.d.ts +0 -1
  34. package/build/src/__tests__/AuthorizationResultBasedEntityLoader-test.js +0 -590
  35. package/build/src/__tests__/AuthorizationResultBasedEntityLoader-test.js.map +0 -1
  36. package/build/src/__tests__/ComposedCacheAdapter-test.d.ts +0 -1
  37. package/build/src/__tests__/ComposedCacheAdapter-test.js +0 -259
  38. package/build/src/__tests__/ComposedCacheAdapter-test.js.map +0 -1
  39. package/build/src/__tests__/ComposedSecondaryEntityCache-test.d.ts +0 -1
  40. package/build/src/__tests__/ComposedSecondaryEntityCache-test.js +0 -67
  41. package/build/src/__tests__/ComposedSecondaryEntityCache-test.js.map +0 -1
  42. package/build/src/__tests__/EnforcingEntityAssociationLoader-test.d.ts +0 -1
  43. package/build/src/__tests__/EnforcingEntityAssociationLoader-test.js +0 -113
  44. package/build/src/__tests__/EnforcingEntityAssociationLoader-test.js.map +0 -1
  45. package/build/src/__tests__/EnforcingEntityLoader-test.d.ts +0 -1
  46. package/build/src/__tests__/EnforcingEntityLoader-test.js +0 -316
  47. package/build/src/__tests__/EnforcingEntityLoader-test.js.map +0 -1
  48. package/build/src/__tests__/Entity-test.d.ts +0 -1
  49. package/build/src/__tests__/Entity-test.js +0 -92
  50. package/build/src/__tests__/Entity-test.js.map +0 -1
  51. package/build/src/__tests__/EntityAssociationLoader-test.d.ts +0 -1
  52. package/build/src/__tests__/EntityAssociationLoader-test.js +0 -28
  53. package/build/src/__tests__/EntityAssociationLoader-test.js.map +0 -1
  54. package/build/src/__tests__/EntityCommonUseCases-test.d.ts +0 -1
  55. package/build/src/__tests__/EntityCommonUseCases-test.js +0 -111
  56. package/build/src/__tests__/EntityCommonUseCases-test.js.map +0 -1
  57. package/build/src/__tests__/EntityCompanion-test.d.ts +0 -1
  58. package/build/src/__tests__/EntityCompanion-test.js +0 -42
  59. package/build/src/__tests__/EntityCompanion-test.js.map +0 -1
  60. package/build/src/__tests__/EntityCompanionProvider-test.d.ts +0 -1
  61. package/build/src/__tests__/EntityCompanionProvider-test.js +0 -53
  62. package/build/src/__tests__/EntityCompanionProvider-test.js.map +0 -1
  63. package/build/src/__tests__/EntityConfiguration-test.d.ts +0 -1
  64. package/build/src/__tests__/EntityConfiguration-test.js +0 -164
  65. package/build/src/__tests__/EntityConfiguration-test.js.map +0 -1
  66. package/build/src/__tests__/EntityDatabaseAdapter-test.d.ts +0 -1
  67. package/build/src/__tests__/EntityDatabaseAdapter-test.js +0 -189
  68. package/build/src/__tests__/EntityDatabaseAdapter-test.js.map +0 -1
  69. package/build/src/__tests__/EntityEdges-test.d.ts +0 -1
  70. package/build/src/__tests__/EntityEdges-test.js +0 -680
  71. package/build/src/__tests__/EntityEdges-test.js.map +0 -1
  72. package/build/src/__tests__/EntityFields-test.d.ts +0 -1
  73. package/build/src/__tests__/EntityFields-test.js +0 -61
  74. package/build/src/__tests__/EntityFields-test.js.map +0 -1
  75. package/build/src/__tests__/EntityLoader-test.d.ts +0 -1
  76. package/build/src/__tests__/EntityLoader-test.js +0 -34
  77. package/build/src/__tests__/EntityLoader-test.js.map +0 -1
  78. package/build/src/__tests__/EntityMutator-MutationCacheConsistency-test.d.ts +0 -1
  79. package/build/src/__tests__/EntityMutator-MutationCacheConsistency-test.js +0 -71
  80. package/build/src/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +0 -1
  81. package/build/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.d.ts +0 -1
  82. package/build/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.js +0 -54
  83. package/build/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.js.map +0 -1
  84. package/build/src/__tests__/EntityMutator-test.d.ts +0 -1
  85. package/build/src/__tests__/EntityMutator-test.js +0 -721
  86. package/build/src/__tests__/EntityMutator-test.js.map +0 -1
  87. package/build/src/__tests__/EntityPrivacyPolicy-test.d.ts +0 -1
  88. package/build/src/__tests__/EntityPrivacyPolicy-test.js +0 -429
  89. package/build/src/__tests__/EntityPrivacyPolicy-test.js.map +0 -1
  90. package/build/src/__tests__/EntityQueryContext-test.d.ts +0 -1
  91. package/build/src/__tests__/EntityQueryContext-test.js +0 -181
  92. package/build/src/__tests__/EntityQueryContext-test.js.map +0 -1
  93. package/build/src/__tests__/EntitySecondaryCacheLoader-test.d.ts +0 -1
  94. package/build/src/__tests__/EntitySecondaryCacheLoader-test.js +0 -58
  95. package/build/src/__tests__/EntitySecondaryCacheLoader-test.js.map +0 -1
  96. package/build/src/__tests__/EntitySelfReferentialEdges-test.d.ts +0 -1
  97. package/build/src/__tests__/EntitySelfReferentialEdges-test.js +0 -196
  98. package/build/src/__tests__/EntitySelfReferentialEdges-test.js.map +0 -1
  99. package/build/src/__tests__/GenericEntityCacheAdapter-test.d.ts +0 -1
  100. package/build/src/__tests__/GenericEntityCacheAdapter-test.js +0 -95
  101. package/build/src/__tests__/GenericEntityCacheAdapter-test.js.map +0 -1
  102. package/build/src/__tests__/ReadonlyEntity-test.d.ts +0 -1
  103. package/build/src/__tests__/ReadonlyEntity-test.js +0 -209
  104. package/build/src/__tests__/ReadonlyEntity-test.js.map +0 -1
  105. package/build/src/__tests__/ViewerContext-test.d.ts +0 -1
  106. package/build/src/__tests__/ViewerContext-test.js +0 -28
  107. package/build/src/__tests__/ViewerContext-test.js.map +0 -1
  108. package/build/src/__tests__/ViewerScopedEntityCompanion-test.d.ts +0 -1
  109. package/build/src/__tests__/ViewerScopedEntityCompanion-test.js +0 -18
  110. package/build/src/__tests__/ViewerScopedEntityCompanion-test.js.map +0 -1
  111. package/build/src/__tests__/ViewerScopedEntityCompanionProvider-test.d.ts +0 -1
  112. package/build/src/__tests__/ViewerScopedEntityCompanionProvider-test.js +0 -18
  113. package/build/src/__tests__/ViewerScopedEntityCompanionProvider-test.js.map +0 -1
  114. package/build/src/__tests__/ViewerScopedEntityLoaderFactory-test.d.ts +0 -1
  115. package/build/src/__tests__/ViewerScopedEntityLoaderFactory-test.js +0 -21
  116. package/build/src/__tests__/ViewerScopedEntityLoaderFactory-test.js.map +0 -1
  117. package/build/src/__tests__/ViewerScopedEntityMutatorFactory-test.d.ts +0 -1
  118. package/build/src/__tests__/ViewerScopedEntityMutatorFactory-test.js +0 -20
  119. package/build/src/__tests__/ViewerScopedEntityMutatorFactory-test.js.map +0 -1
  120. package/build/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.d.ts +0 -1
  121. package/build/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +0 -121
  122. package/build/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +0 -1
  123. package/build/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.d.ts +0 -1
  124. package/build/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +0 -119
  125. package/build/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +0 -1
  126. package/build/src/__tests__/entityUtils-test.d.ts +0 -1
  127. package/build/src/__tests__/entityUtils-test.js +0 -88
  128. package/build/src/__tests__/entityUtils-test.js.map +0 -1
  129. package/build/src/errors/__tests__/EntityDatabaseAdapterError-test.d.ts +0 -1
  130. package/build/src/errors/__tests__/EntityDatabaseAdapterError-test.js +0 -21
  131. package/build/src/errors/__tests__/EntityDatabaseAdapterError-test.js.map +0 -1
  132. package/build/src/internal/__tests__/CompositeFieldHolder-test.d.ts +0 -1
  133. package/build/src/internal/__tests__/CompositeFieldHolder-test.js +0 -25
  134. package/build/src/internal/__tests__/CompositeFieldHolder-test.js.map +0 -1
  135. package/build/src/internal/__tests__/CompositeFieldValueMap-test.d.ts +0 -1
  136. package/build/src/internal/__tests__/CompositeFieldValueMap-test.js +0 -40
  137. package/build/src/internal/__tests__/CompositeFieldValueMap-test.js.map +0 -1
  138. package/build/src/internal/__tests__/EntityDataManager-test.d.ts +0 -1
  139. package/build/src/internal/__tests__/EntityDataManager-test.js +0 -666
  140. package/build/src/internal/__tests__/EntityDataManager-test.js.map +0 -1
  141. package/build/src/internal/__tests__/EntityFieldTransformationUtils-test.d.ts +0 -1
  142. package/build/src/internal/__tests__/EntityFieldTransformationUtils-test.js +0 -135
  143. package/build/src/internal/__tests__/EntityFieldTransformationUtils-test.js.map +0 -1
  144. package/build/src/internal/__tests__/ReadThroughEntityCache-test.d.ts +0 -1
  145. package/build/src/internal/__tests__/ReadThroughEntityCache-test.js +0 -217
  146. package/build/src/internal/__tests__/ReadThroughEntityCache-test.js.map +0 -1
  147. package/build/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.d.ts +0 -1
  148. package/build/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js +0 -18
  149. package/build/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js.map +0 -1
  150. package/build/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.d.ts +0 -1
  151. package/build/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js +0 -18
  152. package/build/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js.map +0 -1
  153. package/build/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.d.ts +0 -1
  154. package/build/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js +0 -18
  155. package/build/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js.map +0 -1
  156. package/build/src/utils/__testfixtures__/PrivacyPolicyRuleTestUtils.d.ts +0 -28
  157. package/build/src/utils/__testfixtures__/PrivacyPolicyRuleTestUtils.js +0 -53
  158. package/build/src/utils/__testfixtures__/PrivacyPolicyRuleTestUtils.js.map +0 -1
  159. package/build/src/utils/__testfixtures__/SimpleTestEntity.d.ts +0 -20
  160. package/build/src/utils/__testfixtures__/SimpleTestEntity.js +0 -46
  161. package/build/src/utils/__testfixtures__/SimpleTestEntity.js.map +0 -1
  162. package/build/src/utils/__testfixtures__/StubCacheAdapter.d.ts +0 -29
  163. package/build/src/utils/__testfixtures__/StubCacheAdapter.js +0 -103
  164. package/build/src/utils/__testfixtures__/StubCacheAdapter.js.map +0 -1
  165. package/build/src/utils/__testfixtures__/StubDatabaseAdapter.d.ts +0 -26
  166. package/build/src/utils/__testfixtures__/StubDatabaseAdapter.js +0 -173
  167. package/build/src/utils/__testfixtures__/StubDatabaseAdapter.js.map +0 -1
  168. package/build/src/utils/__testfixtures__/StubDatabaseAdapterProvider.d.ts +0 -7
  169. package/build/src/utils/__testfixtures__/StubDatabaseAdapterProvider.js +0 -12
  170. package/build/src/utils/__testfixtures__/StubDatabaseAdapterProvider.js.map +0 -1
  171. package/build/src/utils/__testfixtures__/StubQueryContextProvider.d.ts +0 -7
  172. package/build/src/utils/__testfixtures__/StubQueryContextProvider.js +0 -17
  173. package/build/src/utils/__testfixtures__/StubQueryContextProvider.js.map +0 -1
  174. package/build/src/utils/__testfixtures__/TSMockitoExtensions.d.ts +0 -9
  175. package/build/src/utils/__testfixtures__/TSMockitoExtensions.js +0 -65
  176. package/build/src/utils/__testfixtures__/TSMockitoExtensions.js.map +0 -1
  177. package/build/src/utils/__testfixtures__/TestEntity.d.ts +0 -30
  178. package/build/src/utils/__testfixtures__/TestEntity.js +0 -96
  179. package/build/src/utils/__testfixtures__/TestEntity.js.map +0 -1
  180. package/build/src/utils/__testfixtures__/TestEntity2.d.ts +0 -20
  181. package/build/src/utils/__testfixtures__/TestEntity2.js +0 -49
  182. package/build/src/utils/__testfixtures__/TestEntity2.js.map +0 -1
  183. package/build/src/utils/__testfixtures__/TestEntityWithMutationTriggers.d.ts +0 -36
  184. package/build/src/utils/__testfixtures__/TestEntityWithMutationTriggers.js +0 -80
  185. package/build/src/utils/__testfixtures__/TestEntityWithMutationTriggers.js.map +0 -1
  186. package/build/src/utils/__testfixtures__/TestViewerContext.d.ts +0 -3
  187. package/build/src/utils/__testfixtures__/TestViewerContext.js +0 -8
  188. package/build/src/utils/__testfixtures__/TestViewerContext.js.map +0 -1
  189. package/build/src/utils/__testfixtures__/createUnitTestEntityCompanionProvider.d.ts +0 -7
  190. package/build/src/utils/__testfixtures__/createUnitTestEntityCompanionProvider.js +0 -33
  191. package/build/src/utils/__testfixtures__/createUnitTestEntityCompanionProvider.js.map +0 -1
  192. package/build/src/utils/__testfixtures__/describeFieldTestCase.d.ts +0 -2
  193. package/build/src/utils/__testfixtures__/describeFieldTestCase.js +0 -19
  194. package/build/src/utils/__testfixtures__/describeFieldTestCase.js.map +0 -1
  195. package/build/src/utils/__tests__/EntityCreationUtils-test.d.ts +0 -1
  196. package/build/src/utils/__tests__/EntityCreationUtils-test.js +0 -144
  197. package/build/src/utils/__tests__/EntityCreationUtils-test.js.map +0 -1
  198. package/build/src/utils/__tests__/EntityPrivacyUtils-test.d.ts +0 -1
  199. package/build/src/utils/__tests__/EntityPrivacyUtils-test.js +0 -460
  200. package/build/src/utils/__tests__/EntityPrivacyUtils-test.js.map +0 -1
  201. package/build/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.d.ts +0 -1
  202. package/build/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +0 -180
  203. package/build/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js.map +0 -1
  204. package/build/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.d.ts +0 -1
  205. package/build/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js +0 -27
  206. package/build/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js.map +0 -1
  207. package/build/src/utils/collections/__tests__/SerializableKeyMap-test.d.ts +0 -5
  208. package/build/src/utils/collections/__tests__/SerializableKeyMap-test.js +0 -99
  209. package/build/src/utils/collections/__tests__/SerializableKeyMap-test.js.map +0 -1
  210. package/build/src/utils/collections/__tests__/maps-test.d.ts +0 -1
  211. package/build/src/utils/collections/__tests__/maps-test.js +0 -121
  212. package/build/src/utils/collections/__tests__/maps-test.js.map +0 -1
  213. package/build/src/utils/collections/__tests__/sets-test.d.ts +0 -1
  214. package/build/src/utils/collections/__tests__/sets-test.js +0 -19
  215. package/build/src/utils/collections/__tests__/sets-test.js.map +0 -1
  216. package/build/tsconfig.tsbuildinfo +0 -1
@@ -1,460 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const globals_1 = require("@jest/globals");
7
- const nullthrows_1 = __importDefault(require("nullthrows"));
8
- const Entity_1 = require("../../Entity");
9
- const EntityConfiguration_1 = require("../../EntityConfiguration");
10
- const EntityFieldDefinition_1 = require("../../EntityFieldDefinition");
11
- const EntityFields_1 = require("../../EntityFields");
12
- const EntityPrivacyPolicy_1 = require("../../EntityPrivacyPolicy");
13
- const ViewerContext_1 = require("../../ViewerContext");
14
- const AlwaysAllowPrivacyPolicyRule_1 = require("../../rules/AlwaysAllowPrivacyPolicyRule");
15
- const AlwaysDenyPrivacyPolicyRule_1 = require("../../rules/AlwaysDenyPrivacyPolicyRule");
16
- const PrivacyPolicyRule_1 = require("../../rules/PrivacyPolicyRule");
17
- const EntityPrivacyUtils_1 = require("../EntityPrivacyUtils");
18
- const createUnitTestEntityCompanionProvider_1 = require("../__testfixtures__/createUnitTestEntityCompanionProvider");
19
- function assertEntityPrivacyEvaluationResultFailure(evaluationResult) {
20
- if (evaluationResult.allowed) {
21
- throw new Error('Evaluation result not failure');
22
- }
23
- }
24
- function expectAuthorizationError(evaluationResult, { entityId, action }) {
25
- (0, globals_1.expect)(evaluationResult.allowed).toBe(false);
26
- assertEntityPrivacyEvaluationResultFailure(evaluationResult);
27
- const authorizationErrors = evaluationResult.authorizationErrors;
28
- (0, globals_1.expect)(authorizationErrors).toHaveLength(1);
29
- const authorizationError = (0, nullthrows_1.default)(authorizationErrors[0]);
30
- (0, globals_1.expect)(authorizationError.message).toContain(entityId);
31
- (0, globals_1.expect)(authorizationError.message).toContain(EntityPrivacyPolicy_1.EntityAuthorizationAction[action]);
32
- }
33
- (0, globals_1.describe)(EntityPrivacyUtils_1.canViewerUpdateAsync, () => {
34
- (0, globals_1.it)('appropriately executes update privacy policy', async () => {
35
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
36
- const viewerContext = new ViewerContext_1.ViewerContext(companionProvider);
37
- const testEntity = await SimpleTestDenyDeleteEntity.creator(viewerContext).createAsync();
38
- const canViewerUpdate = await (0, EntityPrivacyUtils_1.canViewerUpdateAsync)(SimpleTestDenyDeleteEntity, testEntity);
39
- (0, globals_1.expect)(canViewerUpdate).toBe(true);
40
- const canViewerUpdateResult = await (0, EntityPrivacyUtils_1.getCanViewerUpdateResultAsync)(SimpleTestDenyDeleteEntity, testEntity);
41
- (0, globals_1.expect)(canViewerUpdateResult.allowed).toBe(true);
42
- });
43
- (0, globals_1.it)('denies when policy denies', async () => {
44
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
45
- const viewerContext = new ViewerContext_1.ViewerContext(companionProvider);
46
- const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext).createAsync();
47
- const canViewerUpdate = await (0, EntityPrivacyUtils_1.canViewerUpdateAsync)(SimpleTestDenyUpdateEntity, testEntity);
48
- (0, globals_1.expect)(canViewerUpdate).toBe(false);
49
- const canViewerUpdateResult = await (0, EntityPrivacyUtils_1.getCanViewerUpdateResultAsync)(SimpleTestDenyUpdateEntity, testEntity);
50
- expectAuthorizationError(canViewerUpdateResult, {
51
- entityId: testEntity.getID(),
52
- action: EntityPrivacyPolicy_1.EntityAuthorizationAction.UPDATE,
53
- });
54
- });
55
- (0, globals_1.it)('rethrows non-authorization errors', async () => {
56
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
57
- const viewerContext = new ViewerContext_1.ViewerContext(companionProvider);
58
- const testEntity = await SimpleTestThrowOtherErrorEntity.creator(viewerContext).createAsync();
59
- await (0, globals_1.expect)((0, EntityPrivacyUtils_1.canViewerUpdateAsync)(SimpleTestThrowOtherErrorEntity, testEntity)).rejects.toThrow('update error');
60
- await (0, globals_1.expect)((0, EntityPrivacyUtils_1.getCanViewerUpdateResultAsync)(SimpleTestThrowOtherErrorEntity, testEntity)).rejects.toThrow('update error');
61
- });
62
- });
63
- (0, globals_1.describe)(EntityPrivacyUtils_1.canViewerDeleteAsync, () => {
64
- (0, globals_1.it)('appropriately executes update privacy policy', async () => {
65
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
66
- const viewerContext = new ViewerContext_1.ViewerContext(companionProvider);
67
- const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext).createAsync();
68
- const canViewerDelete = await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity);
69
- (0, globals_1.expect)(canViewerDelete).toBe(true);
70
- const canViewerDeleteResult = await (0, EntityPrivacyUtils_1.getCanViewerDeleteResultAsync)(SimpleTestDenyUpdateEntity, testEntity);
71
- (0, globals_1.expect)(canViewerDeleteResult.allowed).toBe(true);
72
- });
73
- (0, globals_1.it)('denies when policy denies', async () => {
74
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
75
- const viewerContext = new ViewerContext_1.ViewerContext(companionProvider);
76
- const testEntity = await SimpleTestDenyDeleteEntity.creator(viewerContext).createAsync();
77
- const canViewerDelete = await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyDeleteEntity, testEntity);
78
- (0, globals_1.expect)(canViewerDelete).toBe(false);
79
- const canViewerDeleteResult = await (0, EntityPrivacyUtils_1.getCanViewerDeleteResultAsync)(SimpleTestDenyDeleteEntity, testEntity);
80
- expectAuthorizationError(canViewerDeleteResult, {
81
- entityId: testEntity.getID(),
82
- action: EntityPrivacyPolicy_1.EntityAuthorizationAction.DELETE,
83
- });
84
- });
85
- (0, globals_1.it)('denies when recursive policy denies for CASCADE_DELETE', async () => {
86
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
87
- const viewerContext = new ViewerContext_1.ViewerContext(companionProvider);
88
- const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext).createAsync();
89
- // add another entity referencing testEntity that would cascade deletion to itself when testEntity is deleted
90
- const leafEntity = await LeafDenyDeleteEntity.creator(viewerContext)
91
- .setField('simple_test_deny_update_cascade_delete_id', testEntity.getID())
92
- .createAsync();
93
- const canViewerDelete = await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity);
94
- (0, globals_1.expect)(canViewerDelete).toBe(false);
95
- const canViewerDeleteResult = await (0, EntityPrivacyUtils_1.getCanViewerDeleteResultAsync)(SimpleTestDenyUpdateEntity, testEntity);
96
- expectAuthorizationError(canViewerDeleteResult, {
97
- entityId: leafEntity.getID(),
98
- action: EntityPrivacyPolicy_1.EntityAuthorizationAction.DELETE,
99
- });
100
- });
101
- (0, globals_1.it)('denies when recursive policy denies for SET_NULL', async () => {
102
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
103
- const viewerContext = new ViewerContext_1.ViewerContext(companionProvider);
104
- const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext).createAsync();
105
- // add another entity referencing testEntity that would set null to its column when testEntity is deleted
106
- const leafEntity = await LeafDenyUpdateEntity.creator(viewerContext)
107
- .setField('simple_test_deny_update_set_null_id', testEntity.getID())
108
- .createAsync();
109
- const canViewerDelete = await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity);
110
- (0, globals_1.expect)(canViewerDelete).toBe(false);
111
- const canViewerDeleteResult = await (0, EntityPrivacyUtils_1.getCanViewerDeleteResultAsync)(SimpleTestDenyUpdateEntity, testEntity);
112
- expectAuthorizationError(canViewerDeleteResult, {
113
- entityId: leafEntity.getID(),
114
- action: EntityPrivacyPolicy_1.EntityAuthorizationAction.UPDATE,
115
- });
116
- });
117
- (0, globals_1.it)('allows when recursive policy allows for CASCADE_DELETE and SET_NULL', async () => {
118
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
119
- const viewerContext = new ViewerContext_1.ViewerContext(companionProvider);
120
- const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext).createAsync();
121
- // add another entity referencing testEntity that would cascade deletion to itself when testEntity is deleted
122
- await LeafDenyUpdateEntity.creator(viewerContext)
123
- .setField('simple_test_deny_update_cascade_delete_id', testEntity.getID())
124
- .createAsync();
125
- // add another entity referencing testEntity that would set null to its column when testEntity is deleted
126
- await LeafDenyDeleteEntity.creator(viewerContext)
127
- .setField('simple_test_deny_update_set_null_id', testEntity.getID())
128
- .createAsync();
129
- const canViewerDelete = await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity);
130
- (0, globals_1.expect)(canViewerDelete).toBe(true);
131
- const canViewerDeleteResult = await (0, EntityPrivacyUtils_1.getCanViewerDeleteResultAsync)(SimpleTestDenyUpdateEntity, testEntity);
132
- (0, globals_1.expect)(canViewerDeleteResult.allowed).toBe(true);
133
- });
134
- (0, globals_1.it)('rethrows non-authorization errors', async () => {
135
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
136
- const viewerContext = new ViewerContext_1.ViewerContext(companionProvider);
137
- const testEntity = await SimpleTestThrowOtherErrorEntity.creator(viewerContext).createAsync();
138
- await (0, globals_1.expect)((0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestThrowOtherErrorEntity, testEntity)).rejects.toThrow('delete error');
139
- await (0, globals_1.expect)((0, EntityPrivacyUtils_1.getCanViewerDeleteResultAsync)(SimpleTestThrowOtherErrorEntity, testEntity)).rejects.toThrow('delete error');
140
- });
141
- (0, globals_1.it)('returns false when edge cannot be read', async () => {
142
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
143
- const viewerContext = new ViewerContext_1.ViewerContext(companionProvider);
144
- const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext).createAsync();
145
- const leafEntity = await LeafDenyReadEntity.creator(viewerContext)
146
- .setField('simple_test_id', testEntity.getID())
147
- .createAsync();
148
- const canViewerDelete = await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity);
149
- (0, globals_1.expect)(canViewerDelete).toBe(false);
150
- const canViewerDeleteResult = await (0, EntityPrivacyUtils_1.getCanViewerDeleteResultAsync)(SimpleTestDenyUpdateEntity, testEntity);
151
- expectAuthorizationError(canViewerDeleteResult, {
152
- entityId: leafEntity.getID(),
153
- action: EntityPrivacyPolicy_1.EntityAuthorizationAction.READ,
154
- });
155
- });
156
- (0, globals_1.it)('rethrows non-authorization edge read errors', async () => {
157
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
158
- const viewerContext = new ViewerContext_1.ViewerContext(companionProvider);
159
- const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext).createAsync();
160
- await SimpleTestThrowOtherErrorEntity.creator(viewerContext)
161
- .setField('simple_test_id', testEntity.getID())
162
- .createAsync();
163
- await (0, globals_1.expect)((0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity)).rejects.toThrow('read in cascading delete error');
164
- await (0, globals_1.expect)((0, EntityPrivacyUtils_1.getCanViewerDeleteResultAsync)(SimpleTestDenyUpdateEntity, testEntity)).rejects.toThrow('read in cascading delete error');
165
- });
166
- (0, globals_1.it)('supports running within a transaction', async () => {
167
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
168
- const viewerContext = new ViewerContext_1.ViewerContext(companionProvider);
169
- const canViewerDelete = await viewerContext.runInTransactionForDatabaseAdaptorFlavorAsync('postgres', async (queryContext) => {
170
- const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext, queryContext).createAsync();
171
- await LeafDenyReadEntity.creator(viewerContext, queryContext)
172
- .setField('simple_test_id', testEntity.getID())
173
- .createAsync();
174
- // this would fail if transactions weren't supported or correctly passed through
175
- return await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity, queryContext);
176
- });
177
- (0, globals_1.expect)(canViewerDelete).toBe(true);
178
- const canViewerDeleteResult = await viewerContext.runInTransactionForDatabaseAdaptorFlavorAsync('postgres', async (queryContext) => {
179
- const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext, queryContext).createAsync();
180
- await LeafDenyReadEntity.creator(viewerContext, queryContext)
181
- .setField('simple_test_id', testEntity.getID())
182
- .createAsync();
183
- // this would fail if transactions weren't supported or correctly passed through
184
- return await (0, EntityPrivacyUtils_1.getCanViewerDeleteResultAsync)(SimpleTestDenyUpdateEntity, testEntity, queryContext);
185
- });
186
- (0, globals_1.expect)(canViewerDeleteResult.allowed).toBe(true);
187
- });
188
- });
189
- class DenyUpdateEntityPrivacyPolicy extends EntityPrivacyPolicy_1.EntityPrivacyPolicy {
190
- readRules = [
191
- new AlwaysAllowPrivacyPolicyRule_1.AlwaysAllowPrivacyPolicyRule(),
192
- ];
193
- createRules = [
194
- new AlwaysAllowPrivacyPolicyRule_1.AlwaysAllowPrivacyPolicyRule(),
195
- ];
196
- updateRules = [
197
- new AlwaysDenyPrivacyPolicyRule_1.AlwaysDenyPrivacyPolicyRule(),
198
- ];
199
- deleteRules = [
200
- new AlwaysAllowPrivacyPolicyRule_1.AlwaysAllowPrivacyPolicyRule(),
201
- ];
202
- }
203
- class DenyDeleteEntityPrivacyPolicy extends EntityPrivacyPolicy_1.EntityPrivacyPolicy {
204
- readRules = [
205
- new AlwaysAllowPrivacyPolicyRule_1.AlwaysAllowPrivacyPolicyRule(),
206
- ];
207
- createRules = [
208
- new AlwaysAllowPrivacyPolicyRule_1.AlwaysAllowPrivacyPolicyRule(),
209
- ];
210
- updateRules = [
211
- new AlwaysAllowPrivacyPolicyRule_1.AlwaysAllowPrivacyPolicyRule(),
212
- ];
213
- deleteRules = [
214
- new AlwaysDenyPrivacyPolicyRule_1.AlwaysDenyPrivacyPolicyRule(),
215
- ];
216
- }
217
- class ThrowOtherErrorEntityPrivacyPolicy extends EntityPrivacyPolicy_1.EntityPrivacyPolicy {
218
- readRules = [
219
- {
220
- async evaluateAsync(_viewerContext, _queryContext, evaluationContext, _entity) {
221
- if (evaluationContext.cascadingDeleteCause) {
222
- throw new Error('read in cascading delete error');
223
- }
224
- return PrivacyPolicyRule_1.RuleEvaluationResult.SKIP;
225
- },
226
- },
227
- new AlwaysAllowPrivacyPolicyRule_1.AlwaysAllowPrivacyPolicyRule(),
228
- ];
229
- createRules = [
230
- new AlwaysAllowPrivacyPolicyRule_1.AlwaysAllowPrivacyPolicyRule(),
231
- ];
232
- updateRules = [
233
- {
234
- async evaluateAsync() {
235
- throw new Error('update error');
236
- },
237
- },
238
- ];
239
- deleteRules = [
240
- {
241
- async evaluateAsync() {
242
- throw new Error('delete error');
243
- },
244
- },
245
- ];
246
- }
247
- class DenyReadEntityPrivacyPolicy extends EntityPrivacyPolicy_1.EntityPrivacyPolicy {
248
- readRules = [
249
- {
250
- async evaluateAsync(_viewerContext, queryContext, evaluationContext, _entity) {
251
- if (queryContext.isInTransaction()) {
252
- return PrivacyPolicyRule_1.RuleEvaluationResult.ALLOW;
253
- }
254
- return evaluationContext.cascadingDeleteCause
255
- ? PrivacyPolicyRule_1.RuleEvaluationResult.SKIP
256
- : PrivacyPolicyRule_1.RuleEvaluationResult.ALLOW;
257
- },
258
- },
259
- ];
260
- createRules = [
261
- new AlwaysAllowPrivacyPolicyRule_1.AlwaysAllowPrivacyPolicyRule(),
262
- ];
263
- updateRules = [
264
- new AlwaysAllowPrivacyPolicyRule_1.AlwaysAllowPrivacyPolicyRule(),
265
- ];
266
- deleteRules = [
267
- new AlwaysAllowPrivacyPolicyRule_1.AlwaysAllowPrivacyPolicyRule(),
268
- ];
269
- }
270
- class LeafDenyUpdateEntity extends Entity_1.Entity {
271
- static defineCompanionDefinition() {
272
- return {
273
- entityClass: LeafDenyUpdateEntity,
274
- entityConfiguration: new EntityConfiguration_1.EntityConfiguration({
275
- idField: 'id',
276
- tableName: 'leaf_1',
277
- schema: {
278
- id: new EntityFields_1.UUIDField({
279
- columnName: 'custom_id',
280
- cache: false,
281
- }),
282
- // to ensure edge traversal doesn't process other edges
283
- unused_other_association: new EntityFields_1.UUIDField({
284
- columnName: 'unused_other_association',
285
- association: {
286
- associatedEntityClass: LeafDenyDeleteEntity,
287
- edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL,
288
- },
289
- }),
290
- // deletion behavior should fail since this entity can't be updated and a SET NULL does an update
291
- simple_test_deny_update_set_null_id: new EntityFields_1.UUIDField({
292
- columnName: 'simple_test_deny_update_set_null_id',
293
- association: {
294
- associatedEntityClass: SimpleTestDenyUpdateEntity,
295
- edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL,
296
- },
297
- }),
298
- // deletion behavior should succeed since this entity can be deleted
299
- simple_test_deny_update_cascade_delete_id: new EntityFields_1.UUIDField({
300
- columnName: 'simple_test_deny_update_cascade_delete_id',
301
- association: {
302
- associatedEntityClass: SimpleTestDenyUpdateEntity,
303
- edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.CASCADE_DELETE,
304
- },
305
- }),
306
- },
307
- databaseAdapterFlavor: 'postgres',
308
- cacheAdapterFlavor: 'redis',
309
- }),
310
- privacyPolicyClass: DenyUpdateEntityPrivacyPolicy,
311
- };
312
- }
313
- }
314
- class LeafDenyDeleteEntity extends Entity_1.Entity {
315
- static defineCompanionDefinition() {
316
- return {
317
- entityClass: LeafDenyDeleteEntity,
318
- entityConfiguration: new EntityConfiguration_1.EntityConfiguration({
319
- idField: 'id',
320
- tableName: 'leaf_2',
321
- schema: {
322
- id: new EntityFields_1.UUIDField({
323
- columnName: 'custom_id',
324
- cache: false,
325
- }),
326
- // deletion behavior should fail since this entity can't be deleted
327
- simple_test_deny_update_cascade_delete_id: new EntityFields_1.UUIDField({
328
- columnName: 'simple_test_deny_update_cascade_delete_id',
329
- association: {
330
- associatedEntityClass: SimpleTestDenyUpdateEntity,
331
- edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.CASCADE_DELETE,
332
- },
333
- }),
334
- // deletion behavior should succeed since this entity can be updated and a SET NULL does an update
335
- simple_test_deny_update_set_null_id: new EntityFields_1.UUIDField({
336
- columnName: 'simple_test_deny_update_set_null_id',
337
- association: {
338
- associatedEntityClass: SimpleTestDenyUpdateEntity,
339
- edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL,
340
- },
341
- }),
342
- },
343
- databaseAdapterFlavor: 'postgres',
344
- cacheAdapterFlavor: 'redis',
345
- }),
346
- privacyPolicyClass: DenyDeleteEntityPrivacyPolicy,
347
- };
348
- }
349
- }
350
- class LeafDenyReadEntity extends Entity_1.Entity {
351
- static defineCompanionDefinition() {
352
- return {
353
- entityClass: LeafDenyReadEntity,
354
- entityConfiguration: new EntityConfiguration_1.EntityConfiguration({
355
- idField: 'id',
356
- tableName: 'leaf_4',
357
- inboundEdges: [],
358
- schema: {
359
- id: new EntityFields_1.UUIDField({
360
- columnName: 'custom_id',
361
- cache: false,
362
- }),
363
- simple_test_id: new EntityFields_1.UUIDField({
364
- columnName: 'simple_test_id',
365
- association: {
366
- associatedEntityClass: SimpleTestDenyUpdateEntity,
367
- associatedEntityLookupByField: 'id',
368
- edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL,
369
- },
370
- }),
371
- },
372
- databaseAdapterFlavor: 'postgres',
373
- cacheAdapterFlavor: 'redis',
374
- }),
375
- privacyPolicyClass: DenyReadEntityPrivacyPolicy,
376
- };
377
- }
378
- }
379
- class SimpleTestDenyUpdateEntity extends Entity_1.Entity {
380
- static defineCompanionDefinition() {
381
- return {
382
- entityClass: SimpleTestDenyUpdateEntity,
383
- entityConfiguration: new EntityConfiguration_1.EntityConfiguration({
384
- idField: 'id',
385
- tableName: 'blah',
386
- inboundEdges: [
387
- LeafDenyUpdateEntity,
388
- LeafDenyDeleteEntity,
389
- LeafDenyReadEntity,
390
- SimpleTestThrowOtherErrorEntity,
391
- ],
392
- schema: {
393
- id: new EntityFields_1.UUIDField({
394
- columnName: 'custom_id',
395
- cache: false,
396
- }),
397
- },
398
- databaseAdapterFlavor: 'postgres',
399
- cacheAdapterFlavor: 'redis',
400
- }),
401
- privacyPolicyClass: DenyUpdateEntityPrivacyPolicy,
402
- };
403
- }
404
- }
405
- class SimpleTestDenyDeleteEntity extends Entity_1.Entity {
406
- static defineCompanionDefinition() {
407
- return {
408
- entityClass: SimpleTestDenyDeleteEntity,
409
- entityConfiguration: new EntityConfiguration_1.EntityConfiguration({
410
- idField: 'id',
411
- tableName: 'blah_2',
412
- inboundEdges: [
413
- LeafDenyUpdateEntity,
414
- LeafDenyDeleteEntity,
415
- LeafDenyReadEntity,
416
- SimpleTestThrowOtherErrorEntity,
417
- ],
418
- schema: {
419
- id: new EntityFields_1.UUIDField({
420
- columnName: 'custom_id',
421
- cache: false,
422
- }),
423
- },
424
- databaseAdapterFlavor: 'postgres',
425
- cacheAdapterFlavor: 'redis',
426
- }),
427
- privacyPolicyClass: DenyDeleteEntityPrivacyPolicy,
428
- };
429
- }
430
- }
431
- class SimpleTestThrowOtherErrorEntity extends Entity_1.Entity {
432
- static defineCompanionDefinition() {
433
- return {
434
- entityClass: SimpleTestThrowOtherErrorEntity,
435
- entityConfiguration: new EntityConfiguration_1.EntityConfiguration({
436
- idField: 'id',
437
- tableName: 'blah_3',
438
- inboundEdges: [],
439
- schema: {
440
- id: new EntityFields_1.UUIDField({
441
- columnName: 'custom_id',
442
- cache: false,
443
- }),
444
- simple_test_id: new EntityFields_1.UUIDField({
445
- columnName: 'simple_test_id',
446
- association: {
447
- associatedEntityClass: SimpleTestDenyUpdateEntity,
448
- associatedEntityLookupByField: 'id',
449
- edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL,
450
- },
451
- }),
452
- },
453
- databaseAdapterFlavor: 'postgres',
454
- cacheAdapterFlavor: 'redis',
455
- }),
456
- privacyPolicyClass: ThrowOtherErrorEntityPrivacyPolicy,
457
- };
458
- }
459
- }
460
- //# sourceMappingURL=EntityPrivacyUtils-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EntityPrivacyUtils-test.js","sourceRoot":"","sources":["../../../../src/utils/__tests__/EntityPrivacyUtils-test.ts"],"names":[],"mappings":"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"}