From e7ef1d426e06ebced45d056170d5ffddeaeb1f73 Mon Sep 17 00:00:00 2001 From: Thomas <4159106+dtslvr@users.noreply.github.com> Date: Wed, 28 Jul 2021 15:54:37 +0200 Subject: [PATCH] Refactoring --- .../src/app/core/portfolio-calculator.spec.ts | 67 +++++++------------ 1 file changed, 25 insertions(+), 42 deletions(-) diff --git a/apps/api/src/app/core/portfolio-calculator.spec.ts b/apps/api/src/app/core/portfolio-calculator.spec.ts index 02c571ad4..9de8ff260 100644 --- a/apps/api/src/app/core/portfolio-calculator.spec.ts +++ b/apps/api/src/app/core/portfolio-calculator.spec.ts @@ -15,32 +15,14 @@ import { differenceInCalendarDays, endOfDay, isBefore, + isSameDay, parse } from 'date-fns'; -function toYearMonthDay(date: Date) { - const year = date.getFullYear(); - const month = date.getMonth() + 1; - const day = date.getDate(); - - return [year, month, day]; -} - -function dateEqual(date1: Date, date2: Date) { - const date1Converted = toYearMonthDay(date1); - const date2Converted = toYearMonthDay(date2); - - return ( - date1Converted[0] === date2Converted[0] && - date1Converted[1] === date2Converted[1] && - date1Converted[2] === date2Converted[2] - ); -} - function mockGetValue(symbol: string, date: Date) { const today = new Date(); if (symbol === 'VTI') { - if (dateEqual(today, date)) { + if (isSameDay(today, date)) { return { marketPrice: 213.32 }; } else { const startDate = parse('2019-02-01', 'yyyy-MM-dd', new Date()); @@ -54,10 +36,10 @@ 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)) { + if (isSameDay(parse('2021-07-26', 'yyyy-MM-dd', new Date()), date)) { return { marketPrice: 657.62 }; } - if (dateEqual(parse('2021-01-02', 'yyyy-MM-dd', new Date()), date)) { + if (isSameDay(parse('2021-01-02', 'yyyy-MM-dd', new Date()), date)) { return { marketPrice: 666.66 }; } return { marketPrice: 0 }; @@ -72,9 +54,9 @@ jest.mock('@ghostfolio/api/app/core/current-rate.service', () => { CurrentRateService: jest.fn().mockImplementation(() => { return { getValue: ({ + currency, date, symbol, - currency, userCurrency }: GetValueParams) => { return Promise.resolve(mockGetValue(symbol, date)); @@ -144,13 +126,13 @@ describe('PortfolioCalculator', () => { const orders = [ ...ordersVTI, { + currency: Currency.USD, date: '2021-02-01', name: 'Vanguard Total Stock Market Index Fund ETF Shares', quantity: new Big('20'), symbol: 'VTI', type: OrderType.Buy, - unitPrice: new Big('197.15'), - currency: Currency.USD + unitPrice: new Big('197.15') } ]; const portfolioCalculator = new PortfolioCalculator( @@ -166,12 +148,12 @@ describe('PortfolioCalculator', () => { date: '2019-02-01', items: [ { + currency: Currency.USD, + firstBuyDate: '2019-02-01', + investment: new Big('1443.8'), name: 'Vanguard Total Stock Market Index Fund ETF Shares', quantity: new Big('10'), symbol: 'VTI', - investment: new Big('1443.8'), - currency: Currency.USD, - firstBuyDate: '2019-02-01', transactionCount: 1 } ] @@ -180,12 +162,12 @@ describe('PortfolioCalculator', () => { date: '2019-08-03', items: [ { + currency: Currency.USD, + firstBuyDate: '2019-02-01', + investment: new Big('2923.7'), name: 'Vanguard Total Stock Market Index Fund ETF Shares', quantity: new Big('20'), symbol: 'VTI', - investment: new Big('2923.7'), - currency: Currency.USD, - firstBuyDate: '2019-02-01', transactionCount: 2 } ] @@ -194,12 +176,12 @@ describe('PortfolioCalculator', () => { date: '2020-02-02', items: [ { + currency: Currency.USD, + firstBuyDate: '2019-02-01', + investment: new Big('652.55'), name: 'Vanguard Total Stock Market Index Fund ETF Shares', quantity: new Big('5'), symbol: 'VTI', - investment: new Big('652.55'), - currency: Currency.USD, - firstBuyDate: '2019-02-01', transactionCount: 3 } ] @@ -208,12 +190,12 @@ describe('PortfolioCalculator', () => { date: '2021-02-01', items: [ { + currency: Currency.USD, + firstBuyDate: '2019-02-01', + investment: new Big('6627.05'), name: 'Vanguard Total Stock Market Index Fund ETF Shares', quantity: new Big('35'), symbol: 'VTI', - investment: new Big('6627.05'), - currency: Currency.USD, - firstBuyDate: '2019-02-01', transactionCount: 5 } ] @@ -222,12 +204,12 @@ describe('PortfolioCalculator', () => { date: '2021-08-01', items: [ { + currency: Currency.USD, + firstBuyDate: '2019-02-01', + investment: new Big('8403.95'), name: 'Vanguard Total Stock Market Index Fund ETF Shares', quantity: new Big('45'), symbol: 'VTI', - investment: new Big('8403.95'), - currency: Currency.USD, - firstBuyDate: '2019-02-01', transactionCount: 6 } ] @@ -239,13 +221,13 @@ describe('PortfolioCalculator', () => { const orders = [ ...ordersVTI, { + currency: Currency.USD, date: '2019-09-01', name: 'Amazon.com, Inc.', quantity: new Big('5'), symbol: 'AMZN', type: OrderType.Buy, - unitPrice: new Big('2021.99'), - currency: Currency.USD + unitPrice: new Big('2021.99') } ]; const portfolioCalculator = new PortfolioCalculator( @@ -1463,6 +1445,7 @@ describe('PortfolioCalculator', () => { }); }); }); + const ordersMixedSymbols: PortfolioOrder[] = [ { date: '2017-01-03',