diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index 33b9093e..f89f38e6 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -34,13 +34,16 @@ class ISourceOfIngredients enum Cup { - Normal, - Big + Normal = 100, + Big = 140 }; enum Coffee { - Americano + Americano, + Cappuccino, + Latte, + Marochino }; class MockSourceOfIngredients : public ISourceOfIngredients @@ -65,10 +68,71 @@ class CoffeeMachine } void CreateCoffee(const Cup cup, const Coffee coffee) { - m_source.AddCoffee(0); - m_source.SetCupSize(0); - m_source.AddWater(0, 0); + int cupSize = static_cast(cup); + + switch(coffee) + { + case Coffee::Americano: + { + CreateAmericano(cupSize); + break; + } + case Coffee::Cappuccino: + { + CreateCappuccino(cupSize); + break; + } + case Coffee::Latte: + { + CreateLatte(cupSize); + break; + } + case Coffee::Marochino: + { + CreateMarochino(cupSize); + break; + } + } } + +private: + void CreateAmericano(int cupSize) + { + m_source.AddCoffee(cupSize / 2); + m_source.SetCupSize(cupSize); + m_source.AddWater(cupSize / 2, 60); + } + + void CreateCappuccino(int cupSize) + { + int onePart = cupSize / 3; + + m_source.SetCupSize(cupSize); + m_source.AddMilk(onePart); + m_source.AddCoffee(onePart); + m_source.AddMilkFoam(cupSize - 2 * onePart); + } + + void CreateLatte(int cupSize) + { + int onePart = cupSize / 4; + + m_source.SetCupSize(cupSize); + m_source.AddMilk(onePart); + m_source.AddCoffee(2 * onePart); + m_source.AddMilkFoam(cupSize - 3 * onePart); + } + + void CreateMarochino(int cupSize) + { + int onePart = cupSize / 4; + + m_source.SetCupSize(cupSize); + m_source.AddChocolate(onePart); + m_source.AddCoffee(onePart); + m_source.AddMilkFoam(onePart); + } + private: ISourceOfIngredients& m_source; }; @@ -93,27 +157,104 @@ TEST(CoffeeMachine, CoffemachineIsHere) CoffeeMachine cm(si); } -TEST(CoffeeMachine, CallsImportantThings) +TEST(CoffeeMachine, Americano) { MockSourceOfIngredients si; CoffeeMachine cm(si); - EXPECT_CALL(si, AddCoffee(::testing::_)).Times(1); - EXPECT_CALL(si, SetCupSize(::testing::_)).Times(1); - EXPECT_CALL(si, AddWater(::testing::_, ::testing::_)).Times(1); + EXPECT_CALL(si, AddCoffee(50)).Times(1); + EXPECT_CALL(si, SetCupSize(100)).Times(1); + EXPECT_CALL(si, AddWater(50, 60)).Times(1); cm.CreateCoffee(Cup::Normal, Coffee::Americano); } -//- americano: water & coffee 1:3 Water temp 60C -TEST(CoffeeMachine, Americano) +TEST(CoffeeMachine, LargeAmericano) +{ + MockSourceOfIngredients si; + CoffeeMachine cm(si); + + EXPECT_CALL(si, AddCoffee(70)).Times(1); + EXPECT_CALL(si, SetCupSize(140)).Times(1); + EXPECT_CALL(si, AddWater(70, 60)).Times(1); + + cm.CreateCoffee(Cup::Big, Coffee::Americano); +} + +TEST(CoffeeMachine, Cappuccino) { MockSourceOfIngredients si; CoffeeMachine cm(si); - EXPECT_CALL(si, AddCoffee(75)).Times(1); EXPECT_CALL(si, SetCupSize(100)).Times(1); - EXPECT_CALL(si, AddWater(25, 60)).Times(1); + EXPECT_CALL(si, AddMilk(33)).Times(1); + EXPECT_CALL(si, AddCoffee(33)).Times(1); + EXPECT_CALL(si, AddMilkFoam(34)).Times(1); - cm.CreateCoffee(Cup::Normal, Coffee::Americano); + cm.CreateCoffee(Cup::Normal, Coffee::Cappuccino); +} + +TEST(CoffeeMachine, LargeCappuccino) +{ + MockSourceOfIngredients si; + CoffeeMachine cm(si); + + EXPECT_CALL(si, SetCupSize(140)).Times(1); + EXPECT_CALL(si, AddMilk(46)).Times(1); + EXPECT_CALL(si, AddCoffee(46)).Times(1); + EXPECT_CALL(si, AddMilkFoam(48)).Times(1); + + cm.CreateCoffee(Cup::Big, Coffee::Cappuccino); +} + +TEST(CoffeeMachine, Latte) +{ + MockSourceOfIngredients si; + CoffeeMachine cm(si); + + EXPECT_CALL(si, SetCupSize(100)).Times(1); + EXPECT_CALL(si, AddMilk(25)).Times(1); + EXPECT_CALL(si, AddCoffee(50)).Times(1); + EXPECT_CALL(si, AddMilkFoam(25)).Times(1); + + cm.CreateCoffee(Cup::Normal, Coffee::Latte); +} + +TEST(CoffeeMachine, LargeLatte) +{ + MockSourceOfIngredients si; + CoffeeMachine cm(si); + + EXPECT_CALL(si, SetCupSize(140)).Times(1); + EXPECT_CALL(si, AddMilk(35)).Times(1); + EXPECT_CALL(si, AddCoffee(70)).Times(1); + EXPECT_CALL(si, AddMilkFoam(35)).Times(1); + + cm.CreateCoffee(Cup::Big, Coffee::Latte); +} + +TEST(CoffeeMachine, Marochino) +{ + MockSourceOfIngredients si; + CoffeeMachine cm(si); + + EXPECT_CALL(si, SetCupSize(100)).Times(1); + EXPECT_CALL(si, AddChocolate(25)).Times(1); + EXPECT_CALL(si, AddCoffee(25)).Times(1); + EXPECT_CALL(si, AddMilkFoam(25)).Times(1); + + cm.CreateCoffee(Cup::Normal, Coffee::Marochino); +} + +TEST(CoffeeMachine, LargeMarochino) +{ + MockSourceOfIngredients si; + CoffeeMachine cm(si); + + EXPECT_CALL(si, SetCupSize(140)).Times(1); + EXPECT_CALL(si, AddChocolate(35)).Times(1); + EXPECT_CALL(si, AddCoffee(35)).Times(1); + EXPECT_CALL(si, AddMilkFoam(35)).Times(1); + + cm.CreateCoffee(Cup::Big, Coffee::Marochino); }