|
|
|
@ -46,8 +46,6 @@ function mockGetValue(symbol: string, date: Date) {
|
|
|
|
|
if (symbol === 'VTI') {
|
|
|
|
|
if (dateEqual(today, date)) {
|
|
|
|
|
return { marketPrice: 213.32 };
|
|
|
|
|
} else if (dateEqual(parse('2021-07-26', 'yyyy-MM-dd', new Date()), date)) {
|
|
|
|
|
return { marketPrice: 227.92 };
|
|
|
|
|
} else {
|
|
|
|
|
const startDate = parse('2019-02-01', 'yyyy-MM-dd', new Date());
|
|
|
|
|
const daysInBetween = differenceInCalendarDays(date, startDate);
|
|
|
|
@ -59,6 +57,11 @@ function mockGetValue(symbol: string, date: Date) {
|
|
|
|
|
}
|
|
|
|
|
} else if (symbol === 'AMZN') {
|
|
|
|
|
return { marketPrice: 2021.99 };
|
|
|
|
|
} else if (symbol === 'TSLA') {
|
|
|
|
|
if (dateEqual(parse('2021-07-26', 'yyyy-MM-dd', new Date()), date)) {
|
|
|
|
|
return { marketPrice: 657.62 };
|
|
|
|
|
}
|
|
|
|
|
return { marketPrice: 0 };
|
|
|
|
|
} else {
|
|
|
|
|
return { marketPrice: 0 };
|
|
|
|
|
}
|
|
|
|
@ -612,12 +615,12 @@ describe('PortfolioCalculator', () => {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
describe('get current positions', () => {
|
|
|
|
|
it('with single VTI', async () => {
|
|
|
|
|
it('with single TSLA', async () => {
|
|
|
|
|
const portfolioCalculator = new PortfolioCalculator(
|
|
|
|
|
currentRateService,
|
|
|
|
|
Currency.USD
|
|
|
|
|
);
|
|
|
|
|
portfolioCalculator.setTransactionPoints(orderVTITransactionPoint);
|
|
|
|
|
portfolioCalculator.setTransactionPoints(orderTslaTransactionPoint);
|
|
|
|
|
|
|
|
|
|
const spy = jest
|
|
|
|
|
.spyOn(Date, 'now')
|
|
|
|
@ -631,16 +634,16 @@ describe('PortfolioCalculator', () => {
|
|
|
|
|
hasErrors: false,
|
|
|
|
|
positions: [
|
|
|
|
|
{
|
|
|
|
|
averagePrice: new Big('195.39'),
|
|
|
|
|
averagePrice: new Big('719.46'),
|
|
|
|
|
currency: 'USD',
|
|
|
|
|
firstBuyDate: '2021-01-01',
|
|
|
|
|
grossPerformance: new Big('32.53'), // 227.92-195.39=32.53
|
|
|
|
|
grossPerformancePercentage: new Big('0.166487537745023'), // (227.92-195.39)/195.39=0.166487537745023
|
|
|
|
|
investment: new Big('195.39'),
|
|
|
|
|
marketPrice: 227.92,
|
|
|
|
|
name: 'Vanguard Total Stock Market Index Fund ETF Shares',
|
|
|
|
|
grossPerformance: new Big('-61.84'), // 657.62-719.46=-61.84
|
|
|
|
|
grossPerformancePercentage: new Big('-0.0859533539043171'), // (657.62-719.46)/719.46=-0.085953353904317
|
|
|
|
|
investment: new Big('719.46'),
|
|
|
|
|
marketPrice: 657.62,
|
|
|
|
|
name: 'Tesla, Inc.',
|
|
|
|
|
quantity: new Big('1'),
|
|
|
|
|
symbol: 'VTI',
|
|
|
|
|
symbol: 'TSLA',
|
|
|
|
|
transactionCount: 1
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
@ -1469,15 +1472,15 @@ const ordersVTI: PortfolioOrder[] = [
|
|
|
|
|
}
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
const orderVTITransactionPoint: TransactionPoint[] = [
|
|
|
|
|
const orderTslaTransactionPoint: TransactionPoint[] = [
|
|
|
|
|
{
|
|
|
|
|
date: '2021-01-01',
|
|
|
|
|
items: [
|
|
|
|
|
{
|
|
|
|
|
name: 'Vanguard Total Stock Market Index Fund ETF Shares',
|
|
|
|
|
name: 'Tesla, Inc.',
|
|
|
|
|
quantity: new Big('1'),
|
|
|
|
|
symbol: 'VTI',
|
|
|
|
|
investment: new Big('195.39'),
|
|
|
|
|
symbol: 'TSLA',
|
|
|
|
|
investment: new Big('719.46'),
|
|
|
|
|
currency: Currency.USD,
|
|
|
|
|
firstBuyDate: '2021-01-01',
|
|
|
|
|
transactionCount: 1
|
|
|
|
|