From 47cc20eed04467f49e8523c809006b5f359ed501 Mon Sep 17 00:00:00 2001 From: Artem Shpak Date: Mon, 22 Dec 2025 23:56:11 +0300 Subject: [PATCH 1/4] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=8E=D0=BD=D0=B8=D1=82-=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D1=8B=20=D0=B4=D0=BB=D1=8F=20Ingredient=20=D0=B8=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B0=20=D1=81?= =?UTF-8?q?=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D0=B0=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +++ __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 tests/__init__.py | 0 tests/ingredient_test.py | 28 +++++++++++++++++++ 10 files changed, 32 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 tests/__init__.py create mode 100644 tests/ingredient_test.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..848aa3f93 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.coverage +htmlcov/ +.pytest_cache/ +__pycache__/ 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/tests/__init__.py b/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/ingredient_test.py b/tests/ingredient_test.py new file mode 100644 index 000000000..07a9f22a4 --- /dev/null +++ b/tests/ingredient_test.py @@ -0,0 +1,28 @@ +import pytest +from praktikum.ingredient import Ingredient + + +def test_ingredient_constructor(): + ingredient = Ingredient("sauce", "ketchup", 50) + + assert ingredient.type == "sauce" + assert ingredient.name == "ketchup" + assert ingredient.price == 50 + + +def test_get_price(): + ingredient = Ingredient("filling", "cutlet", 100) + + assert ingredient.get_price() == 100 + + +def test_get_name(): + ingredient = Ingredient("filling", "cheese", 70) + + assert ingredient.get_name() == "cheese" + + +def test_get_type(): + ingredient = Ingredient("sauce", "mustard", 30) + + assert ingredient.get_type() == "sauce" From d89ca758c6f1e0c2909df23656a3a10302dbf1bc Mon Sep 17 00:00:00 2001 From: Artem Shpak Date: Mon, 22 Dec 2025 23:59:43 +0300 Subject: [PATCH 2/4] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=8E=D0=BD=D0=B8=D1=82-=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D1=8B=20=D0=B4=D0=BB=D1=8F=20Bun?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/bun_test.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 tests/bun_test.py diff --git a/tests/bun_test.py b/tests/bun_test.py new file mode 100644 index 000000000..e2128ef70 --- /dev/null +++ b/tests/bun_test.py @@ -0,0 +1,43 @@ +import pytest +from praktikum.bun import Bun + + +@pytest.mark.parametrize( + "name, price", + [ + ("black bun", 100), + ("white bun", 80), + ("sesame bun", 120), + ] +) +def test_bun_constructor(name, price): + bun = Bun(name, price) + + assert bun.name == name + assert bun.price == price + + +@pytest.mark.parametrize( + "name, price", + [ + ("black bun", 100), + ("white bun", 80), + ] +) +def test_get_name(name, price): + bun = Bun(name, price) + + assert bun.get_name() == name + + +@pytest.mark.parametrize( + "name, price", + [ + ("black bun", 100), + ("white bun", 80), + ] +) +def test_get_price(name, price): + bun = Bun(name, price) + + assert bun.get_price() == price From 3f6daeb258f3bbfa0926c8dd2001871029e1b885 Mon Sep 17 00:00:00 2001 From: Artem Shpak Date: Tue, 23 Dec 2025 00:02:45 +0300 Subject: [PATCH 3/4] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=8E=D0=BD=D0=B8=D1=82-=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D1=8B=20=D0=B4=D0=BB=D1=8F=20Burger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/burger_test.py | 100 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 tests/burger_test.py diff --git a/tests/burger_test.py b/tests/burger_test.py new file mode 100644 index 000000000..3e62687fb --- /dev/null +++ b/tests/burger_test.py @@ -0,0 +1,100 @@ +import pytest +from unittest.mock import Mock + +from praktikum.burger import Burger + + +def create_mock_bun(name="black bun", price=100): + bun = Mock() + bun.get_name.return_value = name + bun.get_price.return_value = price + return bun + + +def create_mock_ingredient(name="cutlet", price=50, ingredient_type="filling"): + ingredient = Mock() + ingredient.get_name.return_value = name + ingredient.get_price.return_value = price + ingredient.get_type.return_value = ingredient_type + return ingredient + + +def test_set_buns(): + burger = Burger() + bun = create_mock_bun() + + burger.set_buns(bun) + + assert burger.bun == bun + + +def test_add_ingredient(): + burger = Burger() + ingredient = create_mock_ingredient() + + burger.add_ingredient(ingredient) + + assert ingredient in burger.ingredients + + +def test_remove_ingredient(): + burger = Burger() + ingredient = create_mock_ingredient() + burger.add_ingredient(ingredient) + + burger.remove_ingredient(0) + + assert ingredient not in burger.ingredients + + +def test_move_ingredient(): + burger = Burger() + ingredient_1 = create_mock_ingredient(name="cutlet") + ingredient_2 = create_mock_ingredient(name="cheese") + + burger.add_ingredient(ingredient_1) + burger.add_ingredient(ingredient_2) + + burger.move_ingredient(0, 1) + + assert burger.ingredients[0] == ingredient_2 + assert burger.ingredients[1] == ingredient_1 + + +@pytest.mark.parametrize( + "ingredients, expected_price", + [ + ([], 200), # только булка (100 * 2) + ([create_mock_ingredient(price=50)], 250), + ( + [ + create_mock_ingredient(price=50), + create_mock_ingredient(price=30), + ], + 280, + ), + ], +) +def test_get_price(ingredients, expected_price): + burger = Burger() + burger.set_buns(create_mock_bun(price=100)) + + for ingredient in ingredients: + burger.add_ingredient(ingredient) + + assert burger.get_price() == expected_price + + +def test_get_receipt(): + burger = Burger() + bun = create_mock_bun(name="black bun", price=100) + ingredient = create_mock_ingredient(name="cutlet", price=50, ingredient_type="filling") + + burger.set_buns(bun) + burger.add_ingredient(ingredient) + + receipt = burger.get_receipt() + + assert "(==== black bun ====)" in receipt + assert "= filling cutlet =" in receipt + assert "Price: 250" in receipt From a55254ff519008b3c2f47befff9579765b12294c Mon Sep 17 00:00:00 2001 From: Artem Shpak Date: Tue, 23 Dec 2025 00:05:56 +0300 Subject: [PATCH 4/4] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=8E=D0=BD=D0=B8=D1=82-=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D1=8B=20=D0=B4=D0=BB=D1=8F=20Database?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/database_test.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 tests/database_test.py diff --git a/tests/database_test.py b/tests/database_test.py new file mode 100644 index 000000000..8807c933c --- /dev/null +++ b/tests/database_test.py @@ -0,0 +1,35 @@ +import pytest +from unittest.mock import patch + +from praktikum.database import Database +from praktikum.bun import Bun +from praktikum.ingredient import Ingredient + + +def test_available_buns_returns_list_of_buns(): + database = Database() + + buns = database.available_buns() + + assert isinstance(buns, list) + assert len(buns) == 3 + assert all(isinstance(bun, Bun) for bun in buns) + + +def test_available_ingredients_returns_list_of_ingredients(): + database = Database() + + ingredients = database.available_ingredients() + + assert isinstance(ingredients, list) + assert len(ingredients) == 6 + assert all(isinstance(ingredient, Ingredient) for ingredient in ingredients) + + +@patch("praktikum.database.Bun") +@patch("praktikum.database.Ingredient") +def test_database_initializes_data(mock_ingredient, mock_bun): + Database() + + assert mock_bun.call_count == 3 + assert mock_ingredient.call_count == 6