@expo/entity 0.38.0 → 0.40.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 (206) hide show
  1. package/build/AuthorizationResultBasedEntityAssociationLoader.d.ts +99 -0
  2. package/build/AuthorizationResultBasedEntityAssociationLoader.js +124 -0
  3. package/build/AuthorizationResultBasedEntityAssociationLoader.js.map +1 -0
  4. package/build/AuthorizationResultBasedEntityLoader.d.ts +1 -1
  5. package/build/AuthorizationResultBasedEntityLoader.js.map +1 -1
  6. package/build/{EntityMutator.d.ts → AuthorizationResultBasedEntityMutator.d.ts} +5 -17
  7. package/build/{EntityMutator.js → AuthorizationResultBasedEntityMutator.js} +22 -48
  8. package/build/AuthorizationResultBasedEntityMutator.js.map +1 -0
  9. package/build/EnforcingEntityAssociationLoader.d.ts +79 -0
  10. package/build/EnforcingEntityAssociationLoader.js +62 -0
  11. package/build/EnforcingEntityAssociationLoader.js.map +1 -0
  12. package/build/EnforcingEntityCreator.d.ts +24 -0
  13. package/build/EnforcingEntityCreator.js +32 -0
  14. package/build/EnforcingEntityCreator.js.map +1 -0
  15. package/build/EnforcingEntityDeleter.d.ts +17 -0
  16. package/build/EnforcingEntityDeleter.js +22 -0
  17. package/build/EnforcingEntityDeleter.js.map +1 -0
  18. package/build/EnforcingEntityUpdater.d.ts +24 -0
  19. package/build/EnforcingEntityUpdater.js +32 -0
  20. package/build/EnforcingEntityUpdater.js.map +1 -0
  21. package/build/Entity.d.ts +8 -12
  22. package/build/Entity.js +9 -34
  23. package/build/Entity.js.map +1 -1
  24. package/build/EntityAssociationLoader.d.ts +12 -91
  25. package/build/EntityAssociationLoader.js +20 -126
  26. package/build/EntityAssociationLoader.js.map +1 -1
  27. package/build/EntityCompanionProvider.d.ts +2 -2
  28. package/build/EntityCompanionProvider.js.map +1 -1
  29. package/build/EntityCreator.d.ts +27 -0
  30. package/build/EntityCreator.js +39 -0
  31. package/build/EntityCreator.js.map +1 -0
  32. package/build/EntityDatabaseAdapter.js +2 -2
  33. package/build/EntityDatabaseAdapter.js.map +1 -1
  34. package/build/EntityDeleter.d.ts +27 -0
  35. package/build/EntityDeleter.js +40 -0
  36. package/build/EntityDeleter.js.map +1 -0
  37. package/build/EntityLoader.d.ts +4 -14
  38. package/build/EntityLoader.js +7 -20
  39. package/build/EntityLoader.js.map +1 -1
  40. package/build/EntityLoaderFactory.d.ts +2 -2
  41. package/build/EntityLoaderFactory.js +4 -2
  42. package/build/EntityLoaderFactory.js.map +1 -1
  43. package/build/EntityMutatorFactory.d.ts +4 -4
  44. package/build/EntityMutatorFactory.js +4 -4
  45. package/build/EntityMutatorFactory.js.map +1 -1
  46. package/build/EntitySecondaryCacheLoader.d.ts +3 -3
  47. package/build/EntitySecondaryCacheLoader.js +1 -3
  48. package/build/EntitySecondaryCacheLoader.js.map +1 -1
  49. package/build/EntityUpdater.d.ts +27 -0
  50. package/build/EntityUpdater.js +40 -0
  51. package/build/EntityUpdater.js.map +1 -0
  52. package/build/ReadonlyEntity.d.ts +2 -2
  53. package/build/ReadonlyEntity.js +4 -6
  54. package/build/ReadonlyEntity.js.map +1 -1
  55. package/build/ViewerScopedEntityLoaderFactory.d.ts +2 -2
  56. package/build/ViewerScopedEntityLoaderFactory.js.map +1 -1
  57. package/build/ViewerScopedEntityMutatorFactory.d.ts +4 -4
  58. package/build/ViewerScopedEntityMutatorFactory.js.map +1 -1
  59. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.d.ts +1 -0
  60. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js +273 -0
  61. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +1 -0
  62. package/build/__tests__/{EntityLoader-constructor-test.js → AuthorizationResultBasedEntityLoader-constructor-test.js} +11 -11
  63. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js.map +1 -0
  64. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.d.ts +1 -0
  65. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js +401 -0
  66. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js.map +1 -0
  67. package/build/__tests__/EnforcingEntityAssociationLoader-test.d.ts +1 -0
  68. package/build/__tests__/EnforcingEntityAssociationLoader-test.js +115 -0
  69. package/build/__tests__/EnforcingEntityAssociationLoader-test.js.map +1 -0
  70. package/build/__tests__/Entity-test.js +23 -5
  71. package/build/__tests__/Entity-test.js.map +1 -1
  72. package/build/__tests__/EntityAssociationLoader-test.js +14 -184
  73. package/build/__tests__/EntityAssociationLoader-test.js.map +1 -1
  74. package/build/__tests__/EntityCommonUseCases-test.js +34 -12
  75. package/build/__tests__/EntityCommonUseCases-test.js.map +1 -1
  76. package/build/__tests__/EntityCompanion-test.js +17 -7
  77. package/build/__tests__/EntityCompanion-test.js.map +1 -1
  78. package/build/__tests__/EntityDatabaseAdapter-test.js.map +1 -1
  79. package/build/__tests__/EntityEdges-test.js +41 -23
  80. package/build/__tests__/EntityEdges-test.js.map +1 -1
  81. package/build/__tests__/EntityLoader-test.js +22 -386
  82. package/build/__tests__/EntityLoader-test.js.map +1 -1
  83. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js +4 -3
  84. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +1 -1
  85. package/build/__tests__/EntityMutator-test.js +67 -70
  86. package/build/__tests__/EntityMutator-test.js.map +1 -1
  87. package/build/__tests__/EntityPrivacyPolicy-test.js +17 -7
  88. package/build/__tests__/EntityPrivacyPolicy-test.js.map +1 -1
  89. package/build/__tests__/EntitySecondaryCacheLoader-test.js +7 -7
  90. package/build/__tests__/EntitySecondaryCacheLoader-test.js.map +1 -1
  91. package/build/__tests__/EntitySelfReferentialEdges-test.js +36 -24
  92. package/build/__tests__/EntitySelfReferentialEdges-test.js.map +1 -1
  93. package/build/__tests__/ReadonlyEntity-test.js +1 -1
  94. package/build/__tests__/ReadonlyEntity-test.js.map +1 -1
  95. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +4 -2
  96. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +1 -1
  97. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +7 -4
  98. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +1 -1
  99. package/build/__tests__/entityUtils-test.js +8 -0
  100. package/build/__tests__/entityUtils-test.js.map +1 -1
  101. package/build/entityUtils.d.ts +7 -0
  102. package/build/entityUtils.js +20 -10
  103. package/build/entityUtils.js.map +1 -1
  104. package/build/errors/EntityCacheAdapterError.js +17 -7
  105. package/build/errors/EntityCacheAdapterError.js.map +1 -1
  106. package/build/errors/EntityDatabaseAdapterError.js +17 -7
  107. package/build/errors/EntityDatabaseAdapterError.js.map +1 -1
  108. package/build/errors/EntityInvalidFieldValueError.js +17 -7
  109. package/build/errors/EntityInvalidFieldValueError.js.map +1 -1
  110. package/build/errors/EntityNotAuthorizedError.js +17 -7
  111. package/build/errors/EntityNotAuthorizedError.js.map +1 -1
  112. package/build/errors/EntityNotFoundError.js +17 -7
  113. package/build/errors/EntityNotFoundError.js.map +1 -1
  114. package/build/index.d.ts +19 -11
  115. package/build/index.js +24 -7
  116. package/build/index.js.map +1 -1
  117. package/build/internal/EntityFieldTransformationUtils.js.map +1 -1
  118. package/build/internal/__tests__/EntityDataManager-test.js +42 -32
  119. package/build/internal/__tests__/EntityDataManager-test.js.map +1 -1
  120. package/build/internal/__tests__/ReadThroughEntityCache-test.js +17 -7
  121. package/build/internal/__tests__/ReadThroughEntityCache-test.js.map +1 -1
  122. package/build/rules/AlwaysAllowPrivacyPolicyRule.js +17 -7
  123. package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -1
  124. package/build/rules/AlwaysDenyPrivacyPolicyRule.js +17 -7
  125. package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -1
  126. package/build/rules/AlwaysSkipPrivacyPolicyRule.js +17 -7
  127. package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -1
  128. package/build/utils/EntityPrivacyUtils.d.ts +32 -4
  129. package/build/utils/EntityPrivacyUtils.js +68 -24
  130. package/build/utils/EntityPrivacyUtils.js.map +1 -1
  131. package/build/utils/__tests__/EntityPrivacyUtils-test.js +148 -23
  132. package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +1 -1
  133. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +8 -5
  134. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js.map +1 -1
  135. package/build/utils/collections/__tests__/maps-test.js +1 -1
  136. package/build/utils/collections/__tests__/maps-test.js.map +1 -1
  137. package/build/utils/collections/maps.js +2 -2
  138. package/build/utils/collections/maps.js.map +1 -1
  139. package/build/utils/mergeEntityMutationTriggerConfigurations.js +1 -2
  140. package/build/utils/mergeEntityMutationTriggerConfigurations.js.map +1 -1
  141. package/build/utils/testing/PrivacyPolicyRuleTestUtils.js +1 -1
  142. package/build/utils/testing/PrivacyPolicyRuleTestUtils.js.map +1 -1
  143. package/build/utils/testing/StubDatabaseAdapter.js +17 -7
  144. package/build/utils/testing/StubDatabaseAdapter.js.map +1 -1
  145. package/build/utils/testing/StubQueryContextProvider.d.ts +1 -3
  146. package/build/utils/testing/StubQueryContextProvider.js +1 -3
  147. package/build/utils/testing/StubQueryContextProvider.js.map +1 -1
  148. package/build/utils/testing/createUnitTestEntityCompanionProvider.js +2 -1
  149. package/build/utils/testing/createUnitTestEntityCompanionProvider.js.map +1 -1
  150. package/build/utils/testing/describeFieldTestCase.js +1 -1
  151. package/build/utils/testing/describeFieldTestCase.js.map +1 -1
  152. package/package.json +19 -3
  153. package/src/AuthorizationResultBasedEntityAssociationLoader.ts +492 -0
  154. package/src/AuthorizationResultBasedEntityLoader.ts +2 -2
  155. package/src/{EntityMutator.ts → AuthorizationResultBasedEntityMutator.ts} +62 -58
  156. package/src/EnforcingEntityAssociationLoader.ts +390 -0
  157. package/src/EnforcingEntityCreator.ts +55 -0
  158. package/src/EnforcingEntityDeleter.ts +44 -0
  159. package/src/EnforcingEntityUpdater.ts +55 -0
  160. package/src/Entity.ts +20 -65
  161. package/src/EntityAssociationLoader.ts +38 -495
  162. package/src/EntityCompanionProvider.ts +5 -2
  163. package/src/EntityCreator.ts +73 -0
  164. package/src/EntityDeleter.ts +73 -0
  165. package/src/EntityLoader.ts +10 -49
  166. package/src/EntityLoaderFactory.ts +20 -3
  167. package/src/EntityMutatorFactory.ts +32 -7
  168. package/src/EntitySecondaryCacheLoader.ts +5 -7
  169. package/src/EntityUpdater.ts +73 -0
  170. package/src/ReadonlyEntity.ts +14 -13
  171. package/src/ViewerScopedEntityLoaderFactory.ts +9 -2
  172. package/src/ViewerScopedEntityMutatorFactory.ts +29 -4
  173. package/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts +354 -0
  174. package/src/__tests__/{EntityLoader-constructor-test.ts → AuthorizationResultBasedEntityLoader-constructor-test.ts} +17 -10
  175. package/src/__tests__/AuthorizationResultBasedEntityLoader-test.ts +730 -0
  176. package/src/__tests__/EnforcingEntityAssociationLoader-test.ts +253 -0
  177. package/src/__tests__/Entity-test.ts +24 -5
  178. package/src/__tests__/EntityAssociationLoader-test.ts +16 -259
  179. package/src/__tests__/EntityCommonUseCases-test.ts +20 -8
  180. package/src/__tests__/EntityCompanion-test.ts +1 -1
  181. package/src/__tests__/EntityDatabaseAdapter-test.ts +6 -6
  182. package/src/__tests__/EntityEdges-test.ts +24 -16
  183. package/src/__tests__/EntityLoader-test.ts +25 -675
  184. package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +4 -3
  185. package/src/__tests__/EntityMutator-test.ts +116 -103
  186. package/src/__tests__/EntitySecondaryCacheLoader-test.ts +7 -7
  187. package/src/__tests__/EntitySelfReferentialEdges-test.ts +36 -24
  188. package/src/__tests__/ReadonlyEntity-test.ts +1 -1
  189. package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +4 -2
  190. package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +7 -4
  191. package/src/__tests__/entityUtils-test.ts +12 -0
  192. package/src/entityUtils.ts +24 -9
  193. package/src/index.ts +19 -11
  194. package/src/internal/EntityFieldTransformationUtils.ts +2 -2
  195. package/src/internal/__tests__/EntityDataManager-test.ts +29 -29
  196. package/src/utils/EntityPrivacyUtils.ts +188 -107
  197. package/src/utils/__tests__/EntityPrivacyUtils-test.ts +169 -29
  198. package/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.ts +8 -5
  199. package/src/utils/collections/__tests__/maps-test.ts +1 -1
  200. package/src/utils/testing/PrivacyPolicyRuleTestUtils.ts +1 -1
  201. package/src/utils/testing/StubDatabaseAdapter.ts +1 -1
  202. package/src/utils/testing/StubQueryContextProvider.ts +1 -3
  203. package/src/utils/testing/createUnitTestEntityCompanionProvider.ts +3 -1
  204. package/build/EntityMutator.js.map +0 -1
  205. package/build/__tests__/EntityLoader-constructor-test.js.map +0 -1
  206. /package/build/__tests__/{EntityLoader-constructor-test.d.ts → AuthorizationResultBasedEntityLoader-constructor-test.d.ts} +0 -0
