feat(#53): Show combined-ledger daily trade profit and margin
This commit is contained in:
1 parent
56f70eb599
commit
87d105b7b8
5 files changed
+68
-84
No files matched your search
@@ -1,38 +1,11 @@
|
||||
import {describe, expect, test} from 'vitest';
|
||||
import {latestDailyBalanceValue, resolveStatisticsMode, StatisticsModes} from './statistics';
|
||||
import type {CombinedLedger, MainLedger} from './ledger';
|
||||
import {LedgerTypes} from './ledger';
|
||||
import {latestDailyBalanceValue} from './statistics';
|
||||
import type {DailyBalanceResponse} from '@/generated/mammon';
|
||||
|
||||
const mainLedger = {type: LedgerTypes.Main, ledgerId: 'main-1', name: 'Main', balance: 0} as MainLedger;
|
||||
const combinedLedger = {type: LedgerTypes.Combined, ledgerId: 'combined-1', name: 'Combined', balance: 0} as unknown as CombinedLedger;
|
||||
|
||||
const balance = (date: string, averageValue: number): DailyBalanceResponse => ({
|
||||
date, averageValue, highestValue: averageValue, lowestValue: averageValue,
|
||||
});
|
||||
|
||||
describe('resolveStatisticsMode', () => {
|
||||
test('keeps cash flow mode for a main ledger', () => {
|
||||
expect(resolveStatisticsMode(mainLedger, StatisticsModes.CashFlow)).toBe(StatisticsModes.CashFlow);
|
||||
});
|
||||
|
||||
test('keeps margin mode for a main ledger', () => {
|
||||
expect(resolveStatisticsMode(mainLedger, StatisticsModes.Margin)).toBe(StatisticsModes.Margin);
|
||||
});
|
||||
|
||||
test('keeps daily balance mode for a combined ledger', () => {
|
||||
expect(resolveStatisticsMode(combinedLedger, StatisticsModes.DailyBalance)).toBe(StatisticsModes.DailyBalance);
|
||||
});
|
||||
|
||||
test('falls back to daily balance when cash flow is selected for a combined ledger', () => {
|
||||
expect(resolveStatisticsMode(combinedLedger, StatisticsModes.CashFlow)).toBe(StatisticsModes.DailyBalance);
|
||||
});
|
||||
|
||||
test('falls back to daily balance when margin is selected for a combined ledger', () => {
|
||||
expect(resolveStatisticsMode(combinedLedger, StatisticsModes.Margin)).toBe(StatisticsModes.DailyBalance);
|
||||
});
|
||||
});
|
||||
|
||||
describe('latestDailyBalanceValue', () => {
|
||||
test('returns the average value of the most recent day in range', () => {
|
||||
const result = latestDailyBalanceValue([balance('2026-08-01', 100), balance('2026-08-02', 150)]);
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import type {DailyBalanceResponse} from "@/generated/mammon";
|
||||
import {isMain, type Ledger} from "./ledger";
|
||||
|
||||
export const StatisticsModes = {
|
||||
CashFlow: 'CASH_FLOW',
|
||||
@@ -8,8 +7,5 @@ export const StatisticsModes = {
|
||||
} as const;
|
||||
export type StatisticsMode = typeof StatisticsModes[keyof typeof StatisticsModes];
|
||||
|
||||
export const resolveStatisticsMode = (ledger: Ledger, mode: StatisticsMode): StatisticsMode =>
|
||||
!isMain(ledger) && mode !== StatisticsModes.DailyBalance ? StatisticsModes.DailyBalance : mode;
|
||||
|
||||
export const latestDailyBalanceValue = (range: DailyBalanceResponse[]): number =>
|
||||
range.at(-1)?.averageValue ?? 0;
|
||||
Reference in new issue
Block a user