Skip to content

Commit

Permalink
Merge pull request #654 from input-output-hk/fix/stake-pool-APY-sorte…
Browse files Browse the repository at this point in the history
…d-search-fix

fix(cardano-services): stake-pool APY sorted search no longer returns error when APY is disabled
  • Loading branch information
rhyslbw committed Mar 17, 2023
2 parents 594d3ee + f81d6c0 commit f3963d7
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 11 deletions.
Expand Up @@ -126,9 +126,14 @@ export class DbSyncStakePoolProvider extends DbSyncProvider(RunnableModule) impl
return (options?: QueryStakePoolsArgs) =>
this.#builder.queryPoolMetrics(hashesIds, totalStake, useBlockfrost, options);
case 'apy':
// HACK: If the client request sort by APY default to normal sorting.
if (this.#responseConfig?.search?.metrics?.apy === false) {
throw new ProviderError(ProviderFailure.BadRequest, undefined, 'APY metric is disabled');
return async (options?: QueryStakePoolsArgs) => {
if (options) options.sort = undefined;
return await this.#builder.queryPoolData(updatesIds, useBlockfrost, options);
};
}

return (options?: QueryStakePoolsArgs) => this.#builder.queryPoolAPY(hashesIds, this.#epochLength, options);
case 'data':
default:
Expand Down Expand Up @@ -164,6 +169,7 @@ export class DbSyncStakePoolProvider extends DbSyncProvider(RunnableModule) impl
const updatesIds = poolUpdates.map(({ updateId }) => updateId);
this.logger.debug(`${hashesIds.length} pools found`);
const sortType = options?.sort?.field ? getStakePoolSortType(options.sort.field) : 'data';

const orderedResult = await this.getQueryBySortType(
sortType,
{ hashesIds, totalStake, updatesIds },
Expand All @@ -174,6 +180,7 @@ export class DbSyncStakePoolProvider extends DbSyncProvider(RunnableModule) impl
(id) => poolUpdates[poolUpdates.findIndex((item) => item.id === id)].updateId
);
let poolDatas: PoolData[] = [];

if (sortType !== 'data') {
this.logger.debug('About to query stake pools data');
poolDatas = await this.#builder.queryPoolData(orderedResultUpdateIds, useBlockfrost);
Expand Down
@@ -1,7 +1,7 @@
/* eslint-disable sonarjs/no-duplicate-string */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable max-len */
import { Cardano, ProviderError, QueryStakePoolsArgs, SortField, StakePoolProvider } from '@cardano-sdk/core';
import { Cardano, QueryStakePoolsArgs, SortField, StakePoolProvider } from '@cardano-sdk/core';
import { CreateHttpProviderConfig, stakePoolHttpProvider } from '../../../cardano-services-client';
import { DbSyncEpochPollService, loadGenesisData } from '../../src/util';
import {
Expand Down Expand Up @@ -1420,19 +1420,21 @@ describe('StakePoolHttpService', () => {
});
describe('sort by APY', () => {
it('desc order', async () => {
await expect(
provider.queryStakePools(setSortCondition({ pagination }, 'desc', 'apy'))
).rejects.toBeInstanceOf(ProviderError);
const response = await provider.queryStakePools(setSortCondition({ pagination }, 'desc', 'apy'));
expect(response.pageResults.length).toBeGreaterThan(0);
expect(response.pageResults[0].metrics.apy).toBeUndefined();
});
it('asc order', async () => {
await expect(
provider.queryStakePools(setSortCondition({ pagination }, 'asc', 'apy'))
).rejects.toBeInstanceOf(ProviderError);
const response = await provider.queryStakePools(setSortCondition({ pagination }, 'asc', 'apy'));
expect(response.pageResults.length).toBeGreaterThan(0);
expect(response.pageResults[0].metrics.apy).toBeUndefined();
});
it('with applied filters', async () => {
await expect(
provider.queryStakePools(setSortCondition(setFilterCondition(filterArgs, 'or'), 'asc', 'apy'))
).rejects.toBeInstanceOf(ProviderError);
const response = await provider.queryStakePools(
setSortCondition(setFilterCondition(filterArgs, 'or'), 'asc', 'apy')
);
expect(response.pageResults.length).toBeGreaterThan(0);
expect(response.pageResults[0].metrics.apy).toBeUndefined();
});
});
});
Expand Down

0 comments on commit f3963d7

Please sign in to comment.