Setup tests (#1234)
This commit is contained in:
parent
d4e2cec77e
commit
c4d83aabe7
15
apps/api/src/app/benchmark/benchmark.service.spec.ts
Normal file
15
apps/api/src/app/benchmark/benchmark.service.spec.ts
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import { BenchmarkService } from './benchmark.service';
|
||||||
|
|
||||||
|
describe('BenchmarkService', () => {
|
||||||
|
let benchmarkService: BenchmarkService;
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
|
benchmarkService = new BenchmarkService(null, null, null, null, null);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('calculateChangeInPercentage', async () => {
|
||||||
|
expect(benchmarkService.calculateChangeInPercentage(1, 2)).toEqual(1);
|
||||||
|
expect(benchmarkService.calculateChangeInPercentage(2, 2)).toEqual(0);
|
||||||
|
expect(benchmarkService.calculateChangeInPercentage(2, 1)).toEqual(-0.5);
|
||||||
|
});
|
||||||
|
});
|
@ -27,6 +27,10 @@ export class BenchmarkService {
|
|||||||
private readonly symbolProfileService: SymbolProfileService
|
private readonly symbolProfileService: SymbolProfileService
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
|
public calculateChangeInPercentage(baseValue: number, currentValue: number) {
|
||||||
|
return new Big(currentValue).div(baseValue).minus(1).toNumber();
|
||||||
|
}
|
||||||
|
|
||||||
public async getBenchmarks({ useCache = true } = {}): Promise<
|
public async getBenchmarks({ useCache = true } = {}): Promise<
|
||||||
BenchmarkResponse['benchmarks']
|
BenchmarkResponse['benchmarks']
|
||||||
> {
|
> {
|
||||||
@ -64,12 +68,13 @@ export class BenchmarkService {
|
|||||||
benchmarks = allTimeHighs.map((allTimeHigh, index) => {
|
benchmarks = allTimeHighs.map((allTimeHigh, index) => {
|
||||||
const { marketPrice } = quotes[benchmarkAssets[index].symbol] ?? {};
|
const { marketPrice } = quotes[benchmarkAssets[index].symbol] ?? {};
|
||||||
|
|
||||||
let performancePercentFromAllTimeHigh = new Big(0);
|
let performancePercentFromAllTimeHigh = 0;
|
||||||
|
|
||||||
if (allTimeHigh && marketPrice) {
|
if (allTimeHigh && marketPrice) {
|
||||||
performancePercentFromAllTimeHigh = new Big(marketPrice)
|
performancePercentFromAllTimeHigh = this.calculateChangeInPercentage(
|
||||||
.div(allTimeHigh)
|
allTimeHigh,
|
||||||
.minus(1);
|
marketPrice
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@ -84,7 +89,7 @@ export class BenchmarkService {
|
|||||||
})?.name,
|
})?.name,
|
||||||
performances: {
|
performances: {
|
||||||
allTimeHigh: {
|
allTimeHigh: {
|
||||||
performancePercent: performancePercentFromAllTimeHigh.toNumber()
|
performancePercent: performancePercentFromAllTimeHigh
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -135,26 +140,24 @@ export class BenchmarkService {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const marketPriceAtStartDate = new Big(
|
const marketPriceAtStartDate = marketDataItems?.[0]?.marketPrice ?? 0;
|
||||||
marketDataItems?.[0]?.marketPrice ?? 0
|
|
||||||
);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
marketData: marketDataItems.map((marketDataItem) => {
|
marketData: marketDataItems.map((marketDataItem) => {
|
||||||
return {
|
return {
|
||||||
date: format(marketDataItem.date, DATE_FORMAT),
|
date: format(marketDataItem.date, DATE_FORMAT),
|
||||||
value: marketPriceAtStartDate.eq(0)
|
value:
|
||||||
? 0
|
marketPriceAtStartDate === 0
|
||||||
: new Big(marketDataItem.marketPrice)
|
? 0
|
||||||
.div(marketPriceAtStartDate)
|
: this.calculateChangeInPercentage(
|
||||||
.minus(1)
|
marketPriceAtStartDate,
|
||||||
.toNumber() * 100
|
marketDataItem.marketPrice
|
||||||
|
) * 100
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private getMarketCondition(aPerformanceInPercent: Big) {
|
private getMarketCondition(aPerformanceInPercent: number) {
|
||||||
return aPerformanceInPercent.lte(-0.2) ? 'BEAR_MARKET' : 'NEUTRAL_MARKET';
|
return aPerformanceInPercent <= -0.2 ? 'BEAR_MARKET' : 'NEUTRAL_MARKET';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user