From f24ced276d84e1008baa5f735339f42c27f8ba12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B0=D1=82=D0=B0=D0=BB=D1=8C=D1=8F=20=D0=A0=D0=BE?= =?UTF-8?q?=D0=BC=D0=B0=D0=BD=D0=BE=D0=B2=D0=B0?= Date: Mon, 12 Jan 2026 21:57:08 +0300 Subject: [PATCH] Task 1 solution --- .gitignore | 13 +++++++++++++ praktikum/__init__.py | 0 praktikum/bun.py | 1 + praktikum/database.py | 1 + praktikum/ingredient.py | 1 + praktikum/ingredient_types.py | 1 + praktikum.py => praktikum_app.py | 0 requirements.txt | 8 ++++++++ tests/__init__.py | 0 tests/conftest.py | 7 +++++++ tests/test_bun.py | 26 ++++++++++++++++++++++++++ tests/test_burger.py | 31 +++++++++++++++++++++++++++++++ tests/test_database.py | 17 +++++++++++++++++ tests/test_ingredient.py | 22 ++++++++++++++++++++++ 14 files changed, 128 insertions(+) create mode 100644 .gitignore create mode 100644 praktikum/__init__.py create mode 100644 praktikum/bun.py create mode 100644 praktikum/database.py create mode 100644 praktikum/ingredient.py create mode 100644 praktikum/ingredient_types.py rename praktikum.py => praktikum_app.py (100%) create mode 100644 requirements.txt create mode 100644 tests/__init__.py create mode 100644 tests/conftest.py create mode 100644 tests/test_bun.py create mode 100644 tests/test_burger.py create mode 100644 tests/test_database.py create mode 100644 tests/test_ingredient.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..96722b7de --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +# Virtual environment +.venv/ + +# Python cache +__pycache__/ +*.pyc + +# Pytest +.pytest_cache/ + +# Coverage +.coverage +htmlcov/ diff --git a/praktikum/__init__.py b/praktikum/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/praktikum/bun.py b/praktikum/bun.py new file mode 100644 index 000000000..b16b7838f --- /dev/null +++ b/praktikum/bun.py @@ -0,0 +1 @@ +from bun import Bun diff --git a/praktikum/database.py b/praktikum/database.py new file mode 100644 index 000000000..f638d1587 --- /dev/null +++ b/praktikum/database.py @@ -0,0 +1 @@ +from database import Database diff --git a/praktikum/ingredient.py b/praktikum/ingredient.py new file mode 100644 index 000000000..73c2ac4e0 --- /dev/null +++ b/praktikum/ingredient.py @@ -0,0 +1 @@ +from ingredient import Ingredient diff --git a/praktikum/ingredient_types.py b/praktikum/ingredient_types.py new file mode 100644 index 000000000..2c9325be5 --- /dev/null +++ b/praktikum/ingredient_types.py @@ -0,0 +1 @@ +from ingredient_types import * diff --git a/praktikum.py b/praktikum_app.py similarity index 100% rename from praktikum.py rename to praktikum_app.py diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..477b619ad --- /dev/null +++ b/requirements.txt @@ -0,0 +1,8 @@ +colorama==0.4.6 +coverage==7.13.1 +iniconfig==2.3.0 +packaging==25.0 +pluggy==1.6.0 +Pygments==2.19.2 +pytest==9.0.2 +pytest-cov==7.0.0 diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 000000000..b577b6e52 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,7 @@ +# tests/conftest.py +import sys +from pathlib import Path + +PROJECT_ROOT = Path(__file__).resolve().parent.parent +sys.path.insert(0, str(PROJECT_ROOT)) + diff --git a/tests/test_bun.py b/tests/test_bun.py new file mode 100644 index 000000000..fc30cbd7e --- /dev/null +++ b/tests/test_bun.py @@ -0,0 +1,26 @@ +import pytest +from bun import Bun + + +def test_bun_has_name(): + bun = Bun(name="black bun", price=100) + assert bun.name == "black bun" + + +def test_bun_has_price(): + bun = Bun(name="black bun", price=100) + assert bun.price == 100 + + +@pytest.mark.parametrize( + "name, price", + [ + ("white bun", 50), + ("black bun", 100), + ("alien bun", 999), + ] +) +def test_bun_parametrized(name, price): + bun = Bun(name=name, price=price) + assert bun.name == name + assert bun.price == price diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..1f91ec677 --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,31 @@ +from unittest.mock import Mock +from burger import Burger + + +def test_add_ingredient_increases_ingredients_count(): + burger = Burger() + ingredient = Mock() + + burger.add_ingredient(ingredient) + + assert len(burger.ingredients) == 1 + + +def test_remove_ingredient_decreases_ingredients_count(): + burger = Burger() + ingredient = Mock() + burger.add_ingredient(ingredient) + + burger.remove_ingredient(0) + + assert len(burger.ingredients) == 0 + + +def test_set_buns_sets_top_and_bottom(): + burger = Burger() + bun = Mock() + bun.price = 100 + + burger.set_buns(bun) + + assert burger.bun == bun diff --git a/tests/test_database.py b/tests/test_database.py new file mode 100644 index 000000000..1e616e5d6 --- /dev/null +++ b/tests/test_database.py @@ -0,0 +1,17 @@ +from database import Database + + +def test_database_returns_buns(): + database = Database() + buns = database.available_buns() + + assert isinstance(buns, list) + assert len(buns) > 0 + + +def test_database_returns_ingredients(): + database = Database() + ingredients = database.available_ingredients() + + assert isinstance(ingredients, list) + assert len(ingredients) > 0 diff --git a/tests/test_ingredient.py b/tests/test_ingredient.py new file mode 100644 index 000000000..0a482bddb --- /dev/null +++ b/tests/test_ingredient.py @@ -0,0 +1,22 @@ +import pytest +from ingredient import Ingredient +from ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + + +@pytest.mark.parametrize( + "name, ingredient_type, price", + [ + ("sauce", INGREDIENT_TYPE_SAUCE, 50), + ("filling", INGREDIENT_TYPE_FILLING, 100), + ] +) +def test_ingredient_fields(name, ingredient_type, price): + ingredient = Ingredient( + name=name, + ingredient_type=ingredient_type, + price=price + ) + + assert ingredient.name == name + assert ingredient.type == ingredient_type + assert ingredient.price == price