From b3bd679c98665624c3afdc31442b539a53e20cd4 Mon Sep 17 00:00:00 2001 From: Patrick Schuur Date: Wed, 20 Aug 2025 11:23:48 +0200 Subject: [PATCH 1/6] Domain model --- domain_model.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 domain_model.md diff --git a/domain_model.md b/domain_model.md new file mode 100644 index 00000000..c56f42e7 --- /dev/null +++ b/domain_model.md @@ -0,0 +1,10 @@ +## Core ## +| Methods/Properties | Scenario | Outputs | +|-----------------------------------------------------|---------------------------------------------------------------------------|--------------------------------------------------------------| +| Basket.AddBagel(Bagel bagel) | add specific type of bagel, should notify when full | A notification if full | +| Basket.RemoveBagel(Bagel bagel) | remove a bagel from the basket, should notify if the bagel does not exist | A notification if bagel does not exist | +| Basket.AdjustCapacity(int capacity) | change the capacity of the basket | None | +| Basket.GetTotalCost() | get the total cost of all bagels in the basket | The total cost of all bagels in the basket | +| Bagel.SetFilling(BagelFilling filling) | change filling of the bagel | None | +| BagelFilling.GetCost() | get the cost of the filling | The cost of the filling | + \ No newline at end of file From 243fee29fb6c71fb33e1c870599814afc70e234f Mon Sep 17 00:00:00 2001 From: Patrick Schuur Date: Wed, 20 Aug 2025 11:24:01 +0200 Subject: [PATCH 2/6] Add domain_model to sln --- exercise.sln | 1 + 1 file changed, 1 insertion(+) diff --git a/exercise.sln b/exercise.sln index 0efb5453..5399b35d 100644 --- a/exercise.sln +++ b/exercise.sln @@ -14,6 +14,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution extension3.md = extension3.md extension4.md = extension4.md README.md = README.md + domain_model.md = domain_model.md EndProjectSection EndProject Global From 65e731361a53541a19a094ab89ceb779b95b3682 Mon Sep 17 00:00:00 2001 From: Patrick Schuur Date: Wed, 20 Aug 2025 11:35:29 +0200 Subject: [PATCH 3/6] Bagel tests --- .gitignore | 3 +++ exercise.tests/BagelTests.cs | 38 ++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 exercise.tests/BagelTests.cs diff --git a/.gitignore b/.gitignore index 9491a2fd..988f1af1 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,9 @@ # Mono auto generated files mono_crash.* +# Jetbrains Project Files +.idea/ + # Build results [Dd]ebug/ [Dd]ebugPublic/ diff --git a/exercise.tests/BagelTests.cs b/exercise.tests/BagelTests.cs new file mode 100644 index 00000000..c74c12d0 --- /dev/null +++ b/exercise.tests/BagelTests.cs @@ -0,0 +1,38 @@ +using System.Diagnostics; +using exercise.main.BagelFillings; +using exercise.main.Bagels; + +namespace exercise.tests; + +public class Tests +{ + [Test] + public void SetFillingTest() + { + // Arrange + BagelFilling expected = new Cheese(); + Bagel bagel = new EverythingBagel(new Bacon()); + + // Act + bagel.SetFilling(expected); + + // Assert + Debug.Assert(bagel.Filling == expected); + } + + [Test] + public void GetTotalCostTest() + { + // Arrange + BagelFilling filling = new Cheese(); + Bagel bagel = new EverythingBagel(filling); + + const decimal EXPECTED_TOTAL = (decimal)0.61; + + // Act + decimal totalCost = bagel.GetTotalCost(); + + // Assert + Debug.Assert(totalCost == EXPECTED_TOTAL); + } +} \ No newline at end of file From 9df4a6c9254b22ccecb41ca1e83656324514e2d5 Mon Sep 17 00:00:00 2001 From: Patrick Schuur Date: Wed, 20 Aug 2025 11:36:10 +0200 Subject: [PATCH 4/6] Bagels and bagelfillings --- exercise.main/BagelFillings/Bacon.cs | 8 ++++++ exercise.main/BagelFillings/BagelFilling.cs | 9 +++++++ exercise.main/BagelFillings/Cheese.cs | 8 ++++++ exercise.main/BagelFillings/CreamCheese.cs | 8 ++++++ exercise.main/BagelFillings/Egg.cs | 8 ++++++ exercise.main/BagelFillings/Ham.cs | 8 ++++++ exercise.main/BagelFillings/SmokedSalmon.cs | 8 ++++++ exercise.main/Bagels/Bagel.cs | 30 +++++++++++++++++++++ exercise.main/Bagels/EverythingBagel.cs | 13 +++++++++ exercise.main/Bagels/OnionBagel.cs | 13 +++++++++ exercise.main/Bagels/PlainBagel.cs | 13 +++++++++ exercise.main/Bagels/SesameBagel.cs | 13 +++++++++ exercise.tests/UnitTest1.cs | 15 ----------- exercise.tests/exercise.tests.csproj | 4 +++ 14 files changed, 143 insertions(+), 15 deletions(-) create mode 100644 exercise.main/BagelFillings/Bacon.cs create mode 100644 exercise.main/BagelFillings/BagelFilling.cs create mode 100644 exercise.main/BagelFillings/Cheese.cs create mode 100644 exercise.main/BagelFillings/CreamCheese.cs create mode 100644 exercise.main/BagelFillings/Egg.cs create mode 100644 exercise.main/BagelFillings/Ham.cs create mode 100644 exercise.main/BagelFillings/SmokedSalmon.cs create mode 100644 exercise.main/Bagels/Bagel.cs create mode 100644 exercise.main/Bagels/EverythingBagel.cs create mode 100644 exercise.main/Bagels/OnionBagel.cs create mode 100644 exercise.main/Bagels/PlainBagel.cs create mode 100644 exercise.main/Bagels/SesameBagel.cs delete mode 100644 exercise.tests/UnitTest1.cs diff --git a/exercise.main/BagelFillings/Bacon.cs b/exercise.main/BagelFillings/Bacon.cs new file mode 100644 index 00000000..8128ca9a --- /dev/null +++ b/exercise.main/BagelFillings/Bacon.cs @@ -0,0 +1,8 @@ +namespace exercise.main.BagelFillings; + +public class Bacon : BagelFilling +{ + public override string Name() => "Bacon"; + public override string GetAbbreviation() => "FILB"; + public override decimal GetCost() => new(0.12); +} \ No newline at end of file diff --git a/exercise.main/BagelFillings/BagelFilling.cs b/exercise.main/BagelFillings/BagelFilling.cs new file mode 100644 index 00000000..db5c7db1 --- /dev/null +++ b/exercise.main/BagelFillings/BagelFilling.cs @@ -0,0 +1,9 @@ +namespace exercise.main.BagelFillings; + +public abstract class BagelFilling +{ + public string Type => "Filling"; + public abstract string Name(); + public abstract string GetAbbreviation(); + public abstract decimal GetCost(); +} \ No newline at end of file diff --git a/exercise.main/BagelFillings/Cheese.cs b/exercise.main/BagelFillings/Cheese.cs new file mode 100644 index 00000000..5d47e223 --- /dev/null +++ b/exercise.main/BagelFillings/Cheese.cs @@ -0,0 +1,8 @@ +namespace exercise.main.BagelFillings; + +public class Cheese : BagelFilling +{ + public override string Name() => "Cheese"; + public override string GetAbbreviation() => "FILC"; + public override decimal GetCost() => new(0.12); +} \ No newline at end of file diff --git a/exercise.main/BagelFillings/CreamCheese.cs b/exercise.main/BagelFillings/CreamCheese.cs new file mode 100644 index 00000000..95580871 --- /dev/null +++ b/exercise.main/BagelFillings/CreamCheese.cs @@ -0,0 +1,8 @@ +namespace exercise.main.BagelFillings; + +public class CreamCheese : BagelFilling +{ + public override string Name() => "CreamCheese"; + public override string GetAbbreviation() => "FILX"; + public override decimal GetCost() => new(0.12); +} \ No newline at end of file diff --git a/exercise.main/BagelFillings/Egg.cs b/exercise.main/BagelFillings/Egg.cs new file mode 100644 index 00000000..7ca19a56 --- /dev/null +++ b/exercise.main/BagelFillings/Egg.cs @@ -0,0 +1,8 @@ +namespace exercise.main.BagelFillings; + +public class Egg : BagelFilling +{ + public override string Name() => "Egg"; + public override string GetAbbreviation() => "FILE"; + public override decimal GetCost() => new(0.12); +} \ No newline at end of file diff --git a/exercise.main/BagelFillings/Ham.cs b/exercise.main/BagelFillings/Ham.cs new file mode 100644 index 00000000..1e02121d --- /dev/null +++ b/exercise.main/BagelFillings/Ham.cs @@ -0,0 +1,8 @@ +namespace exercise.main.BagelFillings; + +public class Ham : BagelFilling +{ + public override string Name() => "Ham"; + public override string GetAbbreviation() => "FILH"; + public override decimal GetCost() => new(0.12); +} \ No newline at end of file diff --git a/exercise.main/BagelFillings/SmokedSalmon.cs b/exercise.main/BagelFillings/SmokedSalmon.cs new file mode 100644 index 00000000..9ebbcd17 --- /dev/null +++ b/exercise.main/BagelFillings/SmokedSalmon.cs @@ -0,0 +1,8 @@ +namespace exercise.main.BagelFillings; + +public class SmokedSalmon : BagelFilling +{ + public override string Name() => "SmokedSalmon"; + public override string GetAbbreviation() => "FILS"; + public override decimal GetCost() => new(0.12); +} \ No newline at end of file diff --git a/exercise.main/Bagels/Bagel.cs b/exercise.main/Bagels/Bagel.cs new file mode 100644 index 00000000..ac8eaf49 --- /dev/null +++ b/exercise.main/Bagels/Bagel.cs @@ -0,0 +1,30 @@ +using exercise.main.BagelFillings; + +namespace exercise.main.Bagels; + +public abstract class Bagel +{ + public static string Type => "Bagel"; + public BagelFilling Filling => bagelFilling; + public abstract string Name(); + public abstract string Abbreviation(); + + protected BagelFilling bagelFilling; + protected decimal cost; + + protected Bagel(BagelFilling bagelFilling, decimal cost) + { + this.bagelFilling = bagelFilling; + this.cost = cost; + } + + public void SetFilling(BagelFilling filling) + { + bagelFilling = filling; + } + + public decimal GetTotalCost() + { + return cost + Filling.GetCost(); + } +} \ No newline at end of file diff --git a/exercise.main/Bagels/EverythingBagel.cs b/exercise.main/Bagels/EverythingBagel.cs new file mode 100644 index 00000000..07159ab0 --- /dev/null +++ b/exercise.main/Bagels/EverythingBagel.cs @@ -0,0 +1,13 @@ +using exercise.main.BagelFillings; + +namespace exercise.main.Bagels; + +public class EverythingBagel : Bagel +{ + public override string Name() => "Everything"; + public override string Abbreviation() => "BGLP"; + + public EverythingBagel(BagelFilling bagelFilling) : base(bagelFilling, new decimal(0.49)) + { + } +} \ No newline at end of file diff --git a/exercise.main/Bagels/OnionBagel.cs b/exercise.main/Bagels/OnionBagel.cs new file mode 100644 index 00000000..6470d691 --- /dev/null +++ b/exercise.main/Bagels/OnionBagel.cs @@ -0,0 +1,13 @@ +using exercise.main.BagelFillings; + +namespace exercise.main.Bagels; + +public class OnionBagel : Bagel +{ + public override string Name() => "Plain"; + public override string Abbreviation() => "BGLP"; + + public OnionBagel(BagelFilling bagelFilling) : base(bagelFilling, new decimal(0.49)) + { + } +} \ No newline at end of file diff --git a/exercise.main/Bagels/PlainBagel.cs b/exercise.main/Bagels/PlainBagel.cs new file mode 100644 index 00000000..8ca9c2a4 --- /dev/null +++ b/exercise.main/Bagels/PlainBagel.cs @@ -0,0 +1,13 @@ +using exercise.main.BagelFillings; + +namespace exercise.main.Bagels; + +public class PlainBagel : Bagel +{ + public override string Name() => "Plain"; + public override string Abbreviation() => "BGLP"; + + public PlainBagel(BagelFilling bagelFilling) : base(bagelFilling, new decimal(0.39)) + { + } +} \ No newline at end of file diff --git a/exercise.main/Bagels/SesameBagel.cs b/exercise.main/Bagels/SesameBagel.cs new file mode 100644 index 00000000..650ec396 --- /dev/null +++ b/exercise.main/Bagels/SesameBagel.cs @@ -0,0 +1,13 @@ +using exercise.main.BagelFillings; + +namespace exercise.main.Bagels; + +public class SesameBagel : Bagel +{ + public override string Name() => "Sesame"; + public override string Abbreviation() => "BGLP"; + + public SesameBagel(BagelFilling bagelFilling) : base(bagelFilling, new decimal(0.49)) + { + } +} \ 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 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 e34057a2b4e1436eab9e0679a833573e69b7f789 Mon Sep 17 00:00:00 2001 From: Patrick Schuur Date: Wed, 20 Aug 2025 11:45:11 +0200 Subject: [PATCH 5/6] Basket tests --- exercise.tests/BasketTests.cs | 83 +++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 exercise.tests/BasketTests.cs diff --git a/exercise.tests/BasketTests.cs b/exercise.tests/BasketTests.cs new file mode 100644 index 00000000..e30f9dcd --- /dev/null +++ b/exercise.tests/BasketTests.cs @@ -0,0 +1,83 @@ +using System.Diagnostics; +using exercise.main; +using exercise.main.BagelFillings; +using exercise.main.Bagels; + +namespace exercise.tests; + +public class BasketTests +{ + [Test] + public void AddBagelTest() + { + // Arrange + Basket basket = new Basket(1); + Bagel bagel = new EverythingBagel(new Cheese()); + + + // Act + basket.AddBagel(bagel); + basket.AddBagel(bagel); + + // Assert + Debug.Assert(basket.Count == 1); + } + + [Test] + public void RemoveBagelTest() + { + // Arrange + Basket basket = new Basket(2); + Bagel bagel = new EverythingBagel(new Cheese()); + + basket.AddBagel(bagel); + + // Act + basket.RemoveBagel(bagel); + basket.RemoveBagel(bagel); + + // Assert + Debug.Assert(basket.Count == 0); + } + + [Test] + public void AdjustCapacityTest() + { + // Arrange + Basket basket = new Basket(0); + Bagel bagel = new EverythingBagel(new Cheese()); + + basket.AddBagel(bagel); + + // Act + basket.AdjustCapacity(1); + basket.AddBagel(bagel); + + // Assert + Debug.Assert(basket.Count == 1); + } + + [Test] + public void GetTotalCostTest() + { + // Arrange + Basket basket = new Basket(3); + Bagel bagel1 = new EverythingBagel(new Cheese()); + Bagel bagel2 = new OnionBagel(new CreamCheese()); + Bagel bagel3 = new SesameBagel(new Egg()); + + basket.AddBagel(bagel1); + basket.AddBagel(bagel2); + basket.AddBagel(bagel3); + + const decimal EXPECTED_TOTAL = (decimal)1.83; + + // Act + decimal totalCost = basket.GetTotalCost(); + + // Assert + Debug.Assert(totalCost == EXPECTED_TOTAL); + } + + +} \ No newline at end of file From ad38dd6351a108f5c1516a8f75615bac5db1a7f3 Mon Sep 17 00:00:00 2001 From: Patrick Schuur Date: Wed, 20 Aug 2025 12:09:29 +0200 Subject: [PATCH 6/6] Implementations and diagram --- csharp-tdd-oop-bobs-bagels.drawio.png | Bin 0 -> 47507 bytes csharp-tdd-oop-bobs-bagels.drawio.svg | 4 ++ exercise.main/BagelFillings/Bacon.cs | 4 +- exercise.main/BagelFillings/BagelFilling.cs | 4 +- exercise.main/BagelFillings/Cheese.cs | 4 +- exercise.main/BagelFillings/CreamCheese.cs | 4 +- exercise.main/BagelFillings/Egg.cs | 4 +- exercise.main/BagelFillings/Ham.cs | 4 +- exercise.main/BagelFillings/SmokedSalmon.cs | 4 +- exercise.main/Bagels/Bagel.cs | 2 +- exercise.main/Basket.cs | 53 ++++++++++++++++++++ exercise.sln | 2 + 12 files changed, 74 insertions(+), 15 deletions(-) create mode 100644 csharp-tdd-oop-bobs-bagels.drawio.png create mode 100644 csharp-tdd-oop-bobs-bagels.drawio.svg create mode 100644 exercise.main/Basket.cs diff --git a/csharp-tdd-oop-bobs-bagels.drawio.png b/csharp-tdd-oop-bobs-bagels.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..91e197b997a4347209b177ec9fc2caf8fe908fbc GIT binary patch literal 47507 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 X8=3EnaeHA@;E%SZfyT>=c6a|5^U;XM literal 0 HcmV?d00001 diff --git a/csharp-tdd-oop-bobs-bagels.drawio.svg b/csharp-tdd-oop-bobs-bagels.drawio.svg new file mode 100644 index 00000000..0c43e82d --- /dev/null +++ b/csharp-tdd-oop-bobs-bagels.drawio.svg @@ -0,0 +1,4 @@ + + + +
Basket
Basket
-capacity: int
-contents: List<Bagel>
 
