@expo/entity 0.41.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 (430) hide show
  1. package/build/AuthorizationResultBasedEntityAssociationLoader.d.ts +16 -16
  2. package/build/AuthorizationResultBasedEntityAssociationLoader.js.map +1 -1
  3. package/build/AuthorizationResultBasedEntityLoader.d.ts +39 -67
  4. package/build/AuthorizationResultBasedEntityLoader.js +85 -62
  5. package/build/AuthorizationResultBasedEntityLoader.js.map +1 -1
  6. package/build/AuthorizationResultBasedEntityMutator.d.ts +16 -16
  7. package/build/AuthorizationResultBasedEntityMutator.js.map +1 -1
  8. package/build/ComposedEntityCacheAdapter.d.ts +7 -6
  9. package/build/ComposedEntityCacheAdapter.js +28 -28
  10. package/build/ComposedEntityCacheAdapter.js.map +1 -1
  11. package/build/ComposedSecondaryEntityCache.d.ts +1 -1
  12. package/build/ComposedSecondaryEntityCache.js.map +1 -1
  13. package/build/EnforcingEntityAssociationLoader.d.ts +15 -15
  14. package/build/EnforcingEntityAssociationLoader.js.map +1 -1
  15. package/build/EnforcingEntityCreator.d.ts +2 -2
  16. package/build/EnforcingEntityDeleter.d.ts +2 -2
  17. package/build/EnforcingEntityLoader.d.ts +104 -18
  18. package/build/EnforcingEntityLoader.js +113 -12
  19. package/build/EnforcingEntityLoader.js.map +1 -1
  20. package/build/EnforcingEntityUpdater.d.ts +2 -2
  21. package/build/Entity.d.ts +10 -10
  22. package/build/Entity.js.map +1 -1
  23. package/build/EntityAssociationLoader.d.ts +3 -3
  24. package/build/EntityCompanion.d.ts +5 -5
  25. package/build/EntityCompanion.js.map +1 -1
  26. package/build/EntityCompanionProvider.d.ts +6 -6
  27. package/build/EntityCompanionProvider.js.map +1 -1
  28. package/build/EntityConfiguration.d.ts +46 -5
  29. package/build/EntityConfiguration.js +39 -1
  30. package/build/EntityConfiguration.js.map +1 -1
  31. package/build/EntityCreator.d.ts +4 -4
  32. package/build/EntityDatabaseAdapter.d.ts +15 -14
  33. package/build/EntityDatabaseAdapter.js +20 -12
  34. package/build/EntityDatabaseAdapter.js.map +1 -1
  35. package/build/EntityDeleter.d.ts +4 -4
  36. package/build/EntityFieldDefinition.d.ts +20 -10
  37. package/build/EntityFieldDefinition.js +3 -1
  38. package/build/EntityFieldDefinition.js.map +1 -1
  39. package/build/EntityFields.d.ts +14 -12
  40. package/build/EntityFields.js.map +1 -1
  41. package/build/EntityLoader.d.ts +5 -5
  42. package/build/EntityLoaderFactory.d.ts +3 -3
  43. package/build/EntityLoaderFactory.js.map +1 -1
  44. package/build/EntityLoaderUtils.d.ts +2 -2
  45. package/build/EntityLoaderUtils.js +27 -1
  46. package/build/EntityLoaderUtils.js.map +1 -1
  47. package/build/EntityMutationInfo.d.ts +2 -2
  48. package/build/EntityMutationTriggerConfiguration.d.ts +14 -14
  49. package/build/EntityMutationTriggerConfiguration.js.map +1 -1
  50. package/build/EntityMutationValidator.d.ts +2 -2
  51. package/build/EntityMutatorFactory.d.ts +5 -5
  52. package/build/EntityMutatorFactory.js.map +1 -1
  53. package/build/EntityPrivacyPolicy.d.ts +14 -14
  54. package/build/EntityPrivacyPolicy.js.map +1 -1
  55. package/build/EntitySecondaryCacheLoader.d.ts +4 -4
  56. package/build/EntityUpdater.d.ts +4 -4
  57. package/build/GenericEntityCacheAdapter.d.ts +7 -6
  58. package/build/GenericEntityCacheAdapter.js +13 -14
  59. package/build/GenericEntityCacheAdapter.js.map +1 -1
  60. package/build/GenericSecondaryEntityCache.d.ts +3 -3
  61. package/build/GenericSecondaryEntityCache.js.map +1 -1
  62. package/build/IEntityCacheAdapter.d.ts +17 -16
  63. package/build/IEntityCacheAdapterProvider.d.ts +1 -1
  64. package/build/IEntityDatabaseAdapterProvider.d.ts +1 -1
  65. package/build/IEntityGenericCacher.d.ts +15 -5
  66. package/build/ReadonlyEntity.d.ts +8 -8
  67. package/build/ReadonlyEntity.js.map +1 -1
  68. package/build/ViewerContext.d.ts +1 -1
  69. package/build/ViewerScopedEntityCompanion.d.ts +5 -5
  70. package/build/ViewerScopedEntityCompanionProvider.d.ts +1 -1
  71. package/build/ViewerScopedEntityLoaderFactory.d.ts +3 -3
  72. package/build/ViewerScopedEntityMutatorFactory.d.ts +5 -5
  73. package/build/entityUtils.d.ts +1 -1
  74. package/build/entityUtils.js.map +1 -1
  75. package/build/errors/EntityInvalidFieldValueError.d.ts +2 -2
  76. package/build/errors/EntityNotAuthorizedError.d.ts +1 -1
  77. package/build/errors/EntityNotFoundError.d.ts +2 -2
  78. package/build/index.d.ts +7 -7
  79. package/build/index.js +8 -13
  80. package/build/index.js.map +1 -1
  81. package/build/internal/CompositeFieldHolder.d.ts +48 -0
  82. package/build/internal/CompositeFieldHolder.js +116 -0
  83. package/build/internal/CompositeFieldHolder.js.map +1 -0
  84. package/build/internal/CompositeFieldValueMap.d.ts +15 -0
  85. package/build/internal/CompositeFieldValueMap.js +51 -0
  86. package/build/internal/CompositeFieldValueMap.js.map +1 -0
  87. package/build/internal/EntityDataManager.d.ts +16 -16
  88. package/build/internal/EntityDataManager.js +42 -45
  89. package/build/internal/EntityDataManager.js.map +1 -1
  90. package/build/internal/EntityFieldTransformationUtils.d.ts +5 -5
  91. package/build/internal/EntityFieldTransformationUtils.js.map +1 -1
  92. package/build/internal/EntityLoadInterfaces.d.ts +104 -0
  93. package/build/internal/EntityLoadInterfaces.js +25 -0
  94. package/build/internal/EntityLoadInterfaces.js.map +1 -0
  95. package/build/internal/EntityTableDataCoordinator.d.ts +6 -6
  96. package/build/internal/EntityTableDataCoordinator.js.map +1 -1
  97. package/build/internal/ReadThroughEntityCache.d.ts +17 -16
  98. package/build/internal/ReadThroughEntityCache.js +36 -36
  99. package/build/internal/ReadThroughEntityCache.js.map +1 -1
  100. package/build/internal/SingleFieldHolder.d.ts +34 -0
  101. package/build/internal/SingleFieldHolder.js +90 -0
  102. package/build/internal/SingleFieldHolder.js.map +1 -0
  103. package/build/metrics/EntityMetricsUtils.d.ts +2 -1
  104. package/build/metrics/EntityMetricsUtils.js.map +1 -1
  105. package/build/metrics/IEntityMetricsAdapter.d.ts +5 -0
  106. package/build/metrics/IEntityMetricsAdapter.js.map +1 -1
  107. package/build/rules/AlwaysAllowPrivacyPolicyRule.d.ts +2 -2
  108. package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -1
  109. package/build/rules/AlwaysDenyPrivacyPolicyRule.d.ts +2 -2
  110. package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -1
  111. package/build/rules/AlwaysSkipPrivacyPolicyRule.d.ts +2 -2
  112. package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -1
  113. package/build/rules/PrivacyPolicyRule.d.ts +2 -2
  114. package/build/tsconfig.build.tsbuildinfo +1 -0
  115. package/build/utils/EntityPrivacyUtils.d.ts +4 -4
  116. package/build/utils/EntityPrivacyUtils.js.map +1 -1
  117. package/build/utils/collections/SerializableKeyMap.d.ts +27 -0
  118. package/build/utils/collections/SerializableKeyMap.js +60 -0
  119. package/build/utils/collections/SerializableKeyMap.js.map +1 -0
  120. package/build/utils/collections/maps.js +1 -2
  121. package/build/utils/collections/maps.js.map +1 -1
  122. package/build/utils/collections/sets.d.ts +1 -0
  123. package/build/utils/collections/sets.js +7 -0
  124. package/build/utils/collections/sets.js.map +1 -0
  125. package/build/utils/mergeEntityMutationTriggerConfigurations.d.ts +1 -1
  126. package/package.json +8 -5
  127. package/src/AuthorizationResultBasedEntityAssociationLoader.ts +56 -49
  128. package/src/AuthorizationResultBasedEntityLoader.ts +194 -81
  129. package/src/AuthorizationResultBasedEntityMutator.ts +71 -45
  130. package/src/ComposedEntityCacheAdapter.ts +55 -46
  131. package/src/ComposedSecondaryEntityCache.ts +5 -2
  132. package/src/EnforcingEntityAssociationLoader.ts +52 -44
  133. package/src/EnforcingEntityCreator.ts +5 -5
  134. package/src/EnforcingEntityDeleter.ts +5 -5
  135. package/src/EnforcingEntityLoader.ts +158 -21
  136. package/src/EnforcingEntityUpdater.ts +5 -5
  137. package/src/Entity.ts +39 -39
  138. package/src/EntityAssociationLoader.ts +6 -6
  139. package/src/EntityCompanion.ts +11 -11
  140. package/src/EntityCompanionProvider.ts +21 -18
  141. package/src/EntityConfiguration.ts +123 -9
  142. package/src/EntityCreator.ts +7 -7
  143. package/src/EntityDatabaseAdapter.ts +51 -28
  144. package/src/EntityDeleter.ts +7 -7
  145. package/src/EntityFieldDefinition.ts +32 -12
  146. package/src/EntityFields.ts +49 -12
  147. package/src/EntityLoader.ts +8 -8
  148. package/src/EntityLoaderFactory.ts +8 -8
  149. package/src/EntityLoaderUtils.ts +39 -10
  150. package/src/EntityMutationInfo.ts +6 -6
  151. package/src/EntityMutationTriggerConfiguration.ts +68 -20
  152. package/src/EntityMutationValidator.ts +4 -4
  153. package/src/EntityMutatorFactory.ts +13 -13
  154. package/src/EntityPrivacyPolicy.ts +50 -26
  155. package/src/EntitySecondaryCacheLoader.ts +6 -6
  156. package/src/EntityUpdater.ts +7 -7
  157. package/src/GenericEntityCacheAdapter.ts +39 -28
  158. package/src/GenericSecondaryEntityCache.ts +6 -3
  159. package/src/IEntityCacheAdapter.ts +45 -25
  160. package/src/IEntityCacheAdapterProvider.ts +3 -3
  161. package/src/IEntityDatabaseAdapterProvider.ts +3 -3
  162. package/src/IEntityGenericCacher.ts +33 -5
  163. package/src/ReadonlyEntity.ts +24 -24
  164. package/src/ViewerContext.ts +5 -5
  165. package/src/ViewerScopedEntityCompanion.ts +7 -7
  166. package/src/ViewerScopedEntityCompanionProvider.ts +6 -6
  167. package/src/ViewerScopedEntityLoaderFactory.ts +7 -7
  168. package/src/ViewerScopedEntityMutatorFactory.ts +8 -8
  169. package/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts +4 -4
  170. package/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.ts +14 -13
  171. package/src/__tests__/AuthorizationResultBasedEntityLoader-test.ts +367 -69
  172. package/src/__tests__/ComposedCacheAdapter-test.ts +235 -117
  173. package/src/__tests__/EnforcingEntityLoader-test.ts +135 -1
  174. package/src/__tests__/Entity-test.ts +2 -2
  175. package/src/__tests__/EntityAssociationLoader-test.ts +2 -2
  176. package/src/__tests__/EntityCommonUseCases-test.ts +11 -11
  177. package/src/__tests__/EntityCompanion-test.ts +4 -4
  178. package/src/__tests__/EntityCompanionProvider-test.ts +9 -8
  179. package/src/__tests__/EntityConfiguration-test.ts +85 -6
  180. package/src/__tests__/EntityDatabaseAdapter-test.ts +113 -17
  181. package/src/__tests__/EntityEdges-test.ts +97 -72
  182. package/src/__tests__/EntityFields-test.ts +2 -2
  183. package/src/__tests__/EntityLoader-test.ts +2 -2
  184. package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +11 -11
  185. package/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.ts +73 -0
  186. package/src/__tests__/EntityMutator-test.ts +74 -46
  187. package/src/__tests__/EntityPrivacyPolicy-test.ts +51 -74
  188. package/src/__tests__/EntityQueryContext-test.ts +1 -1
  189. package/src/__tests__/EntitySecondaryCacheLoader-test.ts +3 -3
  190. package/src/__tests__/EntitySelfReferentialEdges-test.ts +64 -39
  191. package/src/__tests__/GenericEntityCacheAdapter-test.ts +83 -28
  192. package/src/__tests__/ReadonlyEntity-test.ts +3 -3
  193. package/src/__tests__/ViewerContext-test.ts +1 -1
  194. package/src/__tests__/ViewerScopedEntityCompanion-test.ts +5 -2
  195. package/src/__tests__/ViewerScopedEntityCompanionProvider-test.ts +1 -1
  196. package/src/__tests__/ViewerScopedEntityMutatorFactory-test.ts +12 -3
  197. package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +12 -12
  198. package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +12 -12
  199. package/src/entityUtils.ts +4 -1
  200. package/src/errors/EntityInvalidFieldValueError.ts +5 -5
  201. package/src/errors/EntityNotAuthorizedError.ts +3 -3
  202. package/src/errors/EntityNotFoundError.ts +5 -5
  203. package/src/index.ts +7 -7
  204. package/src/internal/CompositeFieldHolder.ts +218 -0
  205. package/src/internal/CompositeFieldValueMap.ts +78 -0
  206. package/src/internal/EntityDataManager.ts +107 -96
  207. package/src/internal/EntityFieldTransformationUtils.ts +33 -14
  208. package/src/internal/EntityLoadInterfaces.ts +143 -0
  209. package/src/internal/EntityTableDataCoordinator.ts +8 -5
  210. package/src/internal/ReadThroughEntityCache.ts +63 -50
  211. package/src/internal/SingleFieldHolder.ts +131 -0
  212. package/src/internal/__tests__/CompositeFieldHolder-test.ts +25 -0
  213. package/src/internal/__tests__/CompositeFieldValueMap-test.ts +43 -0
  214. package/src/internal/__tests__/EntityDataManager-test.ts +308 -91
  215. package/src/internal/__tests__/EntityFieldTransformationUtils-test.ts +3 -2
  216. package/src/internal/__tests__/ReadThroughEntityCache-test.ts +315 -107
  217. package/src/metrics/EntityMetricsUtils.ts +7 -2
  218. package/src/metrics/IEntityMetricsAdapter.ts +6 -0
  219. package/src/rules/AlwaysAllowPrivacyPolicyRule.ts +5 -5
  220. package/src/rules/AlwaysDenyPrivacyPolicyRule.ts +5 -5
  221. package/src/rules/AlwaysSkipPrivacyPolicyRule.ts +5 -5
  222. package/src/rules/PrivacyPolicyRule.ts +4 -4
  223. package/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.ts +1 -1
  224. package/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.ts +1 -1
  225. package/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.ts +1 -1
  226. package/src/utils/EntityPrivacyUtils.ts +72 -30
  227. package/src/utils/{testing → __testfixtures__}/PrivacyPolicyRuleTestUtils.ts +26 -26
  228. package/src/{testfixtures → utils/__testfixtures__}/SimpleTestEntity.ts +16 -15
  229. package/src/utils/__testfixtures__/StubCacheAdapter.ts +164 -0
  230. package/src/utils/{testing → __testfixtures__}/StubDatabaseAdapter.ts +19 -12
  231. package/src/utils/{testing → __testfixtures__}/StubDatabaseAdapterProvider.ts +4 -4
  232. package/src/utils/__testfixtures__/TSMockitoExtensions.ts +69 -0
  233. package/src/{testfixtures → utils/__testfixtures__}/TestEntity.ts +21 -15
  234. package/src/{testfixtures → utils/__testfixtures__}/TestEntity2.ts +16 -15
  235. package/src/{testfixtures → utils/__testfixtures__}/TestEntityWithMutationTriggers.ts +23 -22
  236. package/src/{testfixtures → utils/__testfixtures__}/TestViewerContext.ts +1 -1
  237. package/src/utils/{testing → __testfixtures__}/describeFieldTestCase.ts +1 -1
  238. package/src/utils/__tests__/EntityPrivacyUtils-test.ts +62 -66
  239. package/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.ts +29 -25
  240. package/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.ts +1 -1
  241. package/src/utils/collections/SerializableKeyMap.ts +84 -0
  242. package/src/utils/collections/__tests__/SerializableKeyMap-test.ts +119 -0
  243. package/src/utils/collections/__tests__/sets-test.ts +17 -0
  244. package/src/utils/collections/maps.ts +7 -8
  245. package/src/utils/collections/sets.ts +3 -0
  246. package/src/utils/mergeEntityMutationTriggerConfigurations.ts +5 -5
  247. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.d.ts +0 -1
  248. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js +0 -242
  249. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +0 -1
  250. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.d.ts +0 -26
  251. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js +0 -110
  252. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js.map +0 -1
  253. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.d.ts +0 -1
  254. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js +0 -401
  255. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js.map +0 -1
  256. package/build/__tests__/ComposedCacheAdapter-test.d.ts +0 -1
  257. package/build/__tests__/ComposedCacheAdapter-test.js +0 -229
  258. package/build/__tests__/ComposedCacheAdapter-test.js.map +0 -1
  259. package/build/__tests__/ComposedSecondaryEntityCache-test.d.ts +0 -1
  260. package/build/__tests__/ComposedSecondaryEntityCache-test.js +0 -66
  261. package/build/__tests__/ComposedSecondaryEntityCache-test.js.map +0 -1
  262. package/build/__tests__/EnforcingEntityAssociationLoader-test.d.ts +0 -1
  263. package/build/__tests__/EnforcingEntityAssociationLoader-test.js +0 -115
  264. package/build/__tests__/EnforcingEntityAssociationLoader-test.js.map +0 -1
  265. package/build/__tests__/EnforcingEntityLoader-test.d.ts +0 -1
  266. package/build/__tests__/EnforcingEntityLoader-test.js +0 -253
  267. package/build/__tests__/EnforcingEntityLoader-test.js.map +0 -1
  268. package/build/__tests__/Entity-test.d.ts +0 -1
  269. package/build/__tests__/Entity-test.js +0 -94
  270. package/build/__tests__/Entity-test.js.map +0 -1
  271. package/build/__tests__/EntityAssociationLoader-test.d.ts +0 -1
  272. package/build/__tests__/EntityAssociationLoader-test.js +0 -30
  273. package/build/__tests__/EntityAssociationLoader-test.js.map +0 -1
  274. package/build/__tests__/EntityCommonUseCases-test.d.ts +0 -1
  275. package/build/__tests__/EntityCommonUseCases-test.js +0 -146
  276. package/build/__tests__/EntityCommonUseCases-test.js.map +0 -1
  277. package/build/__tests__/EntityCompanion-test.d.ts +0 -1
  278. package/build/__tests__/EntityCompanion-test.js +0 -77
  279. package/build/__tests__/EntityCompanion-test.js.map +0 -1
  280. package/build/__tests__/EntityCompanionProvider-test.d.ts +0 -1
  281. package/build/__tests__/EntityCompanionProvider-test.js +0 -54
  282. package/build/__tests__/EntityCompanionProvider-test.js.map +0 -1
  283. package/build/__tests__/EntityConfiguration-test.d.ts +0 -1
  284. package/build/__tests__/EntityConfiguration-test.js +0 -103
  285. package/build/__tests__/EntityConfiguration-test.js.map +0 -1
  286. package/build/__tests__/EntityDatabaseAdapter-test.d.ts +0 -1
  287. package/build/__tests__/EntityDatabaseAdapter-test.js +0 -146
  288. package/build/__tests__/EntityDatabaseAdapter-test.js.map +0 -1
  289. package/build/__tests__/EntityEdges-test.d.ts +0 -1
  290. package/build/__tests__/EntityEdges-test.js +0 -723
  291. package/build/__tests__/EntityEdges-test.js.map +0 -1
  292. package/build/__tests__/EntityFields-test.d.ts +0 -1
  293. package/build/__tests__/EntityFields-test.js +0 -63
  294. package/build/__tests__/EntityFields-test.js.map +0 -1
  295. package/build/__tests__/EntityLoader-test.d.ts +0 -1
  296. package/build/__tests__/EntityLoader-test.js +0 -36
  297. package/build/__tests__/EntityLoader-test.js.map +0 -1
  298. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.d.ts +0 -1
  299. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js +0 -73
  300. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +0 -1
  301. package/build/__tests__/EntityMutator-test.d.ts +0 -1
  302. package/build/__tests__/EntityMutator-test.js +0 -741
  303. package/build/__tests__/EntityMutator-test.js.map +0 -1
  304. package/build/__tests__/EntityPrivacyPolicy-test.d.ts +0 -1
  305. package/build/__tests__/EntityPrivacyPolicy-test.js +0 -463
  306. package/build/__tests__/EntityPrivacyPolicy-test.js.map +0 -1
  307. package/build/__tests__/EntityQueryContext-test.d.ts +0 -1
  308. package/build/__tests__/EntityQueryContext-test.js +0 -116
  309. package/build/__tests__/EntityQueryContext-test.js.map +0 -1
  310. package/build/__tests__/EntitySecondaryCacheLoader-test.d.ts +0 -1
  311. package/build/__tests__/EntitySecondaryCacheLoader-test.js +0 -60
  312. package/build/__tests__/EntitySecondaryCacheLoader-test.js.map +0 -1
  313. package/build/__tests__/EntitySelfReferentialEdges-test.d.ts +0 -1
  314. package/build/__tests__/EntitySelfReferentialEdges-test.js +0 -201
  315. package/build/__tests__/EntitySelfReferentialEdges-test.js.map +0 -1
  316. package/build/__tests__/GenericEntityCacheAdapter-test.d.ts +0 -1
  317. package/build/__tests__/GenericEntityCacheAdapter-test.js +0 -80
  318. package/build/__tests__/GenericEntityCacheAdapter-test.js.map +0 -1
  319. package/build/__tests__/ReadonlyEntity-test.d.ts +0 -1
  320. package/build/__tests__/ReadonlyEntity-test.js +0 -211
  321. package/build/__tests__/ReadonlyEntity-test.js.map +0 -1
  322. package/build/__tests__/ViewerContext-test.d.ts +0 -1
  323. package/build/__tests__/ViewerContext-test.js +0 -30
  324. package/build/__tests__/ViewerContext-test.js.map +0 -1
  325. package/build/__tests__/ViewerScopedEntityCompanion-test.d.ts +0 -1
  326. package/build/__tests__/ViewerScopedEntityCompanion-test.js +0 -20
  327. package/build/__tests__/ViewerScopedEntityCompanion-test.js.map +0 -1
  328. package/build/__tests__/ViewerScopedEntityCompanionProvider-test.d.ts +0 -1
  329. package/build/__tests__/ViewerScopedEntityCompanionProvider-test.js +0 -20
  330. package/build/__tests__/ViewerScopedEntityCompanionProvider-test.js.map +0 -1
  331. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.d.ts +0 -1
  332. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js +0 -23
  333. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js.map +0 -1
  334. package/build/__tests__/ViewerScopedEntityMutatorFactory-test.d.ts +0 -1
  335. package/build/__tests__/ViewerScopedEntityMutatorFactory-test.js +0 -22
  336. package/build/__tests__/ViewerScopedEntityMutatorFactory-test.js.map +0 -1
  337. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.d.ts +0 -1
  338. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +0 -123
  339. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +0 -1
  340. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.d.ts +0 -1
  341. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +0 -121
  342. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +0 -1
  343. package/build/__tests__/entityUtils-test.d.ts +0 -1
  344. package/build/__tests__/entityUtils-test.js +0 -87
  345. package/build/__tests__/entityUtils-test.js.map +0 -1
  346. package/build/internal/__tests__/EntityDataManager-test.d.ts +0 -1
  347. package/build/internal/__tests__/EntityDataManager-test.js +0 -373
  348. package/build/internal/__tests__/EntityDataManager-test.js.map +0 -1
  349. package/build/internal/__tests__/EntityFieldTransformationUtils-test.d.ts +0 -1
  350. package/build/internal/__tests__/EntityFieldTransformationUtils-test.js +0 -136
  351. package/build/internal/__tests__/EntityFieldTransformationUtils-test.js.map +0 -1
  352. package/build/internal/__tests__/ReadThroughEntityCache-test.d.ts +0 -1
  353. package/build/internal/__tests__/ReadThroughEntityCache-test.js +0 -206
  354. package/build/internal/__tests__/ReadThroughEntityCache-test.js.map +0 -1
  355. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.d.ts +0 -1
  356. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js +0 -21
  357. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js.map +0 -1
  358. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.d.ts +0 -1
  359. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js +0 -21
  360. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js.map +0 -1
  361. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.d.ts +0 -1
  362. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js +0 -21
  363. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js.map +0 -1
  364. package/build/testfixtures/DateIDTestEntity.d.ts +0 -19
  365. package/build/testfixtures/DateIDTestEntity.js +0 -48
  366. package/build/testfixtures/DateIDTestEntity.js.map +0 -1
  367. package/build/testfixtures/SimpleTestEntity.d.ts +0 -20
  368. package/build/testfixtures/SimpleTestEntity.js +0 -48
  369. package/build/testfixtures/SimpleTestEntity.js.map +0 -1
  370. package/build/testfixtures/TestEntity.d.ts +0 -30
  371. package/build/testfixtures/TestEntity.js +0 -93
  372. package/build/testfixtures/TestEntity.js.map +0 -1
  373. package/build/testfixtures/TestEntity2.d.ts +0 -20
  374. package/build/testfixtures/TestEntity2.js +0 -51
  375. package/build/testfixtures/TestEntity2.js.map +0 -1
  376. package/build/testfixtures/TestEntityNumberKey.d.ts +0 -19
  377. package/build/testfixtures/TestEntityNumberKey.js +0 -48
  378. package/build/testfixtures/TestEntityNumberKey.js.map +0 -1
  379. package/build/testfixtures/TestEntityWithMutationTriggers.d.ts +0 -36
  380. package/build/testfixtures/TestEntityWithMutationTriggers.js +0 -82
  381. package/build/testfixtures/TestEntityWithMutationTriggers.js.map +0 -1
  382. package/build/testfixtures/TestViewerContext.d.ts +0 -3
  383. package/build/testfixtures/TestViewerContext.js +0 -10
  384. package/build/testfixtures/TestViewerContext.js.map +0 -1
  385. package/build/utils/__tests__/EntityPrivacyUtils-test.d.ts +0 -1
  386. package/build/utils/__tests__/EntityPrivacyUtils-test.js +0 -486
  387. package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +0 -1
  388. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.d.ts +0 -1
  389. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +0 -178
  390. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js.map +0 -1
  391. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.d.ts +0 -1
  392. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js +0 -26
  393. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js.map +0 -1
  394. package/build/utils/collections/__tests__/maps-test.d.ts +0 -1
  395. package/build/utils/collections/__tests__/maps-test.js +0 -120
  396. package/build/utils/collections/__tests__/maps-test.js.map +0 -1
  397. package/build/utils/testing/PrivacyPolicyRuleTestUtils.d.ts +0 -28
  398. package/build/utils/testing/PrivacyPolicyRuleTestUtils.js +0 -52
  399. package/build/utils/testing/PrivacyPolicyRuleTestUtils.js.map +0 -1
  400. package/build/utils/testing/StubCacheAdapter.d.ts +0 -27
  401. package/build/utils/testing/StubCacheAdapter.js +0 -86
  402. package/build/utils/testing/StubCacheAdapter.js.map +0 -1
  403. package/build/utils/testing/StubDatabaseAdapter.d.ts +0 -25
  404. package/build/utils/testing/StubDatabaseAdapter.js +0 -191
  405. package/build/utils/testing/StubDatabaseAdapter.js.map +0 -1
  406. package/build/utils/testing/StubDatabaseAdapterProvider.d.ts +0 -7
  407. package/build/utils/testing/StubDatabaseAdapterProvider.js +0 -14
  408. package/build/utils/testing/StubDatabaseAdapterProvider.js.map +0 -1
  409. package/build/utils/testing/StubQueryContextProvider.d.ts +0 -7
  410. package/build/utils/testing/StubQueryContextProvider.js +0 -19
  411. package/build/utils/testing/StubQueryContextProvider.js.map +0 -1
  412. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.d.ts +0 -1
  413. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js +0 -42
  414. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js.map +0 -1
  415. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.d.ts +0 -1
  416. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js +0 -402
  417. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js.map +0 -1
  418. package/build/utils/testing/createUnitTestEntityCompanionProvider.d.ts +0 -7
  419. package/build/utils/testing/createUnitTestEntityCompanionProvider.js +0 -36
  420. package/build/utils/testing/createUnitTestEntityCompanionProvider.js.map +0 -1
  421. package/build/utils/testing/describeFieldTestCase.d.ts +0 -2
  422. package/build/utils/testing/describeFieldTestCase.js +0 -18
  423. package/build/utils/testing/describeFieldTestCase.js.map +0 -1
  424. package/src/testfixtures/DateIDTestEntity.ts +0 -59
  425. package/src/testfixtures/TestEntityNumberKey.ts +0 -59
  426. package/src/utils/testing/StubCacheAdapter.ts +0 -122
  427. package/src/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.ts +0 -42
  428. package/src/utils/testing/__tests__/StubDatabaseAdapter-test.ts +0 -548
  429. /package/src/utils/{testing → __testfixtures__}/StubQueryContextProvider.ts +0 -0
  430. /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