From c7190c28fd143001b00c8ca1cc55e6827b8443f5 Mon Sep 17 00:00:00 2001 From: Ivan Nosovets Date: Wed, 8 Apr 2026 10:10:02 +0300 Subject: [PATCH] 1 diplom --- .gitignore | 16 +++++++++++++ burger.py | 5 ++-- data.py | 10 ++++++++ requirements.txt | Bin 0 -> 1512 bytes tests/__init__.py | 0 tests/conftest.py | 42 +++++++++++++++++++++++++++++++++ tests/test_burger.py | 54 +++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 124 insertions(+), 3 deletions(-) create mode 100644 .gitignore create mode 100644 data.py create mode 100644 requirements.txt create mode 100644 tests/__init__.py create mode 100644 tests/conftest.py create mode 100644 tests/test_burger.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..7db906e54 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +__pycache__/ +*.pyc +*.pyo +*.pyd +venv/ +env/ +.venv/ +ENV/ +dist/ +build/ +*.egg-info/ +*.egg +.pytest_cache/ +.coverage +htmlcov/ +.tox/ \ No newline at end of file diff --git a/burger.py b/burger.py index 2b3b6a88b..4c9904fc4 100644 --- a/burger.py +++ b/burger.py @@ -1,8 +1,7 @@ from typing import List -from praktikum.bun import Bun -from praktikum.ingredient import Ingredient - +from bun import Bun +from ingredient import Ingredient class Burger: """ diff --git a/data.py b/data.py new file mode 100644 index 000000000..6ea429e82 --- /dev/null +++ b/data.py @@ -0,0 +1,10 @@ +BUN_DATA = { + "name": "black bun", + "price": 100 +} + +INGREDIENTS_DATA = [ + {"type": "SAUCE", "name": "hot sauce", "price": 100}, + {"type": "FILLING", "name": "cutlet", "price": 100}, + {"type": "FILLING", "name": "dinosaur", "price": 200}, +] \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..3952ae2b87a2d04f18aefd9a1e33f2dc50604eef GIT binary patch literal 1512 zcmZ{kVNTmn5QO)4r5+^+CqUaD+@VqrfJ{OYtHeoT7YK)^oo~m^bDJV7hGchVcW36k z-*0t1>iHFic!*i-;~2gE>-4_WGmnd?;#%)Te2fqAzwAxyqE+ouf46%0*1c2R3BOh5 zEY|AM>T?igubM+vRN3!x=+!H7IAJlxl|GIxv$l^WzU$*zFE#H?B9O_vOGQhZ+ETw! zXV4$iWu{q}VVfH^@tWwME{3in-cD?hS!XU8U^3Uu&~X<}!(Qx2#wSIqM4D&LM&GK8 zP+R59-l~a}CaE(GUo5(m449L+YvY3Mb3zKjJ?-X%lM)9T8ORQ)(MTq47|72 zbIcf6)96w4pjan+q|E+RRqN!TRnMvCz6i%$lk-j6Fo!efQ8@b7@l>LUtEW*r{3++8 zzIe%5<2hKVn|X9D{d|tlgmd;&JNt~4nHQOJooeIB$5f(G<~BRxu&YVWPJH5h+`T(- zXV1{5)31k|W0h*bP@O7p=1SjkqBv_K7Q1;O>omq@LcuRZO*^=7Q8J&k!F|pF_jq+Y zEmiJnhK&as@XKuHXBq~p+#P@WCYsi9dvS|#E*2*)d>72~_Ns>aU^@N#j)xQ9dfxsV zA3gD@XYr=1;wg!9>n&CT@ataEnQpB*@X=8C=TM-+V)M|)x6uD=yGldr1X N>!BAunCIIY`~k(>;UNG3 literal 0 HcmV?d00001 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..aa2352e5e --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,42 @@ +import pytest +from unittest.mock import Mock +from burger import Burger +from data import * + + +#пустой объект Burger +@pytest.fixture +def new_burger(): + return Burger() + +# Мок-булка +@pytest.fixture +def bun_in_burger(): + bun = Mock() + bun.name = BUN_DATA["name"] + bun.price = BUN_DATA["price"] + bun.get_price.return_value = BUN_DATA["price"] + bun.get_name.return_value = BUN_DATA["name"] + return bun + +# список для бургера +@pytest.fixture +def ingredients_in_burger(): + ingredients = [] + for i in INGREDIENTS_DATA: + ingredient = Mock() + ingredient.type = i["type"] + ingredient.name = i["name"] + ingredient.price = i["price"] + ingredient.get_type.return_value = i["type"] + ingredient.get_name.return_value = i["name"] + ingredient.get_price.return_value = i["price"] + ingredients.append(ingredient) + return ingredients + +# мок с булкой и ингредиентами +@pytest.fixture +def mocked_burger(new_burger, bun_in_burger, ingredients_in_burger): + new_burger.set_buns(bun_in_burger) + new_burger.ingredients = ingredients_in_burger.copy() + return new_burger \ No newline at end of file diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..9a826f634 --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,54 @@ +import pytest + +class TestBurger: + + # изначальное состояние (без ингредиентов) + def test_burger_initialization(self, new_burger): + assert new_burger.bun is None + assert new_burger.ingredients == [] + + # проверяем добав. одной булки + def test_set_buns_single_bun_added_in_burger(self, new_burger, bun_in_burger): + new_burger.set_buns(bun_in_burger) + assert new_burger.bun == bun_in_burger + + # Проверка добавления 2-ух ингрдтв. в бугрере + def test_add_ingredient_two_ingridients_added_in_burger(self, new_burger, ingredients_in_burger): + new_burger.add_ingredient(ingredients_in_burger[0]) + new_burger.add_ingredient(ingredients_in_burger[1]) + assert ingredients_in_burger[0] and ingredients_in_burger[1] in new_burger.ingredients + + # удаляем первый ингредиент + def test_remove_ingredient_first_ingredient_delete_from_burger(self, new_burger, ingredients_in_burger): + new_burger.ingredients = ingredients_in_burger.copy() + new_burger.remove_ingredient(0) + expected_ingredients = ingredients_in_burger[1:] + assert new_burger.ingredients == expected_ingredients + + # ингредиенты внутри списка + def test_move_ingredient_moves_two_ingredient_in_burger_changed(self, new_burger, ingredients_in_burger): + new_burger.ingredients = ingredients_in_burger.copy() + new_burger.move_ingredient(0, 1) + assert new_burger.ingredients[0] == ingredients_in_burger[1] and new_burger.ingredients[1] == ingredients_in_burger[0] + + # расчет цены + @pytest.mark.parametrize("ingredients", [[0, 1], [1, 2], [0, 2], [0, 1, 2]]) + def test_get_price_various_ingredients_correct_price(self, mocked_burger, bun_in_burger, ingredients_in_burger, ingredients): + selected_ingredients = [ingredients_in_burger[i] for i in ingredients] + mocked_burger.ingredients = selected_ingredients + expected_price = bun_in_burger.get_price.return_value * 2 + sum(i.get_price.return_value for i in selected_ingredients) + price = mocked_burger.get_price() + assert price == expected_price + + # чек + @pytest.mark.parametrize("ingredients", [[0, 1], [1, 2], [0, 2], [0, 1, 2]]) + def test_get_receipt_various_ingredients_expected_price(self, mocked_burger, bun_in_burger, ingredients_in_burger, ingredients): + selected_ingredients = [ingredients_in_burger[i] for i in ingredients] + mocked_burger.ingredients = selected_ingredients + receipt = mocked_burger.get_receipt() + expected_lines = [f'(==== {bun_in_burger.get_name.return_value} ====)'] + expected_lines += [f'= {ing.get_type.return_value.lower()} {ing.get_name.return_value} =' for ing in selected_ingredients] + expected_lines.append(f'(==== {bun_in_burger.get_name.return_value} ====)\n') + expected_lines.append(f'Price: {mocked_burger.get_price()}') + expected_receipt = '\n'.join(expected_lines) + assert receipt == expected_receipt \ No newline at end of file