Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
171 changes: 156 additions & 15 deletions tdd_intro/homework/06_coffee/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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<int>(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;
};
Expand All @@ -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);
}