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/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/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/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/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..2711556dc --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,120 @@ +import pytest +from unittest.mock import Mock + +from burger import Burger + +class TestBurger: + + def setup_method(self): + self.burger = Burger() + + + + 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