From c97dcfd731d354541a61c4021298c586f9f8a267 Mon Sep 17 00:00:00 2001 From: gremble0 Date: Wed, 14 Aug 2024 09:31:36 +0200 Subject: [PATCH 1/6] Make domain model for exercise 1 --- domain-model.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 domain-model.md diff --git a/domain-model.md b/domain-model.md new file mode 100644 index 0000000..44926ad --- /dev/null +++ b/domain-model.md @@ -0,0 +1,15 @@ +## Domain model Product class +| Variables | Methods | Scenario | Outputs | +|----------------|---------------------|--------------------|---------------------------------| +| int fullPrice | | | | +| float discount | | | | +| String name | | | | +| | `int getCost()` | Method gets called | positive integer or 0 | +| | `String toString()` | Method gets called | Detailed information about item | + +## Domain model CheckoutMachine class: +| Methods | Scenario | Output | +|------------------------------------------------------------|--------------------|----------------------------| +| `static boolean processPayment(List basket)` | Payment failed | false | +| | Payment succeeded | true | +| `private static void printReceipt(List basket)` | Method gets called | Prints receipt to customer | From 112d5acb3b019d8e8668635cce56a49dde5d74e3 Mon Sep 17 00:00:00 2001 From: gremble0 Date: Wed, 14 Aug 2024 10:10:07 +0200 Subject: [PATCH 2/6] Update model --- domain-model.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/domain-model.md b/domain-model.md index 44926ad..7c1765d 100644 --- a/domain-model.md +++ b/domain-model.md @@ -8,8 +8,11 @@ | | `String toString()` | Method gets called | Detailed information about item | ## Domain model CheckoutMachine class: -| Methods | Scenario | Output | -|------------------------------------------------------------|--------------------|----------------------------| -| `static boolean processPayment(List basket)` | Payment failed | false | -| | Payment succeeded | true | -| `private static void printReceipt(List basket)` | Method gets called | Prints receipt to customer | +| Variables | Methods | Scenario | Output | +|------------------------|-----------------------------------------------|---------------------|-----------------------------------------------| +| `List basket` | | | | +| | `void addProduct(Product product)` | User adds product | Adds a single product to the basket | +| | `void addProduct(Product product, int count)` | User adds products | Adds how ever many products specified in call | +| | `boolean processPayment()` | Payment failed | false | +| | | Payment succeeded | true | +| | `private void printReceipt()` | Method gets called | Prints receipt to customer | From 38fdbe9265c1bb67c3323e4037e49fecdc680526 Mon Sep 17 00:00:00 2001 From: gremble0 Date: Wed, 14 Aug 2024 10:15:07 +0200 Subject: [PATCH 3/6] Update model --- domain-model.md | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/domain-model.md b/domain-model.md index 7c1765d..0c5aa0a 100644 --- a/domain-model.md +++ b/domain-model.md @@ -8,11 +8,15 @@ | | `String toString()` | Method gets called | Detailed information about item | ## Domain model CheckoutMachine class: -| Variables | Methods | Scenario | Output | -|------------------------|-----------------------------------------------|---------------------|-----------------------------------------------| -| `List basket` | | | | -| | `void addProduct(Product product)` | User adds product | Adds a single product to the basket | -| | `void addProduct(Product product, int count)` | User adds products | Adds how ever many products specified in call | -| | `boolean processPayment()` | Payment failed | false | -| | | Payment succeeded | true | -| | `private void printReceipt()` | Method gets called | Prints receipt to customer | +| Variables | Methods | Scenario | Output | +|------------------------|--------------------------------------------------|-----------------------|--------------------------------------------------| +| `List basket` | | | | +| | `void addProduct(Product product)` | User adds product | Adds a single product to the basket | +| | `void addProduct(Product product, int count)` | User adds products | Adds how ever many products specified in call | +| | | | | +| | `void removeProduct(Product product)` | User removes product | Removes a single product from the basket | +| | `void removeProduct(Product product, int count)` | User removes products | Removes how ever many products specified in call | +| | | | | +| | `boolean processPayment()` | Payment failed | false, display some error message | +| | | Payment succeeded | true, display some error message | +| | `private void printReceipt()` | Method gets called | Prints receipt to customer | From 0cdf89ae85f08cec0c16c38a7e60692200ff90d3 Mon Sep 17 00:00:00 2001 From: gremble0 Date: Wed, 14 Aug 2024 10:47:43 +0200 Subject: [PATCH 4/6] Complete exercise 2 --- src/main/java/com/booleanuk/core/Basket.java | 20 ++++++++++++++++ src/main/java/com/booleanuk/core/Product.java | 17 ++++++++++++++ .../java/com/booleanuk/core/BasketTest.java | 23 +++++++++++++++++++ .../java/com/booleanuk/core/ProductTest.java | 20 ++++++++++++++++ 4 files changed, 80 insertions(+) create mode 100644 src/main/java/com/booleanuk/core/Basket.java create mode 100644 src/main/java/com/booleanuk/core/Product.java create mode 100644 src/test/java/com/booleanuk/core/BasketTest.java create mode 100644 src/test/java/com/booleanuk/core/ProductTest.java diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java new file mode 100644 index 0000000..b71c486 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -0,0 +1,20 @@ +package com.booleanuk.core; + +import java.util.ArrayList; +import java.util.List; + +public class Basket { + public List items = new ArrayList<>(); + + public void add(Product product) { + this.items.add(product); + } + + public float price() { + float price = 0; + for (Product product : this.items) + price += product.price(); + + return price; + } +} diff --git a/src/main/java/com/booleanuk/core/Product.java b/src/main/java/com/booleanuk/core/Product.java new file mode 100644 index 0000000..030de6f --- /dev/null +++ b/src/main/java/com/booleanuk/core/Product.java @@ -0,0 +1,17 @@ +package com.booleanuk.core; + +public class Product { + public String name; + public int fullPriceInNOK; + public float discount; // 0..1, 0 means no discount 1 means 100% + + public Product(String name, int fullPriceInNOK, float discount) { + this.name = name; + this.fullPriceInNOK = fullPriceInNOK; + this.discount = discount; + } + + public float price() { + return this.fullPriceInNOK * (1 - discount); + } +} diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java new file mode 100644 index 0000000..6141de8 --- /dev/null +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -0,0 +1,23 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class BasketTest { + @Test + public void shouldAddProductToBasket() { + Basket basket = new Basket(); + basket.add(new Product("Bread", 29, 0.0f)); + Assertions.assertEquals(1, basket.items.size()); + } + + @Test + public void shouldCalculatePrice() { + Basket basket = new Basket(); + basket.add(new Product("Bread", 29, 0.0f)); + basket.add(new Product("Soda", 20, 0.5f)); + Assertions.assertEquals(2, basket.items.size()); + Assertions.assertEquals(29 + (20 * 0.5), basket.price()); + } + +} diff --git a/src/test/java/com/booleanuk/core/ProductTest.java b/src/test/java/com/booleanuk/core/ProductTest.java new file mode 100644 index 0000000..d34a496 --- /dev/null +++ b/src/test/java/com/booleanuk/core/ProductTest.java @@ -0,0 +1,20 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class ProductTest { + @Test + public void shouldInstantiateCorrectly() { + Product product = new Product("Bread", 29, 0.0f); + Assertions.assertEquals("Bread", product.name); + Assertions.assertEquals(29, product.fullPriceInNOK); + Assertions.assertEquals(0.0f, product.discount); + } + + @Test + public void shouldCalculatePrice() { + Product product = new Product("Bread", 29, 0.0f); + Assertions.assertEquals(29, product.price()); + } +} From 73759862446c4c2ccf164848ae1c9f34465141ad Mon Sep 17 00:00:00 2001 From: gremble0 Date: Wed, 14 Aug 2024 11:03:57 +0200 Subject: [PATCH 5/6] Update names to specification --- src/main/java/com/booleanuk/core/Basket.java | 2 +- src/test/java/com/booleanuk/core/BasketTest.java | 4 ++-- src/test/java/com/booleanuk/core/ProductTest.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index b71c486..a265df1 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -10,7 +10,7 @@ public void add(Product product) { this.items.add(product); } - public float price() { + public float total() { float price = 0; for (Product product : this.items) price += product.price(); diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 6141de8..0580488 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -12,12 +12,12 @@ public void shouldAddProductToBasket() { } @Test - public void shouldCalculatePrice() { + public void shouldCalculateTotal() { Basket basket = new Basket(); basket.add(new Product("Bread", 29, 0.0f)); basket.add(new Product("Soda", 20, 0.5f)); Assertions.assertEquals(2, basket.items.size()); - Assertions.assertEquals(29 + (20 * 0.5), basket.price()); + Assertions.assertEquals(29 + (20 * 0.5), basket.total()); } } diff --git a/src/test/java/com/booleanuk/core/ProductTest.java b/src/test/java/com/booleanuk/core/ProductTest.java index d34a496..3c9861d 100644 --- a/src/test/java/com/booleanuk/core/ProductTest.java +++ b/src/test/java/com/booleanuk/core/ProductTest.java @@ -15,6 +15,6 @@ public void shouldInstantiateCorrectly() { @Test public void shouldCalculatePrice() { Product product = new Product("Bread", 29, 0.0f); - Assertions.assertEquals(29, product.price()); + Assertions.assertEquals(29, product.total()); } } From 0751dc20c892beba480bcdf7c16c98bd8b007948 Mon Sep 17 00:00:00 2001 From: gremble0 Date: Wed, 14 Aug 2024 12:39:39 +0200 Subject: [PATCH 6/6] Use map instead of list of product --- src/main/java/com/booleanuk/core/Basket.java | 15 +++++++-------- src/test/java/com/booleanuk/core/BasketTest.java | 15 +++++++++------ src/test/java/com/booleanuk/core/ProductTest.java | 2 +- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index a265df1..aaaa73c 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -1,19 +1,18 @@ package com.booleanuk.core; -import java.util.ArrayList; -import java.util.List; +import java.util.HashMap; public class Basket { - public List items = new ArrayList<>(); + public HashMap items = new HashMap<>(); - public void add(Product product) { - this.items.add(product); + public void add(String product, int price) { + this.items.put(product, price); } public float total() { - float price = 0; - for (Product product : this.items) - price += product.price(); + int price = 0; + for (int p : this.items.values()) + price += p; return price; } diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 0580488..3b78638 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -5,19 +5,22 @@ class BasketTest { @Test - public void shouldAddProductToBasket() { + public void testAddProductToBasket() { Basket basket = new Basket(); - basket.add(new Product("Bread", 29, 0.0f)); + basket.add("Bread", 29); Assertions.assertEquals(1, basket.items.size()); } @Test - public void shouldCalculateTotal() { + public void testCalculateTotal() { Basket basket = new Basket(); - basket.add(new Product("Bread", 29, 0.0f)); - basket.add(new Product("Soda", 20, 0.5f)); + basket.add("Bread", 29); + basket.add("Soda", 20); + Assertions.assertEquals(2, basket.items.size()); - Assertions.assertEquals(29 + (20 * 0.5), basket.total()); + Assertions.assertEquals(29 + 20, basket.total()); + + basket.add("Milk", 25); } } diff --git a/src/test/java/com/booleanuk/core/ProductTest.java b/src/test/java/com/booleanuk/core/ProductTest.java index 3c9861d..d34a496 100644 --- a/src/test/java/com/booleanuk/core/ProductTest.java +++ b/src/test/java/com/booleanuk/core/ProductTest.java @@ -15,6 +15,6 @@ public void shouldInstantiateCorrectly() { @Test public void shouldCalculatePrice() { Product product = new Product("Bread", 29, 0.0f); - Assertions.assertEquals(29, product.total()); + Assertions.assertEquals(29, product.price()); } }