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
Binary file added .coverage
Binary file not shown.
5 changes: 5 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions .idea/Diplom_1.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/inspectionProfiles/profiles_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file added __pycache__/test_bun.cpython-313-pytest-9.1.0.pyc
Binary file not shown.
Binary file not shown.
41 changes: 0 additions & 41 deletions praktikum.py

This file was deleted.

File renamed without changes.
Binary file added praktikum/__pycache__/__init__.cpython-313.pyc
Binary file not shown.
Binary file added praktikum/__pycache__/bun.cpython-313.pyc
Binary file not shown.
Binary file added praktikum/__pycache__/burger.cpython-313.pyc
Binary file not shown.
Binary file added praktikum/__pycache__/database.cpython-313.pyc
Binary file not shown.
Binary file added praktikum/__pycache__/ingredient.cpython-313.pyc
Binary file not shown.
Binary file not shown.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Binary file added requirements.txt
Binary file not shown.
Empty file added tests/__init__.py
Empty file.
Binary file added tests/__pycache__/__init__.cpython-313.pyc
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
34 changes: 34 additions & 0 deletions tests/bun_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import pytest
from praktikum.bun import Bun


class TestBun:

@pytest.mark.parametrize(
"name, price",
[
("Краторная булка", 300),
("Флюоресцентная булка", 999.99),
("", 150), # Граничное значение: пустое имя
("Булка с кунжутом", 150)
]
)
# 1. Атомарный тест метода получения названия булочки
def test_bun_get_name_returns_correct_value(self, name, price):
bun = Bun(name, price)
assert bun.get_name() == name

@pytest.mark.parametrize(
"name, price",
[
("Краторная булка", 300),
("Флюоресцентная булка", 999.99),
("Обычная булка", 0), # Граничное значение: нулевая цена
("Булка с кунжутом", 150)
]
)
# 2. Атомарный тест метода получения цены булочки
def test_bun_get_price_returns_correct_value(self, name, price):
bun = Bun(name, price)
assert bun.get_price() == price

84 changes: 84 additions & 0 deletions tests/burger_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
from unittest.mock import Mock
from praktikum.burger import Burger


class TestBurger:

# 1. Тест установки булочки
def test_set_buns_sets_correct_bun(self):
burger = Burger()
mock_bun = Mock()

burger.set_buns(mock_bun)
assert burger.bun == mock_bun

# 2. Тест добавления ингредиента
def test_add_ingredient_adds_to_list(self):
burger = Burger()
mock_ingredient = Mock()

burger.add_ingredient(mock_ingredient)
assert mock_ingredient in burger.ingredients
assert len(burger.ingredients) == 1

# 3. Тест удаления ингредиента по индексу
def test_remove_ingredient_removes_from_list(self):
burger = Burger()
mock_ingredient = Mock()

burger.add_ingredient(mock_ingredient)
burger.remove_ingredient(0)
assert mock_ingredient not in burger.ingredients
assert len(burger.ingredients) == 0

# 4. Тест перемещения ингредиентов местами в списке
def test_move_ingredient_changes_position(self):
burger = Burger()
mock_ing_1 = Mock()
mock_ing_2 = Mock()

burger.add_ingredient(mock_ing_1)
burger.add_ingredient(mock_ing_2)

# Перемещаем первый ингредиент на позицию второго
burger.move_ingredient(0, 1)
assert burger.ingredients[0] == mock_ing_2
assert burger.ingredients[1] == mock_ing_1

# 5. Тест расчета стоимости (Используем моки с возвращаемыми значениями)
def test_get_price_calculates_total_cost(self):
burger = Burger()

mock_bun = Mock()
mock_bun.get_price.return_value = 100.0 # Цена булки 100

mock_ingredient = Mock()
mock_ingredient.get_price.return_value = 50.0 # Цена ингредиента 50

burger.set_buns(mock_bun)
burger.add_ingredient(mock_ingredient)

# Расчет: (100 * 2) + 50 = 250
assert burger.get_price() == 250.0

# 6. Тест печати чека (Мокаем методы булки и ингредиента для генерации текста)
def test_get_receipt_returns_formatted_string(self):
burger = Burger()

mock_bun = Mock()
mock_bun.get_name.return_value = "Марсианская булка"
mock_bun.get_price.return_value = 100.0

mock_ingredient = Mock()
mock_ingredient.get_type.return_value = "SAUCE"
mock_ingredient.get_name.return_value = "Chili"
mock_ingredient.get_price.return_value = 50.0

burger.set_buns(mock_bun)
burger.add_ingredient(mock_ingredient)

receipt = burger.get_receipt()

assert "(==== Марсианская булка ====)" in receipt
assert "= sauce Chili =" in receipt
assert "Price: 250.0" in receipt
30 changes: 30 additions & 0 deletions tests/database_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from praktikum.database import Database

class TestDatabase:

# 1. тест: проверка точного количества булочек в базе данных
def test_available_buns_returns_correct_count(self):
database = Database()
buns = database.available_buns()
assert len(buns) == 3

# 2. тест: проверка содержимого списка булочек (названия)
def test_available_buns_contains_correct_names(self):
database = Database()
buns = database.available_buns()
assert buns[0].get_name() == "black bun"
assert buns[1].get_name() == "white bun"
assert buns[2].get_name() == "red bun"

# 3. тест: проверка точного количества ингредиентов в базе данных
def test_available_ingredients_returns_correct_count(self):
database = Database()
ingredients = database.available_ingredients()
assert len(ingredients) == 6

# 4. тест: проверка точечного содержимого списка ингредиентов
def test_available_ingredients_contains_correct_names(self):
database = Database()
ingredients = database.available_ingredients()
assert ingredients[0].get_name() == "hot sauce"
assert ingredients[-1].get_name() == "sausage"
43 changes: 43 additions & 0 deletions tests/ingredient_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import pytest
from praktikum.ingredient import Ingredient
from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING

class TestIngredient:

@pytest.mark.parametrize(
"ingredient_type, name, price",
[
(INGREDIENT_TYPE_SAUCE, "Chili Sauce", 100.0),
(INGREDIENT_TYPE_FILLING, "Cutlet", 250.50)
]
)
# 1. Проверяем только тип ингредиента
def test_ingredient_get_type_returns_correct_value(self, ingredient_type, name, price):
ingredient = Ingredient(ingredient_type, name, price)
assert ingredient.get_type() == ingredient_type

@pytest.mark.parametrize(
"ingredient_type, name, price",
[
(INGREDIENT_TYPE_SAUCE, "Chili Sauce", 100.0),
(INGREDIENT_TYPE_FILLING, "Cutlet", 250.50)
]
)
# 2. Проверяем только имя ингредиента
def test_ingredient_get_name_returns_correct_value(self, ingredient_type, name, price):
ingredient = Ingredient(ingredient_type, name, price)
assert ingredient.get_name() == name

@pytest.mark.parametrize(
"ingredient_type, name, price",
[
(INGREDIENT_TYPE_SAUCE, "Chili Sauce", 100.0),
(INGREDIENT_TYPE_FILLING, "Cutlet", 250.50),
(INGREDIENT_TYPE_SAUCE, "Sour cream", 0.0) # Граничное значение
]
)
# 3. Проверяем только цену ингредиента
def test_ingredient_get_price_returns_correct_value(self, ingredient_type, name, price):
ingredient = Ingredient(ingredient_type, name, price)
assert ingredient.get_price() == price