From 8f10a9a9369bcf1ac48e5e40efa321bec20f5075 Mon Sep 17 00:00:00 2001 From: NailyaQa Date: Thu, 16 Jul 2026 13:28:59 +0300 Subject: [PATCH 1/2] Add unit tests for Burger class --- .gitignore | 8 +++ coverage.txt | 17 +++++ requirements.txt | 3 + tests/test_burger.py | 145 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 173 insertions(+) create mode 100644 .gitignore create mode 100644 coverage.txt create mode 100644 requirements.txt create mode 100644 tests/test_burger.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..3203808a5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +__pycache__/ +.pytest_cache/ +.coverage + +venv/ +.idea/ +.vscode/ +.DS_Store \ No newline at end of file diff --git a/coverage.txt b/coverage.txt new file mode 100644 index 000000000..cf54eab88 --- /dev/null +++ b/coverage.txt @@ -0,0 +1,17 @@ +============================= test session starts ============================== +platform darwin -- Python 3.14.3, pytest-9.0.3, pluggy-1.6.0 +rootdir: /Users/andarzanova/Diplom/Diplom_1 +plugins: cov-7.1.0, allure-pytest-2.16.0 +collected 10 items + +tests/test_burger.py .......... [100%] + +================================ tests coverage ================================ +_______________ coverage: platform darwin, python 3.14.3-final-0 _______________ + +Name Stmts Miss Cover Missing +----------------------------------------- +burger.py 27 0 100% +----------------------------------------- +TOTAL 27 0 100% +============================== 10 passed in 0.03s ============================== diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..ded6f455f --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ + +pytest==9.1.1 +pytest-cov==7.1.0 diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..0248f12f1 --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,145 @@ +import sys +import os +import types + + +sys.path.append(os.path.dirname(os.path.dirname(__file__))) + + +import bun +import ingredient + + +praktikum = types.ModuleType("praktikum") +praktikum.bun = bun +praktikum.ingredient = ingredient + +sys.modules["praktikum"] = praktikum +sys.modules["praktikum.bun"] = bun +sys.modules["praktikum.ingredient"] = ingredient + +import pytest +from unittest.mock import Mock + + +from burger import Burger + +class TestBurger: + + def setup_method(self): + self.burger = Burger() + + + def test_init_burger(self): + assert self.burger.bun is None + assert self.burger.ingredients == [] + + + def test_set_buns(self): + bun = Mock() + + self.burger.set_buns(bun) + + assert self.burger.bun == bun + + + def test_add_ingredient(self): + ingredient = Mock() + + self.burger.add_ingredient(ingredient) + + assert self.burger.ingredients == [ingredient] + + + def test_remove_ingredient(self): + ingredient_1 = Mock() + ingredient_2 = Mock() + + self.burger.add_ingredient(ingredient_1) + self.burger.add_ingredient(ingredient_2) + + self.burger.remove_ingredient(0) + + assert self.burger.ingredients == [ingredient_2] + + + def test_move_ingredient(self): + ingredient_1 = Mock() + ingredient_2 = Mock() + ingredient_3 = Mock() + + self.burger.add_ingredient(ingredient_1) + self.burger.add_ingredient(ingredient_2) + self.burger.add_ingredient(ingredient_3) + + self.burger.move_ingredient(0, 2) + + assert self.burger.ingredients == [ + ingredient_2, + ingredient_3, + ingredient_1 + ] + + + @pytest.mark.parametrize( + "bun_price, ingredient_prices, expected_price", + [ + (100, [], 200), + (100, [50], 250), + (100, [50, 100], 350), + (200, [100, 200], 700), + ] + ) + def test_get_price( + self, + bun_price, + ingredient_prices, + expected_price + ): + bun = Mock() + bun.get_price.return_value = bun_price + + self.burger.set_buns(bun) + + for price in ingredient_prices: + ingredient = Mock() + ingredient.get_price.return_value = price + self.burger.add_ingredient(ingredient) + + assert self.burger.get_price() == expected_price + + + def test_get_receipt(self): + bun = Mock() + bun.get_name.return_value = "black bun" + bun.get_price.return_value = 100 + + + ingredient_1 = Mock() + ingredient_1.get_type.return_value = "SAUCE" + ingredient_1.get_name.return_value = "hot sauce" + ingredient_1.get_price.return_value = 50 + + + ingredient_2 = Mock() + ingredient_2.get_type.return_value = "FILLING" + ingredient_2.get_name.return_value = "cutlet" + ingredient_2.get_price.return_value = 100 + + + self.burger.set_buns(bun) + + self.burger.add_ingredient(ingredient_1) + self.burger.add_ingredient(ingredient_2) + + + receipt = self.burger.get_receipt() + + + assert "(==== black bun ====)" in receipt + assert "= sauce hot sauce =" in receipt + assert "= filling cutlet =" in receipt + assert "Price: 350" in receipt + + + \ No newline at end of file From 8a743fad95cebaf95e584537014e4691bf010e19 Mon Sep 17 00:00:00 2001 From: NailyaQa Date: Thu, 23 Jul 2026 13:12:12 +0300 Subject: [PATCH 2/2] Fix project structure and improve Burger tests --- burger.py | 4 +-- database.py | 9 ++++--- models/__init__.py | 0 bun.py => models/bun.py | 0 ingredient.py => models/ingredient.py | 0 .../ingredient_types.py | 0 pytest.ini | 2 ++ tests/test_burger.py | 25 ------------------- 8 files changed, 10 insertions(+), 30 deletions(-) create mode 100644 models/__init__.py rename bun.py => models/bun.py (100%) rename ingredient.py => models/ingredient.py (100%) rename ingredient_types.py => models/ingredient_types.py (100%) create mode 100644 pytest.ini diff --git a/burger.py b/burger.py index 2b3b6a88b..a61ee223b 100644 --- a/burger.py +++ b/burger.py @@ -1,7 +1,7 @@ from typing import List -from praktikum.bun import Bun -from praktikum.ingredient import Ingredient +from models.bun import Bun +from models.ingredient import Ingredient class Burger: diff --git a/database.py b/database.py index 4c75baf71..e51928795 100644 --- a/database.py +++ b/database.py @@ -1,8 +1,11 @@ from typing import List -from praktikum.bun import Bun -from praktikum.ingredient import Ingredient -from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING +from models.bun import Bun +from models.ingredient import Ingredient +from models.ingredient_types import ( + INGREDIENT_TYPE_SAUCE, + INGREDIENT_TYPE_FILLING +) class Database: diff --git a/models/__init__.py b/models/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/bun.py b/models/bun.py similarity index 100% rename from bun.py rename to models/bun.py diff --git a/ingredient.py b/models/ingredient.py similarity index 100% rename from ingredient.py rename to models/ingredient.py diff --git a/ingredient_types.py b/models/ingredient_types.py similarity index 100% rename from ingredient_types.py rename to models/ingredient_types.py diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 000000000..03f586d41 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,2 @@ +[pytest] +pythonpath = . \ No newline at end of file diff --git a/tests/test_burger.py b/tests/test_burger.py index 0248f12f1..2711556dc 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -1,27 +1,6 @@ -import sys -import os -import types - - -sys.path.append(os.path.dirname(os.path.dirname(__file__))) - - -import bun -import ingredient - - -praktikum = types.ModuleType("praktikum") -praktikum.bun = bun -praktikum.ingredient = ingredient - -sys.modules["praktikum"] = praktikum -sys.modules["praktikum.bun"] = bun -sys.modules["praktikum.ingredient"] = ingredient - import pytest from unittest.mock import Mock - from burger import Burger class TestBurger: @@ -30,10 +9,6 @@ def setup_method(self): self.burger = Burger() - def test_init_burger(self): - assert self.burger.bun is None - assert self.burger.ingredients == [] - def test_set_buns(self): bun = Mock()