ghostfolio/apps/api/src/app/portfolio/current-rate.service.spec.ts

130 lines
3.4 KiB
TypeScript
Raw Normal View History

import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service';
2021-07-03 16:37:33 +02:00
import { Currency, MarketData } from '@prisma/client';
import { CurrentRateService } from './current-rate.service';
2021-07-03 16:37:33 +02:00
import { MarketDataService } from './market-data.service';
jest.mock('./market-data.service', () => {
return {
2021-07-03 16:37:33 +02:00
MarketDataService: jest.fn().mockImplementation(() => {
return {
2021-07-03 16:37:33 +02:00
get: (date: Date, symbol: string) => {
return Promise.resolve<MarketData>({
date,
symbol,
createdAt: date,
id: 'aefcbe3a-ee10-4c4f-9f2d-8ffad7b05584',
marketPrice: 1847.839966
});
},
2021-07-20 20:42:56 +02:00
getRange: ({
dateRangeEnd,
dateRangeStart,
symbols
}: {
dateRangeEnd: Date;
dateRangeStart: Date;
symbols: string[];
}) => {
return Promise.resolve<MarketData[]>([
{
createdAt: dateRangeStart,
2021-07-28 15:18:05 +02:00
date: dateRangeStart,
id: '8fa48fde-f397-4b0d-adbc-fb940e830e6d',
2021-07-28 15:18:05 +02:00
marketPrice: 1841.823902,
symbol: symbols[0]
},
{
createdAt: dateRangeEnd,
2021-07-28 15:18:05 +02:00
date: dateRangeEnd,
id: '082d6893-df27-4c91-8a5d-092e84315b56',
2021-07-28 15:18:05 +02:00
marketPrice: 1847.839966,
symbol: symbols[0]
}
]);
}
2021-07-03 16:37:33 +02:00
};
})
};
});
2021-07-20 20:42:56 +02:00
jest.mock('@ghostfolio/api/services/exchange-rate-data.service', () => {
2021-07-03 16:37:33 +02:00
return {
ExchangeRateDataService: jest.fn().mockImplementation(() => {
return {
initialize: () => Promise.resolve(),
toCurrency: (value: number) => {
return 1 * value;
}
};
})
};
});
2021-07-03 16:37:33 +02:00
describe('CurrentRateService', () => {
let currentRateService: CurrentRateService;
2021-07-08 22:42:19 +02:00
let dataProviderService: DataProviderService;
let exchangeRateDataService: ExchangeRateDataService;
2021-07-03 16:37:33 +02:00
let marketDataService: MarketDataService;
2021-07-03 16:37:33 +02:00
beforeAll(async () => {
2021-07-08 22:42:19 +02:00
dataProviderService = new DataProviderService(
null,
null,
null,
null,
null,
null
);
2021-07-03 16:37:33 +02:00
exchangeRateDataService = new ExchangeRateDataService(null);
marketDataService = new MarketDataService(null);
2021-07-03 16:37:33 +02:00
await exchangeRateDataService.initialize();
2021-07-03 16:37:33 +02:00
currentRateService = new CurrentRateService(
2021-07-08 22:42:19 +02:00
dataProviderService,
2021-07-03 16:37:33 +02:00
exchangeRateDataService,
marketDataService
);
});
2021-07-03 16:37:33 +02:00
it('getValue', async () => {
expect(
await currentRateService.getValue({
currency: Currency.USD,
date: new Date(Date.UTC(2020, 0, 1, 0, 0, 0)),
symbol: 'AMZN',
userCurrency: Currency.CHF
})
).toMatchObject({
marketPrice: 1847.839966
});
});
it('getValues', async () => {
expect(
await currentRateService.getValues({
2021-07-20 20:42:56 +02:00
currencies: { AMZN: Currency.USD },
dateQuery: {
lt: new Date(Date.UTC(2020, 0, 2, 0, 0, 0)),
gte: new Date(Date.UTC(2020, 0, 1, 0, 0, 0))
},
2021-07-20 20:42:56 +02:00
symbols: ['AMZN'],
userCurrency: Currency.CHF
})
).toMatchObject([
{
2021-07-28 15:20:11 +02:00
date: undefined,
marketPrice: 1841.823902,
symbol: 'AMZN'
},
{
2021-07-28 15:20:11 +02:00
date: undefined,
marketPrice: 1847.839966,
symbol: 'AMZN'
}
]);
2021-07-03 16:37:33 +02:00
});
});