Skip to content
Open
Show file tree
Hide file tree
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
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.coverage
htmlcov/
.pytest_cache/
__pycache__/
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Empty file added tests/__init__.py
Empty file.
43 changes: 43 additions & 0 deletions tests/bun_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import pytest
from praktikum.bun import Bun


@pytest.mark.parametrize(
"name, price",
[
("black bun", 100),
("white bun", 80),
("sesame bun", 120),
]
)
def test_bun_constructor(name, price):
bun = Bun(name, price)

assert bun.name == name
assert bun.price == price


@pytest.mark.parametrize(
"name, price",
[
("black bun", 100),
("white bun", 80),
]
)
def test_get_name(name, price):
bun = Bun(name, price)

assert bun.get_name() == name


@pytest.mark.parametrize(
"name, price",
[
("black bun", 100),
("white bun", 80),
]
)
def test_get_price(name, price):
bun = Bun(name, price)

assert bun.get_price() == price
100 changes: 100 additions & 0 deletions tests/burger_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import pytest
from unittest.mock import Mock

from praktikum.burger import Burger


def create_mock_bun(name="black bun", price=100):
bun = Mock()
bun.get_name.return_value = name
bun.get_price.return_value = price
return bun


def create_mock_ingredient(name="cutlet", price=50, ingredient_type="filling"):
ingredient = Mock()
ingredient.get_name.return_value = name
ingredient.get_price.return_value = price
ingredient.get_type.return_value = ingredient_type
return ingredient


def test_set_buns():
burger = Burger()
bun = create_mock_bun()

burger.set_buns(bun)

assert burger.bun == bun


def test_add_ingredient():
burger = Burger()
ingredient = create_mock_ingredient()

burger.add_ingredient(ingredient)

assert ingredient in burger.ingredients


def test_remove_ingredient():
burger = Burger()
ingredient = create_mock_ingredient()
burger.add_ingredient(ingredient)

burger.remove_ingredient(0)

assert ingredient not in burger.ingredients


def test_move_ingredient():
burger = Burger()
ingredient_1 = create_mock_ingredient(name="cutlet")
ingredient_2 = create_mock_ingredient(name="cheese")

burger.add_ingredient(ingredient_1)
burger.add_ingredient(ingredient_2)

burger.move_ingredient(0, 1)

assert burger.ingredients[0] == ingredient_2
assert burger.ingredients[1] == ingredient_1


@pytest.mark.parametrize(
"ingredients, expected_price",
[
([], 200), # только булка (100 * 2)
([create_mock_ingredient(price=50)], 250),
(
[
create_mock_ingredient(price=50),
create_mock_ingredient(price=30),
],
280,
),
],
)
def test_get_price(ingredients, expected_price):
burger = Burger()
burger.set_buns(create_mock_bun(price=100))

for ingredient in ingredients:
burger.add_ingredient(ingredient)

assert burger.get_price() == expected_price


def test_get_receipt():
burger = Burger()
bun = create_mock_bun(name="black bun", price=100)
ingredient = create_mock_ingredient(name="cutlet", price=50, ingredient_type="filling")

burger.set_buns(bun)
burger.add_ingredient(ingredient)

receipt = burger.get_receipt()

assert "(==== black bun ====)" in receipt
assert "= filling cutlet =" in receipt
assert "Price: 250" in receipt
35 changes: 35 additions & 0 deletions tests/database_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import pytest
from unittest.mock import patch

from praktikum.database import Database
from praktikum.bun import Bun
from praktikum.ingredient import Ingredient


def test_available_buns_returns_list_of_buns():
database = Database()

buns = database.available_buns()

assert isinstance(buns, list)
assert len(buns) == 3
assert all(isinstance(bun, Bun) for bun in buns)


def test_available_ingredients_returns_list_of_ingredients():
database = Database()

ingredients = database.available_ingredients()

assert isinstance(ingredients, list)
assert len(ingredients) == 6
assert all(isinstance(ingredient, Ingredient) for ingredient in ingredients)


@patch("praktikum.database.Bun")
@patch("praktikum.database.Ingredient")
def test_database_initializes_data(mock_ingredient, mock_bun):
Database()

assert mock_bun.call_count == 3
assert mock_ingredient.call_count == 6
28 changes: 28 additions & 0 deletions tests/ingredient_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import pytest
from praktikum.ingredient import Ingredient


def test_ingredient_constructor():
ingredient = Ingredient("sauce", "ketchup", 50)

assert ingredient.type == "sauce"
assert ingredient.name == "ketchup"
assert ingredient.price == 50


def test_get_price():
ingredient = Ingredient("filling", "cutlet", 100)

assert ingredient.get_price() == 100


def test_get_name():
ingredient = Ingredient("filling", "cheese", 70)

assert ingredient.get_name() == "cheese"


def test_get_type():
ingredient = Ingredient("sauce", "mustard", 30)

assert ingredient.get_type() == "sauce"