From d5eecf42118281c669c626ab47f6333a0562ec2b Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Thu, 13 Oct 2022 13:34:56 -0500 Subject: [PATCH 01/15] Great --- src/main/java/Foo.java | 5 +++++ src/test/java/FooTest.java | 10 ++++++++++ 2 files changed, 15 insertions(+) create mode 100644 src/main/java/Foo.java create mode 100644 src/test/java/FooTest.java diff --git a/src/main/java/Foo.java b/src/main/java/Foo.java new file mode 100644 index 00000000..c4a3d7a8 --- /dev/null +++ b/src/main/java/Foo.java @@ -0,0 +1,5 @@ +public class Foo { + String getMessage(){ + return "MyMessage"; + } +} diff --git a/src/test/java/FooTest.java b/src/test/java/FooTest.java new file mode 100644 index 00000000..b82b4f0f --- /dev/null +++ b/src/test/java/FooTest.java @@ -0,0 +1,10 @@ +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class FooTest { + + @Test + void getMessage() { + } +} \ No newline at end of file From 55a0219b4b12991034a38b10fbe3e7d91313fa38 Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Tue, 18 Oct 2022 11:03:23 -0500 Subject: [PATCH 02/15] Great --- src/main/java/Foo.java | 5 ----- src/main/java/guru/springframework/Dollar.java | 12 ++++++++++++ src/test/java/FooTest.java | 10 ---------- src/test/java/guru/springframework/MoneyTest.java | 15 +++++++++++++++ 4 files changed, 27 insertions(+), 15 deletions(-) delete mode 100644 src/main/java/Foo.java create mode 100644 src/main/java/guru/springframework/Dollar.java delete mode 100644 src/test/java/FooTest.java create mode 100644 src/test/java/guru/springframework/MoneyTest.java diff --git a/src/main/java/Foo.java b/src/main/java/Foo.java deleted file mode 100644 index c4a3d7a8..00000000 --- a/src/main/java/Foo.java +++ /dev/null @@ -1,5 +0,0 @@ -public class Foo { - String getMessage(){ - return "MyMessage"; - } -} diff --git a/src/main/java/guru/springframework/Dollar.java b/src/main/java/guru/springframework/Dollar.java new file mode 100644 index 00000000..f5721684 --- /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; + } + + void times(int multiplier){ + amount *= multiplier; + } +} diff --git a/src/test/java/FooTest.java b/src/test/java/FooTest.java deleted file mode 100644 index b82b4f0f..00000000 --- a/src/test/java/FooTest.java +++ /dev/null @@ -1,10 +0,0 @@ -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class FooTest { - - @Test - void getMessage() { - } -} \ No newline at end of file diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java new file mode 100644 index 00000000..a33eb5c8 --- /dev/null +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -0,0 +1,15 @@ +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 f82323818ca91925283065f1d45bb30b284fb58f Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Tue, 18 Oct 2022 11:23:16 -0500 Subject: [PATCH 03/15] Great --- src/main/java/guru/springframework/Dollar.java | 9 +++++++-- src/test/java/guru/springframework/MoneyTest.java | 12 +++++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/guru/springframework/Dollar.java b/src/main/java/guru/springframework/Dollar.java index f5721684..0b2d3c32 100644 --- a/src/main/java/guru/springframework/Dollar.java +++ b/src/main/java/guru/springframework/Dollar.java @@ -6,7 +6,12 @@ public Dollar(int amount){ this.amount = amount; } - void times(int multiplier){ - amount *= multiplier; + Dollar times(int multiplier){ + return new Dollar(amount * multiplier); + } + + public boolean equals(Object object){ + Dollar dollar = (Dollar) object; + return amount == dollar.amount; } } diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java index a33eb5c8..ae46ae9b 100644 --- a/src/test/java/guru/springframework/MoneyTest.java +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -3,6 +3,7 @@ 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 { @@ -10,6 +11,15 @@ public class MoneyTest { 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); + } + + @Test + void testEquality(){ + assertEquals(new Dollar(5), new Dollar(5)); + assertNotEquals(new Dollar(5), new Dollar(8)); } } From d35501328e072a7b5cd25b1d619f5e4248291ace Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Tue, 18 Oct 2022 11:33:20 -0500 Subject: [PATCH 04/15] Great --- src/main/java/guru/springframework/Dollar.java | 2 +- src/main/java/guru/springframework/Franc.java | 17 +++++++++++++++++ .../java/guru/springframework/MoneyTest.java | 16 ++++++++-------- 3 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 src/main/java/guru/springframework/Franc.java diff --git a/src/main/java/guru/springframework/Dollar.java b/src/main/java/guru/springframework/Dollar.java index 0b2d3c32..6f041ae9 100644 --- a/src/main/java/guru/springframework/Dollar.java +++ b/src/main/java/guru/springframework/Dollar.java @@ -1,7 +1,7 @@ package guru.springframework; public class Dollar { - int amount; + private int amount; public Dollar(int amount){ this.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..c4f33023 --- /dev/null +++ b/src/main/java/guru/springframework/Franc.java @@ -0,0 +1,17 @@ +package guru.springframework; + +public class Franc { + private int amount; + public Franc(int amount){ + this.amount = amount; + } + + Franc times(int multiplier){ + return new Franc(amount * multiplier); + } + + public boolean equals(Object object){ + Franc Franc = (Franc) object; + return amount == Franc.amount; + } +} diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java index ae46ae9b..6914d9da 100644 --- a/src/test/java/guru/springframework/MoneyTest.java +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -8,18 +8,18 @@ public class MoneyTest { @Test - void testMultiplication(){ - Dollar five = new Dollar(5); + void testMultiplicationFranc(){ + Franc five = new Franc(5); five.times(2); - Dollar product = five.times(2); - assertEquals(10, product.amount); + Franc product = five.times(2); + assertEquals(new Franc(10), product); product = five.times(3); - assertEquals(15, product.amount); + assertEquals(new Franc(15), product); } @Test - void testEquality(){ - assertEquals(new Dollar(5), new Dollar(5)); - assertNotEquals(new Dollar(5), new Dollar(8)); + void testEqualityFranc(){ + assertEquals(new Franc(5), new Franc(5)); + assertNotEquals(new Franc(5), new Franc(8)); } } From b8add61ef83ce3a511dc49d85dcaa9584a4bfd6d Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Tue, 18 Oct 2022 11:49:41 -0500 Subject: [PATCH 05/15] Fromm Dell 16 --- src/test/java/guru/springframework/MoneyTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java index 6914d9da..e97aff39 100644 --- a/src/test/java/guru/springframework/MoneyTest.java +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -6,7 +6,7 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals; public class MoneyTest { - +//TODO on Dell 16, Project Structure was running Java 17. Had to be rolled back to Java 11 to avoid warnings @Test void testMultiplicationFranc(){ Franc five = new Franc(5); From 2b55bbf4f6d16b1998abed0319a38abbd70f131c Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Tue, 18 Oct 2022 11:52:21 -0500 Subject: [PATCH 06/15] Great --- src/main/java/guru/springframework/Dollar.java | 2 +- src/main/java/guru/springframework/Franc.java | 2 +- src/main/java/guru/springframework/Money.java | 5 +++++ .../java/guru/springframework/MoneyTest.java | 16 ++++++++++++++++ 4 files changed, 23 insertions(+), 2 deletions(-) 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 6f041ae9..c06a1f24 100644 --- a/src/main/java/guru/springframework/Dollar.java +++ b/src/main/java/guru/springframework/Dollar.java @@ -1,6 +1,6 @@ package guru.springframework; -public class Dollar { +public class Dollar extends Money{ private int amount; public Dollar(int amount){ this.amount = amount; diff --git a/src/main/java/guru/springframework/Franc.java b/src/main/java/guru/springframework/Franc.java index c4f33023..ec56aa49 100644 --- a/src/main/java/guru/springframework/Franc.java +++ b/src/main/java/guru/springframework/Franc.java @@ -1,6 +1,6 @@ package guru.springframework; -public class Franc { +public class Franc extends Money{ private int amount; public Franc(int 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..1741bbf5 --- /dev/null +++ b/src/main/java/guru/springframework/Money.java @@ -0,0 +1,5 @@ +package guru.springframework; + +public class Money { + +} diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java index 6914d9da..9ecafac9 100644 --- a/src/test/java/guru/springframework/MoneyTest.java +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -7,6 +7,22 @@ public class MoneyTest { + @Test + void testMultiplication(){ + Dollar five = new Dollar(5); + five.times(2); + Dollar product = five.times(2); + assertEquals(new Dollar(10), product); + product = five.times(3); + assertEquals(new Dollar(15), product); + } + + @Test + void testEquality(){ + assertEquals(new Dollar(5), new Dollar(5)); + assertNotEquals(new Dollar(5), new Dollar(8)); + } + @Test void testMultiplicationFranc(){ Franc five = new Franc(5); From 17bbec2e66ee0029bdb29cd82aa92c3038179a3c Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Tue, 18 Oct 2022 11:58:11 -0500 Subject: [PATCH 07/15] Fromm Dell 16 --- src/test/java/guru/springframework/MoneyTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java index e97aff39..f4de6a59 100644 --- a/src/test/java/guru/springframework/MoneyTest.java +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -7,6 +7,7 @@ public class MoneyTest { //TODO on Dell 16, Project Structure was running Java 17. Had to be rolled back to Java 11 to avoid warnings +//Dell 16, Project Structure was running Java 17. Had to be rolled back to Java 11 to avoid warnings @Test void testMultiplicationFranc(){ Franc five = new Franc(5); From 3c7fbe9f9597a71ce756f51e1f362c9900261533 Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Tue, 18 Oct 2022 12:06:07 -0500 Subject: [PATCH 08/15] Great --- src/main/java/guru/springframework/Dollar.java | 4 ++-- src/main/java/guru/springframework/Money.java | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/guru/springframework/Dollar.java b/src/main/java/guru/springframework/Dollar.java index c06a1f24..076a5cd4 100644 --- a/src/main/java/guru/springframework/Dollar.java +++ b/src/main/java/guru/springframework/Dollar.java @@ -1,7 +1,7 @@ package guru.springframework; public class Dollar extends Money{ - private int amount; + // private int amount; This was transfer to the Money class because of inheritance public Dollar(int amount){ this.amount = amount; } @@ -11,7 +11,7 @@ Dollar times(int multiplier){ } public boolean equals(Object object){ - Dollar dollar = (Dollar) object; + Money dollar = (Money) object; return amount == dollar.amount; } } diff --git a/src/main/java/guru/springframework/Money.java b/src/main/java/guru/springframework/Money.java index 1741bbf5..ea5d8e11 100644 --- a/src/main/java/guru/springframework/Money.java +++ b/src/main/java/guru/springframework/Money.java @@ -1,5 +1,6 @@ package guru.springframework; public class Money { + protected int amount; } From 984351393531ec4a8f5e62aebaa5a3e508ba60b6 Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Tue, 18 Oct 2022 19:34:00 -0500 Subject: [PATCH 09/15] Refactoring of Dollar and Franc --- src/main/java/guru/springframework/Dollar.java | 5 +---- src/main/java/guru/springframework/Franc.java | 10 +++++----- src/main/java/guru/springframework/Money.java | 6 ++++++ src/test/java/guru/springframework/MoneyTest.java | 1 + 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/main/java/guru/springframework/Dollar.java b/src/main/java/guru/springframework/Dollar.java index 076a5cd4..d8bde4c9 100644 --- a/src/main/java/guru/springframework/Dollar.java +++ b/src/main/java/guru/springframework/Dollar.java @@ -10,8 +10,5 @@ Dollar times(int multiplier){ return new Dollar(amount * multiplier); } - public boolean equals(Object object){ - Money dollar = (Money) object; - return amount == dollar.amount; - } + } diff --git a/src/main/java/guru/springframework/Franc.java b/src/main/java/guru/springframework/Franc.java index ec56aa49..1c09c486 100644 --- a/src/main/java/guru/springframework/Franc.java +++ b/src/main/java/guru/springframework/Franc.java @@ -1,7 +1,7 @@ package guru.springframework; public class Franc extends Money{ - private int amount; +// private int amount; public Franc(int amount){ this.amount = amount; } @@ -10,8 +10,8 @@ Franc times(int multiplier){ return new Franc(amount * multiplier); } - public boolean equals(Object object){ - Franc Franc = (Franc) object; - return amount == Franc.amount; - } +// public boolean equals(Object object){ +// Franc Franc = (Franc) object; +// return amount == Franc.amount; +// } } diff --git a/src/main/java/guru/springframework/Money.java b/src/main/java/guru/springframework/Money.java index ea5d8e11..3e907fee 100644 --- a/src/main/java/guru/springframework/Money.java +++ b/src/main/java/guru/springframework/Money.java @@ -3,4 +3,10 @@ public class Money { protected int amount; + public boolean equals(Object object){ + Money money = (Money) object; + return amount == money.amount + && this.getClass().equals(object.getClass()); + } + } diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java index fc7905c0..5935ca3b 100644 --- a/src/test/java/guru/springframework/MoneyTest.java +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -16,6 +16,7 @@ void testMultiplication(){ assertEquals(new Dollar(10), product); product = five.times(3); assertEquals(new Dollar(15), product); + assertNotEquals(new Dollar(5), new Franc(5)); } @Test From 5a67b6f101129d7c6bfdaab08b1b0f0c1bbc15ff Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Tue, 18 Oct 2022 19:36:05 -0500 Subject: [PATCH 10/15] Refactoring of Dollar and Franc --- src/main/java/guru/springframework/Dollar.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/guru/springframework/Dollar.java b/src/main/java/guru/springframework/Dollar.java index d8bde4c9..2a876e85 100644 --- a/src/main/java/guru/springframework/Dollar.java +++ b/src/main/java/guru/springframework/Dollar.java @@ -5,7 +5,7 @@ public class Dollar extends Money{ public Dollar(int amount){ this.amount = amount; } - +// Dollar times(int multiplier){ return new Dollar(amount * multiplier); } From 3bcbfbe45c386443cd9e4a9270ddd52c0b258db4 Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Tue, 18 Oct 2022 20:29:38 -0500 Subject: [PATCH 11/15] Push from XPS --- .../java/guru/springframework/Dollar.java | 11 +++--- src/main/java/guru/springframework/Franc.java | 14 ++++---- src/main/java/guru/springframework/Money.java | 18 +++++++++- .../java/guru/springframework/MoneyTest.java | 36 ++++++++++--------- 4 files changed, 48 insertions(+), 31 deletions(-) diff --git a/src/main/java/guru/springframework/Dollar.java b/src/main/java/guru/springframework/Dollar.java index 2a876e85..bc388058 100644 --- a/src/main/java/guru/springframework/Dollar.java +++ b/src/main/java/guru/springframework/Dollar.java @@ -2,12 +2,13 @@ public class Dollar extends Money{ // private int amount; This was transfer to the Money class because of inheritance - public Dollar(int amount){ - this.amount = amount; + public Dollar(int amount, String currency){ + super(amount, currency); } -// - Dollar times(int multiplier){ - return new Dollar(amount * multiplier); + + + public Money times(int multiplier){ + return Money.dollar(amount * multiplier); } diff --git a/src/main/java/guru/springframework/Franc.java b/src/main/java/guru/springframework/Franc.java index 1c09c486..baf24047 100644 --- a/src/main/java/guru/springframework/Franc.java +++ b/src/main/java/guru/springframework/Franc.java @@ -2,16 +2,14 @@ public class Franc extends Money{ // private int amount; - public Franc(int amount){ - this.amount = amount; + + public Franc(int amount, String currency){ + super(amount, currency); } - Franc times(int multiplier){ - return new Franc(amount * multiplier); + + public Money times(int multiplier){ + return Money.franc(amount * multiplier); } -// public boolean equals(Object object){ -// Franc Franc = (Franc) object; -// return amount == Franc.amount; -// } } diff --git a/src/main/java/guru/springframework/Money.java b/src/main/java/guru/springframework/Money.java index 3e907fee..c184480e 100644 --- a/src/main/java/guru/springframework/Money.java +++ b/src/main/java/guru/springframework/Money.java @@ -1,8 +1,24 @@ package guru.springframework; -public class Money { +public abstract class Money { protected int amount; + protected String currency; + public Money(int amount, String currency) { + this.amount = amount; + this.currency = currency; + } + + protected String currency() { + return currency; + } + public abstract Money times(int multiplier); + + public static Franc franc(int amount){return new Franc(amount, "CHF");} + + static Dollar dollar(int amount){ + return new Dollar(amount, "USD"); + } public boolean equals(Object object){ Money money = (Money) object; return amount == money.amount diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java index 5935ca3b..ee8064fb 100644 --- a/src/test/java/guru/springframework/MoneyTest.java +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -10,34 +10,36 @@ public class MoneyTest { //Dell 16, Project Structure was running Java 17. Had to be rolled back to Java 11 to avoid warnings @Test void testMultiplication(){ - Dollar five = new Dollar(5); - five.times(2); - Dollar product = five.times(2); - assertEquals(new Dollar(10), product); - product = five.times(3); - assertEquals(new Dollar(15), product); - assertNotEquals(new Dollar(5), new Franc(5)); + Money five = Money.dollar(5); + assertEquals(Money.dollar(10), five.times(2)); + assertEquals(Money.dollar(15), five.times(3)); + } @Test void testEquality(){ - assertEquals(new Dollar(5), new Dollar(5)); - assertNotEquals(new Dollar(5), new Dollar(8)); + assertEquals(Money.dollar(5), Money.dollar(5)); + assertNotEquals(Money.dollar(5), Money.dollar(8)); } @Test void testMultiplicationFranc(){ - Franc five = new Franc(5); - five.times(2); - Franc product = five.times(2); - assertEquals(new Franc(10), product); - product = five.times(3); - assertEquals(new Franc(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(new Franc(5), new Franc(5)); - assertNotEquals(new Franc(5), new Franc(8)); + assertEquals(Money.franc(5), Money.franc(5)); + assertNotEquals(Money.franc(5), Money.franc(8)); + } + + @Test + void testCurrency(){ + assertEquals("USD", Money.dollar(1).currency()); + assertEquals("CHF", Money.franc(1).currency()); + } } From 8561245bfac257d74821b629854981b740759705 Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Tue, 18 Oct 2022 20:55:44 -0500 Subject: [PATCH 12/15] Refactoring of both classes --- src/main/java/guru/springframework/Dollar.java | 5 ----- src/main/java/guru/springframework/Franc.java | 3 --- src/main/java/guru/springframework/Money.java | 16 +++++++++++++--- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main/java/guru/springframework/Dollar.java b/src/main/java/guru/springframework/Dollar.java index bc388058..bba35848 100644 --- a/src/main/java/guru/springframework/Dollar.java +++ b/src/main/java/guru/springframework/Dollar.java @@ -7,9 +7,4 @@ public Dollar(int amount, String currency){ } - public Money times(int multiplier){ - return Money.dollar(amount * multiplier); - } - - } diff --git a/src/main/java/guru/springframework/Franc.java b/src/main/java/guru/springframework/Franc.java index baf24047..1db1a9c7 100644 --- a/src/main/java/guru/springframework/Franc.java +++ b/src/main/java/guru/springframework/Franc.java @@ -8,8 +8,5 @@ public Franc(int amount, String currency){ } - public Money times(int multiplier){ - return Money.franc(amount * multiplier); - } } diff --git a/src/main/java/guru/springframework/Money.java b/src/main/java/guru/springframework/Money.java index c184480e..c8e0aeb8 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 { protected int amount; protected String currency; public Money(int amount, String currency) { @@ -12,7 +12,6 @@ protected String currency() { return currency; } - public abstract Money times(int multiplier); public static Franc franc(int amount){return new Franc(amount, "CHF");} @@ -22,7 +21,18 @@ static Dollar dollar(int amount){ public boolean equals(Object object){ Money money = (Money) object; return amount == money.amount - && this.getClass().equals(object.getClass()); + && this.currency == money.currency; } + @Override + public String toString() { + return "Money{" + + "amount=" + amount + + ", currency='" + currency + '\'' + + '}'; + } + + public Money times(int multiplier) { + return new Money(amount * multiplier, this.currency); + } } From 89e7b7d9301f4c488447ccafa2f311d3ca97c59c Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Tue, 18 Oct 2022 20:58:31 -0500 Subject: [PATCH 13/15] Refactoring --- src/main/java/guru/springframework/Franc.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/guru/springframework/Franc.java b/src/main/java/guru/springframework/Franc.java index 1db1a9c7..164bc031 100644 --- a/src/main/java/guru/springframework/Franc.java +++ b/src/main/java/guru/springframework/Franc.java @@ -1,8 +1,6 @@ package guru.springframework; public class Franc extends Money{ -// private int amount; - public Franc(int amount, String currency){ super(amount, currency); } From a7838fedb553e8407e14989372126aefa5ccdf74 Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Tue, 18 Oct 2022 21:17:32 -0500 Subject: [PATCH 14/15] Refactor --- src/main/java/guru/springframework/Dollar.java | 10 ---------- src/main/java/guru/springframework/Franc.java | 10 ---------- src/main/java/guru/springframework/Money.java | 6 +++--- .../java/guru/springframework/MoneyTest.java | 16 +++------------- 4 files changed, 6 insertions(+), 36 deletions(-) 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/Dollar.java b/src/main/java/guru/springframework/Dollar.java deleted file mode 100644 index bba35848..00000000 --- a/src/main/java/guru/springframework/Dollar.java +++ /dev/null @@ -1,10 +0,0 @@ -package guru.springframework; - -public class Dollar extends Money{ - // private int amount; This was transfer to the Money class because of inheritance - public Dollar(int amount, String currency){ - super(amount, currency); - } - - -} diff --git a/src/main/java/guru/springframework/Franc.java b/src/main/java/guru/springframework/Franc.java deleted file mode 100644 index 164bc031..00000000 --- a/src/main/java/guru/springframework/Franc.java +++ /dev/null @@ -1,10 +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 c8e0aeb8..68a9c986 100644 --- a/src/main/java/guru/springframework/Money.java +++ b/src/main/java/guru/springframework/Money.java @@ -13,10 +13,10 @@ protected String currency() { } - public static Franc franc(int amount){return new Franc(amount, "CHF");} + public static Money franc(int amount){return new Money(amount, "CHF");} - static Dollar dollar(int amount){ - return new Dollar(amount, "USD"); + public static Money dollar(int amount){ + return new Money(amount, "USD"); } public boolean equals(Object object){ Money money = (Money) object; diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java index ee8064fb..78d0b0f8 100644 --- a/src/test/java/guru/springframework/MoneyTest.java +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -13,6 +13,8 @@ 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)); } @@ -20,20 +22,8 @@ void testMultiplication(){ void testEquality(){ assertEquals(Money.dollar(5), Money.dollar(5)); assertNotEquals(Money.dollar(5), Money.dollar(8)); - } - - @Test - void testMultiplicationFranc(){ - Money five = Money.franc(5); - assertEquals(Money.franc(10), five.times(2)); - assertEquals(Money.franc(15), five.times(3)); - - } - - @Test - void testEqualityFranc(){ assertEquals(Money.franc(5), Money.franc(5)); - assertNotEquals(Money.franc(5), Money.franc(8)); + assertNotEquals(Money.dollar(5), Money.franc(5)); } @Test From eb5a12537b0adc48708d37222705b73f879ff9bb Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Tue, 18 Oct 2022 23:05:54 -0500 Subject: [PATCH 15/15] More Refactoring --- src/main/java/guru/springframework/Bank.java | 21 +++++++++ .../java/guru/springframework/Expression.java | 5 ++ src/main/java/guru/springframework/Money.java | 13 +++++- src/main/java/guru/springframework/Pair.java | 27 +++++++++++ src/main/java/guru/springframework/Sum.java | 17 +++++++ .../java/guru/springframework/MoneyTest.java | 46 +++++++++++++++++++ 6 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 src/main/java/guru/springframework/Bank.java create mode 100644 src/main/java/guru/springframework/Expression.java create mode 100644 src/main/java/guru/springframework/Pair.java 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 new file mode 100644 index 00000000..6f2c3c0a --- /dev/null +++ b/src/main/java/guru/springframework/Bank.java @@ -0,0 +1,21 @@ +package guru.springframework; + +import java.util.HashMap; + +public class Bank { + private HashMap rateMap = new HashMap<>(); + public Money reduce(Expression source, String toCurrency) { + return source.reduce(this, toCurrency); + } + + public int rate(String from, String to){ + if (from.equals(to)) { + return 1; + } + return rateMap.get(new Pair(from, to)); + + } + public void addRate(String from, String to, int rate) { + rateMap.put(new Pair(from, to), rate); + } +} diff --git a/src/main/java/guru/springframework/Expression.java b/src/main/java/guru/springframework/Expression.java new file mode 100644 index 00000000..27072c0e --- /dev/null +++ b/src/main/java/guru/springframework/Expression.java @@ -0,0 +1,5 @@ +package guru.springframework; + +public interface Expression { + Money reduce(Bank bank, String to); +} diff --git a/src/main/java/guru/springframework/Money.java b/src/main/java/guru/springframework/Money.java index 68a9c986..30df6a94 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 class Money { +public class Money implements guru.springframework.Expression { protected int amount; protected String currency; public Money(int amount, String currency) { @@ -24,6 +24,13 @@ public boolean equals(Object object){ && this.currency == money.currency; } + @Override + public Money reduce(Bank bank, String to){ + //return this; + //int rate = (currency.equals("CHF") && to.equals("USD")) ? 2 : 1; + return new Money(amount / bank.rate(this.currency, to), to); + } + @Override public String toString() { return "Money{" + @@ -35,4 +42,8 @@ public String toString() { public Money times(int multiplier) { return new Money(amount * multiplier, this.currency); } + + public Expression plus(Money addend) { + return new Sum(this, addend); + } } diff --git a/src/main/java/guru/springframework/Pair.java b/src/main/java/guru/springframework/Pair.java new file mode 100644 index 00000000..c9f73e7e --- /dev/null +++ b/src/main/java/guru/springframework/Pair.java @@ -0,0 +1,27 @@ +package guru.springframework; + +import java.util.Objects; + +public class Pair { + + private final String from; + private final String to; + + public Pair(String from, String to) { + this.from = from; + this.to = to; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Pair)) return false; + Pair pair = (Pair) o; + return Objects.equals(from, pair.from) && Objects.equals(to, pair.to); + } + + @Override + public int hashCode() { + return Objects.hash(from, to); + } +} diff --git a/src/main/java/guru/springframework/Sum.java b/src/main/java/guru/springframework/Sum.java new file mode 100644 index 00000000..7bba7ebc --- /dev/null +++ b/src/main/java/guru/springframework/Sum.java @@ -0,0 +1,17 @@ +package guru.springframework; + +public class Sum implements Expression{ + Money augmend; + Money addmend; + + public Sum(Money augmend, Money addmend) { + this.augmend = augmend; + this.addmend = addmend; + } + + @Override + public Money reduce(Bank bank, String to){ + int amount = augmend.amount + addmend.amount; + return new Money(amount, to); + } +} diff --git a/src/test/java/guru/springframework/MoneyTest.java b/src/test/java/guru/springframework/MoneyTest.java index 78d0b0f8..55b31843 100644 --- a/src/test/java/guru/springframework/MoneyTest.java +++ b/src/test/java/guru/springframework/MoneyTest.java @@ -30,6 +30,52 @@ void testEquality(){ void testCurrency(){ assertEquals("USD", Money.dollar(1).currency()); assertEquals("CHF", Money.franc(1).currency()); + } + + @Test + void testSimpleAddition(){ + Money five = Money.dollar(5); + Expression sum = (Expression) five.plus(five); + Bank bank = new Bank(); + Money reduced = bank.reduce(sum, "USD"); + assertEquals(Money.dollar(10), reduced); + } + @Test + void testPlusReturnsSum() { + Money five = Money.dollar(5); + Expression result = five.plus(five); + Sum sum = (Sum) result; + assertEquals(five, sum.augmend); + assertEquals(five, sum.addmend); + } + + @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); + } + + @Test + void testReduceMoneyDifferentCurrency() { + Bank bank = new Bank(); + bank.addRate("CHF", "USD", 2); + Money result = bank.reduce(Money.franc(2), "USD"); + assertEquals(Money.dollar(1), result); + } + + @Test + void testIdentityRate() { + assertEquals(1, new Bank().rate("USD", "USD")); + assertEquals(1, new Bank().rate("CHF", "CHF")); } }