@expo/entity 0.40.0 → 0.42.0

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