Skip to content

Commit

Permalink
perf: mock ipfs in tests
Browse files Browse the repository at this point in the history
  • Loading branch information
JGiter committed Sep 16, 2021
1 parent d0b2a38 commit f710747
Showing 1 changed file with 31 additions and 14 deletions.
45 changes: 31 additions & 14 deletions test/claimsTests/selfsignedClaimsTests.ts
Expand Up @@ -2,38 +2,40 @@ import { Wallet } from "@ethersproject/wallet";
import { IAM } from "../../src/iam";
import { createIam } from "../iam.test";
import { provider, replenish } from "../setup_contracts";
import { mockIpfs, restoreIpfs } from "../testUtils/mocks";

const mockSave = jest.fn().mockImplementation((token: string) => {
return token;
});
const mockGet = jest.fn();

export const selfsignedClaimsTests = function () {
let iam: IAM;

beforeAll(async () => {
beforeEach(async () => {
jest.clearAllMocks();
const wallet = Wallet.createRandom().connect(provider);
await replenish(wallet.address);
iam = await createIam(wallet.privateKey, { createDocument: true });
Reflect.set(iam, "_ipfsStore", { save: mockSave, get: mockGet });
});

const namespace = "daniel.iam.ewc";

beforeEach(() => {
mockIpfs();
});

afterEach(() => {
restoreIpfs();
});

test("ens claim can be created", async () => {
await iam.createSelfSignedClaim({
data: { claimType: namespace, claimTypeVersion: 1 },
});
const token = mockSave.mock.calls.pop()[0];
mockGet.mockImplementationOnce(() => Promise.resolve(token));
const { service = [] } = await iam.getDidDocument();
expect(service.find(({ claimType }) => claimType === namespace)).toBeTruthy();
});
test("ens claim should by updated", async () => {
const { service = [] } = await iam.getDidDocument();
const { claimType, claimTypeVersion } = service.find(({ claimType }) => claimType === namespace) || {};
await iam.createSelfSignedClaim({ data: { claimType, claimTypeVersion } });
const token = mockSave.mock.calls.pop()[0];
mockGet.mockImplementationOnce(() => Promise.resolve(token));
const { service: newServices = [] } = await iam.getDidDocument();
expect(
newServices.find((claim) => claim.claimType === claimType && claim.claimTypeVersion === claimTypeVersion),
Expand All @@ -46,44 +48,59 @@ export const selfsignedClaimsTests = function () {
await iam.createSelfSignedClaim({
data: { claimType: "edvin.iam.ewc", claimTypeVersion },
});
const token = mockSave.mock.calls.pop()[0];
mockGet.mockImplementationOnce(() => Promise.resolve(token));
const { service: newServices = [] } = await iam.getDidDocument();
expect(
newServices.find(
(claim) => claim.claimType === "edvin.iam.ewc" && claim.claimTypeVersion === claimTypeVersion,
),
).toBeTruthy();
expect(newServices.length).toBe(2);
expect(newServices.length).toBe(1);
});
test("ens claim should be created when claimTypeVersion do not match", async () => {
await iam.createSelfSignedClaim({
data: { claimType: namespace, claimTypeVersion: 2 },
});
const token = mockSave.mock.calls.pop()[0];
mockGet.mockImplementationOnce(() => Promise.resolve(token));
const { service: newServices = [] } = await iam.getDidDocument();
expect(newServices.find((claim) => claim.claimType === namespace && claim.claimTypeVersion === 2)).toBeTruthy();
expect(newServices.length).toBe(3);
expect(newServices.length).toBe(1);
});
test("ens claim should not be created", async () => {
await iam.createSelfSignedClaim({
data: { claimType: namespace, claimTypeVersion: 2 },
});
const token = mockSave.mock.calls.pop()[0];
mockGet.mockImplementationOnce(() => Promise.resolve(token));
const { service: newServices = [] } = await iam.getDidDocument();
expect(newServices.length).toBe(3);
expect(newServices.length).toBe(1);
});

test("profile claim should be created", async () => {
await iam.createSelfSignedClaim({
data: { profile: { name: "Edwin" } },
});
const token = mockSave.mock.calls.pop()[0];
mockGet.mockImplementationOnce(() => Promise.resolve(token));
const { service = [] } = await iam.getDidDocument();
expect(service.find((claim) => claim.profile && claim.profile.name === "Edwin")).toBeTruthy();
});
test("profile claim should be updated", async () => {
await iam.createSelfSignedClaim({
data: { profile: { name: "Edwin" } },
});
let token = mockSave.mock.calls.pop()[0];
mockGet.mockImplementationOnce(() => Promise.resolve(token));
const { service = [] } = await iam.getDidDocument();
const { id } = service.find(({ profile }) => Boolean(profile)) || {};
await iam.createSelfSignedClaim({ data: { profile: { name: "Dan" } } });
token = mockSave.mock.calls.pop()[0];
mockGet.mockImplementationOnce(() => Promise.resolve(token));
const { service: updatedService = [] } = await iam.getDidDocument();
const { profile } = updatedService.find(({ id: claimId }) => id === claimId) || {};
expect(profile?.name).toBe("Dan");
expect(updatedService.length).toBe(4);
expect(updatedService.length).toBe(1);
});
};

0 comments on commit f710747

Please sign in to comment.