Browse Source

Update tests

pull/6069/head
Thomas Kaul 2 weeks ago
parent
commit
1e7026866b
  1. 52
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts
  2. 11
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts
  3. 11
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts
  4. 62
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts
  5. 18
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-orders.spec.ts

52
apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts

@ -109,6 +109,12 @@ describe('PortfolioCalculator', () => {
const portfolioSnapshot = await portfolioCalculator.computeSnapshot(); const portfolioSnapshot = await portfolioCalculator.computeSnapshot();
const historicalDataDates = portfolioSnapshot.historicalData.map(
({ date }) => {
return date;
}
);
const investments = portfolioCalculator.getInvestments(); const investments = portfolioCalculator.getInvestments();
const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({ const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({
@ -170,8 +176,12 @@ describe('PortfolioCalculator', () => {
totalLiabilitiesWithCurrencyEffect: new Big('0') totalLiabilitiesWithCurrencyEffect: new Big('0')
}); });
expect(historicalDataDates).not.toContain('2021-01-01');
expect(historicalDataDates).not.toContain('2021-12-31');
expect(portfolioSnapshot.historicalData.at(-1)).toMatchObject( expect(portfolioSnapshot.historicalData.at(-1)).toMatchObject(
expect.objectContaining({ expect.objectContaining({
date: '2021-12-18',
netPerformance: 23.05, netPerformance: 23.05,
netPerformanceInPercentage: 0.08437042459736457, netPerformanceInPercentage: 0.08437042459736457,
netPerformanceInPercentageWithCurrencyEffect: 0.08437042459736457, netPerformanceInPercentageWithCurrencyEffect: 0.08437042459736457,
@ -267,47 +277,5 @@ describe('PortfolioCalculator', () => {
// Closing price on 2021-11-30: 136.6 // Closing price on 2021-11-30: 136.6
expect(snapshotOnBuyDate?.netPerformanceWithCurrencyEffect).toEqual(1.65); // 2 * (136.6 - 135.0) - 1.55 = 1.65 expect(snapshotOnBuyDate?.netPerformanceWithCurrencyEffect).toEqual(1.65); // 2 * (136.6 - 135.0) - 1.55 = 1.65
}); });
it('with BALN.SW buy, should include calendar year boundaries for single year', async () => {
jest.useFakeTimers().setSystemTime(parseDate('2021-12-31').getTime());
const activities: Activity[] = [
{
...activityDummyData,
date: new Date('2021-03-01'),
feeInAssetProfileCurrency: 1.55,
quantity: 2,
SymbolProfile: {
...symbolProfileDummyData,
currency: 'CHF',
dataSource: 'YAHOO',
name: 'Bâloise Holding AG',
symbol: 'BALN.SW'
},
type: 'BUY',
unitPriceInAssetProfileCurrency: 136.6
}
];
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
activities,
calculationType: PerformanceCalculationType.ROAI,
currency: 'CHF',
userId: userDummyData.id
});
const portfolioSnapshot = await portfolioCalculator.computeSnapshot();
const chartDates = portfolioSnapshot.historicalData.map(
(item) => item.date
);
// 2021-01-01 is before first activity (2021-03-01), so should NOT be included
expect(chartDates).not.toContain('2021-01-01');
// 2021-12-31 should be included (matches current date)
expect(chartDates).toContain('2021-12-31');
jest.useRealTimers();
});
}); });
}); });

11
apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts

