UNPKG

@kyve/sdk-beta

Version:

<p align="center"> <a href="https://kyve.network"> <img src="https://user-images.githubusercontent.com/62398724/137493477-63868209-a19b-4efa-9413-f06d41197d6d.png" style="border-radius: 50%" height="96"> </a> <h3 align="center"><code>@kyve/sdk</

461 lines (435 loc) 15.5 kB
import KyveSDK from "../../src"; import { JsonSchemaGenerator } from "typescript-json-schema/typescript-json-schema"; import { KyveLCDClientType } from "../../src"; import { createValidator } from "../helper"; const TEST_NETWORK = "korellia"; const PATH_TO_QUERY_TYPES = "./node_modules/@kyve/proto/dist/proto/kyve/registry/v1beta1/query"; const TEST_HEIGHT = "1000000"; let lcdClient: KyveLCDClientType; let typeQuerySchemas: JsonSchemaGenerator; let validate: Function; beforeAll(async () => { const sdk = new KyveSDK(TEST_NETWORK); lcdClient = await sdk.createLCDClient(); const result = createValidator([PATH_TO_QUERY_TYPES]); validate = result.validate; typeQuerySchemas = result.typeQuerySchemas; }); it("Query <params>", async () => { const result = await lcdClient.kyve.registry.v1beta1.params(); const schema = typeQuerySchemas.getSchemaForSymbol("QueryParamsResponse"); const validationResult = validate(schema, result); expect(validationResult.valid).toBeTruthy(); }); it("Query <pools> and <pool> by id", async () => { const poolsResponse = await lcdClient.kyve.registry.v1beta1.pools(); const schema = typeQuerySchemas.getSchemaForSymbol("QueryPoolsResponse"); //do not test pagination property delete schema.properties?.pagination; delete poolsResponse.pagination; const vResult = validate(schema, poolsResponse); expect(vResult.valid).toBeTruthy(); // jest doesn't support nested generative test, needs a solution how to split into separate test cases // maybe another test runner? for (let pool of poolsResponse.pools) { const poolsResponse = await lcdClient.kyve.registry.v1beta1.pool({ id: pool.id, }); const schema = typeQuerySchemas.getSchemaForSymbol("QueryPoolResponse"); const vResult = validate(schema, poolsResponse); expect(vResult.valid).toBeTruthy(); } }); it("Query <fundersList>", async () => { const poolsResponse = await lcdClient.kyve.registry.v1beta1.pools(); const schema = typeQuerySchemas.getSchemaForSymbol( "QueryFundersListResponse" ); for (let pool of poolsResponse.pools) { const poolsResponse = await lcdClient.kyve.registry.v1beta1.fundersList({ pool_id: pool.id, }); const vResult = validate(schema, poolsResponse); expect(vResult.valid).toBeTruthy(); } }); it("Query <funder>", async () => { const pool = await lcdClient.kyve.registry.v1beta1.pools({ pagination: { limit: "1" }, }); const founders = await lcdClient.kyve.registry.v1beta1.fundersList({ pool_id: pool.pools[0].id, }); const founder = await lcdClient.kyve.registry.v1beta1.funder({ pool_id: pool.pools[0].id, funder: founders.funders[0].account, }); const schema = typeQuerySchemas.getSchemaForSymbol("QueryFunderResponse"); const vResult = validate(schema, founder); expect(vResult.valid).toBeTruthy(); }); it("Query <stakersList>", async () => { const pool = await lcdClient.kyve.registry.v1beta1.pools({ pagination: { limit: "1" }, }); const stakers = await lcdClient.kyve.registry.v1beta1.stakersList({ pool_id: pool.pools[0].id, status: 1, }); const schema = typeQuerySchemas.getSchemaForSymbol( "QueryStakersListResponse" ); const vResult = validate(schema, stakers); expect(vResult.valid).toBeTruthy(); }); it("Query <staker>", async () => { const pool = await lcdClient.kyve.registry.v1beta1.pools({ pagination: { limit: "1" }, }); const stakersListResponse = await lcdClient.kyve.registry.v1beta1.stakersList( { pool_id: pool.pools[0].id, status: 1, } ); const stakerResponse = await lcdClient.kyve.registry.v1beta1.staker({ pool_id: pool.pools[0].id, staker: stakersListResponse.stakers[0].staker, }); const schema = typeQuerySchemas.getSchemaForSymbol("QueryStakerResponse"); const vResult = validate(schema, stakerResponse); expect(vResult.valid).toBeTruthy(); }); it("Query <proposals>", async () => { const pool = await lcdClient.kyve.registry.v1beta1.pools({ pagination: { limit: "1" }, }); const proposals = await lcdClient.kyve.registry.v1beta1.proposals({ pool_id: pool.pools[0].id, }); const schema = typeQuerySchemas.getSchemaForSymbol("QueryProposalsResponse"); //do not test pagination property delete schema.properties?.pagination; delete proposals.pagination; const vResult = validate(schema, proposals); expect(vResult.valid).toBeTruthy(); }); it("Query <proposal>", async () => { const pool = await lcdClient.kyve.registry.v1beta1.pools({ pagination: { limit: "1" }, }); const proposals = await lcdClient.kyve.registry.v1beta1.proposals({ pool_id: pool.pools[0].id, }); const proposal = await lcdClient.kyve.registry.v1beta1.proposal({ storage_id: proposals.proposals[0].storage_id, }); const schema = typeQuerySchemas.getSchemaForSymbol("QueryProposalResponse"); const vResult = validate(schema, proposal); expect(vResult.valid).toBeTruthy(); }); it("Query <proposalByHeight>", async () => { const pool = await lcdClient.kyve.registry.v1beta1.pools({ pagination: { limit: "1" }, }); const proposalByHeightResponse = await lcdClient.kyve.registry.v1beta1.proposalByHeight({ pool_id: pool.pools[0].id, height: TEST_HEIGHT, }); const schema = typeQuerySchemas.getSchemaForSymbol( "QueryProposalByHeightResponse" ); const vResult = validate(schema, proposalByHeightResponse); expect(vResult.valid).toBeTruthy(); }); it("Query <canPropose>", async () => { const pool = await lcdClient.kyve.registry.v1beta1.pools({ pagination: { limit: "1" }, }); const stakersListResponse = await lcdClient.kyve.registry.v1beta1.stakersList( { pool_id: pool.pools[0].id, status: 1, } ); const canProposeRes = await lcdClient.kyve.registry.v1beta1.canPropose({ pool_id: pool.pools[0].id, proposer: stakersListResponse.stakers[0].staker, from_height: TEST_HEIGHT, }); const schema = typeQuerySchemas.getSchemaForSymbol("QueryCanProposeResponse"); const vResult = validate(schema, canProposeRes); expect(vResult.valid).toBeTruthy(); }); it("Query <canVote>", async () => { const pool = await lcdClient.kyve.registry.v1beta1.pools({ pagination: { limit: "1" }, }); const stakersListResponse = await lcdClient.kyve.registry.v1beta1.stakersList( { pool_id: pool.pools[0].id, status: 1, } ); const proposals = await lcdClient.kyve.registry.v1beta1.proposals({ pool_id: pool.pools[0].id, }); const canVoteRes = await lcdClient.kyve.registry.v1beta1.canVote({ pool_id: pool.pools[0].id, voter: stakersListResponse.stakers[0].staker, storage_id: proposals.proposals[0].storage_id, }); const schema = typeQuerySchemas.getSchemaForSymbol("QueryCanVoteResponse"); const vResult = validate(schema, canVoteRes); expect(vResult.valid).toBeTruthy(); }); it("Query <stakeInfo>", async () => { const pool = await lcdClient.kyve.registry.v1beta1.pools({ pagination: { limit: "1" }, }); const stakersListResponse = await lcdClient.kyve.registry.v1beta1.stakersList( { pool_id: pool.pools[0].id, status: 1, } ); const stakeInfoRes = await lcdClient.kyve.registry.v1beta1.stakeInfo({ pool_id: pool.pools[0].id, staker: stakersListResponse.stakers[0].staker, }); const schema = typeQuerySchemas.getSchemaForSymbol("QueryStakeInfoResponse"); const vResult = validate(schema, stakeInfoRes); expect(vResult.valid).toBeTruthy(); }); it("Query <accountAssets>", async () => { const pool = await lcdClient.kyve.registry.v1beta1.pools({ pagination: { limit: "1" }, }); const stakersListResponse = await lcdClient.kyve.registry.v1beta1.stakersList( { pool_id: pool.pools[0].id, status: 1, } ); const accountAssetsRes = await lcdClient.kyve.registry.v1beta1.accountAssets({ address: stakersListResponse.stakers[0].account, }); const schema = typeQuerySchemas.getSchemaForSymbol( "QueryAccountAssetsResponse" ); const vResult = validate(schema, accountAssetsRes); expect(vResult.valid).toBeTruthy(); }); it("Query <accountFundedList>", async () => { const pool = await lcdClient.kyve.registry.v1beta1.pools({ pagination: { limit: "1" }, }); const foundersRes = await lcdClient.kyve.registry.v1beta1.fundersList({ pool_id: pool.pools[0].id, }); const accountFundedListRes = await lcdClient.kyve.registry.v1beta1.accountFundedList({ address: foundersRes.funders[0].account, }); const schema = typeQuerySchemas.getSchemaForSymbol( "QueryAccountFundedListResponse" ); // do not test pagination property delete schema.properties?.pagination; delete accountFundedListRes.pagination; const vResult = validate(schema, accountFundedListRes); expect(vResult.valid).toBeTruthy(); }); it("Query <accountStakedList>", async () => { const pool = await lcdClient.kyve.registry.v1beta1.pools({ pagination: { limit: "1" }, }); const stakersListResponse = await lcdClient.kyve.registry.v1beta1.stakersList( { pool_id: pool.pools[0].id, status: 1, } ); const accountStakedListRes = await lcdClient.kyve.registry.v1beta1.accountStakedList({ address: stakersListResponse.stakers[0].account, }); const schema = typeQuerySchemas.getSchemaForSymbol( "QueryAccountStakedListResponse" ); // do not test pagination property delete schema.properties?.pagination; delete accountStakedListRes.pagination; const vResult = validate(schema, accountStakedListRes); expect(vResult.valid).toBeTruthy(); }); it("Query <accountDelegationList>", async () => { const pool = await lcdClient.kyve.registry.v1beta1.pools({ pagination: { limit: "1" }, }); const stakersListResponse = await lcdClient.kyve.registry.v1beta1.stakersList( { pool_id: pool.pools[0].id, status: 1, } ); const accountDelegationListRes = await lcdClient.kyve.registry.v1beta1.accountDelegationList({ address: stakersListResponse.stakers[0].account, }); const schema = typeQuerySchemas.getSchemaForSymbol( "QueryAccountDelegationListResponse" ); // do not test pagination property delete schema.properties?.pagination; delete accountDelegationListRes.pagination; const vResult = validate(schema, accountDelegationListRes); expect(vResult.valid).toBeTruthy(); }); it("Query <delegatorsByPoolAndStaker>", async () => { const pool = await lcdClient.kyve.registry.v1beta1.pools({ pagination: { limit: "1" }, }); const stakersListResponse = await lcdClient.kyve.registry.v1beta1.stakersList( { pool_id: pool.pools[0].id, status: 1, } ); const delegatorsRes = await lcdClient.kyve.registry.v1beta1.delegatorsByPoolAndStaker({ pool_id: pool.pools[0].id, staker: stakersListResponse.stakers[0].staker, }); const schema = typeQuerySchemas.getSchemaForSymbol( "QueryDelegatorsByPoolAndStakerResponse" ); //do not test pagination property delete schema.properties?.pagination; delete delegatorsRes.pagination; const vResult = validate(schema, delegatorsRes); expect(vResult.valid).toBeTruthy(); }); it("Query <delegator>", async () => { const pool = await lcdClient.kyve.registry.v1beta1.pools({ pagination: { limit: "1" }, }); const stakersListResponse = await lcdClient.kyve.registry.v1beta1.stakersList( { pool_id: pool.pools[0].id, status: 1, } ); const delegatorsRes = await lcdClient.kyve.registry.v1beta1.delegatorsByPoolAndStaker({ pool_id: pool.pools[0].id, staker: stakersListResponse.stakers[0].staker, }); const delegatorResponse = await lcdClient.kyve.registry.v1beta1.delegator({ pool_id: pool.pools[0].id, staker: stakersListResponse.stakers[0].staker, delegator: delegatorsRes.delegators[0].delegator, }); const schema = typeQuerySchemas.getSchemaForSymbol("QueryDelegatorResponse"); const vResult = validate(schema, delegatorResponse); expect(vResult.valid).toBeTruthy(); }); it("Query <stakersByPoolAndDelegator>", async () => { const pool = await lcdClient.kyve.registry.v1beta1.pools({ pagination: { limit: "1" }, }); const stakersListResponse = await lcdClient.kyve.registry.v1beta1.stakersList( { pool_id: pool.pools[0].id, status: 1, } ); const delegatorsRes = await lcdClient.kyve.registry.v1beta1.delegatorsByPoolAndStaker({ pool_id: pool.pools[0].id, staker: stakersListResponse.stakers[0].staker, }); const stakersByPoolAndDelegatorRes = await lcdClient.kyve.registry.v1beta1.stakersByPoolAndDelegator({ pool_id: pool.pools[0].id, delegator: delegatorsRes.delegators[0].delegator, }); const schema = typeQuerySchemas.getSchemaForSymbol( "QueryStakersByPoolAndDelegatorResponse" ); //do not test pagination property delete schema.properties?.pagination; delete stakersByPoolAndDelegatorRes.pagination; const vResult = validate(schema, stakersByPoolAndDelegatorRes); expect(vResult.valid).toBeTruthy(); }); it("Query <accountStakingUnbondingsRequest>", async () => { const pool = await lcdClient.kyve.registry.v1beta1.pools({ paused: false, pagination: { limit: "1" }, }); const stakersListResponse = await lcdClient.kyve.registry.v1beta1.stakersList( { pool_id: pool.pools[0].id, status: 1, } ); //todo: suppose that in a pool at least one unbonding staker, need mock data const staker = stakersListResponse.stakers.filter( (it) => it.unbonding_amount.length > 1 ); const accountStakingUnbondingResponse = await lcdClient.kyve.registry.v1beta1.accountStakingUnbonding({ address: staker[0].account, }); const schema = typeQuerySchemas.getSchemaForSymbol( "QueryAccountStakingUnbondingsResponse" ); delete schema.properties?.pagination; delete accountStakingUnbondingResponse.pagination; const vResult = validate(schema, accountStakingUnbondingResponse); expect(vResult.valid).toBeTruthy(); }); it("Query <accountDelegationUnbondings>", async () => { const pool = await lcdClient.kyve.registry.v1beta1.pools({ paused: false, pagination: { limit: "1" }, }); const stakersListResponse = await lcdClient.kyve.registry.v1beta1.stakersList( { pool_id: pool.pools[0].id, status: 1, } ); //todo: suppose that in a pool at least one unbonding staker, need mock data const unboandingStakers = stakersListResponse.stakers.filter( (it) => it.unbonding_amount.length > 1 ); const delegatorsRes = await lcdClient.kyve.registry.v1beta1.delegatorsByPoolAndStaker({ pool_id: pool.pools[0].id, staker: unboandingStakers[0].staker, }); const accountDelegationUnbondingRes = ( await Promise.all( delegatorsRes.delegators.map(async (delegator) => { const accountStakingUnbondingResponse = await lcdClient.kyve.registry.v1beta1.accountDelegationUnbondings({ address: delegator.delegator, }); if (accountStakingUnbondingResponse.unbondings.length) { return accountStakingUnbondingResponse; } }) ) ).find(Boolean); const schema = typeQuerySchemas.getSchemaForSymbol( "QueryAccountDelegationUnbondingsResponse" ); delete schema.properties?.pagination; delete accountDelegationUnbondingRes?.pagination; const vResult = validate(schema, accountDelegationUnbondingRes); expect(vResult.valid).toBeTruthy(); });