| 
						
						
						
					 | 
				
				 | 
				
					@ -1,16 +1,39 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import { PortfolioCalculator, PortfolioOrder } from '@ghostfolio/api/app/core/portfolio-calculator'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import { CurrentRateService } from '@ghostfolio/api/app/core/current-rate.service'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import { CurrentRateService, GetValueParams } from '@ghostfolio/api/app/core/current-rate.service'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import { Currency } from '@prisma/client'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import { OrderType } from '@ghostfolio/api/models/order-type'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import Big from 'big.js'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					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] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					jest.mock('./current-rate.service.ts', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  return { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // eslint-disable-next-line @typescript-eslint/naming-convention
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    CurrentRateService: jest.fn().mockImplementation(() => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      return { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        getValue: (date: Date, symbol: string, currency: Currency) => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          return 4; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        getValue: ({date, symbol, currency, userCurrency}: GetValueParams) => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          const today = new Date(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          if (dateEqual(today, date) && symbol === 'VTI') { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return Promise.resolve(new Big('213.32')); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          return Promise.resolve(new Big('0')); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      }; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    }) | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -26,56 +49,11 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  describe('calculate transaction points', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    it('with orders of only one symbol', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioCalculator = new PortfolioCalculator(currentRateService, Currency.USD, ordersVTI); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioItemsAtTransactionPoints = portfolioCalculator.getPortfolioItemsAtTransactionPoints(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioCalculator = new PortfolioCalculator(currentRateService, Currency.USD); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      portfolioCalculator.computeTransactionPoints(ordersVTI); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioItemsAtTransactionPoints = portfolioCalculator.getTransactionPoints(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      expect(portfolioItemsAtTransactionPoints).toEqual([ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          date: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          items: [{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('10'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('1443.8'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          date: '2019-08-03', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          items: [{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('20'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('2923.7'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          date: '2020-02-02', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          items: [{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('5'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('652.55'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          date: '2021-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          items: [{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('15'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('2684.05'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          date: '2021-08-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          items: [{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('25'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('4460.95'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      expect(portfolioItemsAtTransactionPoints).toEqual(ordersVTITransactionPoints); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    it('with two orders at the same day of the same type', () => { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -90,8 +68,9 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioCalculator = new PortfolioCalculator(currentRateService, Currency.USD, orders); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioItemsAtTransactionPoints = portfolioCalculator.getPortfolioItemsAtTransactionPoints(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioCalculator = new PortfolioCalculator(currentRateService, Currency.USD); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      portfolioCalculator.computeTransactionPoints(orders); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioItemsAtTransactionPoints = portfolioCalculator.getTransactionPoints(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      expect(portfolioItemsAtTransactionPoints).toEqual([ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -100,7 +79,9 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('10'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('1443.8'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -109,7 +90,9 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('20'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('2923.7'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 2 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -118,7 +101,9 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('5'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('652.55'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 3 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -127,7 +112,9 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('35'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('6627.05'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 5 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -136,7 +123,9 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('45'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('8403.95'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 6 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ]); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -154,8 +143,9 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioCalculator = new PortfolioCalculator(currentRateService, Currency.USD, orders); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioItemsAtTransactionPoints = portfolioCalculator.getPortfolioItemsAtTransactionPoints(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioCalculator = new PortfolioCalculator(currentRateService, Currency.USD); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      portfolioCalculator.computeTransactionPoints(orders); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioItemsAtTransactionPoints = portfolioCalculator.getTransactionPoints(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      expect(portfolioItemsAtTransactionPoints).toEqual([ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -164,7 +154,9 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('10'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('1443.8'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -173,7 +165,9 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('20'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('2923.7'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 2 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -182,12 +176,16 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('5'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'AMZN', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('10109.95'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-09-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }, { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('20'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('2923.7'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 2 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -196,12 +194,16 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('5'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'AMZN', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('10109.95'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-09-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }, { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('5'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('652.55'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 3 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -210,12 +212,16 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('5'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'AMZN', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('10109.95'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-09-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }, { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('15'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('2684.05'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 4 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -224,12 +230,16 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('5'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'AMZN', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('10109.95'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-09-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }, { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('25'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('4460.95'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 5 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ]); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -255,8 +265,9 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioCalculator = new PortfolioCalculator(currentRateService, Currency.USD, orders); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioItemsAtTransactionPoints = portfolioCalculator.getPortfolioItemsAtTransactionPoints(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioCalculator = new PortfolioCalculator(currentRateService, Currency.USD); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      portfolioCalculator.computeTransactionPoints(orders); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioItemsAtTransactionPoints = portfolioCalculator.getTransactionPoints(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      expect(portfolioItemsAtTransactionPoints).toEqual([ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -265,7 +276,9 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('10'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('1443.8'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -274,7 +287,9 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('20'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('2923.7'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 2 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -283,12 +298,16 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('5'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'AMZN', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('10109.95'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-09-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }, { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('20'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('2923.7'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 2 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -297,12 +316,16 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('5'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'AMZN', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('10109.95'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-09-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }, { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('5'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('652.55'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 3 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -311,7 +334,9 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('5'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('652.55'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 3 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -320,7 +345,9 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('15'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('2684.05'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 4 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -329,15 +356,18 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('25'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('4460.95'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 5 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    it('with mixed symbols', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioCalculator = new PortfolioCalculator(currentRateService, Currency.USD, ordersMixedSymbols); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioItemsAtTransactionPoints = portfolioCalculator.getPortfolioItemsAtTransactionPoints(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioCalculator = new PortfolioCalculator(currentRateService, Currency.USD); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      portfolioCalculator.computeTransactionPoints(ordersMixedSymbols); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioItemsAtTransactionPoints = portfolioCalculator.getTransactionPoints(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      expect(portfolioItemsAtTransactionPoints).toEqual([ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -346,7 +376,9 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('50'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'TSLA', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('2148.5'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2017-01-03', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -355,12 +387,16 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('0.5614682'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'BTCUSD', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('1999.9999999999998659756'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2017-07-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }, { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('50'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'TSLA', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('2148.5'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2017-01-03', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -369,25 +405,55 @@ describe('PortfolioCalculator', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('5'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'AMZN', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('10109.95'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2018-09-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }, { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('0.5614682'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'BTCUSD', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('1999.9999999999998659756'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2017-07-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }, { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quantity: new Big('50'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: 'TSLA', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            investment: new Big('2148.5'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            firstBuyDate: '2017-01-03', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            transactionCount: 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  describe('get current positions', () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    it('with just VTI', async () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const portfolioCalculator = new PortfolioCalculator(currentRateService, Currency.USD); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      portfolioCalculator.setTransactionPoints(ordersVTITransactionPoints); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const currentPositions = await portfolioCalculator.getCurrentPositions(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      expect(currentPositions).toEqual({ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // eslint-disable-next-line @typescript-eslint/naming-convention
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        VTI: { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          averagePrice: new Big('178.438'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          quantity: new Big('25'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          investment: new Big('4460.95'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          marketPrice: new Big('213.32'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          transactionCount: 5 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    }) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  }) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					const ordersMixedSymbols: PortfolioOrder[] = [ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    date: '2017-01-03', | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -457,3 +523,61 @@ const ordersVTI: PortfolioOrder[] = [ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    currency: Currency.USD | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					const ordersVTITransactionPoints = [ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    date: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    items: [{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      quantity: new Big('10'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      investment: new Big('1443.8'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      transactionCount: 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    date: '2019-08-03', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    items: [{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      quantity: new Big('20'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      investment: new Big('2923.7'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      transactionCount: 2 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    date: '2020-02-02', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    items: [{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      quantity: new Big('5'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      investment: new Big('652.55'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      transactionCount: 3 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    date: '2021-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    items: [{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      quantity: new Big('15'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      investment: new Big('2684.05'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      transactionCount: 4 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    date: '2021-08-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    items: [{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      quantity: new Big('25'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      symbol: 'VTI', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      investment: new Big('4460.95'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      currency: Currency.USD, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      firstBuyDate: '2019-02-01', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      transactionCount: 5 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    }] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					]; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
					 | 
				
				 | 
				
					
  |