diff --git a/src/__tests__/money.test.ts b/src/__tests__/money.test.ts index 2a08a97..d3b9780 100644 --- a/src/__tests__/money.test.ts +++ b/src/__tests__/money.test.ts @@ -56,3 +56,10 @@ test('test reduce money', () => { const result = bank.reduce(Money.dollar(1), 'USD'); expect(Money.dollar(1)).toEqual(result); }) + +test('test reduce money different currency', () => { + const bank = new Bank(); + bank.addRate('CHF', 'USD', 2); + const result = bank.reduce(Money.franc(2), 'USD'); + expect(Money.dollar(1)).toEqual(result); +}) diff --git a/src/bank.ts b/src/bank.ts index 25873c7..b5ee9bd 100644 --- a/src/bank.ts +++ b/src/bank.ts @@ -5,4 +5,7 @@ export class Bank { reduce(source: Expression, to: string):Money { return source.reduce(to); } + + addRate(from: string, to: string, rate: number) { + } } diff --git a/src/money.ts b/src/money.ts index d65b3fb..6916583 100644 --- a/src/money.ts +++ b/src/money.ts @@ -34,6 +34,7 @@ export class Money implements Expression { } reduce(to: string): Money { - return this; + const rate = this.currency === 'CHF' && to === 'USD' ? 2 : 1; + return new Money(this.amount / rate, to) } }