Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 10 additions & 36 deletions src/money/index.spec.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,6 @@
import Money, { Franc } from '../money';
import Money from '../money';

describe('Money', () => {
describe('equality', () => {
it('should consider an object representing $5 equals to another object representing $5', () => {
expect(Money.franc(5).equals(Money.franc(5))).toBe(true);
expect(Money.franc(5).equals(Money.franc(6))).toBe(false);
expect(Money.dollar(5).equals(Money.dollar(5))).toBe(true);
expect(Money.dollar(5).equals(Money.dollar(6))).toBe(false);
expect(Money.franc(5).equals(Money.dollar(5))).toBe(false);
});

it('should return true if comparing two different classes with the same amount and currency', () => {
expect(new Money(5, 'CHF').equals(new Franc(5, 'CHF'))).toBe(true);
});
});

describe('currency', () => {
expect(Money.dollar(5).currency).toEqual('USD');
expect(Money.franc(5).currency).toEqual('CHF');
});
});

describe('Dollar', () => {
it.todo('should sum $5 + 10CHF as being $10 if exchange rate is 2:1');

describe('multiplication', () => {
Expand All @@ -39,22 +18,17 @@ describe('Dollar', () => {
expect(product.equals(Money.dollar(15))).toBe(true);
});
});
});

describe('Franc', () => {
describe('multiplication', () => {
it('should multiply $5 by 2 and get $10', () => {
const five = Money.franc(5);
const product = five.times(2);
expect(product.equals(Money.franc(10))).toBe(true);
describe('equality', () => {
it('should consider an object representing $5 equals to another object representing $5', () => {
expect(Money.dollar(5).equals(Money.dollar(5))).toBe(true);
expect(Money.dollar(5).equals(Money.dollar(6))).toBe(false);
expect(Money.franc(5).equals(Money.dollar(5))).toBe(false);
});
});

it('should preserve the initial dollar amount when multiplying multiple times', () => {
const five = Money.franc(5);
let product: Money = five.times(2);
expect(product.equals(Money.franc(10))).toBe(true);
product = five.times(3);
expect(product.equals(Money.franc(15))).toBe(true);
});
describe('currency', () => {
expect(Money.dollar(5).currency).toEqual('USD');
expect(Money.franc(5).currency).toEqual('CHF');
});
});
12 changes: 3 additions & 9 deletions src/money/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
class Money {
export default class Money {
private _amount: number;
private _currency: string;

Expand All @@ -17,11 +17,11 @@ class Money {
}

static dollar(amount: number): Money {
return new Dollar(amount, 'USD');
return new Money(amount, 'USD');
}

static franc(amount: number): Money {
return new Franc(amount, 'CHF');
return new Money(amount, 'CHF');
}

times(multiplier: number): Money {
Expand All @@ -32,9 +32,3 @@ class Money {
return this._currency;
}
}

export class Dollar extends Money {}

export class Franc extends Money {}

export default Money;