diff --git a/.coverage b/.coverage new file mode 100644 index 000000000..e9f7b1c26 Binary files /dev/null and b/.coverage differ diff --git a/__init__.py b/praktikumm/__init__.py similarity index 100% rename from __init__.py rename to praktikumm/__init__.py diff --git a/bun.py b/praktikumm/bun.py similarity index 100% rename from bun.py rename to praktikumm/bun.py diff --git a/burger.py b/praktikumm/burger.py similarity index 90% rename from burger.py rename to praktikumm/burger.py index 2b3b6a88b..a0d377b32 100644 --- a/burger.py +++ b/praktikumm/burger.py @@ -1,8 +1,6 @@ from typing import List - -from praktikum.bun import Bun -from praktikum.ingredient import Ingredient - +from praktikumm.bun import Bun +from praktikumm.ingredient import Ingredient class Burger: """ @@ -38,11 +36,9 @@ def get_price(self) -> float: def get_receipt(self) -> str: receipt: List[str] = [f'(==== {self.bun.get_name()} ====)'] - for ingredient in self.ingredients: receipt.append(f'= {str(ingredient.get_type()).lower()} {ingredient.get_name()} =') - - receipt.append(f'(==== {self.bun.get_name()} ====)\n') + receipt.append(f'(==== {self.bun.get_name()} ====)') receipt.append(f'Price: {self.get_price()}') return '\n'.join(receipt) diff --git a/database.py b/praktikumm/database.py similarity index 86% rename from database.py rename to praktikumm/database.py index 4c75baf71..6ee227dab 100644 --- a/database.py +++ b/praktikumm/database.py @@ -1,8 +1,7 @@ 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 praktikumm.bun import Bun +from praktikumm.ingredient import Ingredient +from praktikumm.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING class Database: diff --git a/ingredient.py b/praktikumm/ingredient.py similarity index 100% rename from ingredient.py rename to praktikumm/ingredient.py diff --git a/ingredient_types.py b/praktikumm/ingredient_types.py similarity index 100% rename from ingredient_types.py rename to praktikumm/ingredient_types.py diff --git a/praktikum.py b/praktikumm/praktikum.py similarity index 87% rename from praktikum.py rename to praktikumm/praktikum.py index ec522fa6d..7852d8f0a 100644 --- a/praktikum.py +++ b/praktikumm/praktikum.py @@ -1,9 +1,8 @@ from typing import List - -from praktikum.bun import Bun -from praktikum.burger import Burger -from praktikum.database import Database -from praktikum.ingredient import Ingredient +from praktikumm.bun import Bun +from praktikumm.burger import Burger +from praktikumm.database import Database +from praktikumm.ingredient import Ingredient def main(): diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..9c1634658 Binary files /dev/null and b/requirements.txt differ diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/test_bun.py b/tests/test_bun.py new file mode 100644 index 000000000..eadda0ecc --- /dev/null +++ b/tests/test_bun.py @@ -0,0 +1,10 @@ +import pytest +from praktikumm.bun import Bun + +def test_bun_get_name(): + bun = Bun("white", 200) + assert bun.get_name() == "white" + +def test_bun_get_price(): + bun = Bun("black", 100) + assert bun.get_price() == 100 \ No newline at end of file diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..1ca3545f2 --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,52 @@ +import pytest +from unittest.mock import Mock +from praktikumm.burger import Burger +from praktikumm.bun import Bun +from praktikumm.ingredient import Ingredient + +@pytest.fixture +def burger(): + return Burger() + +def test_set_buns(burger): + bun = Bun("black bun", 100) + burger.set_buns(bun) + assert burger.bun == bun + +@pytest.mark.parametrize("ingredient_type, name, price", [ + ("SAUCE", "hot sauce", 100), + ("FILLING", "sausage", 300) +]) +def test_add_ingredient(burger, ingredient_type, name, price): + ingredient = Ingredient(ingredient_type, name, price) + burger.add_ingredient(ingredient) + assert len(burger.ingredients) == 1 + assert burger.ingredients[0] == ingredient + +def test_remove_ingredient(burger): + ingredient = Ingredient("SAUCE", "sour cream", 150) + burger.add_ingredient(ingredient) + idx = 0 + burger.remove_ingredient(idx) + assert len(burger.ingredients) == 0 + +def test_get_price_with_mock(burger): + bun = Mock() + bun.get_price.return_value = 60 + burger.set_buns(bun) + + ingredient = Mock() + ingredient.get_price.return_value = 60 + burger.add_ingredient(ingredient) + + expected = 60 * 2 + 60 # <-- исправлено + assert burger.get_price() == expected + +def test_get_receipt(burger): + bun = Bun("white bun", 200) + burger.set_buns(bun) + ingredient = Ingredient("SAUCE", "chili sauce", 300) + burger.add_ingredient(ingredient) + + expected = "(==== white bun ====)\n= sauce chili sauce =\n(==== white bun ====)\nPrice: 700" + assert burger.get_receipt() == expected \ No newline at end of file diff --git a/tests/test_database.py b/tests/test_database.py new file mode 100644 index 000000000..7e47e58a7 --- /dev/null +++ b/tests/test_database.py @@ -0,0 +1,29 @@ +import pytest +from praktikumm.database import Database +from praktikumm.bun import Bun +from praktikumm.ingredient import Ingredient + +def test_available_buns(): + db = Database() + buns = db.available_buns() + assert len(buns) == 3 + assert isinstance(buns[0], Bun) + +def test_available_ingredients(): + db = Database() + ingredients = db.available_ingredients() + assert len(ingredients) == 6 + assert isinstance(ingredients[0], Ingredient) + +def test_buns_have_correct_data(): + db = Database() + bun = db.available_buns()[0] + assert bun.get_name() == "black bun" + assert bun.get_price() == 100 + +def test_ingredients_have_correct_data(): + db = Database() + ingredient = db.available_ingredients()[0] + assert ingredient.get_type() == "SAUCE" + assert ingredient.get_name() == "hot sauce" + assert ingredient.get_price() == 100 \ No newline at end of file diff --git a/tests/test_ingredient.py b/tests/test_ingredient.py new file mode 100644 index 000000000..5ed8298d1 --- /dev/null +++ b/tests/test_ingredient.py @@ -0,0 +1,14 @@ +import pytest +from praktikumm.ingredient import Ingredient + +def test_ingredient_get_name(): + ingredient = Ingredient("SAUCE", "hot sauce", 100) + assert ingredient.get_name() == "hot sauce" + +def test_ingredient_get_price(): + ingredient = Ingredient("FILLING", "sausage", 300) + assert ingredient.get_price() == 300 + +def test_ingredient_get_type(): + ingredient = Ingredient("SAUCE", "sour cream", 150) + assert ingredient.get_type() == "SAUCE" \ No newline at end of file