From d10d73bca27c40ac02f04bdcea7335eee78e9281 Mon Sep 17 00:00:00 2001 From: Sondos-Snd Date: Mon, 2 Oct 2023 05:15:41 +0100 Subject: [PATCH 01/10] successful test --- src/main/java/guru/springframework/Dollar.java | 12 ++++++++++++ .../java/guru/springframework/MoneyTest.java | 16 ++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/main/java/guru/springframework/Dollar.java create mode 100644 src/test/java/guru/springframework/MoneyTest.java diff --git a/src/main/java/guru/springframework/Dollar.java b/src/main/java/guru/springframework/Dollar.java new file mode 100644 index 00000000..d4baec49 --- /dev/null +++ b/src/main/java/guru/springframework/Dollar.java @@ -0,0 +1,12 @@ +package guru.springframework; + +public class Dollar { + + int amount; + public Dollar(int amount) { + this.amount=amount; + } + int times(int multiplyBy){ + return this.amount=amount*multiplyBy; + } +} diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java new file mode 100644 index 00000000..d6209b59 --- /dev/null +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -0,0 +1,16 @@ +package guru.springframework; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class MoneyTest { + @Test + void testMultiplication(){ + Dollar five= new Dollar(5); + five.times(2); + assertEquals(10, five.amount); + + } + +} From 5a9e60a3cd26ce070a386f8e015b595ea117c994 Mon Sep 17 00:00:00 2001 From: Sondos-Snd Date: Mon, 2 Oct 2023 05:21:22 +0100 Subject: [PATCH 02/10] refactor test --- src/main/java/guru/springframework/Dollar.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/guru/springframework/Dollar.java b/src/main/java/guru/springframework/Dollar.java index d4baec49..310321ca 100644 --- a/src/main/java/guru/springframework/Dollar.java +++ b/src/main/java/guru/springframework/Dollar.java @@ -6,7 +6,7 @@ public class Dollar { public Dollar(int amount) { this.amount=amount; } - int times(int multiplyBy){ - return this.amount=amount*multiplyBy; + void times(int multiplyBy){ + amount*=multiplyBy; } } From 21bed5d3945b5c873fbff3a7b223bb9242ebb145 Mon Sep 17 00:00:00 2001 From: Sondos-Snd Date: Mon, 2 Oct 2023 05:31:28 +0100 Subject: [PATCH 03/10] fix mutating side effect --- src/main/java/guru/springframework/Dollar.java | 4 ++-- src/test/java/guru/springframework/MoneyTest.java | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/guru/springframework/Dollar.java b/src/main/java/guru/springframework/Dollar.java index 310321ca..623cd5ba 100644 --- a/src/main/java/guru/springframework/Dollar.java +++ b/src/main/java/guru/springframework/Dollar.java @@ -6,7 +6,7 @@ public class Dollar { public Dollar(int amount) { this.amount=amount; } - void times(int multiplyBy){ - amount*=multiplyBy; + Dollar times(int multiplyBy){ + return new Dollar(amount*multiplyBy); } } diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java index d6209b59..22eeb3f7 100644 --- a/src/test/java/guru/springframework/MoneyTest.java +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -8,8 +8,10 @@ public class MoneyTest { @Test void testMultiplication(){ Dollar five= new Dollar(5); - five.times(2); - assertEquals(10, five.amount); + Dollar product= five.times(2); + assertEquals(10, product.amount); + product= five.times(3); + assertEquals(15, product.amount); } From a0b91568ed747b7225d5b04fa4406059c8259a2d Mon Sep 17 00:00:00 2001 From: Sondos-Snd Date: Mon, 2 Oct 2023 05:51:17 +0100 Subject: [PATCH 04/10] test equality --- src/main/java/guru/springframework/Dollar.java | 5 +++++ src/test/java/guru/springframework/MoneyTest.java | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/src/main/java/guru/springframework/Dollar.java b/src/main/java/guru/springframework/Dollar.java index 623cd5ba..d9cad132 100644 --- a/src/main/java/guru/springframework/Dollar.java +++ b/src/main/java/guru/springframework/Dollar.java @@ -9,4 +9,9 @@ public Dollar(int amount) { Dollar times(int multiplyBy){ return new Dollar(amount*multiplyBy); } + + public boolean equals(Object object){ + Dollar testObject =(Dollar) object; + return testObject.amount == amount; + } } diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java index 22eeb3f7..db40977b 100644 --- a/src/test/java/guru/springframework/MoneyTest.java +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -15,4 +15,10 @@ void testMultiplication(){ } + @Test + void testEquality(){ + assertEquals(false,new Dollar(1).equals(new Dollar(2))); + assertEquals(true,new Dollar(1).equals(new Dollar(1))); + } + } From afdedaee276cb6f524fed5c9d0977da57aba00c8 Mon Sep 17 00:00:00 2001 From: Sondos-Snd Date: Mon, 2 Oct 2023 06:15:35 +0100 Subject: [PATCH 05/10] add money parent class --- .../java/guru/springframework/Dollar.java | 12 +++------- src/main/java/guru/springframework/Franc.java | 11 ++++++++++ src/main/java/guru/springframework/Money.java | 19 ++++++++++++++++ .../java/guru/springframework/MoneyTest.java | 22 ++++++++++++++----- 4 files changed, 50 insertions(+), 14 deletions(-) create mode 100644 src/main/java/guru/springframework/Franc.java create mode 100644 src/main/java/guru/springframework/Money.java diff --git a/src/main/java/guru/springframework/Dollar.java b/src/main/java/guru/springframework/Dollar.java index d9cad132..5ebcbd1d 100644 --- a/src/main/java/guru/springframework/Dollar.java +++ b/src/main/java/guru/springframework/Dollar.java @@ -1,17 +1,11 @@ package guru.springframework; -public class Dollar { +public class Dollar extends Money{ - int amount; public Dollar(int amount) { + super(amount); this.amount=amount; } - Dollar times(int multiplyBy){ - return new Dollar(amount*multiplyBy); - } - public boolean equals(Object object){ - Dollar testObject =(Dollar) object; - return testObject.amount == amount; - } + } diff --git a/src/main/java/guru/springframework/Franc.java b/src/main/java/guru/springframework/Franc.java new file mode 100644 index 00000000..ff117389 --- /dev/null +++ b/src/main/java/guru/springframework/Franc.java @@ -0,0 +1,11 @@ +package guru.springframework; + +public class Franc extends Money { + + + public Franc(int amount) { + super(amount); + this.amount=amount; + } + +} diff --git a/src/main/java/guru/springframework/Money.java b/src/main/java/guru/springframework/Money.java new file mode 100644 index 00000000..d2ab49f0 --- /dev/null +++ b/src/main/java/guru/springframework/Money.java @@ -0,0 +1,19 @@ +package guru.springframework; + +public class Money { + + protected int amount; + + public Money(int amount) { + this.amount = amount; + } + + public boolean equals(Object object){ + Money testObject =(Money) object; + return testObject.amount == amount; + } + + Money times(int multiplyBy){ + return new Money(amount*multiplyBy); + } +} diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java index db40977b..f1cfda6d 100644 --- a/src/test/java/guru/springframework/MoneyTest.java +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -8,17 +8,29 @@ public class MoneyTest { @Test void testMultiplication(){ Dollar five= new Dollar(5); - Dollar product= five.times(2); - assertEquals(10, product.amount); + Money product= five.times(2); + assertEquals(new Dollar(10), product); product= five.times(3); - assertEquals(15, product.amount); - + assertEquals(new Dollar(15), product); } - @Test void testEquality(){ assertEquals(false,new Dollar(1).equals(new Dollar(2))); assertEquals(true,new Dollar(1).equals(new Dollar(1))); } + @Test + void testMultiplicationFranc(){ + Franc five= new Franc(5); + Money product= five.times(2); + assertEquals(new Franc(10), product); + product= five.times(3); + assertEquals(new Franc(15), product); + } + @Test + void testEqualityFranc(){ + assertEquals(false,new Franc(1).equals(new Franc(2))); + assertEquals(true,new Franc(1).equals(new Franc(1))); + } + } From d4b0c55f4d82cd2f6c19fad5106b90d957e7f4a0 Mon Sep 17 00:00:00 2001 From: Sondos-Snd Date: Mon, 2 Oct 2023 06:33:12 +0100 Subject: [PATCH 06/10] add currency factory class --- .../java/guru/springframework/Currency.java | 8 +++++++ .../java/guru/springframework/Dollar.java | 11 ---------- src/main/java/guru/springframework/Franc.java | 11 ---------- src/main/java/guru/springframework/Money.java | 3 ++- .../java/guru/springframework/MoneyTest.java | 22 ++++++++++--------- 5 files changed, 22 insertions(+), 33 deletions(-) create mode 100644 src/main/java/guru/springframework/Currency.java delete mode 100644 src/main/java/guru/springframework/Dollar.java delete mode 100644 src/main/java/guru/springframework/Franc.java diff --git a/src/main/java/guru/springframework/Currency.java b/src/main/java/guru/springframework/Currency.java new file mode 100644 index 00000000..4ffcdca4 --- /dev/null +++ b/src/main/java/guru/springframework/Currency.java @@ -0,0 +1,8 @@ +package guru.springframework; + +public class Currency extends Money{ + + public Currency(int amount) { + super(amount); + } +} diff --git a/src/main/java/guru/springframework/Dollar.java b/src/main/java/guru/springframework/Dollar.java deleted file mode 100644 index 5ebcbd1d..00000000 --- a/src/main/java/guru/springframework/Dollar.java +++ /dev/null @@ -1,11 +0,0 @@ -package guru.springframework; - -public class Dollar extends Money{ - - public Dollar(int amount) { - super(amount); - this.amount=amount; - } - - -} diff --git a/src/main/java/guru/springframework/Franc.java b/src/main/java/guru/springframework/Franc.java deleted file mode 100644 index ff117389..00000000 --- a/src/main/java/guru/springframework/Franc.java +++ /dev/null @@ -1,11 +0,0 @@ -package guru.springframework; - -public class Franc extends Money { - - - public Franc(int amount) { - super(amount); - this.amount=amount; - } - -} diff --git a/src/main/java/guru/springframework/Money.java b/src/main/java/guru/springframework/Money.java index d2ab49f0..39fcccc8 100644 --- a/src/main/java/guru/springframework/Money.java +++ b/src/main/java/guru/springframework/Money.java @@ -10,7 +10,8 @@ public Money(int amount) { public boolean equals(Object object){ Money testObject =(Money) object; - return testObject.amount == amount; + return testObject.amount == amount + && getClass().equals(testObject.getClass()); } Money times(int multiplyBy){ diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java index f1cfda6d..00cd3258 100644 --- a/src/test/java/guru/springframework/MoneyTest.java +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -3,34 +3,36 @@ 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(){ - Dollar five= new Dollar(5); + Money five= new Money(5); Money product= five.times(2); - assertEquals(new Dollar(10), product); + assertEquals(new Money(10), product); product= five.times(3); - assertEquals(new Dollar(15), product); + assertEquals(new Money(15), product); } @Test void testEquality(){ - assertEquals(false,new Dollar(1).equals(new Dollar(2))); - assertEquals(true,new Dollar(1).equals(new Dollar(1))); + assertEquals(false,new Currency(1).equals(new Currency(2))); + assertEquals(true,new Currency(1).equals(new Currency(1))); +// assertNotEquals(new Currency(5),new Currency(5)); } @Test void testMultiplicationFranc(){ - Franc five= new Franc(5); + Money five= new Money(5); Money product= five.times(2); - assertEquals(new Franc(10), product); + assertEquals(new Money(10), product); product= five.times(3); - assertEquals(new Franc(15), product); + assertEquals(new Money(15), product); } @Test void testEqualityFranc(){ - assertEquals(false,new Franc(1).equals(new Franc(2))); - assertEquals(true,new Franc(1).equals(new Franc(1))); + assertEquals(false,new Money(1).equals(new Money(2))); + assertEquals(true,new Money(1).equals(new Money(1))); } } From 131e33c3eb1c8355431bf75f658214fcd5a45b37 Mon Sep 17 00:00:00 2001 From: Sondos-Snd Date: Mon, 2 Oct 2023 07:17:46 +0100 Subject: [PATCH 07/10] implement and test factiry pattern --- .../java/guru/springframework/Currency.java | 8 ----- .../java/guru/springframework/Dollar.java | 13 ++++++++ src/main/java/guru/springframework/Franc.java | 13 ++++++++ src/main/java/guru/springframework/Money.java | 24 +++++++++++--- .../java/guru/springframework/MoneyTest.java | 32 ++++++++----------- 5 files changed, 59 insertions(+), 31 deletions(-) delete mode 100644 src/main/java/guru/springframework/Currency.java create mode 100644 src/main/java/guru/springframework/Dollar.java create mode 100644 src/main/java/guru/springframework/Franc.java diff --git a/src/main/java/guru/springframework/Currency.java b/src/main/java/guru/springframework/Currency.java deleted file mode 100644 index 4ffcdca4..00000000 --- a/src/main/java/guru/springframework/Currency.java +++ /dev/null @@ -1,8 +0,0 @@ -package guru.springframework; - -public class Currency extends Money{ - - public Currency(int amount) { - super(amount); - } -} diff --git a/src/main/java/guru/springframework/Dollar.java b/src/main/java/guru/springframework/Dollar.java new file mode 100644 index 00000000..51e9515a --- /dev/null +++ b/src/main/java/guru/springframework/Dollar.java @@ -0,0 +1,13 @@ +package guru.springframework; + +public class Dollar extends Money{ + public Dollar(int amount, String currency) { + super(amount,currency); + } + + @Override + public Money times(int multiplyBy) { + return Money.dollar(super.amount*multiplyBy); + + } +} diff --git a/src/main/java/guru/springframework/Franc.java b/src/main/java/guru/springframework/Franc.java new file mode 100644 index 00000000..a87918bc --- /dev/null +++ b/src/main/java/guru/springframework/Franc.java @@ -0,0 +1,13 @@ +package guru.springframework; + +public class Franc extends Money{ + public Franc(int amount, String currency) { + super(amount,currency); + } + + @Override + public Money times(int multiplyBy) { + return Money.franc(super.amount*multiplyBy); + + } +} diff --git a/src/main/java/guru/springframework/Money.java b/src/main/java/guru/springframework/Money.java index 39fcccc8..fc37495e 100644 --- a/src/main/java/guru/springframework/Money.java +++ b/src/main/java/guru/springframework/Money.java @@ -1,20 +1,34 @@ package guru.springframework; -public class Money { +public abstract class Money { protected int amount; + protected String currency; - public Money(int amount) { - this.amount = amount; + 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 && getClass().equals(testObject.getClass()); } - Money times(int multiplyBy){ - return new Money(amount*multiplyBy); + public abstract Money times(int multiplyBy); + + public static Money dollar(int amount){ + return new Dollar(amount,"USD"); + } + + public static Money franc(int amount){ + return new Franc(amount,"CHF"); } } diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java index 00cd3258..cd164156 100644 --- a/src/test/java/guru/springframework/MoneyTest.java +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -8,31 +8,27 @@ public class MoneyTest { @Test void testMultiplication(){ - Money five= new Money(5); - Money product= five.times(2); - assertEquals(new Money(10), product); - product= five.times(3); - assertEquals(new Money(15), product); - } - @Test - void testEquality(){ - assertEquals(false,new Currency(1).equals(new Currency(2))); - assertEquals(true,new Currency(1).equals(new Currency(1))); -// assertNotEquals(new Currency(5),new Currency(5)); + Money five= Money.dollar(5); + assertEquals(Money.dollar(10), five.times(2)); + assertEquals(Money.dollar(15), five.times(3)); } @Test void testMultiplicationFranc(){ - Money five= new Money(5); - Money product= five.times(2); - assertEquals(new Money(10), product); - product= five.times(3); - assertEquals(new Money(15), product); + Money five= Money.franc(5); + assertEquals(Money.franc(10), five.times(2)); + assertEquals(Money.franc(15), five.times(3)); } @Test void testEqualityFranc(){ - assertEquals(false,new Money(1).equals(new Money(2))); - assertEquals(true,new Money(1).equals(new Money(1))); + 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()); } } From 0c923a15bbf599748bb84d836c2fd3b678d49da6 Mon Sep 17 00:00:00 2001 From: Sondos-Snd Date: Mon, 2 Oct 2023 07:40:27 +0100 Subject: [PATCH 08/10] refactor: move times up --- src/main/java/guru/springframework/Dollar.java | 5 ----- src/main/java/guru/springframework/Franc.java | 5 ----- src/main/java/guru/springframework/Money.java | 17 +++++++++++++---- .../java/guru/springframework/MoneyTest.java | 2 ++ 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/main/java/guru/springframework/Dollar.java b/src/main/java/guru/springframework/Dollar.java index 51e9515a..b9b52225 100644 --- a/src/main/java/guru/springframework/Dollar.java +++ b/src/main/java/guru/springframework/Dollar.java @@ -5,9 +5,4 @@ public Dollar(int amount, String currency) { super(amount,currency); } - @Override - public Money times(int multiplyBy) { - return Money.dollar(super.amount*multiplyBy); - - } } diff --git a/src/main/java/guru/springframework/Franc.java b/src/main/java/guru/springframework/Franc.java index a87918bc..28a04311 100644 --- a/src/main/java/guru/springframework/Franc.java +++ b/src/main/java/guru/springframework/Franc.java @@ -5,9 +5,4 @@ public Franc(int amount, String currency) { super(amount,currency); } - @Override - public Money times(int multiplyBy) { - return Money.franc(super.amount*multiplyBy); - - } } diff --git a/src/main/java/guru/springframework/Money.java b/src/main/java/guru/springframework/Money.java index fc37495e..38152d7f 100644 --- a/src/main/java/guru/springframework/Money.java +++ b/src/main/java/guru/springframework/Money.java @@ -10,8 +10,6 @@ public Money(int amount,String currency) { this.currency=currency; } - - protected String currency(){ return currency; }; @@ -19,10 +17,13 @@ protected String currency(){ public boolean equals(Object object){ Money testObject =(Money) object; return testObject.amount == amount - && getClass().equals(testObject.getClass()); + && this.currency==testObject.currency; } - public abstract Money times(int multiplyBy); + public Money times(int multiplyBy) { + return Money.dollar(amount*multiplyBy); + + } public static Money dollar(int amount){ return new Dollar(amount,"USD"); @@ -31,4 +32,12 @@ public static Money dollar(int amount){ public static Money franc(int amount){ return new Franc(amount,"CHF"); } + + @Override + public String toString() { + return "Money{" + + "amount=" + amount + + ", currency='" + currency + '\'' + + '}'; + } } diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java index cd164156..fdf10ed2 100644 --- a/src/test/java/guru/springframework/MoneyTest.java +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -31,4 +31,6 @@ void testCurrency(){ assertEquals("CHF",Money.franc(1).currency()); } + + } From 9a61eddc46887ed0959a68ade6391af03d2ad3b1 Mon Sep 17 00:00:00 2001 From: Sondos-Snd Date: Mon, 2 Oct 2023 08:25:25 +0100 Subject: [PATCH 09/10] bank task --- src/main/java/guru/springframework/Bank.java | 8 ++++++++ .../java/guru/springframework/Dollar.java | 8 -------- .../java/guru/springframework/Expression.java | 4 ++++ src/main/java/guru/springframework/Franc.java | 8 -------- src/main/java/guru/springframework/Money.java | 16 ++++++++++----- .../java/guru/springframework/MoneyTest.java | 20 +++++++++++++------ 6 files changed, 37 insertions(+), 27 deletions(-) create mode 100644 src/main/java/guru/springframework/Bank.java delete mode 100644 src/main/java/guru/springframework/Dollar.java create mode 100644 src/main/java/guru/springframework/Expression.java delete mode 100644 src/main/java/guru/springframework/Franc.java diff --git a/src/main/java/guru/springframework/Bank.java b/src/main/java/guru/springframework/Bank.java new file mode 100644 index 00000000..c2d8989d --- /dev/null +++ b/src/main/java/guru/springframework/Bank.java @@ -0,0 +1,8 @@ +package guru.springframework; + +public class Bank { + + Money reduce(Expression expr, String currency){ + return Money.dollar(10); + } +} diff --git a/src/main/java/guru/springframework/Dollar.java b/src/main/java/guru/springframework/Dollar.java deleted file mode 100644 index b9b52225..00000000 --- a/src/main/java/guru/springframework/Dollar.java +++ /dev/null @@ -1,8 +0,0 @@ -package guru.springframework; - -public class Dollar extends Money{ - public Dollar(int amount, String currency) { - super(amount,currency); - } - -} diff --git a/src/main/java/guru/springframework/Expression.java b/src/main/java/guru/springframework/Expression.java new file mode 100644 index 00000000..080bfd36 --- /dev/null +++ b/src/main/java/guru/springframework/Expression.java @@ -0,0 +1,4 @@ +package guru.springframework; + +public interface Expression { +} diff --git a/src/main/java/guru/springframework/Franc.java b/src/main/java/guru/springframework/Franc.java deleted file mode 100644 index 28a04311..00000000 --- a/src/main/java/guru/springframework/Franc.java +++ /dev/null @@ -1,8 +0,0 @@ -package guru.springframework; - -public class Franc extends Money{ - public Franc(int amount, String currency) { - super(amount,currency); - } - -} diff --git a/src/main/java/guru/springframework/Money.java b/src/main/java/guru/springframework/Money.java index 38152d7f..8e4a8ad2 100644 --- a/src/main/java/guru/springframework/Money.java +++ b/src/main/java/guru/springframework/Money.java @@ -1,6 +1,6 @@ package guru.springframework; -public abstract class Money { +public class Money implements Expression { protected int amount; protected String currency; @@ -17,20 +17,26 @@ protected String currency(){ public boolean equals(Object object){ Money testObject =(Money) object; return testObject.amount == amount - && this.currency==testObject.currency; + && currency==testObject.currency; } public Money times(int multiplyBy) { - return Money.dollar(amount*multiplyBy); + return new Money(amount * multiplyBy,currency); } public static Money dollar(int amount){ - return new Dollar(amount,"USD"); + return new Money(amount, "USD") { + }; } public static Money franc(int amount){ - return new Franc(amount,"CHF"); + return new Money(amount, "CHF") { + }; + } + + public Expression plus(Money money){ + return new Money(amount+money.amount,currency); } @Override diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java index fdf10ed2..0b5f0940 100644 --- a/src/test/java/guru/springframework/MoneyTest.java +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -11,14 +11,12 @@ void testMultiplication(){ Money five= Money.dollar(5); assertEquals(Money.dollar(10), five.times(2)); assertEquals(Money.dollar(15), five.times(3)); - } - @Test - void testMultiplicationFranc(){ - Money five= Money.franc(5); - assertEquals(Money.franc(10), five.times(2)); - assertEquals(Money.franc(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))); @@ -31,6 +29,16 @@ void testCurrency(){ assertEquals("CHF",Money.franc(1).currency()); } + @Test + void testAddition(){ + Money five=Money.dollar(5); + Expression sum=five.plus(five); + Bank bank=new Bank(); + Money reduced= bank.reduce(sum,"USD"); + assertEquals(Money.dollar(10),reduced); + + } + } From d3735675d702ead0fc1ebb3bf5e62fec7e4519a4 Mon Sep 17 00:00:00 2001 From: Sondos-Snd Date: Mon, 2 Oct 2023 12:00:29 +0100 Subject: [PATCH 10/10] implement reduce logic --- src/main/java/guru/springframework/Bank.java | 5 ++++- .../java/guru/springframework/Expression.java | 1 + src/main/java/guru/springframework/Money.java | 9 ++++++-- src/main/java/guru/springframework/Sum.java | 17 ++++++++++++++ .../java/guru/springframework/MoneyTest.java | 22 ++++++++++++++++--- 5 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 src/main/java/guru/springframework/Sum.java diff --git a/src/main/java/guru/springframework/Bank.java b/src/main/java/guru/springframework/Bank.java index c2d8989d..587ddfed 100644 --- a/src/main/java/guru/springframework/Bank.java +++ b/src/main/java/guru/springframework/Bank.java @@ -3,6 +3,9 @@ public class Bank { Money reduce(Expression expr, String currency){ - return Money.dollar(10); + return expr.reduce(currency); +// if (expr instanceof Money) return (Money) expr; +// Sum expressionCasted= (Sum) expr; +// return expressionCasted.reduce(currency); } } diff --git a/src/main/java/guru/springframework/Expression.java b/src/main/java/guru/springframework/Expression.java index 080bfd36..b791adf9 100644 --- a/src/main/java/guru/springframework/Expression.java +++ b/src/main/java/guru/springframework/Expression.java @@ -1,4 +1,5 @@ package guru.springframework; public interface Expression { + Money reduce(String to); } diff --git a/src/main/java/guru/springframework/Money.java b/src/main/java/guru/springframework/Money.java index 8e4a8ad2..d6ceaf9d 100644 --- a/src/main/java/guru/springframework/Money.java +++ b/src/main/java/guru/springframework/Money.java @@ -35,8 +35,13 @@ public static Money franc(int amount){ }; } - public Expression plus(Money money){ - return new Money(amount+money.amount,currency); + public Expression plus(Money addend){ + return new Sum(this,addend); + } + + @Override + public Money reduce(String to){ + return this; } @Override diff --git a/src/main/java/guru/springframework/Sum.java b/src/main/java/guru/springframework/Sum.java new file mode 100644 index 00000000..78da9f40 --- /dev/null +++ b/src/main/java/guru/springframework/Sum.java @@ -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); + } +} diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java index 0b5f0940..15f4f892 100644 --- a/src/test/java/guru/springframework/MoneyTest.java +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -32,10 +32,26 @@ void testCurrency(){ @Test void testAddition(){ Money five=Money.dollar(5); - Expression sum=five.plus(five); + 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 reduced= bank.reduce(sum,"USD"); - assertEquals(Money.dollar(10),reduced); + Money result=bank.reduce(Money.dollar(1),"USD"); + assertEquals(Money.dollar(1),result); }