├── solutions
├── java
│ └── .gitkeep
├── scala
│ └── .gitkeep
└── dotnet-core
│ ├── .gitkeep
│ ├── piraces-decorator
│ ├── Beverages
│ │ ├── Interfaces
│ │ │ └── Beverages
│ │ │ │ └── Beverage.cs
│ │ ├── Classes
│ │ │ ├── Supplements
│ │ │ │ ├── NoExtra.cs
│ │ │ │ ├── Milk.cs
│ │ │ │ ├── Cream.cs
│ │ │ │ └── Cinnamon.cs
│ │ │ └── Beverages
│ │ │ │ ├── Tea.cs
│ │ │ │ ├── Coffee.cs
│ │ │ │ ├── HotChocolate.cs
│ │ │ │ └── Drink.cs
│ │ ├── Beverages.csproj
│ │ └── Factories
│ │ │ └── BeverageFactory.cs
│ ├── Beverages.Test
│ │ ├── Beverages.Tests.csproj
│ │ └── BeveragesPricingTest.cs
│ └── Beverages.sln
│ └── piraces-composition
│ ├── Beverages
│ ├── Enums
│ │ └── SupplementType.cs
│ ├── Beverages.csproj
│ ├── Beverage.cs
│ └── Factories
│ │ └── BeverageFactory.cs
│ ├── Beverages.Test
│ ├── Beverages.Tests.csproj
│ └── BeveragesPricingTest.cs
│ └── Beverages.sln
├── scala
├── project
│ └── build.properties
├── src
│ ├── main
│ │ └── scala
│ │ │ ├── Beverage.scala
│ │ │ ├── Tea.scala
│ │ │ ├── Coffee.scala
│ │ │ ├── HotChocolate.scala
│ │ │ ├── TeaWithMilk.scala
│ │ │ ├── CoffeeWithMilk.scala
│ │ │ ├── HotChocolateWithCream.scala
│ │ │ └── CoffeeWithMilkAndCream.scala
│ └── test
│ │ └── scala
│ │ └── BeveragesPricingTest.scala
└── build.sbt
├── java
├── src
│ ├── main
│ │ └── java
│ │ │ └── beverages
│ │ │ ├── Beverage.java
│ │ │ ├── Tea.java
│ │ │ ├── Coffee.java
│ │ │ ├── HotChocolate.java
│ │ │ ├── TeaWithMilk.java
│ │ │ ├── CoffeeWithMilk.java
│ │ │ ├── HotChocolateWithCream.java
│ │ │ └── CoffeeWithMilkAndCream.java
│ └── test
│ │ └── java
│ │ └── unit_tests
│ │ └── BeveragesPricingTest.java
└── pom.xml
├── dotnet-core
├── Beverages
│ ├── Beverage.cs
│ ├── Beverages.csproj
│ ├── Tea.cs
│ ├── Coffee.cs
│ ├── HotChocolate.cs
│ ├── TeaWithMilk.cs
│ ├── CoffeeWithMilk.cs
│ ├── HotChocolateWithCream.cs
│ └── CoffeeWithMilkAndCream.cs
├── Beverages.Test
│ ├── Beverages.Tests.csproj
│ └── BeveragesPricingTest.cs
└── Beverages.sln
├── .gitignore
└── README.md
/solutions/java/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/solutions/scala/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/scala/project/build.properties:
--------------------------------------------------------------------------------
1 | sbt.version = 1.3.2
--------------------------------------------------------------------------------
/scala/src/main/scala/Beverage.scala:
--------------------------------------------------------------------------------
1 | trait Beverage {
2 | def price(): Double
3 | }
4 |
--------------------------------------------------------------------------------
/scala/src/main/scala/Tea.scala:
--------------------------------------------------------------------------------
1 | class Tea extends Beverage {
2 | override def price(): Double = 1.5
3 | }
4 |
--------------------------------------------------------------------------------
/scala/src/main/scala/Coffee.scala:
--------------------------------------------------------------------------------
1 | class Coffee extends Beverage {
2 | override def price(): Double = 1.2
3 | }
4 |
--------------------------------------------------------------------------------
/java/src/main/java/beverages/Beverage.java:
--------------------------------------------------------------------------------
1 | package beverages;
2 |
3 | public interface Beverage {
4 | double price();
5 | }
6 |
--------------------------------------------------------------------------------
/scala/src/main/scala/HotChocolate.scala:
--------------------------------------------------------------------------------
1 | class HotChocolate extends Beverage {
2 | override def price(): Double = 1.45
3 | }
4 |
--------------------------------------------------------------------------------
/scala/src/main/scala/TeaWithMilk.scala:
--------------------------------------------------------------------------------
1 | class TeaWithMilk extends Tea {
2 | override def price(): Double = super.price() + 0.10
3 | }
4 |
--------------------------------------------------------------------------------
/scala/src/main/scala/CoffeeWithMilk.scala:
--------------------------------------------------------------------------------
1 | class CoffeeWithMilk extends Coffee {
2 | override def price(): Double = super.price() + 0.10
3 | }
4 |
--------------------------------------------------------------------------------
/dotnet-core/Beverages/Beverage.cs:
--------------------------------------------------------------------------------
1 | namespace Beverages
2 | {
3 | public interface Beverage
4 | {
5 | double Price();
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/scala/src/main/scala/HotChocolateWithCream.scala:
--------------------------------------------------------------------------------
1 | class HotChocolateWithCream extends HotChocolate {
2 | override def price(): Double = 1.45 + 0.15
3 | }
4 |
--------------------------------------------------------------------------------
/scala/src/main/scala/CoffeeWithMilkAndCream.scala:
--------------------------------------------------------------------------------
1 | class CoffeeWithMilkAndCream extends Coffee {
2 | override def price(): Double = super.price() + 0.25
3 | }
4 |
--------------------------------------------------------------------------------
/java/src/main/java/beverages/Tea.java:
--------------------------------------------------------------------------------
1 | package beverages;
2 |
3 | public class Tea implements Beverage {
4 | @Override
5 | public double price() {
6 | return 1.5;
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/java/src/main/java/beverages/Coffee.java:
--------------------------------------------------------------------------------
1 | package beverages;
2 |
3 | public class Coffee implements Beverage {
4 | @Override
5 | public double price() {
6 | return 1.2;
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/dotnet-core/Beverages/Beverages.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netcoreapp2.2
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/java/src/main/java/beverages/HotChocolate.java:
--------------------------------------------------------------------------------
1 | package beverages;
2 |
3 | public class HotChocolate implements Beverage {
4 | @Override
5 | public double price() {
6 | return 1.45;
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-decorator/Beverages/Interfaces/Beverages/Beverage.cs:
--------------------------------------------------------------------------------
1 | namespace Beverages.Interfaces.Beverages
2 | {
3 | public interface Beverage
4 | {
5 | double Price();
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/java/src/main/java/beverages/TeaWithMilk.java:
--------------------------------------------------------------------------------
1 | package beverages;
2 |
3 | public class TeaWithMilk extends Tea {
4 | @Override
5 | public double price() {
6 | return super.price() + 0.10;
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/dotnet-core/Beverages/Tea.cs:
--------------------------------------------------------------------------------
1 | namespace Beverages
2 | {
3 | public class Tea : Beverage
4 | {
5 | public virtual double Price()
6 | {
7 | return 1.5;
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/java/src/main/java/beverages/CoffeeWithMilk.java:
--------------------------------------------------------------------------------
1 | package beverages;
2 |
3 | public class CoffeeWithMilk extends Coffee {
4 | @Override
5 | public double price() {
6 | return super.price() + 0.10;
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/dotnet-core/Beverages/Coffee.cs:
--------------------------------------------------------------------------------
1 | namespace Beverages
2 | {
3 | public class Coffee : Beverage
4 | {
5 | public virtual double Price()
6 | {
7 | return 1.2;
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/java/src/main/java/beverages/HotChocolateWithCream.java:
--------------------------------------------------------------------------------
1 | package beverages;
2 |
3 | public class HotChocolateWithCream extends HotChocolate {
4 | @Override
5 | public double price() {
6 | return 1.45 + 0.15;
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-composition/Beverages/Enums/SupplementType.cs:
--------------------------------------------------------------------------------
1 | namespace Beverages.Enums
2 | {
3 | public enum SupplementType
4 | {
5 | Milk,
6 | Cream,
7 | Cinnamon
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/dotnet-core/Beverages/HotChocolate.cs:
--------------------------------------------------------------------------------
1 | namespace Beverages
2 | {
3 | public class HotChocolate : Beverage
4 | {
5 | public virtual double Price()
6 | {
7 | return 1.45;
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/scala/build.sbt:
--------------------------------------------------------------------------------
1 | name := "scala"
2 |
3 | version := "0.1"
4 |
5 | scalaVersion := "2.13.1"
6 |
7 | libraryDependencies += "org.scalactic" %% "scalactic" % "3.0.8"
8 | libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.8" % "test"
9 |
--------------------------------------------------------------------------------
/java/src/main/java/beverages/CoffeeWithMilkAndCream.java:
--------------------------------------------------------------------------------
1 | package beverages;
2 |
3 | public class CoffeeWithMilkAndCream extends Coffee {
4 | @Override
5 | public double price() {
6 | return super.price() + 0.25;
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/dotnet-core/Beverages/TeaWithMilk.cs:
--------------------------------------------------------------------------------
1 | namespace Beverages
2 | {
3 | public class TeaWithMilk : Tea
4 | {
5 | public override double Price()
6 | {
7 | return base.Price() + 0.10;
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/dotnet-core/Beverages/CoffeeWithMilk.cs:
--------------------------------------------------------------------------------
1 | namespace Beverages
2 | {
3 | public class CoffeeWithMilk : Coffee
4 | {
5 | public override double Price()
6 | {
7 | return base.Price() + 0.10;
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/dotnet-core/Beverages/HotChocolateWithCream.cs:
--------------------------------------------------------------------------------
1 | namespace Beverages
2 | {
3 | public class HotChocolateWithCream : HotChocolate
4 | {
5 | public override double Price()
6 | {
7 | return 1.45 + 0.15;
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/dotnet-core/Beverages/CoffeeWithMilkAndCream.cs:
--------------------------------------------------------------------------------
1 | namespace Beverages
2 | {
3 | public class CoffeeWithMilkAndCream : Coffee
4 | {
5 | public override double Price()
6 | {
7 | return base.Price() + 0.25;
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-decorator/Beverages/Classes/Supplements/NoExtra.cs:
--------------------------------------------------------------------------------
1 | using Beverages.Interfaces.Beverages;
2 |
3 | namespace Beverages.Classes.Supplements
4 | {
5 | public class NoExtra : Beverage
6 | {
7 | public double Price()
8 | {
9 | return 0.0;
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-composition/Beverages/Beverages.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netcoreapp2.2
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-decorator/Beverages/Classes/Beverages/Tea.cs:
--------------------------------------------------------------------------------
1 | using Beverages.Interfaces.Beverages;
2 |
3 | namespace Beverages.Classes.Beverages
4 | {
5 | public class Tea : Drink
6 | {
7 | public Tea() : base() { }
8 | public Tea(Beverage beverage) : base(beverage) { }
9 |
10 | protected override double DrinkPrice()
11 | {
12 | return 1.5;
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-decorator/Beverages/Classes/Beverages/Coffee.cs:
--------------------------------------------------------------------------------
1 | using Beverages.Interfaces.Beverages;
2 |
3 | namespace Beverages.Classes.Beverages
4 | {
5 | public class Coffee : Drink
6 | {
7 | public Coffee() : base() { }
8 | public Coffee(Beverage beverage) : base(beverage) { }
9 |
10 | protected override double DrinkPrice()
11 | {
12 | return 1.2;
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-decorator/Beverages/Classes/Beverages/HotChocolate.cs:
--------------------------------------------------------------------------------
1 | using Beverages.Interfaces.Beverages;
2 |
3 | namespace Beverages.Classes.Beverages
4 | {
5 | public class HotChocolate : Drink
6 | {
7 | public HotChocolate() : base() { }
8 | public HotChocolate(Beverage beverage) : base(beverage) { }
9 |
10 | protected override double DrinkPrice()
11 | {
12 | return 1.45;
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-decorator/Beverages/Classes/Supplements/Milk.cs:
--------------------------------------------------------------------------------
1 | using Beverages.Classes.Beverages;
2 | using Beverages.Interfaces.Beverages;
3 |
4 | namespace Beverages.Classes.Supplements
5 | {
6 | public class Milk : Drink
7 | {
8 | public Milk() : base() { }
9 | public Milk(Beverage drink) : base(drink) { }
10 |
11 | protected override double DrinkPrice()
12 | {
13 | return 0.1;
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-decorator/Beverages/Classes/Supplements/Cream.cs:
--------------------------------------------------------------------------------
1 | using Beverages.Classes.Beverages;
2 | using Beverages.Interfaces.Beverages;
3 |
4 | namespace Beverages.Classes.Supplements
5 | {
6 | public class Cream : Drink
7 | {
8 | public Cream() : base() { }
9 | public Cream(Beverage drink) : base(drink) { }
10 |
11 | protected override double DrinkPrice()
12 | {
13 | return 0.15;
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-decorator/Beverages/Classes/Supplements/Cinnamon.cs:
--------------------------------------------------------------------------------
1 | using Beverages.Classes.Beverages;
2 | using Beverages.Interfaces.Beverages;
3 |
4 | namespace Beverages.Classes.Supplements
5 | {
6 | public class Cinnamon : Drink
7 | {
8 | public Cinnamon() : base() { }
9 | public Cinnamon(Beverage drink) : base(drink) { }
10 |
11 | protected override double DrinkPrice()
12 | {
13 | return 0.05;
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-decorator/Beverages/Beverages.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netcoreapp2.2
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/dotnet-core/Beverages.Test/Beverages.Tests.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netcoreapp2.2
5 |
6 | false
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-decorator/Beverages.Test/Beverages.Tests.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netcoreapp2.2
5 |
6 | false
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-composition/Beverages.Test/Beverages.Tests.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netcoreapp2.2
5 |
6 | false
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-decorator/Beverages/Classes/Beverages/Drink.cs:
--------------------------------------------------------------------------------
1 | using Beverages.Classes.Supplements;
2 | using Beverages.Interfaces.Beverages;
3 |
4 | namespace Beverages.Classes.Beverages
5 | {
6 | public class Drink : Beverage
7 | {
8 | private Beverage _drink;
9 |
10 | public Drink() => _drink = new NoExtra();
11 |
12 | public Drink(Beverage drink) => _drink = drink;
13 |
14 | public static Drink With(Beverage beverage) => new Drink(beverage);
15 |
16 | public double Price() => _drink.Price() + DrinkPrice();
17 |
18 | protected virtual double DrinkPrice() => 0.0;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Custom
2 | /bin/
3 | target
4 | .idea
5 | *.iml
6 | *.swp
7 | *.*~
8 | project.lock.json
9 | .DS_Store
10 | *.pyc
11 | nupkg/
12 |
13 | # C# (Visual Studio Code)
14 | .vscode
15 |
16 | .idea
17 |
18 | *.suo
19 | *.user
20 | *.userosscache
21 | *.sln.docstates
22 |
23 | [Dd]ebug/
24 | [Dd]ebugPublic/
25 | [Rr]elease/
26 | [Rr]eleases/
27 | x64/
28 | x86/
29 | build/
30 | bld/
31 | [Bb]in/
32 | [Oo]bj/
33 | [Oo]ut/
34 | msbuild.log
35 | msbuild.err
36 | msbuild.wrn
37 |
38 | .vs/
39 |
40 | # Java Specific
41 |
42 | *.project
43 | *.class
44 | *.log
45 | *.ctxt
46 | .mtj.tmp/
47 | .settings/
48 |
49 | *.jar
50 | *.war
51 | *.nar
52 | *.ear
53 | *.zip
54 | *.tar.gz
55 | *.rar
56 |
57 | hs_err_pid*
58 | .classpath
59 |
60 | #scala specific
61 | scala/target/
62 | scala/project/target/
63 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-composition/Beverages/Beverage.cs:
--------------------------------------------------------------------------------
1 | using System.Linq;
2 | using System.Collections.Generic;
3 | using Beverages.Enums;
4 |
5 | namespace Beverages
6 | {
7 | public class Beverage
8 | {
9 | public double BasePrice { get; set; }
10 | public Dictionary SupplementTypes { get; set; }
11 |
12 | public Beverage(double basePrice)
13 | {
14 | BasePrice = basePrice;
15 | SupplementTypes = new Dictionary();
16 | }
17 |
18 | public void AddSupplementType(SupplementType supplementType, double supplementPrice)
19 | {
20 | SupplementTypes[supplementType] = supplementPrice;
21 | }
22 |
23 | public double Price()
24 | {
25 | return BasePrice + SupplementTypes.Sum(x => x.Value);
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/java/pom.xml:
--------------------------------------------------------------------------------
1 |
2 | 4.0.0
3 | katas-java
4 | beverages_prices
5 | 0.0.1-SNAPSHOT
6 |
7 |
8 | UTF-8
9 | 1.8
10 | 1.8
11 |
12 |
13 |
14 |
15 | org.hamcrest
16 | hamcrest-all
17 | 1.3
18 |
19 |
20 |
21 | junit
22 | junit
23 | 4.12
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/scala/src/test/scala/BeveragesPricingTest.scala:
--------------------------------------------------------------------------------
1 | import org.scalatest.FunSuite
2 | import org.scalatest.Matchers._
3 |
4 |
5 | class BeveragesPricingTest extends FunSuite {
6 |
7 | test("computes coffee price"){
8 | val coffee = new Coffee
9 | coffee.price() should be (1.20 +- 0.0001)
10 | }
11 |
12 | test("computes tea price"){
13 | val tea = new Tea
14 | tea.price() should be (1.50 +- 0.0001)
15 | }
16 |
17 | test("computes hot chocolate price"){
18 | val hotChocolate = new HotChocolate
19 | hotChocolate.price() should be (1.45 +- 0.0001)
20 | }
21 |
22 | test("computes tea with milk price"){
23 | val teaWithMilk = new TeaWithMilk
24 | teaWithMilk.price() should be (1.60 +- 0.0001)
25 | }
26 |
27 | test("computes coffee with milk price"){
28 | val coffeeWithMilk = new CoffeeWithMilk
29 | coffeeWithMilk.price() should be (1.30 +- 0.0001)
30 | }
31 |
32 | test("computes coffee with milk and cream price"){
33 | val coffeeWithMilkAndCream = new CoffeeWithMilkAndCream
34 | coffeeWithMilkAndCream.price() should be (1.45 +- 0.0001)
35 | }
36 |
37 | test("computes hot chocolate with cream price"){
38 | val hotChocolateWithCream = new HotChocolateWithCream
39 | hotChocolateWithCream.price() should be (1.60 +- 0.0001)
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/dotnet-core/Beverages.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Beverages", "Beverages\Beverages.csproj", "{BC309905-F680-4F17-8C19-A44B9D3C6CA7}"
5 | EndProject
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Beverages.Tests", "Beverages.Test\Beverages.Tests.csproj", "{672B0662-6E36-4C44-8A86-1FD4FCC28BD8}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {BC309905-F680-4F17-8C19-A44B9D3C6CA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {BC309905-F680-4F17-8C19-A44B9D3C6CA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {BC309905-F680-4F17-8C19-A44B9D3C6CA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {BC309905-F680-4F17-8C19-A44B9D3C6CA7}.Release|Any CPU.Build.0 = Release|Any CPU
18 | {672B0662-6E36-4C44-8A86-1FD4FCC28BD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
19 | {672B0662-6E36-4C44-8A86-1FD4FCC28BD8}.Debug|Any CPU.Build.0 = Debug|Any CPU
20 | {672B0662-6E36-4C44-8A86-1FD4FCC28BD8}.Release|Any CPU.ActiveCfg = Release|Any CPU
21 | {672B0662-6E36-4C44-8A86-1FD4FCC28BD8}.Release|Any CPU.Build.0 = Release|Any CPU
22 | EndGlobalSection
23 | EndGlobal
24 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-decorator/Beverages.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Beverages", "Beverages\Beverages.csproj", "{BC309905-F680-4F17-8C19-A44B9D3C6CA7}"
5 | EndProject
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Beverages.Tests", "Beverages.Test\Beverages.Tests.csproj", "{672B0662-6E36-4C44-8A86-1FD4FCC28BD8}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {BC309905-F680-4F17-8C19-A44B9D3C6CA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {BC309905-F680-4F17-8C19-A44B9D3C6CA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {BC309905-F680-4F17-8C19-A44B9D3C6CA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {BC309905-F680-4F17-8C19-A44B9D3C6CA7}.Release|Any CPU.Build.0 = Release|Any CPU
18 | {672B0662-6E36-4C44-8A86-1FD4FCC28BD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
19 | {672B0662-6E36-4C44-8A86-1FD4FCC28BD8}.Debug|Any CPU.Build.0 = Debug|Any CPU
20 | {672B0662-6E36-4C44-8A86-1FD4FCC28BD8}.Release|Any CPU.ActiveCfg = Release|Any CPU
21 | {672B0662-6E36-4C44-8A86-1FD4FCC28BD8}.Release|Any CPU.Build.0 = Release|Any CPU
22 | EndGlobalSection
23 | EndGlobal
24 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-composition/Beverages.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Beverages", "Beverages\Beverages.csproj", "{BC309905-F680-4F17-8C19-A44B9D3C6CA7}"
5 | EndProject
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Beverages.Tests", "Beverages.Test\Beverages.Tests.csproj", "{672B0662-6E36-4C44-8A86-1FD4FCC28BD8}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {BC309905-F680-4F17-8C19-A44B9D3C6CA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {BC309905-F680-4F17-8C19-A44B9D3C6CA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {BC309905-F680-4F17-8C19-A44B9D3C6CA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {BC309905-F680-4F17-8C19-A44B9D3C6CA7}.Release|Any CPU.Build.0 = Release|Any CPU
18 | {672B0662-6E36-4C44-8A86-1FD4FCC28BD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
19 | {672B0662-6E36-4C44-8A86-1FD4FCC28BD8}.Debug|Any CPU.Build.0 = Debug|Any CPU
20 | {672B0662-6E36-4C44-8A86-1FD4FCC28BD8}.Release|Any CPU.ActiveCfg = Release|Any CPU
21 | {672B0662-6E36-4C44-8A86-1FD4FCC28BD8}.Release|Any CPU.Build.0 = Release|Any CPU
22 | EndGlobalSection
23 | EndGlobal
24 |
--------------------------------------------------------------------------------
/dotnet-core/Beverages.Test/BeveragesPricingTest.cs:
--------------------------------------------------------------------------------
1 | using Xunit;
2 |
3 | namespace Beverages.Test
4 | {
5 | public class BeveragesPricingTest
6 | {
7 | [Fact]
8 | public void ComputesCoffeePrice()
9 | {
10 | var coffee = new Coffee();
11 | Assert.Equal(1.20, coffee.Price(), 3);
12 | }
13 |
14 | [Fact]
15 | public void ComputesTeaPrice()
16 | {
17 | var tea = new Tea();
18 | Assert.Equal(1.50, tea.Price(), 3);
19 | }
20 |
21 | [Fact]
22 | public void ComputesHotChocolatePrice()
23 | {
24 | var hotChocolate = new HotChocolate();
25 | Assert.Equal(1.45, hotChocolate.Price(), 3);
26 | }
27 |
28 | [Fact]
29 | public void ComputesTeaWithMilkPrice()
30 | {
31 | var teaWithMilk = new TeaWithMilk();
32 | Assert.Equal(1.60, teaWithMilk.Price(), 3);
33 | }
34 |
35 | [Fact]
36 | public void ComputesCoffeeWithMilkPrice()
37 | {
38 | var coffeeWithMilk = new CoffeeWithMilk();
39 | Assert.Equal(1.30, coffeeWithMilk.Price(), 3);
40 | }
41 |
42 | [Fact]
43 | public void ComputesCoffeeWithMilkAndCreamPrice()
44 | {
45 | var coffeeWithMilkAndCream = new CoffeeWithMilkAndCream();
46 | Assert.Equal(1.45, coffeeWithMilkAndCream.Price(), 3);
47 | }
48 |
49 | [Fact]
50 | public void ComputesHotChocolateWithCreamPrice()
51 | {
52 | var hotChocolateWithCream = new HotChocolateWithCream();
53 | Assert.Equal(1.60, hotChocolateWithCream.Price(), 3);
54 | }
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/java/src/test/java/unit_tests/BeveragesPricingTest.java:
--------------------------------------------------------------------------------
1 | package unit_tests;
2 |
3 | import beverages.*;
4 | import org.junit.Test;
5 |
6 | import static org.hamcrest.CoreMatchers.is;
7 | import static org.hamcrest.MatcherAssert.assertThat;
8 | import static org.hamcrest.Matchers.closeTo;
9 |
10 | public class BeveragesPricingTest {
11 | @Test
12 | public void computes_coffee_price() {
13 | Beverage coffee = new Coffee();
14 | assertThat(coffee.price(), is(closeTo(1.20, 0.001)));
15 | }
16 |
17 | @Test
18 | public void computes_tea_price() {
19 | Beverage tea = new Tea();
20 | assertThat(tea.price(), is(closeTo(1.50, 0.001)));
21 | }
22 |
23 | @Test
24 | public void computes_hot_chocolate_price() {
25 | Beverage hotChocolate = new HotChocolate();
26 | assertThat(hotChocolate.price(), is(closeTo(1.45, 0.001)));
27 | }
28 |
29 | @Test
30 | public void computes_tea_with_milk_price() {
31 | Tea teaWithMilk = new TeaWithMilk();
32 | assertThat(teaWithMilk.price(), is(closeTo(1.60, 0.001)));
33 | }
34 |
35 | @Test
36 | public void computes_coffee_with_milk_price() {
37 | Coffee coffeeWithMilk = new CoffeeWithMilk();
38 | assertThat(coffeeWithMilk.price(), is(closeTo(1.30, 0.001)));
39 | }
40 |
41 | @Test
42 | public void computes_coffee_with_milk_and_cream_price() {
43 | Coffee coffeeWithMilkAndCream = new CoffeeWithMilkAndCream();
44 | assertThat(coffeeWithMilkAndCream.price(), is(closeTo(1.45, 0.001)));
45 | }
46 |
47 | @Test
48 | public void computes_hot_chocolate_with_cream_price() {
49 | HotChocolateWithCream hotChocolateWithCream = new HotChocolateWithCream();
50 | assertThat(hotChocolateWithCream.price(), is(closeTo(1.60, 0.001)));
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-decorator/Beverages/Factories/BeverageFactory.cs:
--------------------------------------------------------------------------------
1 | using Beverages.Classes.Beverages;
2 | using Beverages.Classes.Supplements;
3 | using Beverages.Interfaces.Beverages;
4 | using static Beverages.Classes.Beverages.Drink;
5 |
6 | namespace Beverages.Factories
7 | {
8 | public class BeverageFactory
9 | {
10 |
11 | public static Beverage CreateCoffee()
12 | {
13 | return new Coffee();
14 | }
15 |
16 | public static Beverage CreateCoffeeWithCinnamon() {
17 | return new Coffee(new Cinnamon());
18 | }
19 |
20 | public static Beverage CreateCoffeeWithMilk() {
21 | return new Coffee(new Milk());
22 | }
23 |
24 | public static Beverage CreateCoffeeWithMilkAndCinnamon() {
25 | return new Coffee(new Milk(With(new Cinnamon())));
26 | }
27 |
28 | public static Beverage CreateCoffeeWithMilkAndCream() {
29 | return new Coffee(new Milk(With(new Cream())));
30 | }
31 |
32 | public static Beverage CreateCoffeeWithMilkCreamAndCinnamon() {
33 | return new Coffee(new Milk(With(new Cream(With(new Cinnamon())))));
34 | }
35 |
36 | public static Beverage CreateHotChocolate() {
37 | return new HotChocolate();
38 | }
39 |
40 | public static Beverage CreateHotChocolateWithCinnamon() {
41 | return new HotChocolate(new Cinnamon());
42 | }
43 |
44 | public static Beverage CreateHotChocolateWithCream() {
45 | return new HotChocolate(new Cream());
46 | }
47 |
48 | public static Beverage CreateHotChocolateWithCreamAndCinnamon() {
49 | return new HotChocolate(new Cream(With(new Cinnamon())));
50 | }
51 |
52 | public static Beverage CreateTea() {
53 | return new Tea();
54 | }
55 |
56 | public static Beverage CreateTeaWithCinnamon() {
57 | return new Tea(new Cinnamon());
58 | }
59 |
60 | public static Beverage CreateTeaWithMilk() {
61 | return new Tea(new Milk());
62 | }
63 |
64 | public static Beverage CreateTeaWithMilkAndCinnamon() {
65 | return new Tea(new Milk(With(new Cinnamon())));
66 | }
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Beverages pricing refactoring kata
2 |
3 | ## Objetivo
4 | Este proyecto calcula los precios de las bebidas ofrecidas en nuestra cafetería.
5 |
6 | Quisiéramos que añadieras un suplemento opcional de canela a todo el catálogo existente de bebidas.
7 | Este suplemento tendra un precio de 0.05€.
8 |
9 |
10 | ## Consejo / Pista
11 | Quizá quieras refactorizar el código primero.
12 |
13 | ## Proyectos base
14 |
15 | El repositorio contiene dos proyectos base sobre los que se puede realizar la kata (uno en Java y otro en .NET Core con C#).
16 | Además se proporcionan otras plantillas en otros lenguajes. Animamos a quien quiera colaborar con una plantilla que no dude en hacerlo.
17 |
18 | ### .NET Core
19 |
20 | El proyecto esta realizado en .NET Core 2.2, por lo que necesitarás tener instalado el SDK correspondiente ([descarga](https://dotnet.microsoft.com/download)). No obstante, puedes usar otra versión de .NET Core si lo deseas.
21 |
22 | La solución consta de dos proyectos:
23 | - `Beverages`: proyecto de libreria con las clases principales.
24 | - `Beverages.Tests`: proyecto con test unitarios sobre las clases del proyecto `Beverages`. Para los test se utiliza xUnit.
25 |
26 |
27 | Para ejecutar los test, basta con ejecutar en consola el comando `dotnet test` en la ruta de la solución.
28 |
29 | La solución se puede abrir con los IDE habituales.
30 |
31 |
32 | ### Java
33 |
34 | El proyecto esta realizado en Java 1.8 ([descarga](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)) con Maven ([descarga](https://maven.apache.org/download.cgi)), por lo que necesitarás tener instalada la versión de Java correspondiente y Maven en tu equipo.
35 |
36 | El proyecto consta de dos paquetes:
37 | - `Package beverages`: contiene las clases principales.
38 |
39 | - `Package unit_tests`: contiene los test unitarios sobre las clases del paquete anterior. Para los test se utiliza JUnit.
40 |
41 | Para ejecutar los test, basta con ejecutar en consola el comando `mvn test` en la ruta donde se ubica el fichero `pom.xml`.
42 |
43 | El proyecto se puede abrir con los IDE habituales.
44 |
45 |
46 | ### Otros lenguajes
47 |
48 | Existen plantillas proporcionadas por colaboradores en otro lenguajes como Scala, con las que también podeís realizar la kata.
49 | No dudeis en abrir una PR si quereis contribuir con plantillas en otros lenguajes.
50 |
51 | ## Soluciones
52 |
53 | En el repositorio hemos habilitado una carpeta `solutions` en las que podeís aportar vuestras soluciones que hayáis implementado en la kata y asi compartir y discutir diferentes aproximaciones/soluciones.
54 |
55 | Cualquiera puede clonar el repositorio, crear una nueva carpeta con su solución dentro de la carpeta correspondiente (`dotnet-core`, `java`, `scala` u otra si os atreveis con otro lenguaje 😜) y posteriormente abrir una PR contra este repositorio. Os animamos a subir vuestra solución o comentar las soluciones de otros.
56 |
57 | ***Nota**: es importante que cada solución este en una carpeta nueva y con un nombre no existente todavía.*
58 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-composition/Beverages/Factories/BeverageFactory.cs:
--------------------------------------------------------------------------------
1 | using Beverages.Enums;
2 |
3 | namespace Beverages.Factories
4 | {
5 | public class BeverageFactory
6 | {
7 |
8 | public static Beverage CreateCoffee()
9 | {
10 | return new Beverage(1.2);
11 | }
12 |
13 | public static Beverage CreateCoffeeWithCinnamon()
14 | {
15 | var beverage = new Beverage(1.2);
16 | beverage.AddSupplementType(SupplementType.Cinnamon, 0.05);
17 | return beverage;
18 | }
19 |
20 | public static Beverage CreateCoffeeWithMilk()
21 | {
22 | var beverage = new Beverage(1.2);
23 | beverage.AddSupplementType(SupplementType.Milk, 0.10);
24 | return beverage;
25 | }
26 |
27 | public static Beverage CreateCoffeeWithMilkAndCinnamon()
28 | {
29 | var beverage = new Beverage(1.2);
30 | beverage.AddSupplementType(SupplementType.Milk, 0.10);
31 | beverage.AddSupplementType(SupplementType.Cinnamon, 0.05);
32 | return beverage;
33 | }
34 |
35 | public static Beverage CreateCoffeeWithMilkAndCream()
36 | {
37 | var beverage = new Beverage(1.2);
38 | beverage.AddSupplementType(SupplementType.Milk, 0.10);
39 | beverage.AddSupplementType(SupplementType.Cream, 0.15);
40 | return beverage;
41 | }
42 |
43 | public static Beverage CreateCoffeeWithMilkCreamAndCinnamon()
44 | {
45 | var beverage = new Beverage(1.2);
46 | beverage.AddSupplementType(SupplementType.Milk, 0.10);
47 | beverage.AddSupplementType(SupplementType.Cream, 0.15);
48 | beverage.AddSupplementType(SupplementType.Cinnamon, 0.05);
49 | return beverage;
50 | }
51 |
52 | public static Beverage CreateHotChocolate()
53 | {
54 | return new Beverage(1.45);
55 | }
56 |
57 | public static Beverage CreateHotChocolateWithCinnamon()
58 | {
59 | var beverage = new Beverage(1.45);
60 | beverage.AddSupplementType(SupplementType.Cinnamon, 0.05);
61 | return beverage;
62 | }
63 |
64 | public static Beverage CreateHotChocolateWithCream()
65 | {
66 | var beverage = new Beverage(1.45);
67 | beverage.AddSupplementType(SupplementType.Cream, 0.15);
68 | return beverage;
69 | }
70 |
71 | public static Beverage CreateHotChocolateWithCreamAndCinnamon()
72 | {
73 | var beverage = new Beverage(1.45);
74 | beverage.AddSupplementType(SupplementType.Cream, 0.15);
75 | beverage.AddSupplementType(SupplementType.Cinnamon, 0.05);
76 | return beverage;
77 | }
78 |
79 | public static Beverage CreateTea()
80 | {
81 | return new Beverage(1.5);
82 | }
83 |
84 | public static Beverage CreateTeaWithCinnamon()
85 | {
86 | var beverage = new Beverage(1.5);
87 | beverage.AddSupplementType(SupplementType.Cinnamon, 0.05);
88 | return beverage;
89 | }
90 |
91 | public static Beverage CreateTeaWithMilk()
92 | {
93 | var beverage = new Beverage(1.5);
94 | beverage.AddSupplementType(SupplementType.Milk, 0.10);
95 | return beverage;
96 | }
97 |
98 | public static Beverage CreateTeaWithMilkAndCinnamon()
99 | {
100 | var beverage = new Beverage(1.5);
101 | beverage.AddSupplementType(SupplementType.Milk, 0.10);
102 | beverage.AddSupplementType(SupplementType.Cinnamon, 0.05);
103 | return beverage;
104 | }
105 | }
106 | }
107 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-decorator/Beverages.Test/BeveragesPricingTest.cs:
--------------------------------------------------------------------------------
1 | using Beverages.Factories;
2 | using Xunit;
3 |
4 | namespace Beverages.Test
5 | {
6 | public class BeveragesPricingTest
7 | {
8 | [Fact]
9 | public void ComputesCoffeePrice()
10 | {
11 | var coffee = BeverageFactory.CreateCoffee();
12 | Assert.Equal(1.20, coffee.Price(), 3);
13 | }
14 |
15 | [Fact]
16 | public void ComputesTeaPrice()
17 | {
18 | var tea = BeverageFactory.CreateTea();
19 | Assert.Equal(1.50, tea.Price(), 3);
20 | }
21 |
22 | [Fact]
23 | public void ComputesHotChocolatePrice()
24 | {
25 | var hotChocolate = BeverageFactory.CreateHotChocolate();
26 | Assert.Equal(1.45, hotChocolate.Price(), 3);
27 | }
28 |
29 | [Fact]
30 | public void ComputesTeaWithMilkPrice()
31 | {
32 | var teaWithMilk = BeverageFactory.CreateTeaWithMilk();
33 | Assert.Equal(1.60, teaWithMilk.Price(), 3);
34 | }
35 |
36 | [Fact]
37 | public void ComputesCoffeeWithMilkPrice()
38 | {
39 | var coffeeWithMilk = BeverageFactory.CreateCoffeeWithMilk();
40 | Assert.Equal(1.30, coffeeWithMilk.Price(), 3);
41 | }
42 |
43 | [Fact]
44 | public void ComputesCoffeeWithMilkAndCreamPrice()
45 | {
46 | var coffeeWithMilkAndCream =
47 | BeverageFactory.CreateCoffeeWithMilkAndCream();
48 | Assert.Equal(1.45, coffeeWithMilkAndCream.Price(), 3);
49 | }
50 |
51 | [Fact]
52 | public void ComputesHotChocolateWithCreamPrice()
53 | {
54 | var hotChocolateWithCream =
55 | BeverageFactory.CreateHotChocolateWithCream();
56 | Assert.Equal(1.60, hotChocolateWithCream.Price(), 3);
57 | }
58 |
59 | [Fact]
60 | public void ComputesCoffeeWithCinnamonPrice()
61 | {
62 | var coffee = BeverageFactory.CreateCoffeeWithCinnamon();
63 | Assert.Equal(1.25, coffee.Price(), 3);
64 | }
65 |
66 | [Fact]
67 | public void ComputesTeaWithCinnamonPrice()
68 | {
69 | var tea = BeverageFactory.CreateTeaWithCinnamon();
70 | Assert.Equal(1.55, tea.Price(), 3);
71 | }
72 |
73 | [Fact]
74 | public void ComputesHotChocolateWithCinnamonPrice()
75 | {
76 | var hotChocolate =
77 | BeverageFactory.CreateHotChocolateWithCinnamon();
78 | Assert.Equal(1.50, hotChocolate.Price(), 3);
79 | }
80 |
81 | [Fact]
82 | public void ComputesTeaWithMilkAndCinnamonPrice()
83 | {
84 | var teaWithMilk =
85 | BeverageFactory.CreateTeaWithMilkAndCinnamon();
86 | Assert.Equal(1.65, teaWithMilk.Price(), 3);
87 | }
88 |
89 | [Fact]
90 | public void ComputesCoffeeWithMilkAndCinnamonPrice()
91 | {
92 | var coffeeWithMilk =
93 | BeverageFactory.CreateCoffeeWithMilkAndCinnamon();
94 | Assert.Equal(1.35, coffeeWithMilk.Price(), 3);
95 | }
96 |
97 | [Fact]
98 | public void ComputesCoffeeWithMilkCreamAndCinnamonPrice()
99 | {
100 | var coffeeWithMilkAndCream =
101 | BeverageFactory.CreateCoffeeWithMilkCreamAndCinnamon();
102 | Assert.Equal(1.50, coffeeWithMilkAndCream.Price(), 3);
103 | }
104 |
105 | [Fact]
106 | public void ComputesHotChocolateWithCreamAndCinnamonPrice()
107 | {
108 | var hotChocolateWithCream =
109 | BeverageFactory.CreateHotChocolateWithCreamAndCinnamon();
110 | Assert.Equal(1.65, hotChocolateWithCream.Price(), 3);
111 | }
112 | }
113 | }
114 |
--------------------------------------------------------------------------------
/solutions/dotnet-core/piraces-composition/Beverages.Test/BeveragesPricingTest.cs:
--------------------------------------------------------------------------------
1 | using Beverages.Factories;
2 | using Xunit;
3 |
4 | namespace Beverages.Test
5 | {
6 | public class BeveragesPricingTest
7 | {
8 | [Fact]
9 | public void ComputesCoffeePrice()
10 | {
11 | var coffee = BeverageFactory.CreateCoffee();
12 | Assert.Equal(1.20, coffee.Price(), 3);
13 | }
14 |
15 | [Fact]
16 | public void ComputesTeaPrice()
17 | {
18 | var tea = BeverageFactory.CreateTea();
19 | Assert.Equal(1.50, tea.Price(), 3);
20 | }
21 |
22 | [Fact]
23 | public void ComputesHotChocolatePrice()
24 | {
25 | var hotChocolate = BeverageFactory.CreateHotChocolate();
26 | Assert.Equal(1.45, hotChocolate.Price(), 3);
27 | }
28 |
29 | [Fact]
30 | public void ComputesTeaWithMilkPrice()
31 | {
32 | var teaWithMilk = BeverageFactory.CreateTeaWithMilk();
33 | Assert.Equal(1.60, teaWithMilk.Price(), 3);
34 | }
35 |
36 | [Fact]
37 | public void ComputesCoffeeWithMilkPrice()
38 | {
39 | var coffeeWithMilk = BeverageFactory.CreateCoffeeWithMilk();
40 | Assert.Equal(1.30, coffeeWithMilk.Price(), 3);
41 | }
42 |
43 | [Fact]
44 | public void ComputesCoffeeWithMilkAndCreamPrice()
45 | {
46 | var coffeeWithMilkAndCream =
47 | BeverageFactory.CreateCoffeeWithMilkAndCream();
48 | Assert.Equal(1.45, coffeeWithMilkAndCream.Price(), 3);
49 | }
50 |
51 | [Fact]
52 | public void ComputesHotChocolateWithCreamPrice()
53 | {
54 | var hotChocolateWithCream =
55 | BeverageFactory.CreateHotChocolateWithCream();
56 | Assert.Equal(1.60, hotChocolateWithCream.Price(), 3);
57 | }
58 |
59 | [Fact]
60 | public void ComputesCoffeeWithCinnamonPrice()
61 | {
62 | var coffee = BeverageFactory.CreateCoffeeWithCinnamon();
63 | Assert.Equal(1.25, coffee.Price(), 3);
64 | }
65 |
66 | [Fact]
67 | public void ComputesTeaWithCinnamonPrice()
68 | {
69 | var tea = BeverageFactory.CreateTeaWithCinnamon();
70 | Assert.Equal(1.55, tea.Price(), 3);
71 | }
72 |
73 | [Fact]
74 | public void ComputesHotChocolateWithCinnamonPrice()
75 | {
76 | var hotChocolate =
77 | BeverageFactory.CreateHotChocolateWithCinnamon();
78 | Assert.Equal(1.50, hotChocolate.Price(), 3);
79 | }
80 |
81 | [Fact]
82 | public void ComputesTeaWithMilkAndCinnamonPrice()
83 | {
84 | var teaWithMilk =
85 | BeverageFactory.CreateTeaWithMilkAndCinnamon();
86 | Assert.Equal(1.65, teaWithMilk.Price(), 3);
87 | }
88 |
89 | [Fact]
90 | public void ComputesCoffeeWithMilkAndCinnamonPrice()
91 | {
92 | var coffeeWithMilk =
93 | BeverageFactory.CreateCoffeeWithMilkAndCinnamon();
94 | Assert.Equal(1.35, coffeeWithMilk.Price(), 3);
95 | }
96 |
97 | [Fact]
98 | public void ComputesCoffeeWithMilkCreamAndCinnamonPrice()
99 | {
100 | var coffeeWithMilkAndCream =
101 | BeverageFactory.CreateCoffeeWithMilkCreamAndCinnamon();
102 | Assert.Equal(1.50, coffeeWithMilkAndCream.Price(), 3);
103 | }
104 |
105 | [Fact]
106 | public void ComputesHotChocolateWithCreamAndCinnamonPrice()
107 | {
108 | var hotChocolateWithCream =
109 | BeverageFactory.CreateHotChocolateWithCreamAndCinnamon();
110 | Assert.Equal(1.65, hotChocolateWithCream.Price(), 3);
111 | }
112 | }
113 | }
114 |
--------------------------------------------------------------------------------