@expo/entity 0.39.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.
- package/build/AuthorizationResultBasedEntityAssociationLoader.d.ts +99 -0
- package/build/AuthorizationResultBasedEntityAssociationLoader.js +124 -0
- package/build/AuthorizationResultBasedEntityAssociationLoader.js.map +1 -0
- package/build/AuthorizationResultBasedEntityLoader.d.ts +1 -1
- package/build/AuthorizationResultBasedEntityLoader.js.map +1 -1
- package/build/{EntityMutator.d.ts → AuthorizationResultBasedEntityMutator.d.ts} +5 -17
- package/build/{EntityMutator.js → AuthorizationResultBasedEntityMutator.js} +22 -48
- package/build/AuthorizationResultBasedEntityMutator.js.map +1 -0
- package/build/EnforcingEntityAssociationLoader.d.ts +79 -0
- package/build/EnforcingEntityAssociationLoader.js +62 -0
- package/build/EnforcingEntityAssociationLoader.js.map +1 -0
- package/build/EnforcingEntityCreator.d.ts +24 -0
- package/build/EnforcingEntityCreator.js +32 -0
- package/build/EnforcingEntityCreator.js.map +1 -0
- package/build/EnforcingEntityDeleter.d.ts +17 -0
- package/build/EnforcingEntityDeleter.js +22 -0
- package/build/EnforcingEntityDeleter.js.map +1 -0
- package/build/EnforcingEntityUpdater.d.ts +24 -0
- package/build/EnforcingEntityUpdater.js +32 -0
- package/build/EnforcingEntityUpdater.js.map +1 -0
- package/build/Entity.d.ts +8 -12
- package/build/Entity.js +9 -34
- package/build/Entity.js.map +1 -1
- package/build/EntityAssociationLoader.d.ts +12 -91
- package/build/EntityAssociationLoader.js +20 -126
- package/build/EntityAssociationLoader.js.map +1 -1
- package/build/EntityCreator.d.ts +27 -0
- package/build/EntityCreator.js +39 -0
- package/build/EntityCreator.js.map +1 -0
- package/build/EntityDeleter.d.ts +27 -0
- package/build/EntityDeleter.js +40 -0
- package/build/EntityDeleter.js.map +1 -0
- package/build/EntityLoader.d.ts +4 -14
- package/build/EntityLoader.js +7 -20
- package/build/EntityLoader.js.map +1 -1
- package/build/EntityLoaderFactory.d.ts +2 -2
- package/build/EntityLoaderFactory.js +4 -2
- package/build/EntityLoaderFactory.js.map +1 -1
- package/build/EntityMutatorFactory.d.ts +4 -4
- package/build/EntityMutatorFactory.js +4 -4
- package/build/EntityMutatorFactory.js.map +1 -1
- package/build/EntitySecondaryCacheLoader.d.ts +3 -3
- package/build/EntitySecondaryCacheLoader.js +1 -3
- package/build/EntitySecondaryCacheLoader.js.map +1 -1
- package/build/EntityUpdater.d.ts +27 -0
- package/build/EntityUpdater.js +40 -0
- package/build/EntityUpdater.js.map +1 -0
- package/build/ReadonlyEntity.d.ts +2 -2
- package/build/ReadonlyEntity.js +4 -6
- package/build/ReadonlyEntity.js.map +1 -1
- package/build/ViewerScopedEntityLoaderFactory.d.ts +2 -2
- package/build/ViewerScopedEntityLoaderFactory.js.map +1 -1
- package/build/ViewerScopedEntityMutatorFactory.d.ts +4 -4
- package/build/ViewerScopedEntityMutatorFactory.js.map +1 -1
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.d.ts +1 -0
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js +273 -0
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +1 -0
- package/build/__tests__/{EntityLoader-constructor-test.js → AuthorizationResultBasedEntityLoader-constructor-test.js} +10 -10
- package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js.map +1 -0
- package/build/__tests__/AuthorizationResultBasedEntityLoader-test.d.ts +1 -0
- package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js +401 -0
- package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js.map +1 -0
- package/build/__tests__/EnforcingEntityAssociationLoader-test.d.ts +1 -0
- package/build/__tests__/EnforcingEntityAssociationLoader-test.js +115 -0
- package/build/__tests__/EnforcingEntityAssociationLoader-test.js.map +1 -0
- package/build/__tests__/Entity-test.js +23 -5
- package/build/__tests__/Entity-test.js.map +1 -1
- package/build/__tests__/EntityAssociationLoader-test.js +14 -184
- package/build/__tests__/EntityAssociationLoader-test.js.map +1 -1
- package/build/__tests__/EntityCommonUseCases-test.js +34 -12
- package/build/__tests__/EntityCommonUseCases-test.js.map +1 -1
- package/build/__tests__/EntityCompanion-test.js +17 -7
- package/build/__tests__/EntityCompanion-test.js.map +1 -1
- package/build/__tests__/EntityEdges-test.js +41 -23
- package/build/__tests__/EntityEdges-test.js.map +1 -1
- package/build/__tests__/EntityLoader-test.js +22 -386
- package/build/__tests__/EntityLoader-test.js.map +1 -1
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js +4 -3
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +1 -1
- package/build/__tests__/EntityMutator-test.js +67 -70
- package/build/__tests__/EntityMutator-test.js.map +1 -1
- package/build/__tests__/EntityPrivacyPolicy-test.js +17 -7
- package/build/__tests__/EntityPrivacyPolicy-test.js.map +1 -1
- package/build/__tests__/EntitySecondaryCacheLoader-test.js +7 -7
- package/build/__tests__/EntitySecondaryCacheLoader-test.js.map +1 -1
- package/build/__tests__/EntitySelfReferentialEdges-test.js +36 -24
- package/build/__tests__/EntitySelfReferentialEdges-test.js.map +1 -1
- package/build/__tests__/ReadonlyEntity-test.js +1 -1
- package/build/__tests__/ReadonlyEntity-test.js.map +1 -1
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +4 -2
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +1 -1
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +7 -4
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +1 -1
- package/build/errors/EntityCacheAdapterError.js +17 -7
- package/build/errors/EntityCacheAdapterError.js.map +1 -1
- package/build/errors/EntityDatabaseAdapterError.js +17 -7
- package/build/errors/EntityDatabaseAdapterError.js.map +1 -1
- package/build/errors/EntityInvalidFieldValueError.js +17 -7
- package/build/errors/EntityInvalidFieldValueError.js.map +1 -1
- package/build/errors/EntityNotAuthorizedError.js +17 -7
- package/build/errors/EntityNotAuthorizedError.js.map +1 -1
- package/build/errors/EntityNotFoundError.js +17 -7
- package/build/errors/EntityNotFoundError.js.map +1 -1
- package/build/index.d.ts +19 -11
- package/build/index.js +24 -7
- package/build/index.js.map +1 -1
- package/build/internal/__tests__/EntityDataManager-test.js +42 -32
- package/build/internal/__tests__/EntityDataManager-test.js.map +1 -1
- package/build/internal/__tests__/ReadThroughEntityCache-test.js +17 -7
- package/build/internal/__tests__/ReadThroughEntityCache-test.js.map +1 -1
- package/build/rules/AlwaysAllowPrivacyPolicyRule.js +17 -7
- package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -1
- package/build/rules/AlwaysDenyPrivacyPolicyRule.js +17 -7
- package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -1
- package/build/rules/AlwaysSkipPrivacyPolicyRule.js +17 -7
- package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -1
- package/build/utils/EntityPrivacyUtils.js +4 -8
- package/build/utils/EntityPrivacyUtils.js.map +1 -1
- package/build/utils/__tests__/EntityPrivacyUtils-test.js +72 -28
- package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +1 -1
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +8 -5
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js.map +1 -1
- package/build/utils/testing/StubDatabaseAdapter.js +17 -7
- package/build/utils/testing/StubDatabaseAdapter.js.map +1 -1
- package/build/utils/testing/StubQueryContextProvider.d.ts +1 -3
- package/build/utils/testing/StubQueryContextProvider.js +1 -3
- package/build/utils/testing/StubQueryContextProvider.js.map +1 -1
- package/build/utils/testing/createUnitTestEntityCompanionProvider.js +2 -1
- package/build/utils/testing/createUnitTestEntityCompanionProvider.js.map +1 -1
- package/package.json +19 -3
- package/src/AuthorizationResultBasedEntityAssociationLoader.ts +492 -0
- package/src/AuthorizationResultBasedEntityLoader.ts +1 -1
- package/src/{EntityMutator.ts → AuthorizationResultBasedEntityMutator.ts} +62 -58
- package/src/EnforcingEntityAssociationLoader.ts +390 -0
- package/src/EnforcingEntityCreator.ts +55 -0
- package/src/EnforcingEntityDeleter.ts +44 -0
- package/src/EnforcingEntityUpdater.ts +55 -0
- package/src/Entity.ts +20 -65
- package/src/EntityAssociationLoader.ts +38 -495
- package/src/EntityCreator.ts +73 -0
- package/src/EntityDeleter.ts +73 -0
- package/src/EntityLoader.ts +10 -49
- package/src/EntityLoaderFactory.ts +20 -3
- package/src/EntityMutatorFactory.ts +32 -7
- package/src/EntitySecondaryCacheLoader.ts +5 -7
- package/src/EntityUpdater.ts +73 -0
- package/src/ReadonlyEntity.ts +14 -13
- package/src/ViewerScopedEntityLoaderFactory.ts +9 -2
- package/src/ViewerScopedEntityMutatorFactory.ts +29 -4
- package/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts +354 -0
- package/src/__tests__/{EntityLoader-constructor-test.ts → AuthorizationResultBasedEntityLoader-constructor-test.ts} +16 -9
- package/src/__tests__/AuthorizationResultBasedEntityLoader-test.ts +730 -0
- package/src/__tests__/EnforcingEntityAssociationLoader-test.ts +253 -0
- package/src/__tests__/Entity-test.ts +24 -5
- package/src/__tests__/EntityAssociationLoader-test.ts +16 -259
- package/src/__tests__/EntityCommonUseCases-test.ts +19 -7
- package/src/__tests__/EntityEdges-test.ts +24 -16
- package/src/__tests__/EntityLoader-test.ts +25 -675
- package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +4 -3
- package/src/__tests__/EntityMutator-test.ts +116 -103
- package/src/__tests__/EntitySecondaryCacheLoader-test.ts +7 -7
- package/src/__tests__/EntitySelfReferentialEdges-test.ts +36 -24
- package/src/__tests__/ReadonlyEntity-test.ts +1 -1
- package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +4 -2
- package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +7 -4
- package/src/index.ts +19 -11
- package/src/internal/__tests__/EntityDataManager-test.ts +25 -25
- package/src/utils/EntityPrivacyUtils.ts +10 -13
- package/src/utils/__tests__/EntityPrivacyUtils-test.ts +55 -29
- package/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.ts +8 -5
- package/src/utils/testing/StubQueryContextProvider.ts +1 -3
- package/src/utils/testing/createUnitTestEntityCompanionProvider.ts +3 -1
- package/build/EntityMutator.js.map +0 -1
- package/build/__tests__/EntityLoader-constructor-test.js.map +0 -1
- /package/build/__tests__/{EntityLoader-constructor-test.d.ts → AuthorizationResultBasedEntityLoader-constructor-test.d.ts} +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AuthorizationResultBasedUpdateMutator } from './AuthorizationResultBasedEntityMutator';
|
|
2
|
+
import EnforcingEntityUpdater from './EnforcingEntityUpdater';
|
|
3
|
+
import { IEntityClass } from './Entity';
|
|
4
|
+
import EntityPrivacyPolicy from './EntityPrivacyPolicy';
|
|
5
|
+
import { EntityQueryContext } from './EntityQueryContext';
|
|
6
|
+
import ReadonlyEntity from './ReadonlyEntity';
|
|
7
|
+
import ViewerContext from './ViewerContext';
|
|
8
|
+
/**
|
|
9
|
+
* The primary interface for updating entities.
|
|
10
|
+
*/
|
|
11
|
+
export default class EntityUpdater<TFields extends object, TID extends NonNullable<TFields[TSelectedFields]>, TViewerContext extends ViewerContext, TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>, TPrivacyPolicy extends EntityPrivacyPolicy<TFields, TID, TViewerContext, TEntity, TSelectedFields>, TSelectedFields extends keyof TFields> {
|
|
12
|
+
private readonly existingEntity;
|
|
13
|
+
private readonly queryContext;
|
|
14
|
+
private readonly entityClass;
|
|
15
|
+
constructor(existingEntity: TEntity, queryContext: EntityQueryContext, entityClass: IEntityClass<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>);
|
|
16
|
+
/**
|
|
17
|
+
* Enforcing entity updater. All updates through this updater are
|
|
18
|
+
* guaranteed to be successful and will throw otherwise.
|
|
19
|
+
*/
|
|
20
|
+
enforcing(): EnforcingEntityUpdater<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>;
|
|
21
|
+
/**
|
|
22
|
+
* Authorization-result-based entity updater. All updates through this
|
|
23
|
+
* updater are results, where an unsuccessful result means an authorization
|
|
24
|
+
* error or entity construction error occurred. Other errors are thrown.
|
|
25
|
+
*/
|
|
26
|
+
withAuthorizationResults(): AuthorizationResultBasedUpdateMutator<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const EnforcingEntityUpdater_1 = __importDefault(require("./EnforcingEntityUpdater"));
|
|
7
|
+
/**
|
|
8
|
+
* The primary interface for updating entities.
|
|
9
|
+
*/
|
|
10
|
+
class EntityUpdater {
|
|
11
|
+
existingEntity;
|
|
12
|
+
queryContext;
|
|
13
|
+
entityClass;
|
|
14
|
+
constructor(existingEntity, queryContext, entityClass) {
|
|
15
|
+
this.existingEntity = existingEntity;
|
|
16
|
+
this.queryContext = queryContext;
|
|
17
|
+
this.entityClass = entityClass;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Enforcing entity updater. All updates through this updater are
|
|
21
|
+
* guaranteed to be successful and will throw otherwise.
|
|
22
|
+
*/
|
|
23
|
+
enforcing() {
|
|
24
|
+
return new EnforcingEntityUpdater_1.default(this.withAuthorizationResults());
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Authorization-result-based entity updater. All updates through this
|
|
28
|
+
* updater are results, where an unsuccessful result means an authorization
|
|
29
|
+
* error or entity construction error occurred. Other errors are thrown.
|
|
30
|
+
*/
|
|
31
|
+
withAuthorizationResults() {
|
|
32
|
+
return this.existingEntity
|
|
33
|
+
.getViewerContext()
|
|
34
|
+
.getViewerScopedEntityCompanionForClass(this.entityClass)
|
|
35
|
+
.getMutatorFactory()
|
|
36
|
+
.forUpdate(this.existingEntity, this.queryContext);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.default = EntityUpdater;
|
|
40
|
+
//# sourceMappingURL=EntityUpdater.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityUpdater.js","sourceRoot":"","sources":["../src/EntityUpdater.ts"],"names":[],"mappings":";;;;;AACA,sFAA8D;AAO9D;;GAEG;AACH,MAAqB,aAAa;IAeb;IACA;IACA;IAHnB,YACmB,cAAuB,EACvB,YAAgC,EAChC,WAOhB;QATgB,mBAAc,GAAd,cAAc,CAAS;QACvB,iBAAY,GAAZ,YAAY,CAAoB;QAChC,gBAAW,GAAX,WAAW,CAO3B;IACA,CAAC;IAEJ;;;OAGG;IACH,SAAS;QAQP,OAAO,IAAI,gCAAsB,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACrE,CAAC;IAED;;;;OAIG;IACH,wBAAwB;QAQtB,OAAO,IAAI,CAAC,cAAc;aACvB,gBAAgB,EAAE;aAClB,sCAAsC,CAAC,IAAI,CAAC,WAAW,CAAC;aACxD,iBAAiB,EAAE;aACnB,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACvD,CAAC;CACF;AA7DD,gCA6DC"}
|
|
@@ -50,7 +50,7 @@ export default abstract class ReadonlyEntity<TFields extends object, TID extends
|
|
|
50
50
|
/**
|
|
51
51
|
* @returns EntityAssociationLoader for this entity
|
|
52
52
|
*/
|
|
53
|
-
associationLoader(): EntityAssociationLoader<TFields, TID, TViewerContext, this, TSelectedFields>;
|
|
53
|
+
associationLoader(queryContext?: EntityQueryContext): EntityAssociationLoader<TFields, TID, TViewerContext, this, TSelectedFields>;
|
|
54
54
|
/**
|
|
55
55
|
* Get a underlying field from this entity's data
|
|
56
56
|
* @param fieldName - the field to get
|
|
@@ -70,5 +70,5 @@ export default abstract class ReadonlyEntity<TFields extends object, TID extends
|
|
|
70
70
|
* @param viewerContext - viewer context of loading user
|
|
71
71
|
* @param queryContext - query context in which to perform the load
|
|
72
72
|
*/
|
|
73
|
-
static loader<TMFields extends object, TMID extends NonNullable<TMFields[TMSelectedFields]>, TMViewerContext extends ViewerContext, TMViewerContext2 extends TMViewerContext, TMEntity extends ReadonlyEntity<TMFields, TMID, TMViewerContext, TMSelectedFields>, TMPrivacyPolicy extends EntityPrivacyPolicy<TMFields, TMID, TMViewerContext, TMEntity, TMSelectedFields>, TMSelectedFields extends keyof TMFields = keyof TMFields>(this: IEntityClass<TMFields, TMID, TMViewerContext, TMEntity, TMPrivacyPolicy, TMSelectedFields>, viewerContext: TMViewerContext2, queryContext?: EntityQueryContext): EntityLoader<TMFields, TMID, TMViewerContext, TMEntity, TMPrivacyPolicy, TMSelectedFields>;
|
|
73
|
+
static loader<TMFields extends object, TMID extends NonNullable<TMFields[TMSelectedFields]>, TMViewerContext extends ViewerContext, TMViewerContext2 extends TMViewerContext, TMEntity extends ReadonlyEntity<TMFields, TMID, TMViewerContext, TMSelectedFields>, TMPrivacyPolicy extends EntityPrivacyPolicy<TMFields, TMID, TMViewerContext, TMEntity, TMSelectedFields>, TMSelectedFields extends keyof TMFields = keyof TMFields>(this: IEntityClass<TMFields, TMID, TMViewerContext, TMEntity, TMPrivacyPolicy, TMSelectedFields>, viewerContext: TMViewerContext2, queryContext?: EntityQueryContext): EntityLoader<TMFields, TMID, TMViewerContext, TMViewerContext2, TMEntity, TMPrivacyPolicy, TMSelectedFields>;
|
|
74
74
|
}
|
package/build/ReadonlyEntity.js
CHANGED
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const invariant_1 = __importDefault(require("invariant"));
|
|
7
7
|
const EntityAssociationLoader_1 = __importDefault(require("./EntityAssociationLoader"));
|
|
8
|
+
const EntityLoader_1 = __importDefault(require("./EntityLoader"));
|
|
8
9
|
/**
|
|
9
10
|
* A readonly entity exposes only the read functionality of an Entity. Used as the base
|
|
10
11
|
* type for most entity operations excluding mutations.
|
|
@@ -60,8 +61,8 @@ class ReadonlyEntity {
|
|
|
60
61
|
/**
|
|
61
62
|
* @returns EntityAssociationLoader for this entity
|
|
62
63
|
*/
|
|
63
|
-
associationLoader() {
|
|
64
|
-
return new EntityAssociationLoader_1.default(this);
|
|
64
|
+
associationLoader(queryContext) {
|
|
65
|
+
return new EntityAssociationLoader_1.default(this, queryContext);
|
|
65
66
|
}
|
|
66
67
|
/**
|
|
67
68
|
* Get a underlying field from this entity's data
|
|
@@ -92,10 +93,7 @@ class ReadonlyEntity {
|
|
|
92
93
|
.getViewerScopedEntityCompanionForClass(this)
|
|
93
94
|
.getQueryContextProvider()
|
|
94
95
|
.getQueryContext()) {
|
|
95
|
-
return viewerContext
|
|
96
|
-
.getViewerScopedEntityCompanionForClass(this)
|
|
97
|
-
.getLoaderFactory()
|
|
98
|
-
.forLoad(queryContext, { previousValue: null, cascadingDeleteCause: null });
|
|
96
|
+
return new EntityLoader_1.default(viewerContext, queryContext, this);
|
|
99
97
|
}
|
|
100
98
|
}
|
|
101
99
|
exports.default = ReadonlyEntity;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReadonlyEntity.js","sourceRoot":"","sources":["../src/ReadonlyEntity.ts"],"names":[],"mappings":";;;;;AAAA,0DAAkC;AAGlC,wFAAgE;
|
|
1
|
+
{"version":3,"file":"ReadonlyEntity.js","sourceRoot":"","sources":["../src/ReadonlyEntity.ts"],"names":[],"mappings":";;;;;AAAA,0DAAkC;AAGlC,wFAAgE;AAChE,kEAA0C;AAK1C;;;;;;;GAOG;AACH,MAA8B,cAAc;IAMzB,aAAa,CAAiB;IAC9B,EAAE,CAAM;IACR,cAAc,CAAoB;IAClC,cAAc,CAA2C;IAE1E;;;;;;;;;;;;;OAaG;IACH,YAAY,EACV,aAAa,EACb,EAAE,EACF,cAAc,EACd,cAAc,GAMf;QACC,IAAA,mBAAS,EAAC,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS,EAAE,qBAAqB,CAAC,CAAC;QAElE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,QAAQ;QACN,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;IACrD,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,iBAAiB,CACf,YAAiC;QAEjC,OAAO,IAAI,iCAAuB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACzD,CAAC;IAED;;;;OAIG;IACH,QAAQ,CACN,SAAY;QAEZ,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAuBX,aAA+B,EAC/B,eAAmC,aAAa;SAC7C,sCAAsC,CAAC,IAAI,CAAC;SAC5C,uBAAuB,EAAE;SACzB,eAAe,EAAE;QAUpB,OAAO,IAAI,sBAAY,CAAC,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;CACF;AAhJD,iCAgJC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import AuthorizationResultBasedEntityLoader from './AuthorizationResultBasedEntityLoader';
|
|
2
2
|
import EntityLoaderFactory from './EntityLoaderFactory';
|
|
3
3
|
import EntityPrivacyPolicy, { EntityPrivacyPolicyEvaluationContext } from './EntityPrivacyPolicy';
|
|
4
4
|
import { EntityQueryContext } from './EntityQueryContext';
|
|
@@ -11,5 +11,5 @@ export default class ViewerScopedEntityLoaderFactory<TFields extends object, TID
|
|
|
11
11
|
private readonly entityLoaderFactory;
|
|
12
12
|
private readonly viewerContext;
|
|
13
13
|
constructor(entityLoaderFactory: EntityLoaderFactory<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>, viewerContext: TViewerContext);
|
|
14
|
-
forLoad(queryContext: EntityQueryContext, privacyPolicyEvaluationContext: EntityPrivacyPolicyEvaluationContext<TFields, TID, TViewerContext, TEntity, TSelectedFields>):
|
|
14
|
+
forLoad(queryContext: EntityQueryContext, privacyPolicyEvaluationContext: EntityPrivacyPolicyEvaluationContext<TFields, TID, TViewerContext, TEntity, TSelectedFields>): AuthorizationResultBasedEntityLoader<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>;
|
|
15
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewerScopedEntityLoaderFactory.js","sourceRoot":"","sources":["../src/ViewerScopedEntityLoaderFactory.ts"],"names":[],"mappings":";;AAOA;;GAEG;AACH,MAAqB,+BAA+B;IAe/B;IAQA;IATnB,YACmB,mBAOhB,EACgB,aAA6B;QAR7B,wBAAmB,GAAnB,mBAAmB,CAOnC;QACgB,kBAAa,GAAb,aAAa,CAAgB;IAC7C,CAAC;IAEJ,OAAO,CACL,YAAgC,EAChC,8BAMC;
|
|
1
|
+
{"version":3,"file":"ViewerScopedEntityLoaderFactory.js","sourceRoot":"","sources":["../src/ViewerScopedEntityLoaderFactory.ts"],"names":[],"mappings":";;AAOA;;GAEG;AACH,MAAqB,+BAA+B;IAe/B;IAQA;IATnB,YACmB,mBAOhB,EACgB,aAA6B;QAR7B,wBAAmB,GAAnB,mBAAmB,CAOnC;QACgB,kBAAa,GAAb,aAAa,CAAgB;IAC7C,CAAC;IAEJ,OAAO,CACL,YAAgC,EAChC,8BAMC;QASD,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CACrC,IAAI,CAAC,aAAa,EAClB,YAAY,EACZ,8BAA8B,CAC/B,CAAC;IACJ,CAAC;CACF;AAjDD,kDAiDC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AuthorizationResultBasedCreateMutator, AuthorizationResultBasedUpdateMutator, AuthorizationResultBasedDeleteMutator } from './AuthorizationResultBasedEntityMutator';
|
|
2
2
|
import EntityMutatorFactory from './EntityMutatorFactory';
|
|
3
3
|
import EntityPrivacyPolicy from './EntityPrivacyPolicy';
|
|
4
4
|
import { EntityQueryContext } from './EntityQueryContext';
|
|
@@ -11,7 +11,7 @@ export default class ViewerScopedEntityMutatorFactory<TFields extends object, TI
|
|
|
11
11
|
private readonly entityMutatorFactory;
|
|
12
12
|
private readonly viewerContext;
|
|
13
13
|
constructor(entityMutatorFactory: EntityMutatorFactory<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>, viewerContext: TViewerContext);
|
|
14
|
-
forCreate(queryContext: EntityQueryContext):
|
|
15
|
-
forUpdate(existingEntity: TEntity, queryContext: EntityQueryContext):
|
|
16
|
-
forDelete(existingEntity: TEntity, queryContext: EntityQueryContext):
|
|
14
|
+
forCreate(queryContext: EntityQueryContext): AuthorizationResultBasedCreateMutator<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>;
|
|
15
|
+
forUpdate(existingEntity: TEntity, queryContext: EntityQueryContext): AuthorizationResultBasedUpdateMutator<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>;
|
|
16
|
+
forDelete(existingEntity: TEntity, queryContext: EntityQueryContext): AuthorizationResultBasedDeleteMutator<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>;
|
|
17
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewerScopedEntityMutatorFactory.js","sourceRoot":"","sources":["../src/ViewerScopedEntityMutatorFactory.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"ViewerScopedEntityMutatorFactory.js","sourceRoot":"","sources":["../src/ViewerScopedEntityMutatorFactory.ts"],"names":[],"mappings":";;AAWA;;GAEG;AACH,MAAqB,gCAAgC;IAehC;IAQA;IATnB,YACmB,oBAOhB,EACgB,aAA6B;QAR7B,yBAAoB,GAApB,oBAAoB,CAOpC;QACgB,kBAAa,GAAb,aAAa,CAAgB;IAC7C,CAAC;IAEJ,SAAS,CACP,YAAgC;QAShC,OAAO,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC/E,CAAC;IAED,SAAS,CACP,cAAuB,EACvB,YAAgC;QAShC,OAAO,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAC3E,CAAC;IAED,SAAS,CACP,cAAuB,EACvB,YAAgC;QAShC,OAAO,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAC3E,CAAC;CACF;AAlED,mDAkEC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const results_1 = require("@expo/results");
|
|
7
|
+
const uuid_1 = require("uuid");
|
|
8
|
+
const AuthorizationResultBasedEntityAssociationLoader_1 = __importDefault(require("../AuthorizationResultBasedEntityAssociationLoader"));
|
|
9
|
+
const entityUtils_1 = require("../entityUtils");
|
|
10
|
+
const TestEntity_1 = __importDefault(require("../testfixtures/TestEntity"));
|
|
11
|
+
const TestEntity2_1 = __importDefault(require("../testfixtures/TestEntity2"));
|
|
12
|
+
const TestViewerContext_1 = __importDefault(require("../testfixtures/TestViewerContext"));
|
|
13
|
+
const createUnitTestEntityCompanionProvider_1 = require("../utils/testing/createUnitTestEntityCompanionProvider");
|
|
14
|
+
describe(AuthorizationResultBasedEntityAssociationLoader_1.default, () => {
|
|
15
|
+
describe('loadAssociatedEntityAsync', () => {
|
|
16
|
+
it('loads associated entities by ID and correctly handles a null value', async () => {
|
|
17
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
18
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
19
|
+
const testOtherEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext).withAuthorizationResults().createAsync());
|
|
20
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
21
|
+
.withAuthorizationResults()
|
|
22
|
+
.setField('stringField', testOtherEntity.getID())
|
|
23
|
+
.createAsync());
|
|
24
|
+
const loadedOther = await (0, results_1.enforceAsyncResult)(testEntity
|
|
25
|
+
.associationLoader()
|
|
26
|
+
.withAuthorizationResults()
|
|
27
|
+
.loadAssociatedEntityAsync('stringField', TestEntity_1.default));
|
|
28
|
+
expect(loadedOther.getID()).toEqual(testOtherEntity.getID());
|
|
29
|
+
const loadedOther2 = await (0, results_1.enforceAsyncResult)(testEntity
|
|
30
|
+
.associationLoader()
|
|
31
|
+
.withAuthorizationResults()
|
|
32
|
+
.loadAssociatedEntityAsync('nullableField', TestEntity_1.default));
|
|
33
|
+
expect(loadedOther2).toBeNull();
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
describe('loadManyAssociatedEntitiesAsync', () => {
|
|
37
|
+
it('loads many associated entities referencing this entity', async () => {
|
|
38
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
39
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
40
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext).withAuthorizationResults().createAsync());
|
|
41
|
+
const testOtherEntity1 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
42
|
+
.withAuthorizationResults()
|
|
43
|
+
.setField('stringField', testEntity.getID())
|
|
44
|
+
.createAsync());
|
|
45
|
+
const testOtherEntity2 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
46
|
+
.withAuthorizationResults()
|
|
47
|
+
.setField('stringField', testEntity.getID())
|
|
48
|
+
.createAsync());
|
|
49
|
+
const loaded = await (0, entityUtils_1.enforceResultsAsync)(testEntity
|
|
50
|
+
.associationLoader()
|
|
51
|
+
.withAuthorizationResults()
|
|
52
|
+
.loadManyAssociatedEntitiesAsync(TestEntity_1.default, 'stringField'));
|
|
53
|
+
expect(loaded).toHaveLength(2);
|
|
54
|
+
expect(loaded.find((e) => e.getID() === testOtherEntity1.getID())).not.toBeUndefined();
|
|
55
|
+
expect(loaded.find((e) => e.getID() === testOtherEntity2.getID())).not.toBeUndefined();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
describe('loadAssociatedEntityByFieldEqualingAsync', () => {
|
|
59
|
+
it('loads associated entity by field equaling', async () => {
|
|
60
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
61
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
62
|
+
const testOtherEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext).withAuthorizationResults().createAsync());
|
|
63
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
64
|
+
.withAuthorizationResults()
|
|
65
|
+
.setField('stringField', testOtherEntity.getID())
|
|
66
|
+
.createAsync());
|
|
67
|
+
const loadedOtherResult = await testEntity
|
|
68
|
+
.associationLoader()
|
|
69
|
+
.withAuthorizationResults()
|
|
70
|
+
.loadAssociatedEntityByFieldEqualingAsync('stringField', TestEntity_1.default, 'customIdField');
|
|
71
|
+
expect(loadedOtherResult?.enforceValue().getID()).toEqual(testOtherEntity.getID());
|
|
72
|
+
});
|
|
73
|
+
it('returns null when loading associated entities by field equaling a non existent association', async () => {
|
|
74
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
75
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
76
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
77
|
+
.withAuthorizationResults()
|
|
78
|
+
.setField('stringField', (0, uuid_1.v4)())
|
|
79
|
+
.createAsync());
|
|
80
|
+
const loadedOtherResult = await testEntity
|
|
81
|
+
.associationLoader()
|
|
82
|
+
.withAuthorizationResults()
|
|
83
|
+
.loadAssociatedEntityByFieldEqualingAsync('stringField', TestEntity_1.default, 'customIdField');
|
|
84
|
+
expect(loadedOtherResult).toBeNull();
|
|
85
|
+
});
|
|
86
|
+
it('returns null when load-by field is null', async () => {
|
|
87
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
88
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
89
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
90
|
+
.withAuthorizationResults()
|
|
91
|
+
.setField('stringField', 'blah')
|
|
92
|
+
.createAsync());
|
|
93
|
+
const loadedOtherResult = await testEntity
|
|
94
|
+
.associationLoader()
|
|
95
|
+
.withAuthorizationResults()
|
|
96
|
+
.loadAssociatedEntityByFieldEqualingAsync('nullableField', TestEntity_1.default, 'customIdField');
|
|
97
|
+
expect(loadedOtherResult).toBeNull();
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
describe('loadManyAssociatedEntitiesByFieldEqualingAsync', () => {
|
|
101
|
+
it('loads many associated entities by field equaling', async () => {
|
|
102
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
103
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
104
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext).withAuthorizationResults().createAsync());
|
|
105
|
+
const testOtherEntity1 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
106
|
+
.withAuthorizationResults()
|
|
107
|
+
.setField('stringField', testEntity.getID())
|
|
108
|
+
.createAsync());
|
|
109
|
+
const testOtherEntity2 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
110
|
+
.withAuthorizationResults()
|
|
111
|
+
.setField('stringField', testEntity.getID())
|
|
112
|
+
.createAsync());
|
|
113
|
+
const loaded = await (0, entityUtils_1.enforceResultsAsync)(testEntity
|
|
114
|
+
.associationLoader()
|
|
115
|
+
.withAuthorizationResults()
|
|
116
|
+
.loadManyAssociatedEntitiesByFieldEqualingAsync('customIdField', TestEntity_1.default, 'stringField'));
|
|
117
|
+
expect(loaded).toHaveLength(2);
|
|
118
|
+
expect(loaded.find((e) => e.getID() === testOtherEntity1.getID())).not.toBeUndefined();
|
|
119
|
+
expect(loaded.find((e) => e.getID() === testOtherEntity2.getID())).not.toBeUndefined();
|
|
120
|
+
});
|
|
121
|
+
it('returns empty results when field being queried by is null', async () => {
|
|
122
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
123
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
124
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext).withAuthorizationResults().createAsync());
|
|
125
|
+
const loaded = await (0, entityUtils_1.enforceResultsAsync)(testEntity
|
|
126
|
+
.associationLoader()
|
|
127
|
+
.withAuthorizationResults()
|
|
128
|
+
.loadManyAssociatedEntitiesByFieldEqualingAsync('nullableField', TestEntity_1.default, 'stringField'));
|
|
129
|
+
expect(loaded).toHaveLength(0);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
describe('loadAssociatedEntityThroughAsync', () => {
|
|
133
|
+
it('chain loads associated entities', async () => {
|
|
134
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
135
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
136
|
+
const testEntity4 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext).withAuthorizationResults().createAsync());
|
|
137
|
+
const testEntity3 = await (0, results_1.enforceAsyncResult)(TestEntity2_1.default.creator(viewerContext)
|
|
138
|
+
.withAuthorizationResults()
|
|
139
|
+
.setField('foreignKey', testEntity4.getID())
|
|
140
|
+
.createAsync());
|
|
141
|
+
const testEntity2 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
142
|
+
.withAuthorizationResults()
|
|
143
|
+
.setField('testIndexedField', testEntity3.getID())
|
|
144
|
+
.createAsync());
|
|
145
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity2_1.default.creator(viewerContext)
|
|
146
|
+
.withAuthorizationResults()
|
|
147
|
+
.setField('foreignKey', testEntity2.getID())
|
|
148
|
+
.createAsync());
|
|
149
|
+
const loaded2Result = await testEntity
|
|
150
|
+
.associationLoader()
|
|
151
|
+
.withAuthorizationResults()
|
|
152
|
+
.loadAssociatedEntityThroughAsync([
|
|
153
|
+
{
|
|
154
|
+
associatedEntityClass: TestEntity_1.default,
|
|
155
|
+
fieldIdentifyingAssociatedEntity: 'foreignKey',
|
|
156
|
+
},
|
|
157
|
+
]);
|
|
158
|
+
expect(loaded2Result?.enforceValue().getID()).toEqual(testEntity2.getID());
|
|
159
|
+
const loaded3Result = await testEntity
|
|
160
|
+
.associationLoader()
|
|
161
|
+
.withAuthorizationResults()
|
|
162
|
+
.loadAssociatedEntityThroughAsync([
|
|
163
|
+
{
|
|
164
|
+
associatedEntityClass: TestEntity_1.default,
|
|
165
|
+
fieldIdentifyingAssociatedEntity: 'foreignKey',
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
associatedEntityClass: TestEntity2_1.default,
|
|
169
|
+
fieldIdentifyingAssociatedEntity: 'testIndexedField',
|
|
170
|
+
},
|
|
171
|
+
]);
|
|
172
|
+
expect(loaded3Result?.enforceValue().getID()).toEqual(testEntity3.getID());
|
|
173
|
+
const loaded4Result = await testEntity
|
|
174
|
+
.associationLoader()
|
|
175
|
+
.withAuthorizationResults()
|
|
176
|
+
.loadAssociatedEntityThroughAsync([
|
|
177
|
+
{
|
|
178
|
+
associatedEntityClass: TestEntity_1.default,
|
|
179
|
+
fieldIdentifyingAssociatedEntity: 'foreignKey',
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
associatedEntityClass: TestEntity2_1.default,
|
|
183
|
+
fieldIdentifyingAssociatedEntity: 'testIndexedField',
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
associatedEntityClass: TestEntity_1.default,
|
|
187
|
+
fieldIdentifyingAssociatedEntity: 'foreignKey',
|
|
188
|
+
},
|
|
189
|
+
]);
|
|
190
|
+
expect(loaded4Result?.enforceValue().getID()).toEqual(testEntity4.getID());
|
|
191
|
+
});
|
|
192
|
+
it('fails when chain loading associated entity fails', async () => {
|
|
193
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
194
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
195
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity2_1.default.creator(viewerContext)
|
|
196
|
+
.withAuthorizationResults()
|
|
197
|
+
.setField('foreignKey', (0, uuid_1.v4)())
|
|
198
|
+
.createAsync());
|
|
199
|
+
const loadResult = await testEntity
|
|
200
|
+
.associationLoader()
|
|
201
|
+
.withAuthorizationResults()
|
|
202
|
+
.loadAssociatedEntityThroughAsync([
|
|
203
|
+
{
|
|
204
|
+
associatedEntityClass: TestEntity_1.default,
|
|
205
|
+
fieldIdentifyingAssociatedEntity: 'foreignKey',
|
|
206
|
+
},
|
|
207
|
+
]);
|
|
208
|
+
expect(loadResult?.ok).toBe(false);
|
|
209
|
+
});
|
|
210
|
+
it('supports chain loading by field equality', async () => {
|
|
211
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
212
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
213
|
+
const fieldValue = (0, uuid_1.v4)();
|
|
214
|
+
const testEntity2 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
215
|
+
.withAuthorizationResults()
|
|
216
|
+
.setField('stringField', fieldValue)
|
|
217
|
+
.createAsync());
|
|
218
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity2_1.default.creator(viewerContext)
|
|
219
|
+
.withAuthorizationResults()
|
|
220
|
+
.setField('foreignKey', fieldValue)
|
|
221
|
+
.createAsync());
|
|
222
|
+
const loaded2Result = await testEntity
|
|
223
|
+
.associationLoader()
|
|
224
|
+
.withAuthorizationResults()
|
|
225
|
+
.loadAssociatedEntityThroughAsync([
|
|
226
|
+
{
|
|
227
|
+
associatedEntityClass: TestEntity_1.default,
|
|
228
|
+
fieldIdentifyingAssociatedEntity: 'foreignKey',
|
|
229
|
+
associatedEntityLookupByField: 'stringField',
|
|
230
|
+
},
|
|
231
|
+
]);
|
|
232
|
+
expect(loaded2Result?.enforceValue().getID()).toEqual(testEntity2.getID());
|
|
233
|
+
});
|
|
234
|
+
it('returns null when chain loading by field equality returns null', async () => {
|
|
235
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
236
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
237
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity2_1.default.creator(viewerContext)
|
|
238
|
+
.withAuthorizationResults()
|
|
239
|
+
.setField('foreignKey', (0, uuid_1.v4)())
|
|
240
|
+
.createAsync());
|
|
241
|
+
const loaded2Result = await testEntity
|
|
242
|
+
.associationLoader()
|
|
243
|
+
.withAuthorizationResults()
|
|
244
|
+
.loadAssociatedEntityThroughAsync([
|
|
245
|
+
{
|
|
246
|
+
associatedEntityClass: TestEntity_1.default,
|
|
247
|
+
fieldIdentifyingAssociatedEntity: 'foreignKey',
|
|
248
|
+
associatedEntityLookupByField: 'stringField',
|
|
249
|
+
},
|
|
250
|
+
]);
|
|
251
|
+
expect(loaded2Result).toBeNull();
|
|
252
|
+
});
|
|
253
|
+
it('returns null when chain loading by field is null', async () => {
|
|
254
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
255
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
256
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
257
|
+
.withAuthorizationResults()
|
|
258
|
+
.setField('nullableField', null)
|
|
259
|
+
.createAsync());
|
|
260
|
+
const loadedResult = await testEntity
|
|
261
|
+
.associationLoader()
|
|
262
|
+
.withAuthorizationResults()
|
|
263
|
+
.loadAssociatedEntityThroughAsync([
|
|
264
|
+
{
|
|
265
|
+
associatedEntityClass: TestEntity_1.default,
|
|
266
|
+
fieldIdentifyingAssociatedEntity: 'nullableField',
|
|
267
|
+
},
|
|
268
|
+
]);
|
|
269
|
+
expect(loadedResult).toBeNull();
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
//# sourceMappingURL=AuthorizationResultBasedEntityAssociationLoader-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthorizationResultBasedEntityAssociationLoader-test.js","sourceRoot":"","sources":["../../src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
|
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"));
|
|
@@ -65,12 +66,12 @@ class TestEntity extends Entity_1.default {
|
|
|
65
66
|
}
|
|
66
67
|
}
|
|
67
68
|
exports.default = TestEntity;
|
|
68
|
-
describe(
|
|
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
|
|
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.
|
|
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=
|
|
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 @@
|
|
|
1
|
+
export {};
|