Skip to content

Commit

Permalink
feat(claims): add status to vc
Browse files Browse the repository at this point in the history
  • Loading branch information
JGiter committed Jun 2, 2022
1 parent e02b454 commit 28c556f
Show file tree
Hide file tree
Showing 10 changed files with 405 additions and 273 deletions.
26 changes: 25 additions & 1 deletion e2e/claim-revocation.e2e.ts
@@ -1,4 +1,9 @@
import { providers, Wallet } from 'ethers';
import { providers, Wallet, utils } from 'ethers';
import {
CredentialStatusPurpose,
CredentialStatusType,
Credential,
} from '@ew-did-registry/credentials-interface';
import {
initWithPrivateKeySigner,
ProviderType,
Expand All @@ -10,12 +15,15 @@ import {
CacheClient,
IIssuerDefinition,
IRevokerDefinition,
RoleCredentialSubject,
} from '../src';
import { replenish, root, rpcUrl, setupENS } from './utils/setup-contracts';
import { setLogger } from '../src/config/logger.config';
import { ConsoleLogger } from '../src/utils/logger';
import { addressOf } from '@ew-did-registry/did-ethr-resolver';

const { id } = utils;

const provider = new providers.JsonRpcProvider(rpcUrl);

const mockGetRoleDefinition = jest.fn();
Expand All @@ -34,6 +42,22 @@ jest.mock('../src/modules/cache-client/cache-client.service', () => {
issueClaim: mockIssueClaim,
getAllowedRolesByIssuer: mockGetAllowedRoles,
getClaimById: mockGetClaimById,
addStatusToCredential: (
credential: Credential<RoleCredentialSubject>
): Credential<RoleCredentialSubject> => {
return {
...credential,
credentialStatus: {
id: `https://energyweb.org/credential/${id(
JSON.stringify(credential)
)}#list`,
type: CredentialStatusType.StatusList2021Entry,
statusPurpose: CredentialStatusPurpose.REVOCATION,
statusListIndex: '1',
statusListCredential: `https://identitycache.org/v1/status-list/${credential.id}`,
},
};
},
};
}),
};
Expand Down
26 changes: 24 additions & 2 deletions e2e/claims.service.e2e.ts
Expand Up @@ -5,6 +5,12 @@ import {
import { Methods, Chain } from '@ew-did-registry/did';
import { addressOf } from '@ew-did-registry/did-ethr-resolver';
import { KeyTags } from '@ew-did-registry/did-resolver-interface';
import {
CredentialStatusPurpose,
CredentialStatusType,
VerifiablePresentation,
Credential,
} from '@ew-did-registry/credentials-interface';
import { providers, utils, Wallet } from 'ethers';
import {
AssetsService,
Expand All @@ -20,16 +26,16 @@ import {
MessagingService,
IClaimIssuance,
SignerT,
RoleCredentialSubject,
} from '../src';
import { replenish, root, rpcUrl, setupENS } from './utils/setup-contracts';
import { ClaimManager__factory } from '../ethers/factories/ClaimManager__factory';
import { ProofVerifier } from '@ew-did-registry/claims';
import { ClaimManager } from '../ethers/ClaimManager';
import { setLogger } from '../src/config/logger.config';
import { ConsoleLogger, LogLevel } from '../src/utils/logger';
import { VerifiablePresentation } from '@ew-did-registry/credentials-interface';

const { namehash } = utils;
const { namehash, id } = utils;

const provider = new providers.JsonRpcProvider(rpcUrl);
const staticIssuer = Wallet.createRandom().connect(provider);
Expand Down Expand Up @@ -108,6 +114,22 @@ jest.mock('../src/modules/cache-client/cache-client.service', () => {
issueClaim: mockIssueClaim,
rejectClaim: mockRejectClaim,
getAllowedRolesByIssuer: mockGetAllowedRoles,
addStatusToCredential: (
credential: Credential<RoleCredentialSubject>
): Credential<RoleCredentialSubject> => {
return {
...credential,
credentialStatus: {
id: `https://energyweb.org/credential/${id(
JSON.stringify(credential)
)}#list`,
type: CredentialStatusType.StatusList2021Entry,
statusPurpose: CredentialStatusPurpose.REVOCATION,
statusListIndex: '1',
statusListCredential: `https://identitycache.org/v1/status-list/${credential.id}`,
},
};
},
};
}),
};
Expand Down
38 changes: 34 additions & 4 deletions e2e/verifiable-credentials.service.e2e.ts
@@ -1,4 +1,4 @@
import { Wallet } from 'ethers';
import { Wallet, utils } from 'ethers';
import axios from 'axios';
import { v4 as uuid } from 'uuid';
import {
Expand All @@ -14,19 +14,42 @@ import {
VerifiableCredentialsServiceBase,
} from '../src/modules/verifiable-credentials';
import {
CredentialStatusType,
VC_API_EXCHANGE,
VerifiableCredential,
VpRequest,
VpRequestInteractServiceType,
VpRequestQueryType,
Credential,
CredentialStatusPurpose,
} from '@ew-did-registry/credentials-interface';

const { id } = utils;

jest.mock('axios');
const getClaimsBySubject = jest.fn();
jest.mock('../src/modules/cache-client/cache-client.service', () => {
return {
CacheClient: jest.fn().mockImplementation(() => {
return { getClaimsBySubject };
return {
getClaimsBySubject,
addStatusToCredential: (
credential: Credential<RoleCredentialSubject>
): Credential<RoleCredentialSubject> => {
return {
...credential,
credentialStatus: {
id: `https://energyweb.org/credential/${id(
JSON.stringify(credential)
)}#list`,
type: CredentialStatusType.StatusList2021Entry,
statusPurpose: CredentialStatusPurpose.REVOCATION,
statusListIndex: '1',
statusListCredential: `https://identitycache.org/v1/status-list/${credential.id}`,
},
};
},
};
}),
};
});
Expand Down Expand Up @@ -332,7 +355,6 @@ describe('Verifiable credentials tests', () => {
});
});

// TODO: add tests for credential exchange
describe('Verifiable credentials exchange', () => {
const vpRequest: VpRequest = {
query: [
Expand Down Expand Up @@ -387,13 +409,21 @@ describe('Verifiable credentials tests', () => {
]);
(axios as jest.Mocked<typeof axios>).post.mockImplementation((url) => {
return Promise.resolve({
data: url === exchangeUrl ? { errors: [], vpRequest } : '',
data: url === exchangeUrl ? vpRequest : '',
});
});
getClaimsBySubject.mockResolvedValue([{ vp }]);
});

test('initiateExchange() should return presentation matching presentation request', async () => {
(axios as jest.Mocked<typeof axios>).post.mockImplementationOnce(
(url) => {
return Promise.resolve({
data: url === exchangeUrl ? vpRequest : '',
});
}
);

const [{ selectResults }] =
await verifiableCredentialsService.initiateExchange({
type: VC_API_EXCHANGE,
Expand Down

0 comments on commit 28c556f

Please sign in to comment.