Skip to content

Commit

Permalink
deduplicate test methods
Browse files Browse the repository at this point in the history
  • Loading branch information
piotr-roslaniec committed Jun 5, 2024
1 parent 7129745 commit 527f9d6
Showing 1 changed file with 31 additions and 70 deletions.
101 changes: 31 additions & 70 deletions packages/taco/test/conditions/context.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import {
USER_ADDRESS_PARAM_EIP712,
} from '../../src/conditions/const';
import { CustomContextParam } from '../../src/conditions/context';
import { ContextParam } from '../../src/conditions/context/context';
import {
paramOrContextParamSchema,
ReturnValueTestProps,
Expand Down Expand Up @@ -341,111 +340,73 @@ describe('authentication provider', () => {
).not.toThrow();
});

// TODO: Consider rewriting those tests to be a bit more comprehensive and deduplicate them

it('supports default auth method (eip712)', async () => {
const eip712Spy = vi.spyOn(
EIP712SignatureProvider.prototype,
'getOrCreateWalletSignature',
);
async function makeAuthSignature(authMethod: string) {
const conditionObj = {
...testContractConditionObj,
returnValueTest: {
...testReturnValueTest,
value: USER_ADDRESS_PARAM_DEFAULT,
value: authMethod,
},
};
const condition = new ContractCondition(conditionObj);
const conditionExpr = new ConditionExpression(condition);
expect(conditionExpr.contextRequiresSigner()).toBe(true);
const builtContext = conditionExpr.buildContext(provider, {}, signer);

const builtContext = conditionExpr.buildContext(provider, {}, signer);
const contextVars = await builtContext.toObj();
const authSignature = contextVars[authMethod] as AuthSignature;
expect(authSignature).toBeDefined();

const typedSignature = contextVars[
USER_ADDRESS_PARAM_DEFAULT
] as AuthSignature;
expect(typedSignature).toBeDefined();
expect(typedSignature.signature).toBeDefined();
expect(typedSignature.scheme).toEqual('EIP712');
expect(typedSignature.address).toEqual(await signer.getAddress());
return authSignature;
}

const typedData = typedSignature.typedData as FormattedEIP712;
expect(typedData).toBeDefined();
expect(typedData.domain.name).toEqual('TACo');
expect(typedData.message.address).toEqual(await signer.getAddress());
expect(eip712Spy).toHaveBeenCalledOnce();
});

it('supports eip712', async () => {
async function testEIP712AuthMethod(authMethod: string) {
const eip712Spy = vi.spyOn(
EIP712SignatureProvider.prototype,
'getOrCreateWalletSignature',
);
const conditionObj = {
...testContractConditionObj,
returnValueTest: {
...testReturnValueTest,
value: USER_ADDRESS_PARAM_EIP712,
},
};
const condition = new ContractCondition(conditionObj);
const conditionExpr = new ConditionExpression(condition);
expect(conditionExpr.contextRequiresSigner()).toBe(true);

const builtContext = conditionExpr.buildContext(provider, {}, signer);
const resolvedContextRecords = await builtContext.toObj();

const typedSignature = resolvedContextRecords[
USER_ADDRESS_PARAM_EIP712
] as AuthSignature;
expect(typedSignature).toBeDefined();
expect(typedSignature.signature).toBeDefined();
expect(typedSignature.scheme).toEqual('EIP712');
expect(typedSignature.address).toEqual(await signer.getAddress());
const authSignature = await makeAuthSignature(authMethod);
expect(authSignature).toBeDefined();
expect(authSignature.signature).toBeDefined();
expect(authSignature.scheme).toEqual('EIP712');
expect(authSignature.address).toEqual(await signer.getAddress());

const typedData = typedSignature.typedData as FormattedEIP712;
const typedData = authSignature.typedData as FormattedEIP712;
expect(typedData).toBeDefined();
expect(typedData.domain.name).toEqual('TACo');
expect(typedData.message.address).toEqual(await signer.getAddress());
expect(eip712Spy).toHaveBeenCalledOnce();
}

it('supports default auth method (eip712)', async () => {
await testEIP712AuthMethod(USER_ADDRESS_PARAM_DEFAULT);
});

it('supports eip712', async () => {
await testEIP712AuthMethod(USER_ADDRESS_PARAM_EIP712);
});

it('supports eip4361', async () => {
const eip4361Spy = vi.spyOn(
EIP4361SignatureProvider.prototype,
'getOrCreateWalletSignature',
);
const conditionObj = {
...testContractConditionObj,
returnValueTest: {
...testReturnValueTest,
value: USER_ADDRESS_PARAM_EIP4361,
},
};
const condition = new ContractCondition(conditionObj);
const conditionExpr = new ConditionExpression(condition);
expect(conditionExpr.contextRequiresSigner()).toBe(true);

const builtContext = conditionExpr.buildContext(provider, {}, signer);
const resolvedContextRecords = await builtContext.toObj();

const typedSignature: ContextParam = resolvedContextRecords[
USER_ADDRESS_PARAM_EIP4361
] as AuthSignature;
expect(typedSignature).toBeDefined();
expect(typedSignature.signature).toBeDefined();
expect(typedSignature.scheme).toEqual('EIP4361');
const authSignature = await makeAuthSignature(USER_ADDRESS_PARAM_EIP4361);
expect(authSignature).toBeDefined();
expect(authSignature.signature).toBeDefined();
expect(authSignature.scheme).toEqual('EIP4361');

const signerAddress = await signer.getAddress();
expect(typedSignature.address).toEqual(signerAddress);
expect(authSignature.address).toEqual(signerAddress);

expect(typedSignature.typedData).toContain(
expect(authSignature.typedData).toContain(
`localhost wants you to sign in with your Ethereum account:\n${signerAddress}`,
);
expect(typedSignature.typedData).toContain('URI: http://localhost:3000');
expect(authSignature.typedData).toContain('URI: http://localhost:3000');

const chainId = (await provider.getNetwork()).chainId;
expect(typedSignature.typedData).toContain(`Chain ID: ${chainId}`);
expect(authSignature.typedData).toContain(`Chain ID: ${chainId}`);

expect(eip4361Spy).toHaveBeenCalledOnce();
});
Expand Down

0 comments on commit 527f9d6

Please sign in to comment.