From 5e4546e2e53e8b961c45bb9b19711d18185d25c6 Mon Sep 17 00:00:00 2001 From: Isabelltran <128478218+Isabelltran@users.noreply.github.com> Date: Mon, 11 Aug 2025 09:29:46 +0200 Subject: [PATCH 01/23] Added BobsBagel.drawio --- BobsBagel.drawio | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 BobsBagel.drawio diff --git a/BobsBagel.drawio b/BobsBagel.drawio new file mode 100644 index 00000000..f9e3567b --- /dev/null +++ b/BobsBagel.drawio @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + From 2bf6735a3a55e5baa55e7b0bc1288a8e30a66852 Mon Sep 17 00:00:00 2001 From: Isabelltran <128478218+Isabelltran@users.noreply.github.com> Date: Mon, 11 Aug 2025 09:30:30 +0200 Subject: [PATCH 02/23] Added BobsBagel.drawio From 670f5fc964b3b7cca8a8fa207930623b58b7a661 Mon Sep 17 00:00:00 2001 From: Isabelltran <128478218+Isabelltran@users.noreply.github.com> Date: Mon, 11 Aug 2025 09:45:56 +0200 Subject: [PATCH 03/23] Update BobsBagel.drawio --- BobsBagel.drawio | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/BobsBagel.drawio b/BobsBagel.drawio index f9e3567b..02359113 100644 --- a/BobsBagel.drawio +++ b/BobsBagel.drawio @@ -4,17 +4,29 @@ - - + + - - + + - - + + - - + + + + + + + + + + + + + + From 17e9dc7f5f5a672c28aaff7de111ed5df4b7464a Mon Sep 17 00:00:00 2001 From: Isabelltran <128478218+Isabelltran@users.noreply.github.com> Date: Mon, 11 Aug 2025 10:02:00 +0200 Subject: [PATCH 04/23] Update BobsBagel.drawio --- BobsBagel.drawio | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/BobsBagel.drawio b/BobsBagel.drawio index 02359113..1667f56f 100644 --- a/BobsBagel.drawio +++ b/BobsBagel.drawio @@ -5,7 +5,7 @@ - + @@ -17,7 +17,7 @@ - + @@ -28,6 +28,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From b58f7a1c36e9786350fb7efeebab76ca29416b4c Mon Sep 17 00:00:00 2001 From: Isabelltran <128478218+Isabelltran@users.noreply.github.com> Date: Mon, 11 Aug 2025 10:10:44 +0200 Subject: [PATCH 05/23] Update BobsBagel.drawio --- BobsBagel.drawio | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BobsBagel.drawio b/BobsBagel.drawio index 1667f56f..33d83533 100644 --- a/BobsBagel.drawio +++ b/BobsBagel.drawio @@ -13,7 +13,7 @@ - + From b3fe001d22578a4cbffbe62e8302d4203387d335 Mon Sep 17 00:00:00 2001 From: Isabell Date: Mon, 11 Aug 2025 11:29:21 +0200 Subject: [PATCH 06/23] Test for adding a bagel --- domain-model.md | 86 +++++++++++++++++++++++++++++++ exercise.main/Basket.cs | 21 ++++++++ exercise.main/Product/Bagel.cs | 16 ++++++ exercise.main/Product/Coffee.cs | 15 ++++++ exercise.main/Product/Filling.cs | 15 ++++++ exercise.main/Product/IProduct.cs | 15 ++++++ exercise.sln | 4 ++ exercise.tests/Tests.cs | 19 +++++++ exercise.tests/UnitTest1.cs | 15 ------ 9 files changed, 191 insertions(+), 15 deletions(-) create mode 100644 domain-model.md create mode 100644 exercise.main/Basket.cs create mode 100644 exercise.main/Product/Bagel.cs create mode 100644 exercise.main/Product/Coffee.cs create mode 100644 exercise.main/Product/Filling.cs create mode 100644 exercise.main/Product/IProduct.cs create mode 100644 exercise.tests/Tests.cs delete mode 100644 exercise.tests/UnitTest1.cs diff --git a/domain-model.md b/domain-model.md new file mode 100644 index 00000000..cb6dd801 --- /dev/null +++ b/domain-model.md @@ -0,0 +1,86 @@ +| Classes | Methods/Properties | Scenario | Outputs | +|---------------|---------------------------------------------------|-------------------------------------------------------|---------------| +|Basket |Add(Bagel bagel) | add Bagel | bool | +|Basket |Remove(Bagel bagel) | Remove Bagel | bool | +|Basket |IsFull() | See if basket is full | bool | +|Basket |ChangeCapacity(int capacity) | Change capacity | bool | +|Basket |RemoveExist(Bagel bagel) | try to remove an item that doesn't exist in my basket | bool | +|Basket |TotalCost() | Check total cost of items in my basket | double | +|Basket |PriceBagel(Bagel bagel) | Check cost of a bagel | double | +|Bagel |Choosefillings() | choose fillings for my bagel | List| +|Basket |PriceFilling(Filling filling) | Check cost of each filling | double | +|Basket |OrderInventory() | order things that we stock in our inventory. | bool | + + + + + +``` +1. +As a member of the public, +So I can order a bagel before work, +I'd like to add a specific type of bagel to my basket. +``` + +``` +2. +As a member of the public, +So I can change my order, +I'd like to remove a bagel from my basket. +``` + +``` +3. +As a member of the public, +So that I can not overfill my small bagel basket +I'd like to know when my basket is full when I try adding an item beyond my basket capacity. +``` + +``` +4. +As a Bob's Bagels manager, +So that I can expand my business, +I’d like to change the capacity of baskets. +``` + +``` +5. +As a member of the public +So that I can maintain my sanity +I'd like to know if I try to remove an item that doesn't exist in my basket. +``` + +``` +6. +As a customer, +So I know how much money I need, +I'd like to know the total cost of items in my basket. +``` + +``` +7. +As a customer, +So I know what the damage will be, +I'd like to know the cost of a bagel before I add it to my basket. +``` + +``` +8. +As a customer, +So I can shake things up a bit, +I'd like to be able to choose fillings for my bagel. +``` + +``` +9. +As a customer, +So I don't over-spend, +I'd like to know the cost of each filling before I add it to my bagel order. +``` + +``` +10. +As the manager, +So we don't get any weird requests, +I want customers to only be able to order things that we stock in our inventory. +``` \ No newline at end of file diff --git a/exercise.main/Basket.cs b/exercise.main/Basket.cs new file mode 100644 index 00000000..d186c4ae --- /dev/null +++ b/exercise.main/Basket.cs @@ -0,0 +1,21 @@ +using exercise.main.Product; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace exercise.main +{ + public class Basket + { + private List _items = new List(); + + public void Add(Bagel bagel) + { + throw new NotImplementedException(); + } + + public List Items { get { return _items; } } + } +} diff --git a/exercise.main/Product/Bagel.cs b/exercise.main/Product/Bagel.cs new file mode 100644 index 00000000..6fde6a72 --- /dev/null +++ b/exercise.main/Product/Bagel.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace exercise.main.Product +{ + public class Bagel : IProduct + { + + public string Name { get; set; } + public string ID { get; set; } + public double Price { get; set; } + } +} diff --git a/exercise.main/Product/Coffee.cs b/exercise.main/Product/Coffee.cs new file mode 100644 index 00000000..8fed9122 --- /dev/null +++ b/exercise.main/Product/Coffee.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace exercise.main.Product +{ + public class Coffee : IProduct + { + public string Name { get; set; } + public string ID { get; set; } + public double Price { get; set; } + } +} diff --git a/exercise.main/Product/Filling.cs b/exercise.main/Product/Filling.cs new file mode 100644 index 00000000..1926d389 --- /dev/null +++ b/exercise.main/Product/Filling.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace exercise.main.Product +{ + public class Filling : IProduct + { + public string Name { get; set; } + public string ID { get; set; } + public double Price { get; set; } + } +} diff --git a/exercise.main/Product/IProduct.cs b/exercise.main/Product/IProduct.cs new file mode 100644 index 00000000..3ca15353 --- /dev/null +++ b/exercise.main/Product/IProduct.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace exercise.main.Product +{ + public interface IProduct + { + string Name { get; set; } + string ID { get; set; } + double Price { get; set; } + } +} diff --git a/exercise.sln b/exercise.sln index 0efb5453..af8d12d7 100644 --- a/exercise.sln +++ b/exercise.sln @@ -9,6 +9,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "exercise.tests", "exercise. EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{825CCFE7-4F2E-4770-8393-FEB732F66EE4}" ProjectSection(SolutionItems) = preProject + .gitignore = .gitignore extension1.md = extension1.md extension2.md = extension2.md extension3.md = extension3.md @@ -34,4 +35,7 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {CA5904D1-7CBB-41BD-A1A3-6A5FE0525D44} + EndGlobalSection EndGlobal diff --git a/exercise.tests/Tests.cs b/exercise.tests/Tests.cs new file mode 100644 index 00000000..411186ba --- /dev/null +++ b/exercise.tests/Tests.cs @@ -0,0 +1,19 @@ +using exercise.main; +using exercise.main.Product; + +namespace exercise.tests; + +public class Tests +{ + private Basket _basket = new Basket(); + + [Test] + public void AddTest() + { + Bagel bagel = new Bagel(); + bagel.Name = "Plain"; + _basket.Add(bagel); + + Assert.That(_basket.Items[0].Name, Is.EqualTo("Plain")); + } +} \ No newline at end of file diff --git a/exercise.tests/UnitTest1.cs b/exercise.tests/UnitTest1.cs deleted file mode 100644 index 7bdb8968..00000000 --- a/exercise.tests/UnitTest1.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace exercise.tests; - -public class Tests -{ - [SetUp] - public void Setup() - { - } - - [Test] - public void Test1() - { - Assert.Pass(); - } -} \ No newline at end of file From aee6fbe8407cc580fa8e619c500994d9c0eb57c5 Mon Sep 17 00:00:00 2001 From: Isabelltran <128478218+Isabelltran@users.noreply.github.com> Date: Mon, 11 Aug 2025 11:31:52 +0200 Subject: [PATCH 07/23] Delete BobsBagel.drawio --- BobsBagel.drawio | 76 ------------------------------------------------ 1 file changed, 76 deletions(-) delete mode 100644 BobsBagel.drawio diff --git a/BobsBagel.drawio b/BobsBagel.drawio deleted file mode 100644 index 33d83533..00000000 --- a/BobsBagel.drawio +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 32c4811ca393b816a0bebaa9fa40c2ce33664316 Mon Sep 17 00:00:00 2001 From: Isabell Date: Mon, 11 Aug 2025 11:40:59 +0200 Subject: [PATCH 08/23] Testing Adding a bagel works --- exercise.main/Basket.cs | 9 ++++++++- exercise.sln | 1 + exercise.tests/Tests.cs | 1 + exercise.tests/exercise.tests.csproj | 4 ++++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/exercise.main/Basket.cs b/exercise.main/Basket.cs index d186c4ae..9ae528ad 100644 --- a/exercise.main/Basket.cs +++ b/exercise.main/Basket.cs @@ -9,13 +9,20 @@ namespace exercise.main { public class Basket { + private int _capacity = 10; private List _items = new List(); public void Add(Bagel bagel) { - throw new NotImplementedException(); + if (_capacity > 0) + { + _items.Add(bagel); + _capacity--; + } } public List Items { get { return _items; } } + + public int Capacity { get { return _capacity; } } } } diff --git a/exercise.sln b/exercise.sln index af8d12d7..41e156b2 100644 --- a/exercise.sln +++ b/exercise.sln @@ -10,6 +10,7 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{825CCFE7-4F2E-4770-8393-FEB732F66EE4}" ProjectSection(SolutionItems) = preProject .gitignore = .gitignore + domain-model.md = domain-model.md extension1.md = extension1.md extension2.md = extension2.md extension3.md = extension3.md diff --git a/exercise.tests/Tests.cs b/exercise.tests/Tests.cs index 411186ba..5a64f2e8 100644 --- a/exercise.tests/Tests.cs +++ b/exercise.tests/Tests.cs @@ -15,5 +15,6 @@ public void AddTest() _basket.Add(bagel); Assert.That(_basket.Items[0].Name, Is.EqualTo("Plain")); + Assert.That(_basket.Capacity, Is.EqualTo(9)); } } \ No newline at end of file diff --git a/exercise.tests/exercise.tests.csproj b/exercise.tests/exercise.tests.csproj index 9fed8e17..a3a97d4f 100644 --- a/exercise.tests/exercise.tests.csproj +++ b/exercise.tests/exercise.tests.csproj @@ -17,4 +17,8 @@ + + + + From cf2932c7db61a8311f6353e5a9a5003fb4674a9b Mon Sep 17 00:00:00 2001 From: Isabell Date: Mon, 11 Aug 2025 11:57:22 +0200 Subject: [PATCH 09/23] Testing Remove a bagel works --- exercise.main/Basket.cs | 7 +++++++ exercise.tests/Tests.cs | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/exercise.main/Basket.cs b/exercise.main/Basket.cs index 9ae528ad..44aa5f73 100644 --- a/exercise.main/Basket.cs +++ b/exercise.main/Basket.cs @@ -21,6 +21,13 @@ public void Add(Bagel bagel) } } + public bool Remove(Bagel bagel) + { + _items.Remove(bagel); + _capacity++; + return true; + } + public List Items { get { return _items; } } public int Capacity { get { return _capacity; } } diff --git a/exercise.tests/Tests.cs b/exercise.tests/Tests.cs index 5a64f2e8..8eeae21e 100644 --- a/exercise.tests/Tests.cs +++ b/exercise.tests/Tests.cs @@ -17,4 +17,22 @@ public void AddTest() Assert.That(_basket.Items[0].Name, Is.EqualTo("Plain")); Assert.That(_basket.Capacity, Is.EqualTo(9)); } + + [Test] + public void RemoveTest() + { + Bagel bagel = new Bagel(); + Bagel bagel1 = new Bagel(); + bagel.Name = "Plain"; + bagel1.Name = "Onion"; + + _basket.Add(bagel); + _basket.Add(bagel1); + _basket.Remove(bagel); + bool result = _basket.Remove(bagel); + + Assert.That(result, Is.True); + Assert.That(_basket.Capacity, Is.EqualTo(9)); + + } } \ No newline at end of file From d15c0664bfa25bac9358700e2e3a435721f6e040 Mon Sep 17 00:00:00 2001 From: Isabell Date: Mon, 11 Aug 2025 12:40:08 +0200 Subject: [PATCH 10/23] Testing Remove a bagel works --- exercise.main/Basket.cs | 7 ++++++- exercise.tests/Tests.cs | 46 +++++++++++++++++++++++++++++++++-------- 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/exercise.main/Basket.cs b/exercise.main/Basket.cs index 44aa5f73..cee50542 100644 --- a/exercise.main/Basket.cs +++ b/exercise.main/Basket.cs @@ -9,7 +9,7 @@ namespace exercise.main { public class Basket { - private int _capacity = 10; + private int _capacity = 5; private List _items = new List(); public void Add(Bagel bagel) @@ -28,6 +28,11 @@ public bool Remove(Bagel bagel) return true; } + public bool IsFull() + { + throw new NotImplementedException(); + } + public List Items { get { return _items; } } public int Capacity { get { return _capacity; } } diff --git a/exercise.tests/Tests.cs b/exercise.tests/Tests.cs index 8eeae21e..32d8f653 100644 --- a/exercise.tests/Tests.cs +++ b/exercise.tests/Tests.cs @@ -5,34 +5,62 @@ namespace exercise.tests; public class Tests { - private Basket _basket = new Basket(); + [Test] public void AddTest() { + Basket basket = new Basket(); Bagel bagel = new Bagel(); bagel.Name = "Plain"; - _basket.Add(bagel); + basket.Add(bagel); - Assert.That(_basket.Items[0].Name, Is.EqualTo("Plain")); - Assert.That(_basket.Capacity, Is.EqualTo(9)); + Assert.That(basket.Items[0].Name, Is.EqualTo("Plain")); + Assert.That(basket.Capacity, Is.EqualTo(9)); } [Test] public void RemoveTest() { + Basket basket = new Basket(); Bagel bagel = new Bagel(); Bagel bagel1 = new Bagel(); bagel.Name = "Plain"; bagel1.Name = "Onion"; - _basket.Add(bagel); - _basket.Add(bagel1); - _basket.Remove(bagel); - bool result = _basket.Remove(bagel); + basket.Add(bagel); + basket.Add(bagel1); + bool result = basket.Remove(bagel); + + Assert.That(result, Is.True); + Assert.That(basket.Capacity, Is.EqualTo(4); + + } + + [Test] + public void IsFullTest() + { + Basket basket = new Basket(); + Bagel bagel = new Bagel(); + Bagel bagel1 = new Bagel(); + Bagel bagel2 = new Bagel(); + Bagel bagel3 = new Bagel(); + Bagel bagel4 = new Bagel(); + + bagel.Name = "Plain"; + bagel1.Name = "Onion"; + bagel2.Name = "Everything"; + bagel3.Name = "Everything"; + bagel4.Name = "Plain"; + + basket.Add(bagel); + basket.Add(bagel1); + basket.Add(bagel2); + basket.Add(bagel3); + basket.Add(bagel3); + bool result = basket.IsFull(); Assert.That(result, Is.True); - Assert.That(_basket.Capacity, Is.EqualTo(9)); } } \ No newline at end of file From 017df152410eaaf7f768e2fdb9c10504e78bf29b Mon Sep 17 00:00:00 2001 From: Isabell Date: Mon, 11 Aug 2025 12:42:40 +0200 Subject: [PATCH 11/23] Testing is capacity full --- exercise.main/Basket.cs | 2 +- exercise.tests/Tests.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/exercise.main/Basket.cs b/exercise.main/Basket.cs index cee50542..80ee3f4b 100644 --- a/exercise.main/Basket.cs +++ b/exercise.main/Basket.cs @@ -30,7 +30,7 @@ public bool Remove(Bagel bagel) public bool IsFull() { - throw new NotImplementedException(); + return _capacity > 0; } public List Items { get { return _items; } } diff --git a/exercise.tests/Tests.cs b/exercise.tests/Tests.cs index 32d8f653..a9d3f95d 100644 --- a/exercise.tests/Tests.cs +++ b/exercise.tests/Tests.cs @@ -57,10 +57,10 @@ public void IsFullTest() basket.Add(bagel1); basket.Add(bagel2); basket.Add(bagel3); - basket.Add(bagel3); + basket.Add(bagel4); bool result = basket.IsFull(); - Assert.That(result, Is.True); + Assert.That(result, Is.False); } } \ No newline at end of file From 8175cf362abd04e8da252969294344365830aacf Mon Sep 17 00:00:00 2001 From: Isabell Date: Mon, 11 Aug 2025 12:54:51 +0200 Subject: [PATCH 12/23] Testing changing capacity works --- exercise.main/Basket.cs | 2 +- exercise.tests/Tests.cs | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/exercise.main/Basket.cs b/exercise.main/Basket.cs index 80ee3f4b..17e50430 100644 --- a/exercise.main/Basket.cs +++ b/exercise.main/Basket.cs @@ -35,6 +35,6 @@ public bool IsFull() public List Items { get { return _items; } } - public int Capacity { get { return _capacity; } } + public int Capacity { get { return _capacity; } set { _capacity = value; } } } } diff --git a/exercise.tests/Tests.cs b/exercise.tests/Tests.cs index a9d3f95d..8fe081c4 100644 --- a/exercise.tests/Tests.cs +++ b/exercise.tests/Tests.cs @@ -33,7 +33,7 @@ public void RemoveTest() bool result = basket.Remove(bagel); Assert.That(result, Is.True); - Assert.That(basket.Capacity, Is.EqualTo(4); + Assert.That(basket.Capacity, Is.EqualTo(4)); } @@ -63,4 +63,12 @@ public void IsFullTest() Assert.That(result, Is.False); } + [Test] + public void ChangeCapacityTest() + { + Basket basket = new Basket(); + basket.Capacity = 7; + + Assert.That(basket.Capacity, Is.EqualTo(7)); + } } \ No newline at end of file From 30e79c3b11fcbc62bee7b00906259b55e0387be2 Mon Sep 17 00:00:00 2001 From: Isabell Date: Mon, 11 Aug 2025 12:59:55 +0200 Subject: [PATCH 13/23] Testing remove a bagel that doesnt exist --- exercise.main/Basket.cs | 5 +++++ exercise.tests/Tests.cs | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/exercise.main/Basket.cs b/exercise.main/Basket.cs index 17e50430..99108b57 100644 --- a/exercise.main/Basket.cs +++ b/exercise.main/Basket.cs @@ -33,6 +33,11 @@ public bool IsFull() return _capacity > 0; } + public bool RemoveExist(Bagel bagel) + { + throw new NotImplementedException(); + } + public List Items { get { return _items; } } public int Capacity { get { return _capacity; } set { _capacity = value; } } diff --git a/exercise.tests/Tests.cs b/exercise.tests/Tests.cs index 8fe081c4..e29dce6b 100644 --- a/exercise.tests/Tests.cs +++ b/exercise.tests/Tests.cs @@ -16,7 +16,7 @@ public void AddTest() basket.Add(bagel); Assert.That(basket.Items[0].Name, Is.EqualTo("Plain")); - Assert.That(basket.Capacity, Is.EqualTo(9)); + Assert.That(basket.Capacity, Is.EqualTo(4)); } [Test] @@ -71,4 +71,16 @@ public void ChangeCapacityTest() Assert.That(basket.Capacity, Is.EqualTo(7)); } + + [Test] + public void RemoveExistTest() + { + Basket basket = new Basket(); + Bagel bagel = new Bagel(); + bagel.Name = "Plain"; + bool result = basket.RemoveExist(bagel); + + Assert.That(result, Is.True); + + } } \ No newline at end of file From da724d624b552ec8456ef9f2415f9084e8c151db Mon Sep 17 00:00:00 2001 From: Isabell Date: Mon, 11 Aug 2025 13:08:16 +0200 Subject: [PATCH 14/23] Testing remove a bagel that doesnt exist works --- exercise.main/Basket.cs | 27 +++++++++++++++++++++------ exercise.tests/Tests.cs | 8 ++++++-- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/exercise.main/Basket.cs b/exercise.main/Basket.cs index 99108b57..c6305932 100644 --- a/exercise.main/Basket.cs +++ b/exercise.main/Basket.cs @@ -21,11 +21,18 @@ public void Add(Bagel bagel) } } - public bool Remove(Bagel bagel) + public bool Remove(string bagel) { - _items.Remove(bagel); - _capacity++; - return true; + foreach (Bagel b in _items) + { + if (b.Name == bagel) + { + _items.Remove(b); + _capacity++; + return true; + } + } + return false; } public bool IsFull() @@ -33,9 +40,17 @@ public bool IsFull() return _capacity > 0; } - public bool RemoveExist(Bagel bagel) + public bool RemoveExist(string bagel) { - throw new NotImplementedException(); + foreach(Bagel b in _items) + { + if (b.Name == bagel) + { + _items.Remove(b); + return true; ; + } + } + return false; } public List Items { get { return _items; } } diff --git a/exercise.tests/Tests.cs b/exercise.tests/Tests.cs index e29dce6b..dfc6033a 100644 --- a/exercise.tests/Tests.cs +++ b/exercise.tests/Tests.cs @@ -30,7 +30,7 @@ public void RemoveTest() basket.Add(bagel); basket.Add(bagel1); - bool result = basket.Remove(bagel); + bool result = basket.Remove("Plain"); Assert.That(result, Is.True); Assert.That(basket.Capacity, Is.EqualTo(4)); @@ -78,9 +78,13 @@ public void RemoveExistTest() Basket basket = new Basket(); Bagel bagel = new Bagel(); bagel.Name = "Plain"; - bool result = basket.RemoveExist(bagel); + basket.Add(bagel); + bool result = basket.RemoveExist("Plain"); + bool result2 = basket.RemoveExist("Onion"); + Assert.That(result, Is.True); + Assert.That(result2, Is.False); } } \ No newline at end of file From bef9a84a22146352cd020b01bef8582831f6767a Mon Sep 17 00:00:00 2001 From: Isabell Date: Mon, 11 Aug 2025 13:15:27 +0200 Subject: [PATCH 15/23] Testing total cost of basket --- exercise.main/Basket.cs | 5 +++++ exercise.tests/Tests.cs | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/exercise.main/Basket.cs b/exercise.main/Basket.cs index c6305932..3d305bdc 100644 --- a/exercise.main/Basket.cs +++ b/exercise.main/Basket.cs @@ -53,6 +53,11 @@ public bool RemoveExist(string bagel) return false; } + public double TotalCost() + { + throw new NotImplementedException(); + } + public List Items { get { return _items; } } public int Capacity { get { return _capacity; } set { _capacity = value; } } diff --git a/exercise.tests/Tests.cs b/exercise.tests/Tests.cs index dfc6033a..c5c17a73 100644 --- a/exercise.tests/Tests.cs +++ b/exercise.tests/Tests.cs @@ -87,4 +87,22 @@ public void RemoveExistTest() Assert.That(result2, Is.False); } + + [Test] + public void TotalCostTest() + { + Basket basket = new Basket(); + Bagel bagel = new Bagel(); + Bagel bagel1 = new Bagel(); + + bagel.Price = 0.49; + bagel1.Price = 0.49; + + basket.Add(bagel); + basket.Add(bagel1); + + double price = basket.TotalCost(); + + Assert.That(price, Is.EqualTo(0.49 * 2)); + } } \ No newline at end of file From 4bfbdfb4820f820461a665794b766009915ae3e8 Mon Sep 17 00:00:00 2001 From: Isabell Date: Mon, 11 Aug 2025 13:24:16 +0200 Subject: [PATCH 16/23] Testing total cost of basket works --- exercise.main/Basket.cs | 17 ++--------------- exercise.tests/Tests.cs | 4 ++-- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/exercise.main/Basket.cs b/exercise.main/Basket.cs index 3d305bdc..19660646 100644 --- a/exercise.main/Basket.cs +++ b/exercise.main/Basket.cs @@ -39,23 +39,10 @@ public bool IsFull() { return _capacity > 0; } - - public bool RemoveExist(string bagel) - { - foreach(Bagel b in _items) - { - if (b.Name == bagel) - { - _items.Remove(b); - return true; ; - } - } - return false; - } - + public double TotalCost() { - throw new NotImplementedException(); + return _items.Sum(product => product.Price); } public List Items { get { return _items; } } diff --git a/exercise.tests/Tests.cs b/exercise.tests/Tests.cs index c5c17a73..e8b2ca71 100644 --- a/exercise.tests/Tests.cs +++ b/exercise.tests/Tests.cs @@ -80,8 +80,8 @@ public void RemoveExistTest() bagel.Name = "Plain"; basket.Add(bagel); - bool result = basket.RemoveExist("Plain"); - bool result2 = basket.RemoveExist("Onion"); + bool result = basket.Remove("Plain"); + bool result2 = basket.Remove("Onion"); Assert.That(result, Is.True); Assert.That(result2, Is.False); From f1a2be97b20222315fd558654743dc383ed680c9 Mon Sep 17 00:00:00 2001 From: Isabell Date: Mon, 11 Aug 2025 13:50:19 +0200 Subject: [PATCH 17/23] Testing adding fillings to a bagel --- exercise.main/Basket.cs | 5 +++++ exercise.main/Product/Bagel.cs | 10 ++++++++++ exercise.main/Product/Fillings.cs | 22 ++++++++++++++++++++++ exercise.tests/Tests.cs | 31 +++++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+) create mode 100644 exercise.main/Product/Fillings.cs diff --git a/exercise.main/Basket.cs b/exercise.main/Basket.cs index 19660646..27647683 100644 --- a/exercise.main/Basket.cs +++ b/exercise.main/Basket.cs @@ -45,6 +45,11 @@ public double TotalCost() return _items.Sum(product => product.Price); } + public void Choosefillings(Bagel bagel, Fillings filling) + { + bagel.AddFilling(filling); + } + public List Items { get { return _items; } } public int Capacity { get { return _capacity; } set { _capacity = value; } } diff --git a/exercise.main/Product/Bagel.cs b/exercise.main/Product/Bagel.cs index 6fde6a72..48cec938 100644 --- a/exercise.main/Product/Bagel.cs +++ b/exercise.main/Product/Bagel.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -8,9 +9,18 @@ namespace exercise.main.Product { public class Bagel : IProduct { + private List _fillings = new List (); + + public void AddFilling(Fillings filling) + { + _fillings.Add(filling); + } + public string Name { get; set; } public string ID { get; set; } public double Price { get; set; } + + public List Fillings { get { return _fillings; } } } } diff --git a/exercise.main/Product/Fillings.cs b/exercise.main/Product/Fillings.cs new file mode 100644 index 00000000..909d762d --- /dev/null +++ b/exercise.main/Product/Fillings.cs @@ -0,0 +1,22 @@ +using exercise.main.Product; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace exercise.main.Product +{ + public enum Fillings + { + Bacon, + Egg, + Cheese, + CreamCheese, + SmokedSalmon, + Ham + } +} + + diff --git a/exercise.tests/Tests.cs b/exercise.tests/Tests.cs index e8b2ca71..0c0cb5c6 100644 --- a/exercise.tests/Tests.cs +++ b/exercise.tests/Tests.cs @@ -105,4 +105,35 @@ public void TotalCostTest() Assert.That(price, Is.EqualTo(0.49 * 2)); } + + [Test] + public void PriceBagelTest() + { + Basket basket = new Basket(); + Bagel bagel = new Bagel(); + + bagel.Price = 0.49; + + basket.Add(bagel); + + double price = basket.Items[0].Price; + + Assert.That(price, Is.EqualTo(0.49)); + } + + [Test] + public void ChoosefillingsTest() + { + Basket basket = new Basket(); + Bagel bagel = new Bagel(); + + bagel.Price = 0.49; + basket.Add(bagel); + + basket.Choosefillings(bagel, Fillings.Bacon); + + Bagel test = (Bagel)basket.Items[0]; + + Assert.That(test.Fillings[0], Is.EqualTo(Fillings.Bacon)); + } } \ No newline at end of file From 6811aa3f1379975e97a53bb0200071d5d1a1c30b Mon Sep 17 00:00:00 2001 From: Isabell Date: Mon, 11 Aug 2025 15:49:25 +0200 Subject: [PATCH 18/23] All core-test done --- exercise.main/Basket.cs | 12 ++--- exercise.main/Inventory.cs | 76 ++++++++++++++++++++++++++++++ exercise.main/Product/Bagel.cs | 26 +++++++--- exercise.main/Product/Filling.cs | 3 +- exercise.main/Product/Fillings.cs | 22 --------- exercise.main/exercise.main.csproj | 1 + exercise.tests/Tests.cs | 55 ++++++++++++++++----- 7 files changed, 149 insertions(+), 46 deletions(-) create mode 100644 exercise.main/Inventory.cs delete mode 100644 exercise.main/Product/Fillings.cs diff --git a/exercise.main/Basket.cs b/exercise.main/Basket.cs index 27647683..f5ad433b 100644 --- a/exercise.main/Basket.cs +++ b/exercise.main/Basket.cs @@ -12,11 +12,11 @@ public class Basket private int _capacity = 5; private List _items = new List(); - public void Add(Bagel bagel) + public void Add(IProduct item) { if (_capacity > 0) { - _items.Add(bagel); + _items.Add(item); _capacity--; } } @@ -45,10 +45,10 @@ public double TotalCost() return _items.Sum(product => product.Price); } - public void Choosefillings(Bagel bagel, Fillings filling) - { - bagel.AddFilling(filling); - } + //public void Choosefillings(Bagel bagel, List filling) + //{ + // bagel.AddFilling(filling); + //} public List Items { get { return _items; } } diff --git a/exercise.main/Inventory.cs b/exercise.main/Inventory.cs new file mode 100644 index 00000000..d6b686d4 --- /dev/null +++ b/exercise.main/Inventory.cs @@ -0,0 +1,76 @@ +using exercise.main.Product; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace exercise.main +{ + public class Inventory + { + // Bagel + public Bagel getOnionBagel() + { + return new Bagel() { Name = "Onion", BagelPrice = 0.49}; + } + public Bagel getPlainBagel() + { + return new Bagel() { Name = "Plain", BagelPrice = 0.49 }; + } + public Bagel getEverythingBagel() + { + return new Bagel() { Name = "Everything", BagelPrice = 0.49 }; + } + public Bagel getSesameBagel() + { + return new Bagel() { Name = "Sesame", BagelPrice = 0.49 }; + } + + //Coffee + public Coffee getBlackCoffee() + { + return new Coffee() { Name = "Black", Price = 0.99 }; + } + public Coffee getWhiteCoffee() + { + return new Coffee() { Name = "White", Price = 1.19 }; + } + public Coffee getCapuccinoCoffee() + { + return new Coffee() { Name = "Capuccino", Price = 1.19 }; + } + public Coffee getLatteCoffee() + { + return new Coffee() { Name = "Latte", Price = 0.99 }; + } + + //Filling + public Filling GetBaconFilling() + { + return new Filling() { Name = "Bacon", Price = 0.12 }; + } + public Filling GetEggFilling() + { + return new Filling() { Name = "Egg", Price = 0.12 }; + } + public Filling GetCheeseFilling() + { + return new Filling() { Name = "Cheese", Price = 0.12 }; + } + public Filling GetCCFilling() + { + return new Filling() { Name = "Cream Cheese", Price = 0.12 }; + } + public Filling GetSSFilling() + { + return new Filling() { Name = "Smoked Salmon", Price = 0.12 }; + } + public Filling GetHamFilling() + { + return new Filling() { Name = "Ham", Price = 0.12 }; + } + + + } +} diff --git a/exercise.main/Product/Bagel.cs b/exercise.main/Product/Bagel.cs index 48cec938..438810ac 100644 --- a/exercise.main/Product/Bagel.cs +++ b/exercise.main/Product/Bagel.cs @@ -9,18 +9,32 @@ namespace exercise.main.Product { public class Bagel : IProduct { - private List _fillings = new List (); - public void AddFilling(Fillings filling) + private double _price; + private List _filling = new List(); + + public void AddFilling(Filling filling) + { + _filling.Add(filling); + } + + + public void SeeFillingCost() { - _fillings.Add(filling); + foreach (Filling filling in _filling) + { + Console.WriteLine($"Filling, {filling.Name}: {filling.Price}"); + } + } - public string Name { get; set; } public string ID { get; set; } - public double Price { get; set; } - public List Fillings { get { return _fillings; } } + public double BagelPrice { get { return _price; } set { _price = value; } } + + public double Price { get { return _price + _filling.Sum(filling => filling.Price); } set; } + + public List Filling { get { return _filling; } } } } diff --git a/exercise.main/Product/Filling.cs b/exercise.main/Product/Filling.cs index 1926d389..31dd02e9 100644 --- a/exercise.main/Product/Filling.cs +++ b/exercise.main/Product/Filling.cs @@ -8,8 +8,9 @@ namespace exercise.main.Product { public class Filling : IProduct { + private double _price = 0.12; public string Name { get; set; } public string ID { get; set; } - public double Price { get; set; } + public double Price { get { return _price; } set { _price = value; } } } } diff --git a/exercise.main/Product/Fillings.cs b/exercise.main/Product/Fillings.cs deleted file mode 100644 index 909d762d..00000000 --- a/exercise.main/Product/Fillings.cs +++ /dev/null @@ -1,22 +0,0 @@ -using exercise.main.Product; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace exercise.main.Product -{ - public enum Fillings - { - Bacon, - Egg, - Cheese, - CreamCheese, - SmokedSalmon, - Ham - } -} - - diff --git a/exercise.main/exercise.main.csproj b/exercise.main/exercise.main.csproj index fd4bd08d..4f46db15 100644 --- a/exercise.main/exercise.main.csproj +++ b/exercise.main/exercise.main.csproj @@ -5,6 +5,7 @@ net9.0 enable enable + preview diff --git a/exercise.tests/Tests.cs b/exercise.tests/Tests.cs index 0c0cb5c6..f575fd07 100644 --- a/exercise.tests/Tests.cs +++ b/exercise.tests/Tests.cs @@ -95,8 +95,8 @@ public void TotalCostTest() Bagel bagel = new Bagel(); Bagel bagel1 = new Bagel(); - bagel.Price = 0.49; - bagel1.Price = 0.49; + bagel.BagelPrice = 0.49; + bagel1.BagelPrice = 0.49; basket.Add(bagel); basket.Add(bagel1); @@ -109,31 +109,64 @@ public void TotalCostTest() [Test] public void PriceBagelTest() { - Basket basket = new Basket(); + Bagel bagel = new Bagel(); - bagel.Price = 0.49; + bagel.BagelPrice = 0.49; + + Assert.That(bagel.BagelPrice, Is.EqualTo(0.49)); + + + } + + [Test] + public void AddFillingTest() + { + Inventory inventory = new Inventory(); + Basket basket = new Basket(); + Bagel bagel = new Bagel(); basket.Add(bagel); - double price = basket.Items[0].Price; + Filling bacon = inventory.GetBaconFilling(); + bagel.AddFilling(bacon); + + - Assert.That(price, Is.EqualTo(0.49)); + Assert.That(bagel.Filling.Count, Is.EqualTo(1)); } [Test] - public void ChoosefillingsTest() + public void SeeFillingCostTest() { + Inventory inventory = new Inventory(); Basket basket = new Basket(); Bagel bagel = new Bagel(); + Filling bacon = inventory.GetBaconFilling(); + Filling cheese = inventory.GetCheeseFilling(); + bagel.AddFilling(bacon); + bagel.AddFilling(cheese); + + bagel.SeeFillingCost(); + + } + + [Test] + public void InventoryTest() + { + Basket basket = new Basket(); + Inventory inventory = new Inventory(); + Bagel bagel = inventory.getOnionBagel(); + Filling bacon = inventory.GetBaconFilling(); + Coffee coffee = inventory.getBlackCoffee(); - bagel.Price = 0.49; + bagel.AddFilling(bacon); basket.Add(bagel); + basket.Add(coffee); - basket.Choosefillings(bagel, Fillings.Bacon); - Bagel test = (Bagel)basket.Items[0]; + // 0.49 + 0.12 + 0.99 = 0.61 - Assert.That(test.Fillings[0], Is.EqualTo(Fillings.Bacon)); + Assert.That(basket.TotalCost, Is.EqualTo(1.6)); } } \ No newline at end of file From ce49d2b123847fc4aaabd6c2c767e2554438052c Mon Sep 17 00:00:00 2001 From: Isabelltran <128478218+Isabelltran@users.noreply.github.com> Date: Mon, 11 Aug 2025 15:55:55 +0200 Subject: [PATCH 19/23] Add class diagram --- BobsBagel.drawio.png | Bin 0 -> 49211 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 BobsBagel.drawio.png diff --git a/BobsBagel.drawio.png b/BobsBagel.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba5b0ead7028f247056d7286b57d76ac6d8b21e GIT binary patch literal 49211 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�{8H6$r;iTmD4U!>h*(QryAnC>!ueI;soQYh15 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 literal 0 HcmV?d00001 From 55f4c41f7d3dd2bdaad4c9cc3316bac48608f0f1 Mon Sep 17 00:00:00 2001 From: Isabelltran <128478218+Isabelltran@users.noreply.github.com> Date: Mon, 11 Aug 2025 15:56:17 +0200 Subject: [PATCH 20/23] Delete BobsBagel.drawio.png --- BobsBagel.drawio.png | Bin 49211 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 BobsBagel.drawio.png diff --git a/BobsBagel.drawio.png b/BobsBagel.drawio.png deleted file mode 100644 index 0ba5b0ead7028f247056d7286b57d76ac6d8b21e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49211 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�{8H6$r;iTmD4U!>h*(QryAnC>!ueI;soQYh15 zO|+VYX`F@bq7KFSuC_5W%>&MwsmS;*qGr?5;ftHk<^n-9)<=rkU8Z2?FI@yTH@#agJJ%(-M9TV){sravhtFS8TE~!C;n!3UO zQ{Gd~0MuHd#CzJ>j|i#ZdxtTdk@s2B7JWdJ2S-_l_tDKaWM0E8`@q%R49P|MJsw7j zy<-;ZlC2KT`lc~`9#2Q8?~Yt>KM3++DBkpo>)_5lh+b)ix70OnTyS{AFotxk5qpSz zILNRaG&Z0tlo<;gQ6qN=MrHR&WJ}C^KQ+}j?h?x>Xd9Ia8 zk8$Gsn4#1GFX_w<9o1CzEPZLSkZ=uCi!UflR*b;amIK9>hAIWF*p2c?lQ+$^qcX9d z1DYpcR2DK%ha`&mkaA_}Ac_dnm}~oa`Fu__iFtnGhI^1Ns)qMP_)#1G`g`>A9oWTM zMS7N$==r9PMIU@#R=ZR&4Z>j&aUh=1yAL?)s!1r#Jl^lx)-Qry$WFy}ek!xej=QWk zBNkFG-o$y8lfAq3p`|3u_EcrrfrsYt{-HD6^tM#-Wu=^5wHfP-dyK8KmqtuQnsFZP z6}i_c`_Tb?Bt~1|U#h~T>c!uhYB$+TJ8wN*u$mfL9%nhEwfN0LMTV9#gR`z(5z(1V zzA|$Hxp!uMYd4>mIT7Ef3Y5Y3x7FK@?<3S0;F!KhTbqpmzT@(@D5Ftezsf#&$?pZwvRVAQmt9 z)CB~&Q}}q0SeCK-gOeoeu6zmI^#XiD1)3^4lpc8I6LcFpYtOU+dwZ@JWt7i`)W9qB zcMIJp$7U>aX~Roe3~k2Z-#^-8>>3`+^D1sZQOjHSX^Ay5HM>pd21p1qLyE)*yBGFN z7SRvq3S*M}3q7qG4p3suq;I?;C9Vfbju{G?B?R*+)@E27H7m0yj+QlwugbbQ**OM6 zuxFR7%8+Xz64R#zU67qL5_G#U@5*~NXNvP~uzBIPT*ku@dvaM46U!dh@FH@sU(kmp zk(6$}Z*fhm({LNt`6(S^GhMCarIM(-I{Us)+11}VeR%?LoLR;kNrmxXaml}3X-6EC zTT13nh;`&g&S9-yx(u4;KcY(ytvr8+7E`ToraA8L4JdlkD#`X;c~Ki7eDnS*8{1?+ z5|n@9ZuEKXQe5=4JGx|u+_+GA0+#I@*(tC2Id9QSlSraY8Xe7lAk=H$*nCMx;Wh`? z8n&OBvdSU@X`cmv!>r{X0VrD;3b%s@8OMS0 ztKeCtXL*Fj3FO4L-C9s0u2@2)Hv77N+NOFN3v>VegKYMaASY>d(lQ>TG9|X$VTRIc zd6g>j@-`#WHnrL|dB!WaBue503MB{pmf^^PGeo1FW)#yW%Fv= zriSaHWz1>GWRS4y?wXI~0wDkv=O`e#V{DX|JUb#BPVrjq%2_H*B89)=E|5i7+wyU% z8m?~@$@h-*wIdLN67L$4dl42a;wv+oj@OIwZ&p@;7_Yr2QqP_Rg9#8E-v^R(E3c98 z^5EULI7m57H)T{dZ=`MNxB0dQ_ZU5Lb>-IT2qG{f;r7Dkg2n47a1xB^azt>F$B_) z<-vOg#iO5t*8)M(7;|0dOE%ExhjYN3PSwsKC#HuwH-z zqSrJ~B?7fL4DLni9fnSUK0(t+n$&O)WI#883hkOl)M$w*?LiE`=`LudRzX}v*Ni+8 zG{UF?vK!gO63&7-c?Lye9JesuN5U#70ESpvN_P+vKLSPIU3j7i+CBepm$~T*z0*}&N$Yp8R=Kpl5}If@D(B0+*AzN9_y z8=#aj?j9J|rBdfZV6-5DP#@!#v(=&)7=XirR{#f=cR-)cJ{95sjXQw~6P?7V!R~wj zavK0^CSlF-0ip}|J9MBrWk~0fM<5}*ojMNUJ>SyBff>W962T+{&`LLexZoZzt|M2* zseyM0`gp4E=3PkK6})Faxm!KK`71rvsyZs z8b**(<3%fw1!k1>!U?c+;f7V5V5W}&Xi zGSvsa1QMh`g2DOJWiUh$C~sOk7H&c&TM0^o_dtt30d1WMiuhe%BB2d?_oF2#v~`Yy zRze>5p9I4#1vSroN1lenFGE}B?0splb*@5N=Z!k;*4E(yTW1&O^#8xMj(sPW%*wlp zm3Nvxj_;7V+Ipuc6Fk{!bpjNsE z%>A)a9rHs$xZ||rBw#y$<)5T4yWK?j1++%KM+j2`Z7&xfm#IuNXCw?Bzv$O)a~HyJ zShay4bjX3yp|8H)Z^mZN308*cEHZ``Y=c6OE?u%fX1wtdL|hvb;Lp=*A`98oR{=P* z6v3lYZYI1WZ?T7WmqE}Z{RuRSWc{$H{f4|kduvcsVa{NsGwy;7!Is_cP|xHEQlRI* zHwsL=*)Q;*Kg1%%TMJ6Mp9V?YxO!xzBdBadC##gJX0m}PXayi@7L?Ru8m(W01l)xV zZ5Qx2;lGy|WS2G6-BQO({ykU;A>6wD?4wX3c$HWK{e!_4??2D{dh znR2gHJj>>C{c3l;bh_`Xz(%cAi8H^dc|47y$!e>38oZJw7>TIKp@3ES<#`QsB_TAR9?+rYf*(HlTHkyj*3$vf2HIqZy z=F6^7E|HtF4CgiSOB}`cuEhF!oEZf_^x$xt(hYyT@0Puts}7XLoT9-9Q{@J&K|0>x z?Sgl_ZcCj~)z_ifaM6L*%bHS8pjJMZHdYRJFZEk|=+{eeO{!R$Z`VxOcY!8tV0xj; zNG27_$}|Ihg<|6zt;}M#*;CWbUcF9HWa!iq%&C;Jx#>_SbbL@@UNJ-J71AIVxaWg) zH?3uk#&R;FUymG<`u_GrG067U0HHx|6W)TKI-qHZs{+4TalQB%_B_RPf1JlylG|-o z^;(o(MTsVM6(7S_sA#UrZ>|r1K;=MaTxQ)-RR%evs}+TyG=LnW&gH&PP+|C)TVyt` zuY=z<8DB4!$-ElAK0}QOL?REyFKni=tbe&T@Kk!?dE{3Mnm4a;CVn zrug+sUL*XUi(lMU#A=O1aD<=TcHj{CD*`1;Q(G}mWoD3xeqS(v`~TYe5@@LVziq}O zTf&qjDLZ8+ONof=O3R&nX@ts1ijievlI)Z$gG5=X8-wg7TTN63MPaO^QnKZ?#aQ0Y zPxpQQ|NrNCpZ7V>Iqx~odEfKg=XB1UX?}j&_p@A|>$<*$J(sByfduQ`%T(N%Y+oo* z3L{_<>D2$;d}4T^RUo6ZYT_~(zTZ;+b2iFW~XgP zBfr1WyM>wUEaWnGiCh*odE~+DWV|*qqMaV)p%IzTqYzax6VxU2v$Y^~_~d#{@~BWw zcbw5gi{1iPlZ?1q+@d8&qPsjHCoH65pJt%E8FD`Oa^Q8lW6{JBSadILlPe6U6LvZg zgYfJ%h-He^AFlfk!{bbFTQuAZOLGE^{HP%W9&mdW!G*Oj4k`kT1edLl&4r0wv_eUS z5)ujt=<1N3uVs7WrMdI7&9dN|d*Q0AKT5~mXcT2OXyG0`odzNk>{zm z)4D{tRX5yaK$(f$yofJ6q7ueja8dFAi~S?t#PR4+_l>-yo#)w{#&jMkgu+y~l)C!o zm)UNmNwFe94Swq=JQB^_C?=cz%&M2={9VLmqrx_jFqlWd;g^GNzTk;O^Qcf+gaWb1 z>Fk4_<_~s!76#V}ug0iN`FcCIg_;P!p$@PEs`Aw=5E1CDh2@4wj`5myOf~+oftKBM zxN<)?Rf=%t7$Zo^QE@EZ??KB2wry}td#?M;XYy<=@E5~CK#rHPGNYw40pp@5acI|h zE-YSBRxzxR8x<+|>^U3HW-6p*C=UQochjFtc0WGpkI3IU88Wu-L-vd{-Ab!F-l^uu z5Re)a9n&#A4mvKfx@AvZlKM5Rl3~Jy?f`mw7wAev8SJbDijhJ{(rWx?7 zMrhfv9efVeeJh4!M_aaDthhuKz#!ErBxgzQ$e%kh?%S9^jP$VW)r1 zV*!aBs%07YLw8`%D4x$O!%sr_STTt^B1Jbe8;%c$OLm}+GVvP7gBBrF3!;GrG(!~I z9<>=GHc{*jpR=R;BEu{~_kmqjH}Z+o@R|MSmoIr)&VGwRdd*n~(HUErnF{YR3DqQP zm)u&S>LZf{h6POeA)mS18n49_2qdeA}uLduQc_b*$TyQS`f8lnQkjWPV$3NmE7fRvjr}Zss~pi z1-QjO3Rqr5dG$`>6p3vWljwA3j+9$$9(bwc?f^Qg|3y>& z;^L2&D(f7k&f}!I%r0IpYjY;vGP|Db>UXtdqwloCS*!B`{@*canANtfB&p+|M@!ER zuEo?54*Q#IOZ`ENvCW8xYGz0cc1KOzUt`<|yx`B?|8y%AXPQ1f!O2^8v>~}NT}#$7 zX$_9`o<~s5-SQUQ(sEB>MI@DZU)>@uEsAPJ;7_$c(fp%@#*C16b>~riPkP1%o^HY7)vNl>-W1158&H0aj|$sp0hox1XtQX#?A4qf zSH!NG$|x3(Qw!LiR2>itXpMS9sK-3T*G0XdV3>@b&xMPJRN0N@vKl6swc-6veaGKgs7=2QgqOl9HAUsAmdz9dR&{{v@}Ok1ysMBv z@D@aNIb+9gq}eRcKhTFsTP(phON+W8xV%YNi?aI%SC9mrt@A%sLu|HKNV3f(EuUes?oJ>wZ!tBO1urcD9Y6u_Ot_Uo#)aZbeAD!d|6o8#+r3 z_mrHtcQo>sqZ#c-4Qal(o_A_KCDPt!Ou7BGuLel-34HTOTk@GDOr8eN6L*CV^AounG}pz8TvZ3Ajyr`L-(Y3^u= zJOfz&3TU%PTTFmT|F2pLYLoadEy{;bL?Fqv7%i8Aib%zYT#Rl&fCm({jBx zVe*itQgJ|BMWOrn2I#(cqwU{;?k70^Nm@BnmfFK{C(W@nQzJ7ok~G#!e(W*gVmb8e zG$d$QC^sq}>6?0tk=dl0ckm5UmUo@RT0N`$8KGA=t3cNzR2*UA?MgY6kh#U@lKlQY z0K^JptSF>7nNX3SXTQ}NkN;9pT6~%FJwx)i@^DAOwSG}3AfG4Hl!(w;p2I;XtQ}5kf%wEzm@Ve}r*~==*eHv+5n9%v6Rwro4 zFg5Ja<&X25OgoOA2`1`VTImkb{k>)SF5a5Em-~3qUxo4G)lcai)2Y7pnhS5T0=XQ`i$CI^eGFnOmz@yX1rI4iFbXE!DL{P%$05y61fy-=`0?UPB zM(tXA^4#5AAXJ}71>aA_=_h&KX0^Y!axGW%_!0&r$Ck*e5}C5|p7mYxAvw7owd2l7 zpRwxOZxJ3S_hrS4Frxn&M&DR{^OJycfJCx?R#zp1qh0G>g__Yqi(&b?v15dEcGn_S zn2Ia4_j(e~^Y23E$!Pkit4B(&+FGYv0)CH%5+=RJZ=?%dMA+ngxF`H^)Kl|ke#77D zvFl$me^w;23WGg}%6TOLda*yD?rpMeE~-vRZG5%2XI-PRE|`l^J6zVjk!IS-j-SAA z&+uDY&}-G3ptWCVBhMv7YdxeGjM9ZDZ{ij*MB3j^JfvlR7O}2ZGPDTD_nf$`Ws}oW zA_RBtuuJL&yZRV4-$S3!NZK<$yyZPDpKdLX*R9wcYt)qP&eAo$tXgt9X!%@fQ{9P9 zoy-q$sCKi>7LS&Kq?2?o7ZylA%st%)*S1x9>~Bl4zJ68Xt?-NTC|rT&Jnqtgdio@N zN+pjK=Fx<;OF@LE9j43qxk;J*yTb$S_S*wcw@6RQ6vgJ}Qts79h0XuuFo&||89M(p zEj{wG&w0*>&f;%`9Uu?}`%PN`I|FPtIqrcR2R5jq?2+>X|LHW73CttuHAEw_w4v$su8VvaFZVX)gR_K@9zW@rnc%2V>onhDYDg z_-opvC(*oWdxqZo9^DDujvxm!TavW$Y1))Om?#Zwfur1fi}; z(A%Rz@xE&}e9U}{S#Mf5XTsPO+DNg=YHXeRIk}3`$r>^Yqey|lrMXhnre9Mro216> z7r2AW6TKL6CvFB(m@NZ@M_TbvqMA+7MD>;=kV^gOKC zwn+k-z;@+@BkyK8{4S6qq5`0b-_X3|K^32}peOPPv)S(_vmE5NO_1LNLfdcg$eKVm z$uk;F5$8Vr%Zm38_y|1KcA(6m<&&Qz9%z=~{{CxP$%(+2OqpV0R=1#q5v6VSKeDs1 zH-H52%4ZlwIwa@wTi>bZ`dCHmE=knES4qb%M+Txs zs?&Mk_1Jvirm0EvePNoZB&ViPjdex zU>#l%P9#s=co?IA$x$qC>wXxRxM_^3O_~yOzLKQTQpL)>Gc|eA;I6EVz6f6k`ZY#&Aaqd3K;4YSj1oJi%+UZ! zWtNm*4wa2Q*mVx|mimy;>D-gNrTSb&>4clmD^gU&aKNy^7pBLTj=dA>!Xsmi z*R{uSsKQ4-xGc9tD$k8|PZ=RZ`F+4<1@G;M&E8qt57-5m(Y&c!T=sf1{6)ln;H{jy z_tUq!qgO=$od`n8@@(!u+dJX!3WFo{wXGzg$nRfbNA`9f540>=+}#kZAtunk?_c_v zZiO*X!Hi$ulcGs2wa^P-#Xq{ZZ+rA(lHXgA$pN?-N!EtKj$m`Mwe+HY>#)|0D^5Q_-@D*KRsdX=$A~cTd>oap<)6NhuT&QR_M9&+81YWcd4LVe<1TZ zlk6mt$nR-!1=Ew`V^GLNXYW%3D)^$Cd&GB>2&!9ckiNr8vV^;W;OAH2TA=Ys;syo$z$GhIbJS9%+3MyRX?GGcDdS-~_W|4v8s?A!|F9eS=bl z*>n6|p0keeaW~)=D$MNw(wg60;ECz5T$rypov2(62b1=P9k9J9WXf&2g}JCJHay zZ)29o@!@_^O<|my2f;r|rLZOCB4|bcG0}NskzE}Tboahm*k@iCZ^rLA$tVesCJ(29pox(@NK!_TNN%g z7M0=0*=w25COT_^9jmBF&JTDJJA>edWd6U(xOf?Te%*4;zvi z0#JD`CQj&mGF#!}jBK9ZSAOr{uMj_bNDw=El|y^vwA;zuC6~S(uGlk58P(-2^IW*+ zg&*{4Lrm7DP$l&z!Vy32oOF7>cf)G=y@iIA)b+z@%xj(?E{rRx1OXYl8WDI=hcfMHeY?sh-1Xe?U#hl@ z8hqeFdGeQ4gR}K5@MLb%M+bvSeXMceVO&s;-Ihsy=OiKA+i_Zr6hym}r>`6;fjUDu zQtUyan+rGvzvZ50{P^-rBd7m2%_B5&A3<;{v5PQo7a%xtlnr+ql+n|hcL%$i{J4p@ z1jC!J9_^7lvXFS~6Qv3IE(pP7DNPOQ3aK@2f6^EZX~?fAdOZ7Uy8yLAkd;?xLcA!% zuf)7FSBZ@VL@Vt>SB!A5D?z17glgtrG@NP`I9l`0*S@2`iO9^_FL5{<7!iQ;%^|;g zpP0MS-{Y^ggalqOQO8S7n?lyxwWoXcBqEzHY)4SeH|I%QM7?Zwl~(dz>fAHLC6&MV zAE#II3v?7(* z^UUL7R)2aGAAemur>4X_;_WmP%SwCz*MG#PQwZ&jkmtbR zF3hc3Z7-}j(W4x!Kv*Rh8SwMi=4ssv4!er^Ha(X?MNNU@Kh#a0vo zHFu8-%ZD`zBF;H2wC7K<7tG2YEogV-I?0c%-YNXvkTmD=k~SnemPTHUN!)1GWr4EV zL#`=rrGdAKXCnES;pK@kB@B*mXfQ4yA=m$xLk#&(>*zsE)E(m39yheO@^fVqZ=13-jd9jjy>ZViCyT`SkENGnNOWiV){c_QCN3GeKRj z97{g~Bd2&``SSe>pL$#WtxfdZgO4<{Kz!IQ%Ae2m57HV@47tRJQJ>1(X}n*_ZT<8? z$el&`?>FVRxhmvbNIQYKmEZ@y7S07#^E>Q2I;RS1;!q15rr=C!nHcpkL%Zq1C&UpG zpXnAjx!NL?#$U&>@RpHevkq_N7C<$Y(9vw6Ib)RrzyN%nj5l%|3O}wEo=(m=#F<@@E?lo z8$Ablzl^gab@XYZRY1v{5l7>B;EWuwyZ$3%XieMh_urkoKBjtD6Yi6GhPmIdXZ+1QU=c3Il{6))46Lh(yX8Whs4s{B2ec$#bSx6Cz``BPrU~+pfHH^|FY)Ch zru`{3QLD*3!vVJ194vX-Y&3|X+A?0v*YyxXLO4<5fURAhcEY;eFRRA-FRJW?STxx$liTm6GP5zcdNds2O!ax;ezDd7^J4yyH!`O7$E<@LL;Q zG4R<)FkP>E-Vt2}yk>-@0HyOR`iFn0X2 zR6rntNP5`qw+J0Jv{6vS^E%DR0QG+8O4Fio;zUTwnR(oO_Q9{U-Vfw+2;k9dr?Dtx zn$ol~WZFMVp-s3&g-&3?k6&t5q3sfualdN$(+(U`yMc?{ zpiaV@ytiFbL@SL^zxZWdRo7oQE%UG5%;MP$)v{ss2k)B8Qvpzs5004SAp&r#?O zp`jDnfQECq{B}Cs%zH2GdgEybg;gWxN7;$B?6JIM6nEwF_uZtxH$S&8-&Y32ZUw=BJiV--#ulbiN>idhFg-8dJPOo;=pJ-Xgsz~j53bv?a^O~FS zYLP+DMnO2Un5M41jF&Gdm6uy#I6e-Kv3H%@(9C2^G7^Ij)8*d=u!8JFJY?_wc?Gqw z#&ovN(eyoE)4>-NTljChmWLAwJ>AxAGuFa#6GS~f2(9mH&|#t_rYQB8sH>>nQW=N5 zpz>XT;?}h%pP$lCROFh)O`ZDmzSA4N!znQls#k%0rwLEX;t2)O%|c0DeFXboVrmhSPl*0dcdK9K6dgKma< z7Vq&Q8Pv@n!0}wE4H7GV_WV&dAWCP>CPk#|WD7yD<&6Vd?Ap+9*#39`$>-XJt zZzj|f1W^{ihDo6EjO8HW6p6iA^w+jVE^KHGOE{`Z1xcL+T&luIZEs|O(bI1zv(6u^2euNC^7;ae-7Sp zTzIEiR@zW-U27lj)u0~Z35J7dhiR=*;ymHJN6RcSVQf;A^Azfj(bk?mv@|_^L%xLF zkuf-pOpsup*ZDHwD*t}OZ)Lgd+Pc+Z%%R)9elNEf>*IP>!g4bXWW*)76;E#e>UpSN z-BtCO)F+v$VwIUxZPrP6ZhzNVp^f_J=Ex`&Y&ZJ%s6Ci?X<18?bS4;dNXpVOThDj z#9(rQ)NEv>eFiup1}R1oo{B|Wb?rIoQ=%GEZnPmy6^eg)t{du zV}Ix~tIoWDa(#nJ#-jymasfOjKyqQmC&-6EvPJ5b*iW|I>h7kKIv8g~n<7^AYlL0l zIc_J5j=uLi zc9<}FyIbBIl-Jg-d?(s2wbsNlelf?T!Y4D_EjOoRerb)IyE~QZRutnf?I;&%N=#V_ zR!fra7@~eNcZnql-bst&tb}%L{lehn6(8JT|8vYFPA!4L<1SMee`)t3=V_oV2ZF<* z0c#IAW~BF8JQja$m-HyWY4_SzSxiItFI+r1bFaPUwbaPCrsV39%~$J7gRs#`qlE>` zLzW={L;=exn-%3sH8cfl0JppA&&p&T4N^2S-eMP|){3Tuo>M<|rBrW|?EDX(- z?biw53gGG4CBoc11$*d-*?8d!!_{ZTg5K=VDqgqTR1;%se|1z_#_;z3eOt$`fXm;t z%w)Nr@mvJ^n{lij1l@ z(A&LOuA#0ds(qGHP%6br(3tc3^nTf?+&-#d$CMu~RL=)O@-G68*7e2|s^RdM1CSP{ zw+9uHbUvd?zL9N?@*I;gpzY#)w-4b-BZ{X8wH&BqDC{^>8XxC8$Zx;Tvh(Y^Amrb3 zryQU`w15UtMa-dg$Q+_-OeCkM6|j+Ub@ffEY`7?hs^&vvZ!*=HpxY!4rgaci4jCIX@hx0v&T$_xh^o-T zP;Xos3q;@@C2_@2Jw%Q%zs%YyS^^+iltKWdzJ@PkehD2Ts*G^@_U%9qw?Yu!{Xdoimm@G7X28+m|W2}i|VQ1L`9jUJVE zR=H17=Uq+8wKrySqZXbrU-4Qt2z_Pn0U7(azIw|IyaiJTKg##d7vJZ4;BjI&c}~dG z8!z7oA;4l>E8+V6u#XY41^V z%0+mm!`NbZF|O1?_EVUX(mO4!(r@i!4$R9nri3_4j=_E|L5VfNb(E>Nqj$let-Rst zpyU09RLQ~4C@oA)sw9ezd-4Q@c~s@+#tEfwNxj5a`<*{-T1)+HIE+L<2Oh>%1MV4G zVZywLW&-I*rKfxj4%;)zYc4YZ8-Sd@xjOUX6|d08Fx1(R81R^)O25(h7wISDZ%OHP za3D}@6>2Ff^rR*B1xeRCl-O;#u(EuR!?-oyF7x-EXU%=RlsoD4UgvGKW7e~Z-wNxZ z&I#POS5cld`9+EqEV$YVdup1&7TD__w!k)cJnpgnUGtSNvF<@5z|RhFwwf598J}Hs zG(Ds!B#K!KCuIsM4;r|b!E@d-)(MIW1@s4jONur* zjRP`M7BsttA^$AWyv4WO5nN+p1ko?J||{JU3u z(@)(sG9!|OcG{_pyK&Xa$}4_WrI07hv~dGK{1EQ?9uX3!8dj&$0m5dGjQ?p+!t+vG z`5{UDqoBW9EsSk`p7y3&d(+T1F5}K$G z6;BOO9&^FYxU$(6@*{zP+b)Gj+-64A!BM<5 zG$byW>ZMgD;fI|Eot>pM#CbSn%T$u}QE2{6Nl`}}jwPU`yd_ojvaR*fCfl0b(TeP{ znAFZGMge2Im1=~>GP`NytD1y1J_uDUjT|34-nbfP$jUayAzM~Q?~QGgVs;xj(MJgJ z3n8TSM(W9D)0$7Qvh&z%vy$fb(b3_kZn*uDiRi@aR;ekR!CNhvZQ)=>nJ%6xR>BDL zMs7-?lU|E5qhjES#K{khnHM$rghb!SWz!biUDZ&j=%gs~^NXwRSLfZZ5~$KpRpFCD z0F)osOS7TQ&&hsRGZJS(2f|T?a5$q6iJ_`KdnW4}Y8&b;aEAYL)BoqD|MjL{8wzrc znGQ;C3_&$a*LfSF*@E*!RT*hD^mHa>6q=1kRPRIGL)rnBU;iJ|}!fOphEjBp-IU{=We8FXmzZ From dc716ff5431e3f6e70d9f27afacf740a82a50fa6 Mon Sep 17 00:00:00 2001 From: Isabelltran <128478218+Isabelltran@users.noreply.github.com> Date: Mon, 11 Aug 2025 15:56:33 +0200 Subject: [PATCH 21/23] Add class diagram --- BobsBagel.drawio (1).png | Bin 0 -> 52436 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 BobsBagel.drawio (1).png diff --git a/BobsBagel.drawio (1).png b/BobsBagel.drawio (1).png new file mode 100644 index 0000000000000000000000000000000000000000..a8e320e701fbf6ff748d2b703c40664e54e8ba17 GIT binary patch literal 52436 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 Date: Tue, 12 Aug 2025 13:09:33 +0200 Subject: [PATCH 22/23] Added discount for every bagel type --- exercise.main/Basket.cs | 116 +++++++++++++++++++----- exercise.main/Inventory.cs | 29 +++--- exercise.main/Product/Bagel.cs | 5 +- exercise.main/Product/Coffee.cs | 3 +- exercise.main/Product/Filling.cs | 4 +- exercise.main/Product/IProduct.cs | 3 +- exercise.tests/ExtensionTests.cs | 146 ++++++++++++++++++++++++++++++ exercise.tests/Tests.cs | 17 ++-- 8 files changed, 272 insertions(+), 51 deletions(-) create mode 100644 exercise.tests/ExtensionTests.cs diff --git a/exercise.main/Basket.cs b/exercise.main/Basket.cs index f5ad433b..48830e3f 100644 --- a/exercise.main/Basket.cs +++ b/exercise.main/Basket.cs @@ -1,7 +1,10 @@ using exercise.main.Product; using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; +using System.Reflection.Metadata.Ecma335; +using System.Security.Principal; using System.Text; using System.Threading.Tasks; @@ -9,46 +12,117 @@ namespace exercise.main { public class Basket { - private int _capacity = 5; + private int _ID = 0; + private int _capacity = 30; private List _items = new List(); - public void Add(IProduct item) + private List Amout_bagels() { - if (_capacity > 0) + List bagels = new List(); + foreach (IProduct item in _items) { - _items.Add(item); - _capacity--; + if (item is Bagel bagel) + { + bagels.Add(bagel); + } } + return bagels; } - public bool Remove(string bagel) + private List Amout_Coffee() { - foreach (Bagel b in _items) + List coffee = new List(); + foreach (IProduct item in _items) { - if (b.Name == bagel) + if (item is Coffee c) { - _items.Remove(b); - _capacity++; - return true; + if (c.SKU == "COFB") + { + coffee.Add(c); + } } } - return false; + return coffee; } - public bool IsFull() + public bool Add(IProduct item) { - return _capacity > 0; + if (_capacity > 0) + { + _items.Add(item); + _capacity--; + item.ID = _ID; + _ID++; + return true; + } + return false; } - - public double TotalCost() + + public void Remove(int id) + { + _items.RemoveAll(x => x.ID == id); + _capacity++; + } + + public double Discount() { - return _items.Sum(product => product.Price); + // Fix Later so Plain gets 0.39 if there is plain in the rest + double total = 0; + double coffeeDiscount = 0; + List bagels = Amout_bagels(); + List coffees = Amout_Coffee(); + + Console.WriteLine("Amout of Bagel: " + bagels.Count); + int BigPackBagels = 0; + int SmallPackBagels = 0; + + int rest = 0; + + if (bagels.Count >= 6) + { + // For Big pack 12 for 3.99 + BigPackBagels += bagels.Count / 12; + + // For Small pack 6 for 2.49 + SmallPackBagels += (bagels.Count - (BigPackBagels * 12)) / 6; + rest += (bagels.Count - (SmallPackBagels * 6)) % 6; + + } + + // Add coffee and Bagel Discount + + + int amout_coffeeDiscount = 0; + int max = 0; + int coffee = coffees.Count; + if (coffee > rest) + { + max = coffee; + } + else + { + max = rest; + } + + for (int i = 0; i < max; i++) + { + if (coffee > 0 & rest > 0) + { + coffee--; + rest--; + amout_coffeeDiscount++; + } + } + + total += amout_coffeeDiscount * 1.25 + coffeeDiscount + (rest * 0.49) + (coffee * 0.99) + (BigPackBagels * 3.99) + (SmallPackBagels * 2.49); + + + return total; } - //public void Choosefillings(Bagel bagel, List filling) - //{ - // bagel.AddFilling(filling); - //} + public bool IsFull() { return _capacity <= 0; } + + public double TotalCost() { return _items.Sum(product => product.Price); } public List Items { get { return _items; } } diff --git a/exercise.main/Inventory.cs b/exercise.main/Inventory.cs index d6b686d4..38a38f47 100644 --- a/exercise.main/Inventory.cs +++ b/exercise.main/Inventory.cs @@ -1,6 +1,7 @@ using exercise.main.Product; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -12,63 +13,63 @@ public class Inventory // Bagel public Bagel getOnionBagel() { - return new Bagel() { Name = "Onion", BagelPrice = 0.49}; + return new Bagel() { SKU = "BGLO", Name = "Onion", BagelPrice = 0.49}; } public Bagel getPlainBagel() { - return new Bagel() { Name = "Plain", BagelPrice = 0.49 }; + return new Bagel() { SKU = "BGLP", Name = "Plain", BagelPrice = 0.39 }; } public Bagel getEverythingBagel() { - return new Bagel() { Name = "Everything", BagelPrice = 0.49 }; + return new Bagel() { SKU = "BGLE", Name = "Everything", BagelPrice = 0.49 }; } public Bagel getSesameBagel() { - return new Bagel() { Name = "Sesame", BagelPrice = 0.49 }; + return new Bagel() { SKU = "BGLS", Name = "Sesame", BagelPrice = 0.49 }; } //Coffee public Coffee getBlackCoffee() { - return new Coffee() { Name = "Black", Price = 0.99 }; + return new Coffee() { SKU = "COFB", Name = "Black", Price = 0.99 }; } public Coffee getWhiteCoffee() { - return new Coffee() { Name = "White", Price = 1.19 }; + return new Coffee() { SKU = "COFW", Name = "White", Price = 1.19 }; } public Coffee getCapuccinoCoffee() { - return new Coffee() { Name = "Capuccino", Price = 1.19 }; + return new Coffee() { SKU = "COFC", Name = "Capuccino", Price = 1.19 }; } public Coffee getLatteCoffee() { - return new Coffee() { Name = "Latte", Price = 0.99 }; + return new Coffee() { SKU = "COFL", Name = "Latte", Price = 0.99 }; } //Filling public Filling GetBaconFilling() { - return new Filling() { Name = "Bacon", Price = 0.12 }; + return new Filling() { SKU = "FILB", Name = "Bacon", Price = 0.12 }; } public Filling GetEggFilling() { - return new Filling() { Name = "Egg", Price = 0.12 }; + return new Filling() { SKU = "FILE", Name = "Egg", Price = 0.12 }; } public Filling GetCheeseFilling() { - return new Filling() { Name = "Cheese", Price = 0.12 }; + return new Filling() { SKU = "FILC", Name = "Cheese", Price = 0.12 }; } public Filling GetCCFilling() { - return new Filling() { Name = "Cream Cheese", Price = 0.12 }; + return new Filling() { SKU = "FILX", Name = "Cream Cheese", Price = 0.12 }; } public Filling GetSSFilling() { - return new Filling() { Name = "Smoked Salmon", Price = 0.12 }; + return new Filling() { SKU = "FILS", Name = "Smoked Salmon", Price = 0.12 }; } public Filling GetHamFilling() { - return new Filling() { Name = "Ham", Price = 0.12 }; + return new Filling() { SKU = "FILH", Name = "Ham", Price = 0.12 }; } diff --git a/exercise.main/Product/Bagel.cs b/exercise.main/Product/Bagel.cs index 438810ac..6885c707 100644 --- a/exercise.main/Product/Bagel.cs +++ b/exercise.main/Product/Bagel.cs @@ -9,7 +9,7 @@ namespace exercise.main.Product { public class Bagel : IProduct { - + private double _price; private List _filling = new List(); @@ -28,8 +28,9 @@ public void SeeFillingCost() } + public string SKU { get; set; } public string Name { get; set; } - public string ID { get; set; } + public int ID { get; set; } public double BagelPrice { get { return _price; } set { _price = value; } } diff --git a/exercise.main/Product/Coffee.cs b/exercise.main/Product/Coffee.cs index 8fed9122..bc8648e1 100644 --- a/exercise.main/Product/Coffee.cs +++ b/exercise.main/Product/Coffee.cs @@ -8,8 +8,9 @@ namespace exercise.main.Product { public class Coffee : IProduct { + public string SKU { get; set; } public string Name { get; set; } - public string ID { get; set; } + public int ID { get; set; } public double Price { get; set; } } } diff --git a/exercise.main/Product/Filling.cs b/exercise.main/Product/Filling.cs index 31dd02e9..2a23cbda 100644 --- a/exercise.main/Product/Filling.cs +++ b/exercise.main/Product/Filling.cs @@ -9,8 +9,10 @@ namespace exercise.main.Product public class Filling : IProduct { private double _price = 0.12; + + public string SKU { get; set; } public string Name { get; set; } - public string ID { get; set; } + public int ID { get; set; } public double Price { get { return _price; } set { _price = value; } } } } diff --git a/exercise.main/Product/IProduct.cs b/exercise.main/Product/IProduct.cs index 3ca15353..a031bf97 100644 --- a/exercise.main/Product/IProduct.cs +++ b/exercise.main/Product/IProduct.cs @@ -8,8 +8,9 @@ namespace exercise.main.Product { public interface IProduct { + string SKU { get; set; } string Name { get; set; } - string ID { get; set; } + int ID { get; set; } double Price { get; set; } } } diff --git a/exercise.tests/ExtensionTests.cs b/exercise.tests/ExtensionTests.cs new file mode 100644 index 00000000..f1694265 --- /dev/null +++ b/exercise.tests/ExtensionTests.cs @@ -0,0 +1,146 @@ +using exercise.main; +using exercise.main.Product; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection.Emit; +using System.Text; +using System.Threading.Tasks; + +namespace exercise.tests +{ + public class ExtensionTests + { + Basket _basket = new Basket(); + + private void AddSixBagels() + { + Inventory inventory = new Inventory(); + Bagel bagel = inventory.getPlainBagel(); + Bagel bagel1 = inventory.getPlainBagel(); + Bagel bagel2 = inventory.getPlainBagel(); + Bagel bagel3 = inventory.getPlainBagel(); + Bagel bagel4 = inventory.getPlainBagel(); + Bagel bagel5 = inventory.getPlainBagel(); + + _basket.Add(bagel); + _basket.Add(bagel1); + _basket.Add(bagel2); + _basket.Add(bagel3); + _basket.Add(bagel4); + _basket.Add(bagel5); + } + + private void AddTwelveBagels() + { + Inventory inventory = new Inventory(); + Bagel bagel = inventory.getPlainBagel(); + Bagel bagel1 = inventory.getPlainBagel(); + Bagel bagel2 = inventory.getPlainBagel(); + Bagel bagel3 = inventory.getPlainBagel(); + Bagel bagel4 = inventory.getPlainBagel(); + Bagel bagel5 = inventory.getPlainBagel(); + Bagel bagel6 = inventory.getPlainBagel(); + Bagel bagel7 = inventory.getPlainBagel(); + Bagel bagel8 = inventory.getPlainBagel(); + Bagel bagel9 = inventory.getPlainBagel(); + Bagel bagel10 = inventory.getPlainBagel(); + Bagel bagel11 = inventory.getPlainBagel(); + + _basket.Add(bagel); + _basket.Add(bagel1); + _basket.Add(bagel2); + _basket.Add(bagel3); + _basket.Add(bagel4); + _basket.Add(bagel5); + _basket.Add(bagel6); + _basket.Add(bagel7); + _basket.Add(bagel8); + _basket.Add(bagel9); + _basket.Add(bagel10); + _basket.Add(bagel11); + } + + [Test] + public void DiscountTest() + { + AddSixBagels(); + + Console.WriteLine("Basket Capacity: " + _basket.Capacity); + Console.WriteLine("Basket Discount: " + _basket.Discount()); + + double result = _basket.Discount(); + + + Assert.That(result, Is.EqualTo(2.49)); + } + + [Test] + public void DiscountTestExampleOne() + { + AddSixBagels(); + AddTwelveBagels(); + + // Adding 3 coffee and 2 Onion + Inventory inventory = new Inventory(); + Bagel bagel = inventory.getOnionBagel(); + Bagel bagel1 = inventory.getOnionBagel(); + Coffee c = inventory.getBlackCoffee(); + Coffee c1 = inventory.getBlackCoffee(); + Coffee c2 = inventory.getBlackCoffee(); + + _basket.Add(bagel); + _basket.Add(bagel1); + _basket.Add(c); + _basket.Add(c1); + _basket.Add(c2); + + Console.WriteLine("Basket Capacity: " + _basket.Capacity); + Console.WriteLine("Basket Discount: " + _basket.Discount()); + + double result = _basket.Discount(); + + + Assert.That(result, Is.EqualTo(9.97)); + + // 2x BGLO = 0.98 + // 12x BGLP = 3.99 + // 6x BGLE = 2.49 + // 3x COF = 2.97 + // ---- + // 9.97 + } + + [Test] + public void DiscountTestExampleTwo() + { + AddTwelveBagels(); + + // Adding 3 coffee and 2 Onion + Inventory inventory = new Inventory(); + Bagel bagel = inventory.getPlainBagel(); + Bagel bagel1 = inventory.getPlainBagel(); + Bagel bagel2 = inventory.getPlainBagel(); + Bagel bagel3 = inventory.getPlainBagel(); + + + _basket.Add(bagel); + _basket.Add(bagel1); + _basket.Add(bagel2); + _basket.Add(bagel3); + + + Console.WriteLine("Basket Capacity: " + _basket.Capacity); + Console.WriteLine("Basket Discount: " + _basket.Discount()); + + double result = _basket.Discount(); + + + Assert.That(result, Is.EqualTo(5.95)); + } + + //16x BGLP = 5.55 + // ---- + // 5.55 + } +} diff --git a/exercise.tests/Tests.cs b/exercise.tests/Tests.cs index f575fd07..6dfeae60 100644 --- a/exercise.tests/Tests.cs +++ b/exercise.tests/Tests.cs @@ -5,8 +5,6 @@ namespace exercise.tests; public class Tests { - - [Test] public void AddTest() { @@ -16,7 +14,8 @@ public void AddTest() basket.Add(bagel); Assert.That(basket.Items[0].Name, Is.EqualTo("Plain")); - Assert.That(basket.Capacity, Is.EqualTo(4)); + Assert.That(basket.Capacity, Is.EqualTo(29)); + Assert.That(bagel.ID, Is.EqualTo(0)); } [Test] @@ -30,11 +29,9 @@ public void RemoveTest() basket.Add(bagel); basket.Add(bagel1); - bool result = basket.Remove("Plain"); - - Assert.That(result, Is.True); - Assert.That(basket.Capacity, Is.EqualTo(4)); + basket.Remove(0); + Assert.That(basket.Capacity, Is.EqualTo(29)); } [Test] @@ -80,11 +77,9 @@ public void RemoveExistTest() bagel.Name = "Plain"; basket.Add(bagel); - bool result = basket.Remove("Plain"); - bool result2 = basket.Remove("Onion"); + basket.Remove(0); - Assert.That(result, Is.True); - Assert.That(result2, Is.False); + Assert.That(basket.Capacity, Is.EqualTo(30)); } From 54555ba501d4dfc3570e217aa83796e742e408e8 Mon Sep 17 00:00:00 2001 From: Isabell Date: Tue, 12 Aug 2025 15:00:08 +0200 Subject: [PATCH 23/23] Added print-receipt --- README.md | 14 ++++ exercise.main/Basket.cs | 60 +++++++++++++++-- exercise.main/Program.cs | 13 ++++ .../{ExtensionTests.cs => Extension1Tests.cs} | 67 +++++-------------- exercise.tests/Extension2Tests.cs | 14 ++++ 5 files changed, 114 insertions(+), 54 deletions(-) rename exercise.tests/{ExtensionTests.cs => Extension1Tests.cs} (58%) create mode 100644 exercise.tests/Extension2Tests.cs diff --git a/README.md b/README.md index 4b229491..1395dd74 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,20 @@ So we don't get any weird requests, I want customers to only be able to order things that we stock in our inventory. ``` + +``` +11. +As a customer, +So I don't over-spend, +I'd like to get discount when I buy more than 6 bagels. +``` + +``` +11. +As a customer, +So I can see what each of the items costs, +I'd like to get a receipt. +``` ## Bob's Inventory | SKU | Price | Name | Variant | diff --git a/exercise.main/Basket.cs b/exercise.main/Basket.cs index 48830e3f..87da03bf 100644 --- a/exercise.main/Basket.cs +++ b/exercise.main/Basket.cs @@ -64,9 +64,23 @@ public void Remove(int id) _capacity++; } + //public bool ValidSixBagels() + //{ + + // if (_items.Where(p => p.SKU == "BGLO")) + // { + // return true; + // } + // if (_items.Any(p => p.SKU == "BGLP")) + // { + // return true; + // } + // return false; + //} + public double Discount() { - // Fix Later so Plain gets 0.39 if there is plain in the rest + // All bagels cost the same double total = 0; double coffeeDiscount = 0; List bagels = Amout_bagels(); @@ -90,12 +104,10 @@ public double Discount() } // Add coffee and Bagel Discount - - int amout_coffeeDiscount = 0; int max = 0; int coffee = coffees.Count; - if (coffee > rest) + if (coffee > rest) // Maybe get this on one-line { max = coffee; } @@ -115,11 +127,49 @@ public double Discount() } total += amout_coffeeDiscount * 1.25 + coffeeDiscount + (rest * 0.49) + (coffee * 0.99) + (BigPackBagels * 3.99) + (SmallPackBagels * 2.49); + + return total; + } + public string printReceipt() + { + + StringBuilder sb = new StringBuilder(); + sb.Append($"~~~Bob's Bagels ~~~"); + sb.Append($"\n{DateTime.Now.ToString()}"); - return total; + sb.Append($"\n----------------------------"); + + + + foreach (IProduct item in _items) + { + sb.Append($"\n{item.Name} - £{item.Price}"); + } + sb.Append($"\n----------------------------"); + sb.Append($"\nTotal : {this.TotalCost()}"); + sb.Append($"\nThank you for your order!"); + + return sb.ToString(); } +// ~~~Bob's Bagels ~~~ + +// 2021-03-16 21:38:44 + +//---------------------------- + +//Onion Bagel 2 £0.98 +//Plain Bagel 12 £3.99 +//Everything Bagel 6 £2.49 +//Coffee 3 £2.97 + +//---------------------------- +//Total £10.43 + +// Thank you +// for your order! + public bool IsFull() { return _capacity <= 0; } public double TotalCost() { return _items.Sum(product => product.Price); } diff --git a/exercise.main/Program.cs b/exercise.main/Program.cs index 3751555c..4f3a94f3 100644 --- a/exercise.main/Program.cs +++ b/exercise.main/Program.cs @@ -1,2 +1,15 @@ // See https://aka.ms/new-console-template for more information +using exercise.main; +using exercise.main.Product; + Console.WriteLine("Hello, World!"); + +Basket basket = new Basket(); +Inventory inventory = new Inventory(); +Bagel bagel = inventory.getPlainBagel(); +for (int i = 0; i < 4; i++) +{ + basket.Add(bagel); +} + +Console.WriteLine(basket.printReceipt()); diff --git a/exercise.tests/ExtensionTests.cs b/exercise.tests/Extension1Tests.cs similarity index 58% rename from exercise.tests/ExtensionTests.cs rename to exercise.tests/Extension1Tests.cs index f1694265..2a907437 100644 --- a/exercise.tests/ExtensionTests.cs +++ b/exercise.tests/Extension1Tests.cs @@ -9,7 +9,7 @@ namespace exercise.tests { - public class ExtensionTests + public class Extension1Tests { Basket _basket = new Basket(); @@ -17,48 +17,20 @@ private void AddSixBagels() { Inventory inventory = new Inventory(); Bagel bagel = inventory.getPlainBagel(); - Bagel bagel1 = inventory.getPlainBagel(); - Bagel bagel2 = inventory.getPlainBagel(); - Bagel bagel3 = inventory.getPlainBagel(); - Bagel bagel4 = inventory.getPlainBagel(); - Bagel bagel5 = inventory.getPlainBagel(); - - _basket.Add(bagel); - _basket.Add(bagel1); - _basket.Add(bagel2); - _basket.Add(bagel3); - _basket.Add(bagel4); - _basket.Add(bagel5); + for (int i=0; i<6; i++) + { + _basket.Add(bagel); + } } private void AddTwelveBagels() { Inventory inventory = new Inventory(); Bagel bagel = inventory.getPlainBagel(); - Bagel bagel1 = inventory.getPlainBagel(); - Bagel bagel2 = inventory.getPlainBagel(); - Bagel bagel3 = inventory.getPlainBagel(); - Bagel bagel4 = inventory.getPlainBagel(); - Bagel bagel5 = inventory.getPlainBagel(); - Bagel bagel6 = inventory.getPlainBagel(); - Bagel bagel7 = inventory.getPlainBagel(); - Bagel bagel8 = inventory.getPlainBagel(); - Bagel bagel9 = inventory.getPlainBagel(); - Bagel bagel10 = inventory.getPlainBagel(); - Bagel bagel11 = inventory.getPlainBagel(); - - _basket.Add(bagel); - _basket.Add(bagel1); - _basket.Add(bagel2); - _basket.Add(bagel3); - _basket.Add(bagel4); - _basket.Add(bagel5); - _basket.Add(bagel6); - _basket.Add(bagel7); - _basket.Add(bagel8); - _basket.Add(bagel9); - _basket.Add(bagel10); - _basket.Add(bagel11); + for (int i = 0; i < 12; i++) + { + _basket.Add(bagel); + } } [Test] @@ -114,20 +86,15 @@ public void DiscountTestExampleOne() [Test] public void DiscountTestExampleTwo() { - AddTwelveBagels(); + AddTwelveBagels(); // Onion ... // Adding 3 coffee and 2 Onion Inventory inventory = new Inventory(); Bagel bagel = inventory.getPlainBagel(); - Bagel bagel1 = inventory.getPlainBagel(); - Bagel bagel2 = inventory.getPlainBagel(); - Bagel bagel3 = inventory.getPlainBagel(); - - - _basket.Add(bagel); - _basket.Add(bagel1); - _basket.Add(bagel2); - _basket.Add(bagel3); + for (int i = 0; i < 4; i++) + { + _basket.Add(bagel); + } Console.WriteLine("Basket Capacity: " + _basket.Capacity); @@ -139,8 +106,10 @@ public void DiscountTestExampleTwo() Assert.That(result, Is.EqualTo(5.95)); } - //16x BGLP = 5.55 + //16x BGLP = 5.95 -- Plain cost 0.49 instead for 0.39 // ---- - // 5.55 + // 5.95 + + } } diff --git a/exercise.tests/Extension2Tests.cs b/exercise.tests/Extension2Tests.cs new file mode 100644 index 00000000..322852f7 --- /dev/null +++ b/exercise.tests/Extension2Tests.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace exercise.tests +{ + public class Extension2Tests + { + + + } +}