Skip to content

Commit

Permalink
fix(asset requirements): handle the case where requirements are repeated
Browse files Browse the repository at this point in the history
  • Loading branch information
monitz87 committed Nov 6, 2020
1 parent ce3f8ce commit e4e21fb
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 22 deletions.
4 changes: 2 additions & 2 deletions src/utils/__tests__/index.ts
Expand Up @@ -2274,8 +2274,8 @@ describe('requirementToComplianceRequirement and complianceRequirementToRequirem
}),
];
const complianceRequirement = dsMockUtils.createMockComplianceRequirement({
sender_conditions: [rawConditions[0], rawConditions[2], rawConditions[3]],
receiver_conditions: [rawConditions[0], rawConditions[1], rawConditions[3]],
sender_conditions: [rawConditions[0], rawConditions[2], rawConditions[2], rawConditions[3]],
receiver_conditions: [rawConditions[0], rawConditions[1], rawConditions[1], rawConditions[3]],
id: dsMockUtils.createMockU32(1),
});
/* eslint-enable @typescript-eslint/camelcase */
Expand Down
51 changes: 31 additions & 20 deletions src/utils/index.ts
Expand Up @@ -1334,13 +1334,36 @@ export function complianceRequirementToRequirement(
};
};

const conditions: Condition[] = complianceRequirement.sender_conditions.map(
({ condition_type: conditionType, issuers }) => ({
const conditions: Condition[] = [];

const conditionsAreEqual = (a: Condition, b: Condition): boolean => {
let equalClaims = false;

if (isSingleClaimCondition(a) && isSingleClaimCondition(b)) {
equalClaims = isEqual(a.claim, b.claim);
}

if (isMultiClaimCondition(a) && isMultiClaimCondition(b)) {
equalClaims = isEqual(a.claims, b.claims);
}

return equalClaims && isEqual(a.trustedClaimIssuers, b.trustedClaimIssuers);
};

complianceRequirement.sender_conditions.forEach(({ condition_type: conditionType, issuers }) => {
const newCondition = {
...meshConditionTypeToCondition(conditionType),
target: ConditionTarget.Sender,
trustedClaimIssuers: issuers.map(issuer => identityIdToString(issuer)),
})
);
};
const existingCondition = conditions.find(condition =>
conditionsAreEqual(condition, newCondition)
);

if (!existingCondition) {
conditions.push(newCondition);
}
});

complianceRequirement.receiver_conditions.forEach(
({ condition_type: conditionType, issuers }) => {
Expand All @@ -1350,23 +1373,11 @@ export function complianceRequirementToRequirement(
trustedClaimIssuers: issuers.map(issuer => identityIdToString(issuer)),
};

const existingCondition = conditions.find(condition => {
let equalClaims = false;

if (isSingleClaimCondition(condition) && isSingleClaimCondition(newCondition)) {
equalClaims = isEqual(condition.claim, newCondition.claim);
}

if (isMultiClaimCondition(condition) && isMultiClaimCondition(newCondition)) {
equalClaims = isEqual(condition.claims, newCondition.claims);
}

return (
equalClaims && isEqual(condition.trustedClaimIssuers, newCondition.trustedClaimIssuers)
);
});
const existingCondition = conditions.find(condition =>
conditionsAreEqual(condition, newCondition)
);

if (existingCondition) {
if (existingCondition && existingCondition.target === ConditionTarget.Sender) {
existingCondition.target = ConditionTarget.Both;
} else {
conditions.push(newCondition);
Expand Down

0 comments on commit e4e21fb

Please sign in to comment.