Skip to content
Open
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
11 changes: 11 additions & 0 deletions src/main/java/guru/springframework/Bank.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package guru.springframework;

public class Bank {

Money reduce(Expression expr, String currency){
return expr.reduce(currency);
// if (expr instanceof Money) return (Money) expr;
// Sum expressionCasted= (Sum) expr;
// return expressionCasted.reduce(currency);
}
}
5 changes: 5 additions & 0 deletions src/main/java/guru/springframework/Expression.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package guru.springframework;

public interface Expression {
Money reduce(String to);
}
54 changes: 54 additions & 0 deletions src/main/java/guru/springframework/Money.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package guru.springframework;

public class Money implements Expression {

protected int amount;
protected String currency;

public Money(int amount,String currency) {
this.amount=amount;
this.currency=currency;
}

protected String currency(){
return currency;
};

public boolean equals(Object object){
Money testObject =(Money) object;
return testObject.amount == amount
&& currency==testObject.currency;
}

public Money times(int multiplyBy) {
return new Money(amount * multiplyBy,currency);

}

public static Money dollar(int amount){
return new Money(amount, "USD") {
};
}

public static Money franc(int amount){
return new Money(amount, "CHF") {
};
}

public Expression plus(Money addend){
return new Sum(this,addend);
}

@Override
public Money reduce(String to){
return this;
}

@Override
public String toString() {
return "Money{" +
"amount=" + amount +
", currency='" + currency + '\'' +
'}';
}
}
17 changes: 17 additions & 0 deletions src/main/java/guru/springframework/Sum.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package guru.springframework;

import java.util.Currency;

public class Sum implements Expression {
Money augmend;
Money addmend;

public Sum(Money augmend, Money addmend) {
this.augmend = augmend;
this.addmend = addmend;
}

public Money reduce(String curr){
return new Money(augmend.amount + addmend.amount, curr);
}
}
60 changes: 60 additions & 0 deletions src/test/java/guru/springframework/MoneyTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package guru.springframework;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;

public class MoneyTest {
@Test
void testMultiplication(){
Money five= Money.dollar(5);
assertEquals(Money.dollar(10), five.times(2));
assertEquals(Money.dollar(15), five.times(3));

Money fivef= Money.franc(5);
assertEquals(Money.franc(10), fivef.times(2));
assertEquals(Money.franc(15), fivef.times(3));
}

@Test
void testEqualityFranc(){
assertEquals(false,Money.franc(1).equals(Money.franc(2)));
assertEquals(true,Money.franc(1).equals(Money.franc(1)));
}

@Test
void testCurrency(){
assertEquals("USD",Money.dollar(1).currency());
assertEquals("CHF",Money.franc(1).currency());
}

@Test
void testAddition(){
Money five=Money.dollar(5);
Expression result=five.plus(five);
Sum sum=(Sum) result;
assertEquals(five, sum.addmend);
assertEquals(five, sum.augmend);
}

@Test
void testReduceSum(){
Expression sum =new Sum(Money.dollar(3),Money.dollar(4));
Bank bank =new Bank();
Money result=bank.reduce(sum,"USD");
assertEquals(Money.dollar(7),result);

}

@Test
void testReduceMoney(){
Bank bank=new Bank();
Money result=bank.reduce(Money.dollar(1),"USD");
assertEquals(Money.dollar(1),result);

}



}