-capacity: int...
+AddBagel(Bagel)
+RemoveBagel(Bagel)
+AdjustCapacity(int)
+GetTotalCost() -> decimal
+
+AddBagel(Bagel)...
Bagel
Bagel

+bagelFilling: BagelFilling
+cost: decimal

+bagelFilling: BagelFillin...
+Type() -> string
+Filling() -> BagelFilling
+Name() -> string
+Abbreviation() -> string
+SetFilling(BagelFilling)
+GetTotalCost() -> decimal
+Type() -> string...
BagelFilling
BagelFilling
+Type() -> string
+Name() -> string
+Abbreviation() -> string
+Cost() -> decimal
+Type() -> string...
Egg
Egg
Bacon
Bacon
CreamCheese
CreamCheese
Ham
Ham
SmokedSalmon
SmokedSalmon
EverythingBagel
EverythingBagel
OnionBagel
OnionBagel
PlainBagel
PlainBagel
SesameBagel
SesameBagel
\ No newline at end of file diff --git a/exercise.main/BagelFillings/Bacon.cs b/exercise.main/BagelFillings/Bacon.cs index 8128ca9a..82607f36 100644 --- a/exercise.main/BagelFillings/Bacon.cs +++ b/exercise.main/BagelFillings/Bacon.cs @@ -3,6 +3,6 @@ public class Bacon : BagelFilling { public override string Name() => "Bacon"; - public override string GetAbbreviation() => "FILB"; - public override decimal GetCost() => new(0.12); + public override string Abbreviation() => "FILB"; + public override decimal Cost() => new(0.12); } \ No newline at end of file diff --git a/exercise.main/BagelFillings/BagelFilling.cs b/exercise.main/BagelFillings/BagelFilling.cs index db5c7db1..ecd0483c 100644 --- a/exercise.main/BagelFillings/BagelFilling.cs +++ b/exercise.main/BagelFillings/BagelFilling.cs @@ -4,6 +4,6 @@ public abstract class BagelFilling { public string Type => "Filling"; public abstract string Name(); - public abstract string GetAbbreviation(); - public abstract decimal GetCost(); + public abstract string Abbreviation(); + public abstract decimal Cost(); } \ No newline at end of file diff --git a/exercise.main/BagelFillings/Cheese.cs b/exercise.main/BagelFillings/Cheese.cs index 5d47e223..113aa829 100644 --- a/exercise.main/BagelFillings/Cheese.cs +++ b/exercise.main/BagelFillings/Cheese.cs @@ -3,6 +3,6 @@ public class Cheese : BagelFilling { public override string Name() => "Cheese"; - public override string GetAbbreviation() => "FILC"; - public override decimal GetCost() => new(0.12); + public override string Abbreviation() => "FILC"; + public override decimal Cost() => new(0.12); } \ No newline at end of file diff --git a/exercise.main/BagelFillings/CreamCheese.cs b/exercise.main/BagelFillings/CreamCheese.cs index 95580871..d78cefef 100644 --- a/exercise.main/BagelFillings/CreamCheese.cs +++ b/exercise.main/BagelFillings/CreamCheese.cs @@ -3,6 +3,6 @@ public class CreamCheese : BagelFilling { public override string Name() => "CreamCheese"; - public override string GetAbbreviation() => "FILX"; - public override decimal GetCost() => new(0.12); + public override string Abbreviation() => "FILX"; + public override decimal Cost() => new(0.12); } \ No newline at end of file diff --git a/exercise.main/BagelFillings/Egg.cs b/exercise.main/BagelFillings/Egg.cs index 7ca19a56..e7ca3a5f 100644 --- a/exercise.main/BagelFillings/Egg.cs +++ b/exercise.main/BagelFillings/Egg.cs @@ -3,6 +3,6 @@ public class Egg : BagelFilling { public override string Name() => "Egg"; - public override string GetAbbreviation() => "FILE"; - public override decimal GetCost() => new(0.12); + public override string Abbreviation() => "FILE"; + public override decimal Cost() => new(0.12); } \ No newline at end of file diff --git a/exercise.main/BagelFillings/Ham.cs b/exercise.main/BagelFillings/Ham.cs index 1e02121d..b2d05e7c 100644 --- a/exercise.main/BagelFillings/Ham.cs +++ b/exercise.main/BagelFillings/Ham.cs @@ -3,6 +3,6 @@ public class Ham : BagelFilling { public override string Name() => "Ham"; - public override string GetAbbreviation() => "FILH"; - public override decimal GetCost() => new(0.12); + public override string Abbreviation() => "FILH"; + public override decimal Cost() => new(0.12); } \ No newline at end of file diff --git a/exercise.main/BagelFillings/SmokedSalmon.cs b/exercise.main/BagelFillings/SmokedSalmon.cs index 9ebbcd17..50f68859 100644 --- a/exercise.main/BagelFillings/SmokedSalmon.cs +++ b/exercise.main/BagelFillings/SmokedSalmon.cs @@ -3,6 +3,6 @@ public class SmokedSalmon : BagelFilling { public override string Name() => "SmokedSalmon"; - public override string GetAbbreviation() => "FILS"; - public override decimal GetCost() => new(0.12); + public override string Abbreviation() => "FILS"; + public override decimal Cost() => new(0.12); } \ No newline at end of file diff --git a/exercise.main/Bagels/Bagel.cs b/exercise.main/Bagels/Bagel.cs index ac8eaf49..51d5f2ed 100644 --- a/exercise.main/Bagels/Bagel.cs +++ b/exercise.main/Bagels/Bagel.cs @@ -25,6 +25,6 @@ public void SetFilling(BagelFilling filling) public decimal GetTotalCost() { - return cost + Filling.GetCost(); + return cost + Filling.Cost(); } } \ No newline at end of file diff --git a/exercise.main/Basket.cs b/exercise.main/Basket.cs new file mode 100644 index 00000000..8d112751 --- /dev/null +++ b/exercise.main/Basket.cs @@ -0,0 +1,53 @@ +using exercise.main.BagelFillings; +using exercise.main.Bagels; + +namespace exercise.main; + +public class Basket +{ + public int Count => _contents.Count; + + private readonly List _contents = new(); + private int _maxCapacity; + + public Basket(int maxCapacity) + { + _maxCapacity = maxCapacity; + } + + public void AddBagel(Bagel bagel) + { + if (_contents.Count < _maxCapacity) + { + _contents.Add(bagel); + } + else + { + Console.WriteLine("Basket is at max capacity!"); + } + } + + public void RemoveBagel(Bagel bagel) + { + if (!_contents.Remove(bagel)) + { + Console.WriteLine("Could not find bagel to remove!"); + } + } + + public void AdjustCapacity(int capacity) + { + _maxCapacity = capacity; + } + + public decimal GetTotalCost() + { + decimal cost = 0; + foreach (var bagel in _contents) + { + cost += bagel.GetTotalCost(); + } + + return cost; + } +} \ No newline at end of file diff --git a/exercise.sln b/exercise.sln index 5399b35d..62890297 100644 --- a/exercise.sln +++ b/exercise.sln @@ -15,6 +15,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution extension4.md = extension4.md README.md = README.md domain_model.md = domain_model.md + csharp-tdd-oop-bobs-bagels.drawio.png = csharp-tdd-oop-bobs-bagels.drawio.png + csharp-tdd-oop-bobs-bagels.drawio.svg = csharp-tdd-oop-bobs-bagels.drawio.svg EndProjectSection EndProject Global