From ff338c3c7f8ae61c4eb2186b549f99eb373938a0 Mon Sep 17 00:00:00 2001 From: Pavel Andreev Date: Sun, 2 Aug 2026 16:22:15 +0300 Subject: [PATCH] Add unit tests for Burger --- .gitignore | 74 +++++++++++++ __init__.py => praktikum/__init__.py | 0 bun.py => praktikum/bun.py | 0 burger.py => praktikum/burger.py | 0 database.py => praktikum/database.py | 0 ingredient.py => praktikum/ingredient.py | 0 .../ingredient_types.py | 0 praktikum.py => praktikum/praktikum.py | 0 requirements.txt | 2 + tests/test_burger.py | 101 ++++++++++++++++++ 10 files changed, 177 insertions(+) create mode 100644 .gitignore rename __init__.py => praktikum/__init__.py (100%) rename bun.py => praktikum/bun.py (100%) rename burger.py => praktikum/burger.py (100%) rename database.py => praktikum/database.py (100%) rename ingredient.py => praktikum/ingredient.py (100%) rename ingredient_types.py => praktikum/ingredient_types.py (100%) rename praktikum.py => praktikum/praktikum.py (100%) create mode 100644 requirements.txt create mode 100644 tests/test_burger.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..0f2435770 --- /dev/null +++ b/.gitignore @@ -0,0 +1,74 @@ +# Виртуальное окружение +venv/ +env/ +.venv/ +ENV/ +env.bak/ +venv.bak/ + +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +*.pyc + +# Логи и отчеты +*.log +*.xml +*.html +*.xml +# allure-results/ +# allure-report/ +.pytest_cache/ +.tox/ +.coverage +htmlcov/ + +# Настройки IDE +.idea/ +.vscode/ +*.swp +*.swo +*~ +.DS_Store +*.iml +.settings/ +.project +.classpath + +# Файлы с секретами +.env +.secrets +secrets.py +config_local.py +config_local.json + +# Драйверы браузеров +chromedriver.exe +chromedriver +geckodriver.exe +geckodriver +msedgedriver.exe +msedgedriver + +# OS файлы +.DS_Store +Thumbs.db +desktop.ini + +# Файлы проекта +*.db +*.sqlite +*.sqlite3 + +# Временные файлы +*.tmp +*.temp +*.bak +*.backup + +# Файлы отчетов +pytest*.txt +output.json \ No newline at end of file diff --git a/__init__.py b/praktikum/__init__.py similarity index 100% rename from __init__.py rename to praktikum/__init__.py diff --git a/bun.py b/praktikum/bun.py similarity index 100% rename from bun.py rename to praktikum/bun.py diff --git a/burger.py b/praktikum/burger.py similarity index 100% rename from burger.py rename to praktikum/burger.py diff --git a/database.py b/praktikum/database.py similarity index 100% rename from database.py rename to praktikum/database.py diff --git a/ingredient.py b/praktikum/ingredient.py similarity index 100% rename from ingredient.py rename to praktikum/ingredient.py diff --git a/ingredient_types.py b/praktikum/ingredient_types.py similarity index 100% rename from ingredient_types.py rename to praktikum/ingredient_types.py diff --git a/praktikum.py b/praktikum/praktikum.py similarity index 100% rename from praktikum.py rename to praktikum/praktikum.py diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..65a06064d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pytest==9.0.3 +pytest-cov==7.1.0 \ No newline at end of file diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..8dfa2256b --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,101 @@ +import pytest + +from unittest.mock import MagicMock +from praktikum.burger import Burger + +def test_simple(): + assert True + +class TestBurger: + + def test_initialization(self): + burger = Burger() + + assert burger.bun is None + assert burger.ingredients == [] + + def test_set_buns(self): + burger = Burger() + bun = MagicMock() + burger.set_buns(bun) + assert burger.bun == bun + + def test_add_ingredient(self): + burger = Burger() + ingredient = MagicMock() + burger.add_ingredient(ingredient) + assert burger.ingredients == [ingredient] + + def test_remove_ingredient(self): + burger = Burger() + ingredient = MagicMock() + + burger.add_ingredient(ingredient) + burger.remove_ingredient(0) + + assert burger.ingredients == [] + + def test_move_ingredient(self): + burger = Burger() + ingredient1 = MagicMock() + ingredient2 = MagicMock() + + burger.add_ingredient(ingredient1) + burger.add_ingredient(ingredient2) + + burger.move_ingredient(0, 1) + + assert burger.ingredients == [ingredient2, ingredient1] + + def test_get_price(self): + burger = Burger() + + bun = MagicMock() + bun.get_price.return_value = 5.0 + + ingredient1 = MagicMock() + ingredient1.get_price.return_value = 2.0 + + ingredient2 = MagicMock() + ingredient2.get_price.return_value = 3.0 + + burger.set_buns(bun) + burger.add_ingredient(ingredient1) + burger.add_ingredient(ingredient2) + + total_price = burger.get_price() + + assert total_price == 15.0 # 5 * 2 + 2 + 3 + + def test_get_receipt(self): + burger = Burger() + + bun = MagicMock() + bun.get_name.return_value = "Bun" + bun.get_price.return_value = 5.0 + + ingredient1 = MagicMock() + ingredient1.get_name.return_value = "Ingredient 1" + ingredient1.get_type.return_value = "SAUCE" + ingredient1.get_price.return_value = 2.0 + + ingredient2 = MagicMock() + ingredient2.get_name.return_value = "Ingredient 2" + ingredient2.get_type.return_value = "FILLING" + ingredient2.get_price.return_value = 3.0 + + burger.set_buns(bun) + burger.add_ingredient(ingredient1) + burger.add_ingredient(ingredient2) + + receipt = burger.get_receipt() + + expected_receipt = ( + "(==== Bun ====)\n" + "= sauce Ingredient 1 =\n" + "= filling Ingredient 2 =\n" + "(==== Bun ====)\n\n" + "Price: 15.0" + ) + + assert receipt == expected_receipt