Skip to content

Commit

Permalink
feat(compliance): add support for IsIdentity condition
Browse files Browse the repository at this point in the history
  • Loading branch information
monitz87 committed Nov 10, 2020
1 parent 6786fd9 commit 8201d5c
Show file tree
Hide file tree
Showing 7 changed files with 239 additions and 30 deletions.
4 changes: 2 additions & 2 deletions src/api/entities/SecurityToken/Compliance/Requirements.ts
Expand Up @@ -73,7 +73,7 @@ export class Requirements extends Namespace<SecurityToken> {
const defaultTrustedClaimIssuers = claimIssuers.map(identityIdToString);

return assetCompliance.requirements.map(complianceRequirement => {
const requirement = complianceRequirementToRequirement(complianceRequirement);
const requirement = complianceRequirementToRequirement(complianceRequirement, context);

requirement.conditions.forEach(condition => {
if (!condition.trustedClaimIssuers || !condition.trustedClaimIssuers.length) {
Expand Down Expand Up @@ -174,7 +174,7 @@ export class Requirements extends Namespace<SecurityToken> {
primaryIssuanceAgent ? stringToIdentityId(primaryIssuanceAgent.did, context) : null
);

return assetComplianceResultToRequirementCompliance(res);
return assetComplianceResultToRequirementCompliance(res, context);
}

/**
Expand Down
8 changes: 6 additions & 2 deletions src/api/procedures/__tests__/setAssetRequirements.ts
Expand Up @@ -22,7 +22,10 @@ describe('setAssetRequirements procedure', () => {
[Requirement, Context],
ComplianceRequirement
>;
let complianceRequirementToRequirementStub: sinon.SinonStub<[ComplianceRequirement], Requirement>;
let complianceRequirementToRequirementStub: sinon.SinonStub<
[ComplianceRequirement, Context],
Requirement
>;
let assetCompliancesStub: sinon.SinonStub;
let ticker: string;
let requirements: Condition[][];
Expand Down Expand Up @@ -124,7 +127,8 @@ describe('setAssetRequirements procedure', () => {
sender_conditions: senderConditions[index],
receiver_conditions: receiverConditions[index],
/* eslint-enable @typescript-eslint/camelcase */
})
}),
mockContext
)
.returns({ conditions: condition, id: 1 });
});
Expand Down
2 changes: 1 addition & 1 deletion src/api/procedures/setAssetRequirements.ts
Expand Up @@ -40,7 +40,7 @@ export async function prepareSetAssetRequirements(
const rawCurrentAssetCompliance = await query.complianceManager.assetCompliances(rawTicker);

const currentRequirements = rawCurrentAssetCompliance.requirements.map(
requirement => complianceRequirementToRequirement(requirement).conditions
requirement => complianceRequirementToRequirement(requirement, context).conditions
);

const comparator = (a: Condition[], b: Condition[]): boolean => {
Expand Down
10 changes: 10 additions & 0 deletions src/testUtils/mocks/dataSources.ts
Expand Up @@ -74,6 +74,7 @@ import {
SecurityToken,
SettlementType,
Signatory,
TargetIdentity,
Ticker,
TickerRegistration,
TickerRegistrationConfig,
Expand Down Expand Up @@ -1639,6 +1640,14 @@ export const createMockClaim = (
| 'NoData'
): Claim => createMockEnum(claim) as Claim;

/**
* @hidden
* NOTE: `isEmpty` will be set to true if no value is passed
*/
export const createMockTargetIdentity = (
targetIdentity?: { Specific: IdentityId } | 'PrimaryIssuanceAgent'
): TargetIdentity => createMockEnum(targetIdentity) as TargetIdentity;

/**
* @hidden
* NOTE: `isEmpty` will be set to true if no value is passed
Expand All @@ -1649,6 +1658,7 @@ export const createMockConditionType = (
| { IsAbsent: Claim }
| { IsAnyOf: Claim[] }
| { IsNoneOf: Claim[] }
| { IsIdentity: TargetIdentity }
): ConditionType => createMockEnum(conditionType) as ConditionType;

/**
Expand Down
17 changes: 16 additions & 1 deletion src/types/index.ts
Expand Up @@ -290,6 +290,8 @@ export enum ConditionType {
IsAbsent = 'IsAbsent',
IsAnyOf = 'IsAnyOf',
IsNoneOf = 'IsNoneOf',
IsPrimaryIssuanceAgent = 'IsPrimaryIssuanceAgent',
IsIdentity = 'IsIdentity',
}

export type ConditionBase = { target: ConditionTarget; trustedClaimIssuers?: string[] };
Expand All @@ -304,7 +306,20 @@ export type MultiClaimCondition = ConditionBase & {
claims: Claim[];
};

export type Condition = SingleClaimCondition | MultiClaimCondition;
export type IdentityCondition = ConditionBase & {
type: ConditionType.IsIdentity;
identity: Identity;
};

export type PrimaryIssuanceAgentCondition = ConditionBase & {
type: ConditionType.IsPrimaryIssuanceAgent;
};

export type Condition =
| SingleClaimCondition
| MultiClaimCondition
| IdentityCondition
| PrimaryIssuanceAgentCondition;

/**
* @hidden
Expand Down

0 comments on commit 8201d5c

Please sign in to comment.