@expo/entity 0.34.0 → 0.36.0

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