@ -130,6 +130,17 @@ describe('PortfolioCalculator', () => {
const portfolioSnapshot = await portfolioCalculator.computeSnapshot(); const portfolioSnapshot = await portfolioCalculator.computeSnapshot();
const historicalDataDates = portfolioSnapshot.historicalData.map(
({ date }) => {
return date;
}
);
expect(historicalDataDates).not.toContain('2021-01-01');
expect(historicalDataDates).toContain('2021-12-31');
expect(historicalDataDates).toContain('2022-01-01');
expect(historicalDataDates).not.toContain('2022-12-31');
expect(portfolioSnapshot.positions[0].fee).toEqual(new Big(4.46)); expect(portfolioSnapshot.positions[0].fee).toEqual(new Big(4.46));
expect( expect(
portfolioSnapshot.positions[0].feeInBaseCurrency.toNumber() portfolioSnapshot.positions[0].feeInBaseCurrency.toNumber()

11
apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts

@ -118,6 +118,12 @@ describe('PortfolioCalculator', () => {
const portfolioSnapshot = await portfolioCalculator.computeSnapshot(); const portfolioSnapshot = await portfolioCalculator.computeSnapshot();
const historicalDataDates = portfolioSnapshot.historicalData.map(
({ date }) => {
return date;
}
);
const investments = portfolioCalculator.getInvestments(); const investments = portfolioCalculator.getInvestments();
const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({ const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({
@ -225,6 +231,11 @@ describe('PortfolioCalculator', () => {
totalLiabilitiesWithCurrencyEffect: new Big('0') totalLiabilitiesWithCurrencyEffect: new Big('0')
}); });
expect(historicalDataDates).not.toContain('2021-01-01');
expect(historicalDataDates).toContain('2021-12-31');
expect(historicalDataDates).toContain('2022-01-01');
expect(historicalDataDates).not.toContain('2022-12-31');
expect(investments).toEqual([ expect(investments).toEqual([
{ date: '2021-12-12', investment: new Big('44558.42') } { date: '2021-12-12', investment: new Big('44558.42') }
]); ]);

62
apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts

@ -118,6 +118,12 @@ describe('PortfolioCalculator', () => {
const portfolioSnapshot = await portfolioCalculator.computeSnapshot(); const portfolioSnapshot = await portfolioCalculator.computeSnapshot();
const historicalDataDates = portfolioSnapshot.historicalData.map(
({ date }) => {
return date;
}
);
const investments = portfolioCalculator.getInvestments(); const investments = portfolioCalculator.getInvestments();
const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({ const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({
@ -225,6 +231,11 @@ describe('PortfolioCalculator', () => {
totalLiabilitiesWithCurrencyEffect: new Big('0') totalLiabilitiesWithCurrencyEffect: new Big('0')
}); });
expect(historicalDataDates).not.toContain('2021-01-01');
expect(historicalDataDates).toContain('2021-12-31');
expect(historicalDataDates).toContain('2022-01-01');
expect(historicalDataDates).not.toContain('2022-12-31');
expect(investments).toEqual([ expect(investments).toEqual([
{ date: '2021-12-12', investment: new Big('44558.42') } { date: '2021-12-12', investment: new Big('44558.42') }
]); ]);
@ -234,56 +245,5 @@ describe('PortfolioCalculator', () => {
{ date: '2022-01-01', investment: 0 } { date: '2022-01-01', investment: 0 }
]); ]);
}); });
it('with BTCUSD buy, should include calendar year boundaries spanning multiple years', async () => {
jest.useFakeTimers().setSystemTime(parseDate('2023-06-15').getTime());
const activities: Activity[] = [
{
...activityDummyData,
date: new Date('2021-03-15'),
feeInAssetProfileCurrency: 0,
quantity: 1,
SymbolProfile: {
...symbolProfileDummyData,
currency: 'USD',
dataSource: 'YAHOO',
name: 'Bitcoin',
symbol: 'BTCUSD'
},
type: 'BUY',
unitPriceInAssetProfileCurrency: 50000
}
];
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
activities,
calculationType: PerformanceCalculationType.ROAI,
currency: 'USD',
userId: userDummyData.id
});
const portfolioSnapshot = await portfolioCalculator.computeSnapshot();
const chartDates = portfolioSnapshot.historicalData.map(
(item) => item.date
);
// Verify year boundaries for 2021
// 2021-01-01 is before first activity (2021-03-15), so should NOT be included
expect(chartDates).not.toContain('2021-01-01');
expect(chartDates).toContain('2021-12-31');
// Verify year boundaries for 2022
expect(chartDates).toContain('2022-01-01');
expect(chartDates).toContain('2022-12-31');
// Verify year boundaries for 2023
expect(chartDates).toContain('2023-01-01');
// 2023-12-31 is after current date (2023-06-15), so should NOT be included
expect(chartDates).not.toContain('2023-12-31');
jest.useRealTimers();
});
}); });
}); });

18
apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-orders.spec.ts

@ -109,23 +109,5 @@ describe('PortfolioCalculator', () => {
expect(investmentsByMonth).toEqual([]); expect(investmentsByMonth).toEqual([]);
}); });
it('with no orders, should not include any calendar year boundaries', async () => {
jest.useFakeTimers().setSystemTime(parseDate('2021-12-18').getTime());
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
activities: [],
calculationType: PerformanceCalculationType.ROAI,
currency: 'CHF',
userId: userDummyData.id
});
const portfolioSnapshot = await portfolioCalculator.computeSnapshot();
// With no activities, historicalData should be empty (no year boundaries)
expect(portfolioSnapshot.historicalData).toEqual([]);
jest.useRealTimers();
});
}); });
}); });

Loading…
Cancel
Save