From eee0e04f546be1e1c3f819b60ec689f5a525eea0 Mon Sep 17 00:00:00 2001 From: anastasia kostromina Date: Fri, 15 May 2026 14:22:43 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=94=D0=B8=D0=BF=D0=BB=D0=BE=D0=BC=20?= =?UTF-8?q?=D0=9A=D0=BE=D1=81=D1=82=D1=80=D0=BE=D0=BC=D0=B8=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=90=D0=BD=D0=B0=D1=81=D1=82=D0=B0=D1=81=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .coveragerc | 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 praktikum/tests/__init__.py | 0 praktikum/tests/conftest.py | 38 ++++++++ praktikum/tests/test_bun.py | 6 ++ praktikum/tests/test_burger.py | 86 +++++++++++++++++++ praktikum/tests/test_database.py | 15 ++++ praktikum/tests/test_ingredient.py | 10 +++ requirements.txt | 0 15 files changed, 159 insertions(+) create mode 100644 .coveragerc 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 praktikum/tests/__init__.py create mode 100644 praktikum/tests/conftest.py create mode 100644 praktikum/tests/test_bun.py create mode 100644 praktikum/tests/test_burger.py create mode 100644 praktikum/tests/test_database.py create mode 100644 praktikum/tests/test_ingredient.py create mode 100644 requirements.txt diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 000000000..b7106c4ad --- /dev/null +++ b/.coveragerc @@ -0,0 +1,4 @@ +[run] +omit = + praktikum/praktikum.py + praktikum/tests/* \ 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/praktikum/tests/__init__.py b/praktikum/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/praktikum/tests/conftest.py b/praktikum/tests/conftest.py new file mode 100644 index 000000000..81e5f64f6 --- /dev/null +++ b/praktikum/tests/conftest.py @@ -0,0 +1,38 @@ +import pytest +from unittest.mock import Mock + +from praktikum.burger import Burger +from praktikum.bun import Bun +from praktikum.ingredient import Ingredient + + +@pytest.fixture +def burger(): + return Burger() + + +@pytest.fixture +def bun(): + return Bun("black bun", 100) + + +@pytest.fixture +def ingredient(): + return Ingredient("SAUCE", "hot sauce", 100) + + +@pytest.fixture +def mock_bun(): + bun = Mock() + bun.get_name.return_value = "black bun" + bun.get_price.return_value = 100 + return bun + + +@pytest.fixture +def mock_ingredient(): + ingredient = Mock() + ingredient.get_type.return_value = "SAUCE" + ingredient.get_name.return_value = "hot sauce" + ingredient.get_price.return_value = 100 + return ingredient \ No newline at end of file diff --git a/praktikum/tests/test_bun.py b/praktikum/tests/test_bun.py new file mode 100644 index 000000000..057ee794a --- /dev/null +++ b/praktikum/tests/test_bun.py @@ -0,0 +1,6 @@ +def test_bun_get_name(bun): + assert bun.get_name() == "black bun" + + +def test_bun_get_price(bun): + assert bun.get_price() == 100 \ No newline at end of file diff --git a/praktikum/tests/test_burger.py b/praktikum/tests/test_burger.py new file mode 100644 index 000000000..4ea57a411 --- /dev/null +++ b/praktikum/tests/test_burger.py @@ -0,0 +1,86 @@ +import pytest +from unittest.mock import Mock + + +def make_ingredient(ingredient_type, name, price): + ingredient = Mock() + ingredient.get_type.return_value = ingredient_type + ingredient.get_name.return_value = name + ingredient.get_price.return_value = price + return ingredient + + +def test_set_buns_sets_bun(burger, mock_bun): + burger.set_buns(mock_bun) + + assert burger.bun == mock_bun + + +def test_add_ingredient_adds_ingredient(burger, mock_ingredient): + burger.add_ingredient(mock_ingredient) + + assert burger.ingredients == [mock_ingredient] + + +def test_remove_ingredient_removes_ingredient(burger): + ingredient1 = make_ingredient("SAUCE", "hot sauce", 100) + ingredient2 = make_ingredient("FILLING", "cutlet", 200) + + burger.ingredients = [ingredient1, ingredient2] + burger.remove_ingredient(0) + + assert burger.ingredients == [ingredient2] + + +@pytest.mark.parametrize( + "index,new_index,expected", + [ + (0, 2, ["cutlet", "sour cream", "hot sauce"]), + (2, 0, ["sour cream", "hot sauce", "cutlet"]), + ] +) +def test_move_ingredient(burger, index, new_index, expected): + burger.ingredients = [ + make_ingredient("SAUCE", "hot sauce", 100), + make_ingredient("FILLING", "cutlet", 200), + make_ingredient("SAUCE", "sour cream", 300), + ] + + burger.move_ingredient(index, new_index) + + result = [item.get_name() for item in burger.ingredients] + + assert result == expected + + +@pytest.mark.parametrize( + "bun_price, ingredients, expected", + [ + (100, [100, 200], 500), + (200, [], 400), + ] +) +def test_get_price(burger, mock_bun, bun_price, ingredients, expected): + mock_bun.get_price.return_value = bun_price + burger.set_buns(mock_bun) + + for price in ingredients: + burger.add_ingredient(make_ingredient("SAUCE", "test", price)) + + assert burger.get_price() == expected + + +def test_get_receipt(burger, mock_bun): + burger.set_buns(mock_bun) + burger.add_ingredient(make_ingredient("SAUCE", "hot sauce", 100)) + burger.add_ingredient(make_ingredient("FILLING", "cutlet", 200)) + + expected = ( + "(==== black bun ====)\n" + "= sauce hot sauce =\n" + "= filling cutlet =\n" + "(==== black bun ====)\n\n" + "Price: 500" + ) + + assert burger.get_receipt() == expected \ No newline at end of file diff --git a/praktikum/tests/test_database.py b/praktikum/tests/test_database.py new file mode 100644 index 000000000..bd915c7be --- /dev/null +++ b/praktikum/tests/test_database.py @@ -0,0 +1,15 @@ +from praktikum.database import Database + + +def test_available_buns_returns_buns(): + db = Database() + buns = db.available_buns() + + assert len(buns) == 3 + + +def test_available_ingredients_returns_ingredients(): + db = Database() + ingredients = db.available_ingredients() + + assert len(ingredients) == 6 \ No newline at end of file diff --git a/praktikum/tests/test_ingredient.py b/praktikum/tests/test_ingredient.py new file mode 100644 index 000000000..ee2460d56 --- /dev/null +++ b/praktikum/tests/test_ingredient.py @@ -0,0 +1,10 @@ +def test_ingredient_get_name(ingredient): + assert ingredient.get_name() == "hot sauce" + + +def test_ingredient_get_price(ingredient): + assert ingredient.get_price() == 100 + + +def test_ingredient_get_type(ingredient): + assert ingredient.get_type() == "SAUCE" \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..e69de29bb From bc1cee8b25b677a42ae71cf3098f9a74a0fabbf2 Mon Sep 17 00:00:00 2001 From: anastasia kostromina Date: Fri, 15 May 2026 14:28:52 +0300 Subject: [PATCH 2/2] =?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=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5?= =?UTF-8?q?=D0=BA=D0=B8=20=20pytest,=20pytest-cov.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/requirements.txt b/requirements.txt index e69de29bb..cd50952d8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -0,0 +1,2 @@ +pytest==8.3.2 +pytest-cov==7.1.0 \ No newline at end of file