Browse Source

Fix timezone handling of stock split dates

pull/7568/head
David Requeno 3 weeks ago
parent
commit
3f687cdddf
  1. 20
      apps/api/src/services/asset-profile-split/asset-profile-split.helper.spec.ts
  2. 2
      apps/api/src/services/asset-profile-split/asset-profile-split.helper.ts

20
apps/api/src/services/asset-profile-split/asset-profile-split.helper.spec.ts

@ -2,6 +2,7 @@ import {
activityDummyData,
assetProfileDummyData
} from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator-test-utils';
import * as commonHelper from '@ghostfolio/common/helper';
import { parseDate } from '@ghostfolio/common/helper';
import { Activity } from '@ghostfolio/common/interfaces';
@ -39,7 +40,7 @@ describe('adjustActivityBySplits', () => {
});
it('only adjusts activities before the split calendar date', () => {
const split = createSplit('2024-06-15T12:00:00Z', 2, 1);
const split = createSplit('2024-06-15T00:00:00Z', 2, 1);
const activityOnSplitDate = createActivity('2024-06-15T18:00:00Z');
const activityAfterSplit = createActivity('2024-06-16T00:00:00Z');
@ -57,6 +58,23 @@ describe('adjustActivityBySplits', () => {
expect(adjustedActivityAfterSplit).toEqual(activityAfterSplit);
expect(adjustedActivityAfterSplit).not.toBe(activityAfterSplit);
});
it('compares stored UTC split dates without normalizing them locally', () => {
const resetHoursSpy = jest
.spyOn(commonHelper, 'resetHours')
.mockReturnValue(new Date('2024-06-14T00:00:00Z'));
try {
const activity = createActivity('2024-06-14T12:00:00Z');
const split = createSplit('2024-06-15T00:00:00Z', 2, 1);
const adjustedActivity = adjustActivityBySplits(activity, [split]);
expect(adjustedActivity.quantity).toBe(20);
} finally {
resetHoursSpy.mockRestore();
}
});
});
function createActivity(date: string): Activity {

2
apps/api/src/services/asset-profile-split/asset-profile-split.helper.ts

@ -13,7 +13,7 @@ export function adjustActivityBySplits(
let splitFactor = new Big(1);
for (const split of splits) {
if (isBefore(activityDate, resetHours(split.date))) {
if (isBefore(activityDate, split.date)) {
splitFactor = splitFactor.mul(split.numerator).div(split.denominator);
}
}

Loading…
Cancel
Save