@@ -5,10 +5,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.TestEntityPrivacyPolicy = exports.testEntityConfiguration = void 0;
7
7
  const ts_mockito_1 = require("ts-mockito");
8
+ const AuthorizationResultBasedEntityLoader_1 = __importDefault(require("../AuthorizationResultBasedEntityLoader"));
8
9
  const Entity_1 = __importDefault(require("../Entity"));
9
10
  const EntityConfiguration_1 = __importDefault(require("../EntityConfiguration"));
10
11
  const EntityFields_1 = require("../EntityFields");
11
- const EntityLoader_1 = __importDefault(require("../EntityLoader"));
12
+ const EntityLoaderUtils_1 = __importDefault(require("../EntityLoaderUtils"));
12
13
  const EntityPrivacyPolicy_1 = __importDefault(require("../EntityPrivacyPolicy"));
13
14
  const ViewerContext_1 = __importDefault(require("../ViewerContext"));
14
15
  const EntityDataManager_1 = __importDefault(require("../internal/EntityDataManager"));
@@ -48,7 +49,7 @@ const ID_SENTINEL_THROW_ERROR = 'throw_error';
48
49
  class TestEntity extends Entity_1.default {
49
50
  constructor(constructorParams) {
50
51
  if (constructorParams.selectedFields.id === ID_SENTINEL_THROW_LITERAL) {
51
- // eslint-disable-next-line no-throw-literal,@typescript-eslint/no-throw-literal
52
+ // eslint-disable-next-line no-throw-literal,@typescript-eslint/only-throw-error
52
53
  throw 'hello';
53
54
  }
54
55
  else if (constructorParams.selectedFields.id === ID_SENTINEL_THROW_ERROR) {
@@ -65,12 +66,12 @@ class TestEntity extends Entity_1.default {
65
66
  }
66
67
  }
67
68
  exports.default = TestEntity;
68
- describe(EntityLoader_1.default, () => {
69
+ describe(AuthorizationResultBasedEntityLoader_1.default, () => {
69
70
  it('handles thrown errors and literals from constructor', async () => {
70
71
  const viewerContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(ViewerContext_1.default));
71
72
  const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
72
73
  const metricsAdapter = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
73
- const queryContext = StubQueryContextProvider_1.default.getQueryContext();
74
+ const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
74
75
  const databaseAdapter = new StubDatabaseAdapter_1.default(exports.testEntityConfiguration, StubDatabaseAdapter_1.default.convertFieldObjectsToDataStore(exports.testEntityConfiguration, new Map([
75
76
  [
76
77
  exports.testEntityConfiguration.tableName,
@@ -88,23 +89,22 @@ describe(EntityLoader_1.default, () => {
88
89
  const cacheAdapterProvider = new StubCacheAdapter_1.NoCacheStubCacheAdapterProvider();
89
90
  const cacheAdapter = cacheAdapterProvider.getCacheAdapter(exports.testEntityConfiguration);
90
91
  const entityCache = new ReadThroughEntityCache_1.default(exports.testEntityConfiguration, cacheAdapter);
91
- const dataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, StubQueryContextProvider_1.default, metricsAdapter, TestEntity.name);
92
- const entityLoader = new EntityLoader_1.default(viewerContext, queryContext, privacyPolicyEvaluationContext, exports.testEntityConfiguration, TestEntity,
92
+ const dataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), metricsAdapter, TestEntity.name);
93
+ const utils = new EntityLoaderUtils_1.default(viewerContext, queryContext, privacyPolicyEvaluationContext, exports.testEntityConfiguration, TestEntity,
93
94
  /* entitySelectedFields */ undefined, privacyPolicy, dataManager, metricsAdapter);
95
+ const entityLoader = new AuthorizationResultBasedEntityLoader_1.default(queryContext, exports.testEntityConfiguration, TestEntity, dataManager, metricsAdapter, utils);
94
96
  let capturedThrownThing1;
95
97
  try {
96
- await entityLoader.withAuthorizationResults().loadByIDAsync(ID_SENTINEL_THROW_LITERAL);
98
+ await entityLoader.loadByIDAsync(ID_SENTINEL_THROW_LITERAL);
97
99
  }
98
100
  catch (e) {
99
101
  capturedThrownThing1 = e;
100
102
  }
101
103
  expect(capturedThrownThing1).not.toBeInstanceOf(Error);
102
104
  expect(capturedThrownThing1).toEqual('hello');
103
- const result = await entityLoader
104
- .withAuthorizationResults()
105
- .loadByIDAsync(ID_SENTINEL_THROW_ERROR);
105
+ const result = await entityLoader.loadByIDAsync(ID_SENTINEL_THROW_ERROR);
106
106
  expect(result.ok).toBe(false);
107
107
  expect(result.enforceError().message).toEqual('world');
108
108
  });
109
109
  });
110
- //# sourceMappingURL=EntityLoader-constructor-test.js.map
110
+ //# sourceMappingURL=AuthorizationResultBasedEntityLoader-constructor-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthorizationResultBasedEntityLoader-constructor-test.js","sourceRoot":"","sources":["../../src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,401 @@
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 EntityDatabaseAdapter_1 = require("../EntityDatabaseAdapter");
44
+ const EntityLoaderUtils_1 = __importDefault(require("../EntityLoaderUtils"));
45
+ const ViewerContext_1 = __importDefault(require("../ViewerContext"));
46
+ const entityUtils_1 = require("../entityUtils");
47
+ const EntityNotFoundError_1 = __importDefault(require("../errors/EntityNotFoundError"));
48
+ const EntityDataManager_1 = __importDefault(require("../internal/EntityDataManager"));
49
+ const ReadThroughEntityCache_1 = __importDefault(require("../internal/ReadThroughEntityCache"));
50
+ const TestEntity_1 = __importStar(require("../testfixtures/TestEntity"));
51
+ const StubCacheAdapter_1 = require("../utils/testing/StubCacheAdapter");
52
+ const StubDatabaseAdapter_1 = __importDefault(require("../utils/testing/StubDatabaseAdapter"));
53
+ const StubQueryContextProvider_1 = __importDefault(require("../utils/testing/StubQueryContextProvider"));
54
+ describe(AuthorizationResultBasedEntityLoader_1.default, () => {
55
+ it('loads entities', async () => {
56
+ const dateToInsert = new Date();
57
+ const viewerContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(ViewerContext_1.default));
58
+ const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
59
+ const metricsAdapter = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
60
+ const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
61
+ const id1 = (0, uuid_1.v4)();
62
+ const id2 = (0, uuid_1.v4)();
63
+ const databaseAdapter = new StubDatabaseAdapter_1.default(TestEntity_1.testEntityConfiguration, StubDatabaseAdapter_1.default.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, new Map([
64
+ [
65
+ TestEntity_1.testEntityConfiguration.tableName,
66
+ [
67
+ {
68
+ customIdField: id1,
69
+ testIndexedField: 'h1',
70
+ intField: 5,
71
+ stringField: 'huh',
72
+ dateField: dateToInsert,
73
+ nullableField: null,
74
+ },
75
+ {
76
+ customIdField: id2,
77
+ testIndexedField: 'h2',
78
+ intField: 3,
79
+ stringField: 'huh',
80
+ dateField: dateToInsert,
81
+ nullableField: null,
82
+ },
83
+ ],
84
+ ],
85
+ ])));
86
+ const privacyPolicy = new TestEntity_1.TestEntityPrivacyPolicy();
87
+ const cacheAdapterProvider = new StubCacheAdapter_1.NoCacheStubCacheAdapterProvider();
88
+ const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
89
+ const entityCache = new ReadThroughEntityCache_1.default(TestEntity_1.testEntityConfiguration, cacheAdapter);
90
+ const dataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)()), TestEntity_1.default.name);
91
+ const utils = new EntityLoaderUtils_1.default(viewerContext, queryContext, privacyPolicyEvaluationContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default,
92
+ /* entitySelectedFields */ undefined, privacyPolicy, dataManager, metricsAdapter);
93
+ const entityLoader = new AuthorizationResultBasedEntityLoader_1.default(queryContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default, dataManager, metricsAdapter, utils);
94
+ const entity = await (0, results_1.enforceAsyncResult)(entityLoader.loadByIDAsync(id1));
95
+ expect(entity.getID()).toEqual(id1);
96
+ expect(entity.getField('dateField')).toEqual(dateToInsert);
97
+ const entities = await (0, entityUtils_1.enforceResultsAsync)(entityLoader.loadManyByFieldEqualingAsync('stringField', 'huh'));
98
+ expect(entities.map((m) => m.getID())).toEqual([id1, id2]);
99
+ const entityResultNumber3 = await entityLoader.loadByFieldEqualingAsync('intField', 3);
100
+ expect(entityResultNumber3).not.toBeNull();
101
+ expect(entityResultNumber3.enforceValue().getID()).toEqual(id2);
102
+ const entityResultNumber4 = await entityLoader.loadByFieldEqualingAsync('intField', 4);
103
+ expect(entityResultNumber4).toBeNull();
104
+ const entityResultDuplicateValues = await entityLoader.loadManyByFieldEqualingManyAsync('stringField', ['huh', 'huh']);
105
+ expect(entityResultDuplicateValues.size).toBe(1);
106
+ expect(entityResultDuplicateValues.get('huh')?.map((m) => m.enforceValue().getID())).toEqual([
107
+ id1,
108
+ id2,
109
+ ]);
110
+ await expect(entityLoader.loadByFieldEqualingAsync('stringField', 'huh')).rejects.toThrowError('loadByFieldEqualing: Multiple entities of type TestEntity found for stringField=huh');
111
+ await expect(entityLoader.loadByIDNullableAsync((0, uuid_1.v4)())).resolves.toBeNull();
112
+ await expect(entityLoader.loadByIDNullableAsync(id1)).resolves.not.toBeNull();
113
+ const nonExistentId = (0, uuid_1.v4)();
114
+ const manyIdResults = await entityLoader.loadManyByIDsNullableAsync([nonExistentId, id1]);
115
+ expect(manyIdResults.get(nonExistentId)).toBeNull();
116
+ expect(manyIdResults.get(id1)).not.toBeNull();
117
+ await expect((0, results_1.enforceAsyncResult)(entityLoader.loadByIDAsync(nonExistentId))).rejects.toThrow(EntityNotFoundError_1.default);
118
+ await expect(entityLoader.loadByIDAsync('not-a-uuid')).rejects.toThrowError('Entity field not valid: TestEntity (customIdField = not-a-uuid)');
119
+ });
120
+ it('loads entities with loadManyByFieldEqualityConjunction', async () => {
121
+ const privacyPolicy = new TestEntity_1.TestEntityPrivacyPolicy();
122
+ const spiedPrivacyPolicy = (0, ts_mockito_1.spy)(privacyPolicy);
123
+ const viewerContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(ViewerContext_1.default));
124
+ const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
125
+ const metricsAdapter = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
126
+ const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
127
+ const id1 = (0, uuid_1.v4)();
128
+ const id2 = (0, uuid_1.v4)();
129
+ const id3 = (0, uuid_1.v4)();
130
+ const databaseAdapter = new StubDatabaseAdapter_1.default(TestEntity_1.testEntityConfiguration, StubDatabaseAdapter_1.default.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, new Map([
131
+ [
132
+ TestEntity_1.testEntityConfiguration.tableName,
133
+ [
134
+ {
135
+ customIdField: id1,
136
+ stringField: 'huh',
137
+ intField: 4,
138
+ testIndexedField: '4',
139
+ dateField: new Date(),
140
+ nullableField: null,
141
+ },
142
+ {
143
+ customIdField: id2,
144
+ stringField: 'huh',
145
+ intField: 4,
146
+ testIndexedField: '5',
147
+ dateField: new Date(),
148
+ nullableField: null,
149
+ },
150
+ {
151
+ customIdField: id3,
152
+ stringField: 'huh2',
153
+ intField: 4,
154
+ testIndexedField: '6',
155
+ dateField: new Date(),
156
+ nullableField: null,
157
+ },
158
+ ],
159
+ ],
160
+ ])));
161
+ const cacheAdapterProvider = new StubCacheAdapter_1.NoCacheStubCacheAdapterProvider();
162
+ const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
163
+ const entityCache = new ReadThroughEntityCache_1.default(TestEntity_1.testEntityConfiguration, cacheAdapter);
164
+ const dataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)()), TestEntity_1.default.name);
165
+ const utils = new EntityLoaderUtils_1.default(viewerContext, queryContext, privacyPolicyEvaluationContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default,
166
+ /* entitySelectedFields */ undefined, privacyPolicy, dataManager, metricsAdapter);
167
+ const entityLoader = new AuthorizationResultBasedEntityLoader_1.default(queryContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default, dataManager, metricsAdapter, utils);
168
+ const entityResults = await (0, entityUtils_1.enforceResultsAsync)(entityLoader.loadManyByFieldEqualityConjunctionAsync([
169
+ {
170
+ fieldName: 'stringField',
171
+ fieldValue: 'huh',
172
+ },
173
+ {
174
+ fieldName: 'intField',
175
+ fieldValues: [4],
176
+ },
177
+ ]));
178
+ expect(entityResults).toHaveLength(2);
179
+ (0, ts_mockito_1.verify)(spiedPrivacyPolicy.authorizeReadAsync(viewerContext, queryContext, privacyPolicyEvaluationContext, (0, ts_mockito_1.anyOfClass)(TestEntity_1.default), (0, ts_mockito_1.anything)())).twice();
180
+ await expect(entityLoader.loadManyByFieldEqualityConjunctionAsync([
181
+ { fieldName: 'customIdField', fieldValue: 'not-a-uuid' },
182
+ ])).rejects.toThrowError('Entity field not valid: TestEntity (customIdField = not-a-uuid)');
183
+ });
184
+ it('loads entities with loadFirstByFieldEqualityConjunction', async () => {
185
+ const privacyPolicy = new TestEntity_1.TestEntityPrivacyPolicy();
186
+ const spiedPrivacyPolicy = (0, ts_mockito_1.spy)(privacyPolicy);
187
+ const viewerContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(ViewerContext_1.default));
188
+ const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
189
+ const metricsAdapter = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
190
+ const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
191
+ const id1 = (0, uuid_1.v4)();
192
+ const id2 = (0, uuid_1.v4)();
193
+ const id3 = (0, uuid_1.v4)();
194
+ const databaseAdapter = new StubDatabaseAdapter_1.default(TestEntity_1.testEntityConfiguration, StubDatabaseAdapter_1.default.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, new Map([
195
+ [
196
+ TestEntity_1.testEntityConfiguration.tableName,
197
+ [
198
+ {
199
+ customIdField: id1,
200
+ stringField: 'huh',
201
+ intField: 4,
202
+ testIndexedField: '4',
203
+ dateField: new Date(),
204
+ nullableField: null,
205
+ },
206
+ {
207
+ customIdField: id2,
208
+ stringField: 'huh',
209
+ intField: 4,
210
+ testIndexedField: '5',
211
+ dateField: new Date(),
212
+ nullableField: null,
213
+ },
214
+ {
215
+ customIdField: id3,
216
+ stringField: 'huh2',
217
+ intField: 4,
218
+ testIndexedField: '6',
219
+ dateField: new Date(),
220
+ nullableField: null,
221
+ },
222
+ ],
223
+ ],
224
+ ])));
225
+ const cacheAdapterProvider = new StubCacheAdapter_1.NoCacheStubCacheAdapterProvider();
226
+ const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
227
+ const entityCache = new ReadThroughEntityCache_1.default(TestEntity_1.testEntityConfiguration, cacheAdapter);
228
+ const dataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)()), TestEntity_1.default.name);
229
+ const utils = new EntityLoaderUtils_1.default(viewerContext, queryContext, privacyPolicyEvaluationContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default,
230
+ /* entitySelectedFields */ undefined, privacyPolicy, dataManager, metricsAdapter);
231
+ const entityLoader = new AuthorizationResultBasedEntityLoader_1.default(queryContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default, dataManager, metricsAdapter, utils);
232
+ const result = await entityLoader.loadFirstByFieldEqualityConjunctionAsync([
233
+ {
234
+ fieldName: 'stringField',
235
+ fieldValue: 'huh',
236
+ },
237
+ {
238
+ fieldName: 'intField',
239
+ fieldValue: 4,
240
+ },
241
+ ], { orderBy: [{ fieldName: 'testIndexedField', order: EntityDatabaseAdapter_1.OrderByOrdering.DESCENDING }] });
242
+ expect(result).not.toBeNull();
243
+ expect(result.ok).toBe(true);
244
+ expect(result.enforceValue().getField('testIndexedField')).toEqual('5');
245
+ (0, ts_mockito_1.verify)(spiedPrivacyPolicy.authorizeReadAsync(viewerContext, queryContext, privacyPolicyEvaluationContext, (0, ts_mockito_1.anyOfClass)(TestEntity_1.default), (0, ts_mockito_1.anything)())).once();
246
+ });
247
+ it('loads entities with loadManyByRawWhereClauseAsync', async () => {
248
+ const privacyPolicy = new TestEntity_1.TestEntityPrivacyPolicy();
249
+ const spiedPrivacyPolicy = (0, ts_mockito_1.spy)(privacyPolicy);
250
+ const viewerContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(ViewerContext_1.default));
251
+ const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
252
+ const metricsAdapter = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
253
+ const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
254
+ const dataManagerMock = (0, ts_mockito_1.mock)(EntityDataManager_1.default);
255
+ (0, ts_mockito_1.when)(dataManagerMock.loadManyByRawWhereClauseAsync(queryContext, (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)())).thenResolve([
256
+ {
257
+ customIdField: 'id',
258
+ stringField: 'huh',
259
+ intField: 4,
260
+ testIndexedField: '4',
261
+ dateField: new Date(),
262
+ nullableField: null,
263
+ },
264
+ ]);
265
+ const dataManager = (0, ts_mockito_1.instance)(dataManagerMock);
266
+ const utils = new EntityLoaderUtils_1.default(viewerContext, queryContext, privacyPolicyEvaluationContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default,
267
+ /* entitySelectedFields */ undefined, privacyPolicy, dataManager, metricsAdapter);
268
+ const entityLoader = new AuthorizationResultBasedEntityLoader_1.default(queryContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default, dataManager, metricsAdapter, utils);
269
+ const result = await entityLoader.loadManyByRawWhereClauseAsync('id = ?', [1], {
270
+ orderBy: [{ fieldName: 'testIndexedField', order: EntityDatabaseAdapter_1.OrderByOrdering.DESCENDING }],
271
+ });
272
+ expect(result).toHaveLength(1);
273
+ expect(result[0]).not.toBeNull();
274
+ expect(result[0].ok).toBe(true);
275
+ expect(result[0].enforceValue().getField('testIndexedField')).toEqual('4');
276
+ (0, ts_mockito_1.verify)(spiedPrivacyPolicy.authorizeReadAsync(viewerContext, queryContext, privacyPolicyEvaluationContext, (0, ts_mockito_1.anyOfClass)(TestEntity_1.default), (0, ts_mockito_1.anything)())).once();
277
+ });
278
+ it('authorizes loaded entities', async () => {
279
+ const privacyPolicy = new TestEntity_1.TestEntityPrivacyPolicy();
280
+ const spiedPrivacyPolicy = (0, ts_mockito_1.spy)(privacyPolicy);
281
+ const viewerContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(ViewerContext_1.default));
282
+ const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
283
+ const metricsAdapter = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
284
+ const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
285
+ const id1 = (0, uuid_1.v4)();
286
+ const databaseAdapter = new StubDatabaseAdapter_1.default(TestEntity_1.testEntityConfiguration, StubDatabaseAdapter_1.default.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, new Map([
287
+ [
288
+ TestEntity_1.testEntityConfiguration.tableName,
289
+ [
290
+ {
291
+ customIdField: id1,
292
+ stringField: 'huh',
293
+ testIndexedField: '1',
294
+ intField: 3,
295
+ dateField: new Date(),
296
+ nullableField: null,
297
+ },
298
+ ],
299
+ ],
300
+ ])));
301
+ const cacheAdapterProvider = new StubCacheAdapter_1.NoCacheStubCacheAdapterProvider();
302
+ const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
303
+ const entityCache = new ReadThroughEntityCache_1.default(TestEntity_1.testEntityConfiguration, cacheAdapter);
304
+ const dataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)()), TestEntity_1.default.name);
305
+ const utils = new EntityLoaderUtils_1.default(viewerContext, queryContext, privacyPolicyEvaluationContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default,
306
+ /* entitySelectedFields */ undefined, privacyPolicy, dataManager, metricsAdapter);
307
+ const entityLoader = new AuthorizationResultBasedEntityLoader_1.default(queryContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default, dataManager, metricsAdapter, utils);
308
+ const entity = await (0, results_1.enforceAsyncResult)(entityLoader.loadByIDAsync(id1));
309
+ (0, ts_mockito_1.verify)(spiedPrivacyPolicy.authorizeReadAsync(viewerContext, queryContext, privacyPolicyEvaluationContext, entity, (0, ts_mockito_1.anything)())).once();
310
+ });
311
+ it('invalidates upon invalidate one', async () => {
312
+ const viewerContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(ViewerContext_1.default));
313
+ const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
314
+ const metricsAdapter = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
315
+ const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
316
+ const privacyPolicy = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(TestEntity_1.TestEntityPrivacyPolicy));
317
+ const dataManagerMock = (0, ts_mockito_1.mock)();
318
+ const dataManagerInstance = (0, ts_mockito_1.instance)(dataManagerMock);
319
+ const id1 = (0, uuid_1.v4)();
320
+ const utils = new EntityLoaderUtils_1.default(viewerContext, queryContext, privacyPolicyEvaluationContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default,
321
+ /* entitySelectedFields */ undefined, privacyPolicy, dataManagerInstance, metricsAdapter);
322
+ const entityLoader = new AuthorizationResultBasedEntityLoader_1.default(queryContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default, dataManagerInstance, metricsAdapter, utils);
323
+ await entityLoader.utils.invalidateFieldsAsync({ customIdField: id1 });
324
+ (0, ts_mockito_1.verify)(dataManagerMock.invalidateObjectFieldsAsync((0, ts_mockito_1.deepEqual)({ customIdField: id1 }))).once();
325
+ });
326
+ it('invalidates upon invalidate by field', async () => {
327
+ const viewerContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(ViewerContext_1.default));
328
+ const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
329
+ const metricsAdapter = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
330
+ const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
331
+ const privacyPolicy = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(TestEntity_1.TestEntityPrivacyPolicy));
332
+ const dataManagerMock = (0, ts_mockito_1.mock)();
333
+ const dataManagerInstance = (0, ts_mockito_1.instance)(dataManagerMock);
334
+ const id1 = (0, uuid_1.v4)();
335
+ const utils = new EntityLoaderUtils_1.default(viewerContext, queryContext, privacyPolicyEvaluationContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default,
336
+ /* entitySelectedFields */ undefined, privacyPolicy, dataManagerInstance, metricsAdapter);
337
+ const entityLoader = new AuthorizationResultBasedEntityLoader_1.default(queryContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default, dataManagerInstance, metricsAdapter, utils);
338
+ await entityLoader.utils.invalidateFieldsAsync({ customIdField: id1 });
339
+ (0, ts_mockito_1.verify)(dataManagerMock.invalidateObjectFieldsAsync((0, ts_mockito_1.deepEqual)({ customIdField: id1 }))).once();
340
+ });
341
+ it('invalidates upon invalidate by entity', async () => {
342
+ const viewerContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(ViewerContext_1.default));
343
+ const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
344
+ const metricsAdapter = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
345
+ const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
346
+ const privacyPolicy = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(TestEntity_1.TestEntityPrivacyPolicy));
347
+ const dataManagerMock = (0, ts_mockito_1.mock)();
348
+ const dataManagerInstance = (0, ts_mockito_1.instance)(dataManagerMock);
349
+ const id1 = (0, uuid_1.v4)();
350
+ const entityMock = (0, ts_mockito_1.mock)(TestEntity_1.default);
351
+ (0, ts_mockito_1.when)(entityMock.getAllDatabaseFields()).thenReturn({ customIdField: id1 });
352
+ const entityInstance = (0, ts_mockito_1.instance)(entityMock);
353
+ const utils = new EntityLoaderUtils_1.default(viewerContext, queryContext, privacyPolicyEvaluationContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default,
354
+ /* entitySelectedFields */ undefined, privacyPolicy, dataManagerInstance, metricsAdapter);
355
+ const entityLoader = new AuthorizationResultBasedEntityLoader_1.default(queryContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default, dataManagerInstance, metricsAdapter, utils);
356
+ await entityLoader.utils.invalidateEntityAsync(entityInstance);
357
+ (0, ts_mockito_1.verify)(dataManagerMock.invalidateObjectFieldsAsync((0, ts_mockito_1.deepEqual)({ customIdField: id1 }))).once();
358
+ });
359
+ it('returns error result when not allowed', async () => {
360
+ const viewerContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(ViewerContext_1.default));
361
+ const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
362
+ const metricsAdapter = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
363
+ const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
364
+ const privacyPolicyMock = (0, ts_mockito_1.mock)(TestEntity_1.TestEntityPrivacyPolicy);
365
+ const dataManagerMock = (0, ts_mockito_1.mock)();
366
+ const id1 = (0, uuid_1.v4)();
367
+ (0, ts_mockito_1.when)(dataManagerMock.loadManyByFieldEqualingAsync((0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)())).thenResolve(new Map().set(id1, [{ customIdField: id1 }]));
368
+ const rejectionError = new Error();
369
+ (0, ts_mockito_1.when)(privacyPolicyMock.authorizeReadAsync(viewerContext, queryContext, privacyPolicyEvaluationContext, (0, ts_mockito_1.anyOfClass)(TestEntity_1.default), (0, ts_mockito_1.anything)())).thenReject(rejectionError);
370
+ const privacyPolicy = (0, ts_mockito_1.instance)(privacyPolicyMock);
371
+ const dataManagerInstance = (0, ts_mockito_1.instance)(dataManagerMock);
372
+ const utils = new EntityLoaderUtils_1.default(viewerContext, queryContext, privacyPolicyEvaluationContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default,
373
+ /* entitySelectedFields */ undefined, privacyPolicy, dataManagerInstance, metricsAdapter);
374
+ const entityLoader = new AuthorizationResultBasedEntityLoader_1.default(queryContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default, dataManagerInstance, metricsAdapter, utils);
375
+ const entityResult = await entityLoader.loadByIDAsync(id1);
376
+ expect(entityResult.ok).toBe(false);
377
+ expect(entityResult.reason).toEqual(rejectionError);
378
+ expect(entityResult.value).toBe(undefined);
379
+ });
380
+ it('throws upon database adapter error', async () => {
381
+ const viewerContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(ViewerContext_1.default));
382
+ const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
383
+ const metricsAdapter = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
384
+ const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
385
+ const privacyPolicy = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(TestEntity_1.TestEntityPrivacyPolicy));
386
+ const dataManagerMock = (0, ts_mockito_1.mock)();
387
+ const error = new Error();
388
+ (0, ts_mockito_1.when)(dataManagerMock.loadManyByFieldEqualingAsync((0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)())).thenReject(error);
389
+ const dataManagerInstance = (0, ts_mockito_1.instance)(dataManagerMock);
390
+ const utils = new EntityLoaderUtils_1.default(viewerContext, queryContext, privacyPolicyEvaluationContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default,
391
+ /* entitySelectedFields */ undefined, privacyPolicy, dataManagerInstance, metricsAdapter);
392
+ const entityLoader = new AuthorizationResultBasedEntityLoader_1.default(queryContext, TestEntity_1.testEntityConfiguration, TestEntity_1.default, dataManagerInstance, metricsAdapter, utils);
393
+ const loadByValue = (0, uuid_1.v4)();
394
+ await expect(entityLoader.loadByIDAsync(loadByValue)).rejects.toEqual(error);
395
+ await expect(entityLoader.loadManyByIDsAsync([loadByValue])).rejects.toEqual(error);
396
+ await expect(entityLoader.loadManyByIDsNullableAsync([loadByValue])).rejects.toEqual(error);
397
+ await expect(entityLoader.loadManyByFieldEqualingAsync('customIdField', loadByValue)).rejects.toEqual(error);
398
+ await expect(entityLoader.loadManyByFieldEqualingManyAsync('customIdField', [loadByValue])).rejects.toEqual(error);
399
+ });
400
+ });
401
+ //# sourceMappingURL=AuthorizationResultBasedEntityLoader-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthorizationResultBasedEntityLoader-test.js","sourceRoot":"","sources":["../../src/__tests__/AuthorizationResultBasedEntityLoader-test.ts"],"names":[],"mappings":"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"}