Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion src/blockchain/test-library/CosmosApiTestBuilder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ export class CosmosApiTestBuilder {

try {
const detailResponse = await this.consensusClient.getStakingValidator(operatorAddr);
const detail = detailResponse.validator;
const detail = this.extractValidatorFromResponse(detailResponse);
expect(detail).to.have.property('operator_address');
expect(detail).to.have.property('tokens');
expect(detail).to.have.property('status');
Expand Down Expand Up @@ -356,6 +356,24 @@ export class CosmosApiTestBuilder {
return [];
}

/**
* Helper method: Extract single validator information from response
*/
private extractValidatorFromResponse(response: any): any {
if (response?.code === 200 && response?.msg?.validator) {
return response.msg.validator;
} else if (response?.code === 200 && response?.msg?.operator_address) {
return response.msg;
} else if (response?.validator) {
return response.validator;
} else if (response?.result?.validator) {
return response.result.validator;
} else if (response?.operator_address) {
return response;
}
return response;
}

/**
* Helper method: Extract parameter information from response
*/
Expand Down
70 changes: 70 additions & 0 deletions src/blockchain/test-library/__tests__/CosmosApiTestBuilder.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import { expect } from 'chai';
import { CosmosApiTestBuilder } from '../CosmosApiTestBuilder';

describe('CosmosApiTestBuilder', () => {
it('accepts validator detail wrapped in code/msg responses', async () => {
const validator = {
operator_address: '0x00a842dbd3d11176b4868dd753a552b8919d5a63',
tokens: '1000000',
status: 3,
description: {
moniker: '0x0FC41199CE588948861A8DA86D725A5A073AE91A',
},
};

const consensusClient = {
restEndpoint: 'http://localhost:21317',
rpcEndpoint: 'http://localhost:36657',
getStakingValidators() {
return {
code: 200,
msg: {
validators: [validator],
},
};
},
getStakingValidator() {
return {
code: 200,
msg: {
validator,
},
};
},
getStakingParams() {
return {
params: {
bond_denom: 'stake',
unbonding_time: '10000000000',
max_validators: 32,
},
};
},
getStakingPool() {
return {
pool: {
bonded_tokens: '4000000',
not_bonded_tokens: '0',
},
};
},
};

const blockchain = {
chainId: 1513,
getDefaultConsensusLayerClient() {
return consensusClient;
},
} as any;

const builder = new CosmosApiTestBuilder(blockchain, ['staking', 'staking_delegation']);

await builder.testStakingModule();
await builder.testValidatorDetail();

const result = builder.getTestResult('staking_validator_detail');
expect(result.success).to.equal(true);
expect(result.data.operator_address).to.equal(validator.operator_address);
expect(result.data.tokens).to.equal(validator.tokens);
});
});
Loading