From 8fb05eb112c1a27641aa8d934ff06d6fa92cbd08 Mon Sep 17 00:00:00 2001 From: Leonov Eduard Date: Tue, 2 Dec 2025 16:20:37 +0700 Subject: [PATCH 1/4] The first assignment from the diploma --- __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 requirements.txt | 3 + tests/__init__.py | 0 tests/burger_test.py | 261 ++++++++++++++++++ tests/conftest.py | 60 ++++ 11 files changed, 324 insertions(+) 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 requirements.txt create mode 100644 tests/__init__.py create mode 100644 tests/burger_test.py create mode 100644 tests/conftest.py 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/requirements.txt b/requirements.txt new file mode 100644 index 000000000..ac4f60912 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +pytest==7.4.3 +pytest-cov==7.0.0 +allure-pytest==2.13.2 \ No newline at end of file diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/burger_test.py b/tests/burger_test.py new file mode 100644 index 000000000..7f6580459 --- /dev/null +++ b/tests/burger_test.py @@ -0,0 +1,261 @@ +pytest_plugins = ['conftest'] +import sys +import os +sys.path.insert(0, os.path.dirname(__file__)) + +from conftest import create_mock_ingredient, create_mock_bun +from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + + +class TestBurger: + + # Проверка булочек + def test_set_bun_success(self, burger, white_bun): + burger.set_buns(white_bun) + assert burger.bun == white_bun + + # Проверка замены булочки + def test_set_bun_replace_existing(self, burger, white_bun, black_bun): + burger.set_buns(white_bun) + burger.set_buns(black_bun) + assert burger.bun == black_bun + + # Проверка добавления одного ингредиента + def test_add_ingredient_one(self, burger, sauce_ingredient): + burger.add_ingredient(sauce_ingredient) + assert len(burger.ingredients) == 1 + + # Проверка добавления ингредиента в начало списка + def test_add_ingredient_first_element(self, burger, sauce_ingredient): + burger.add_ingredient(sauce_ingredient) + assert burger.ingredients[0] == sauce_ingredient + + # Проверка добавления нескольких ингредиентов + def test_add_ingredient_multiple(self, burger, ingredient_count): + for i in range(ingredient_count): + ingredient = create_mock_ingredient(f"Ingredient_{i}", INGREDIENT_TYPE_SAUCE, 50.0) + burger.add_ingredient(ingredient) + assert len(burger.ingredients) == ingredient_count + + # Проверка сохранения порядка при добавлении (первый элемент) + def test_add_ingredient_keeps_order_first(self, burger, sauce_ingredient, filling_ingredient): + burger.add_ingredient(sauce_ingredient) + burger.add_ingredient(filling_ingredient) + assert burger.ingredients[0] == sauce_ingredient + + # Проверка сохранения порядка при добавлении (второй элемент) + def test_add_ingredient_keeps_order_second(self, burger, sauce_ingredient, filling_ingredient): + burger.add_ingredient(sauce_ingredient) + burger.add_ingredient(filling_ingredient) + assert burger.ingredients[1] == filling_ingredient + + # Проверка уменьшения количества при удалении + def test_remove_ingredient_decreases_count(self, burger): + ing1 = create_mock_ingredient("First", INGREDIENT_TYPE_SAUCE, 50.0) + ing2 = create_mock_ingredient("Second", INGREDIENT_TYPE_FILLING, 100.0) + burger.add_ingredient(ing1) + burger.add_ingredient(ing2) + burger.remove_ingredient(0) + assert len(burger.ingredients) == 1 + + # Проверка удаления первого ингредиента оставляет второй + def test_remove_ingredient_first_leaves_second(self, burger): + ing1 = create_mock_ingredient("First", INGREDIENT_TYPE_SAUCE, 50.0) + ing2 = create_mock_ingredient("Second", INGREDIENT_TYPE_FILLING, 100.0) + burger.add_ingredient(ing1) + burger.add_ingredient(ing2) + burger.remove_ingredient(0) + assert burger.ingredients[0] == ing2 + + # Проверка удаления среднего ингредиента + def test_remove_ingredient_middle(self, burger): + ing1 = create_mock_ingredient("First", INGREDIENT_TYPE_SAUCE, 50.0) + ing2 = create_mock_ingredient("Middle", INGREDIENT_TYPE_FILLING, 100.0) + ing3 = create_mock_ingredient("Last", INGREDIENT_TYPE_SAUCE, 75.0) + burger.add_ingredient(ing1) + burger.add_ingredient(ing2) + burger.add_ingredient(ing3) + burger.remove_ingredient(1) + assert burger.ingredients[1] == ing3 + + # Проверка удаления ингредиента по индексу + def test_remove_ingredient_at_index(self, burger, move_positions): + from_pos, to_pos = move_positions + for i in range(3): + ing = create_mock_ingredient(f"Ing_{i}", INGREDIENT_TYPE_SAUCE, 50.0) + burger.add_ingredient(ing) + burger.remove_ingredient(from_pos) + assert len(burger.ingredients) == 2 + + # Проверка перемещения ингредиента вперёд + def test_move_ingredient_forward(self, burger): + ing1 = create_mock_ingredient("First", INGREDIENT_TYPE_SAUCE, 50.0) + ing2 = create_mock_ingredient("Second", INGREDIENT_TYPE_FILLING, 100.0) + ing3 = create_mock_ingredient("Third", INGREDIENT_TYPE_SAUCE, 75.0) + burger.add_ingredient(ing1) + burger.add_ingredient(ing2) + burger.add_ingredient(ing3) + burger.move_ingredient(0, 2) + assert burger.ingredients[2] == ing1 + + # Проверка изменения первой позиции при перемещении + def test_move_ingredient_changes_first_position(self, burger): + ing1 = create_mock_ingredient("First", INGREDIENT_TYPE_SAUCE, 50.0) + ing2 = create_mock_ingredient("Second", INGREDIENT_TYPE_FILLING, 100.0) + ing3 = create_mock_ingredient("Third", INGREDIENT_TYPE_SAUCE, 75.0) + burger.add_ingredient(ing1) + burger.add_ingredient(ing2) + burger.add_ingredient(ing3) + burger.move_ingredient(0, 2) + assert burger.ingredients[0] == ing2 + + # Проверка перемещения ингредиента назад + def test_move_ingredient_backward(self, burger): + ing1 = create_mock_ingredient("First", INGREDIENT_TYPE_SAUCE, 50.0) + ing2 = create_mock_ingredient("Second", INGREDIENT_TYPE_FILLING, 100.0) + ing3 = create_mock_ingredient("Third", INGREDIENT_TYPE_SAUCE, 75.0) + burger.add_ingredient(ing1) + burger.add_ingredient(ing2) + burger.add_ingredient(ing3) + burger.move_ingredient(2, 0) + assert burger.ingredients[0] == ing3 + + # Проверка сохранения количества при перемещении + def test_move_ingredient_preserves_count(self, burger, move_positions): + from_pos, to_pos = move_positions + for i in range(3): + ing = create_mock_ingredient(f"Ing_{i}", INGREDIENT_TYPE_SAUCE, 50.0) + burger.add_ingredient(ing) + burger.move_ingredient(from_pos, to_pos) + assert len(burger.ingredients) == 3 + + # Проверка цены только булки + def test_price_only_bun(self, burger, white_bun): + burger.set_buns(white_bun) + assert burger.get_price() == 200.0 + + # Проверка цены булки и одного ингредиента + def test_price_bun_and_one_ingredient(self, burger, white_bun, sauce_ingredient): + burger.set_buns(white_bun) + burger.add_ingredient(sauce_ingredient) + assert burger.get_price() == 290.0 + + # Проверка цены булки и двух ингредиентов + def test_price_bun_and_two_ingredients(self, burger, white_bun, sauce_ingredient, filling_ingredient): + burger.set_buns(white_bun) + burger.add_ingredient(sauce_ingredient) + burger.add_ingredient(filling_ingredient) + assert burger.get_price() == 390.0 + + # Проверка цены различных комбинаций + def test_price_various_combinations(self, burger, price_combinations): + bun_price, ing_prices, expected_price = price_combinations + bun = create_mock_bun("Test Bun", bun_price) + burger.set_buns(bun) + for price in ing_prices: + ing = create_mock_ingredient("Test Ing", INGREDIENT_TYPE_SAUCE, price) + burger.add_ingredient(ing) + assert burger.get_price() == expected_price + + # Проверка уменьшения цены при удалении ингредиента + def test_remove_ingredient_decreases_price(self, burger, white_bun): + burger.set_buns(white_bun) + ing1 = create_mock_ingredient("Item1", INGREDIENT_TYPE_SAUCE, 100.0) + ing2 = create_mock_ingredient("Item2", INGREDIENT_TYPE_FILLING, 150.0) + burger.add_ingredient(ing1) + burger.add_ingredient(ing2) + price_before = burger.get_price() + burger.remove_ingredient(0) + price_after = burger.get_price() + assert price_after == price_before - 100.0 + + # Проверка цены после перемещения ингредиента + def test_burger_move_and_get_price(self, burger, white_bun): + burger.set_buns(white_bun) + ing1 = create_mock_ingredient("Item1", INGREDIENT_TYPE_SAUCE, 100.0) + ing2 = create_mock_ingredient("Item2", INGREDIENT_TYPE_FILLING, 150.0) + burger.add_ingredient(ing1) + burger.add_ingredient(ing2) + burger.move_ingredient(0, 1) + price = burger.get_price() + assert price == 450.0 + + # Проверка наличия булки в чеке + def test_receipt_contains_bun(self, burger, white_bun, sauce_ingredient): + burger.set_buns(white_bun) + burger.add_ingredient(sauce_ingredient) + receipt = burger.get_receipt() + assert "(==== White Bun ====)" in receipt + + # Проверка наличия ингредиента в чеке + def test_receipt_contains_ingredient(self, burger, white_bun, sauce_ingredient): + burger.set_buns(white_bun) + burger.add_ingredient(sauce_ingredient) + receipt = burger.get_receipt() + assert "spicy sauce" in receipt + + # Проверка наличия цены в чеке + def test_receipt_contains_price(self, burger, white_bun, sauce_ingredient): + burger.set_buns(white_bun) + burger.add_ingredient(sauce_ingredient) + receipt = burger.get_receipt() + assert "Price:" in receipt + + # Проверка отображения всех ингредиентов в чеке + def test_receipt_shows_all_ingredients(self, burger, white_bun): + burger.set_buns(white_bun) + ing1 = create_mock_ingredient("Item_0", INGREDIENT_TYPE_SAUCE, 50.0) + ing2 = create_mock_ingredient("Item_1", INGREDIENT_TYPE_SAUCE, 50.0) + ing3 = create_mock_ingredient("Item_2", INGREDIENT_TYPE_SAUCE, 50.0) + burger.add_ingredient(ing1) + burger.add_ingredient(ing2) + burger.add_ingredient(ing3) + receipt = burger.get_receipt() + assert "Item_0" in receipt + + # Проверка соответствия цены в чеке и методе get_price + def test_receipt_price_matches_get_price(self, burger, white_bun, sauce_ingredient): + burger.set_buns(white_bun) + burger.add_ingredient(sauce_ingredient) + receipt = burger.get_receipt() + expected_price = burger.get_price() + assert f"Price: {expected_price}" in receipt + + # Проверка чека без ингредиентов + def test_receipt_zero_ingredients(self, burger, white_bun): + burger.set_buns(white_bun) + receipt = burger.get_receipt() + assert "(==== White Bun ====)" in receipt + + # Проверка чека с одним ингредиентом + def test_receipt_one_ingredient(self, burger, white_bun): + burger.set_buns(white_bun) + ing = create_mock_ingredient("Ing_0", INGREDIENT_TYPE_SAUCE, 25.0) + burger.add_ingredient(ing) + receipt = burger.get_receipt() + assert "Price:" in receipt + + # Проверка чека с тремя ингредиентами + def test_receipt_three_ingredients(self, burger, white_bun): + burger.set_buns(white_bun) + for i in range(3): + ing = create_mock_ingredient(f"Ing_{i}", INGREDIENT_TYPE_SAUCE, 25.0) + burger.add_ingredient(ing) + receipt = burger.get_receipt() + assert "Price:" in receipt + + # Проверка чека с пятью ингредиентами + def test_receipt_five_ingredients(self, burger, white_bun): + burger.set_buns(white_bun) + for i in range(5): + ing = create_mock_ingredient(f"Ing_{i}", INGREDIENT_TYPE_SAUCE, 25.0) + burger.add_ingredient(ing) + receipt = burger.get_receipt() + assert "Price:" in receipt + + # Проверка добавления и удаления ингредиента + def test_burger_add_and_remove_ingredient(self, burger, white_bun, sauce_ingredient): + burger.set_buns(white_bun) + burger.add_ingredient(sauce_ingredient) + burger.remove_ingredient(0) + assert len(burger.ingredients) == 0 \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 000000000..6848e91cd --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,60 @@ +import pytest +from unittest.mock import Mock +from praktikum.burger import Burger +from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING +__all__ = ['create_mock_ingredient', 'create_mock_bun'] + + +def create_mock_ingredient(name, ingredient_type, price): + """Вспомогательная функция для создания mock-ингредиента""" + ingredient = Mock() + ingredient.get_name = Mock(return_value=name) + ingredient.get_type = Mock(return_value=ingredient_type) + ingredient.get_price = Mock(return_value=price) + return ingredient + +def create_mock_bun(name, price): + """Вспомогательная функция для создания mock-булки""" + bun = Mock() + bun.get_name = Mock(return_value=name) + bun.get_price = Mock(return_value=price) + return bun + +@pytest.fixture +def burger(): + return Burger() + +@pytest.fixture +def white_bun(): + return create_mock_bun("White Bun", 100.0) + +@pytest.fixture +def black_bun(): + return create_mock_bun("Black Bun", 150.0) + +@pytest.fixture +def sauce_ingredient(): + return create_mock_ingredient("spicy sauce", INGREDIENT_TYPE_SAUCE, 90.0) + +@pytest.fixture +def filling_ingredient(): + return create_mock_ingredient("Cutlet", INGREDIENT_TYPE_FILLING, 100.0) + +@pytest.fixture(params=[1, 3, 5, 10]) +def ingredient_count(request): + """Parametrized fixture для количества ингредиентов""" + return request.param + +@pytest.fixture(params=[ + (100.0, [50.0], 250.0), + (150.0, [50.0, 75.0], 425.0), + (200.0, [100.0, 100.0, 100.0], 700.0), +]) +def price_combinations(request): + """Parametrized fixture для комбинаций цен""" + return request.param + +@pytest.fixture(params=[(0, 1), (1, 0), (0, 2), (2, 0)]) +def move_positions(request): + """Parametrized fixture для позиций перемещения ингредиентов""" + return request.param \ No newline at end of file From 3a3fbe30a087e6ab3d988a87425fe7f6b846f857 Mon Sep 17 00:00:00 2001 From: Leonov Eduard Date: Thu, 4 Dec 2025 15:56:33 +0700 Subject: [PATCH 2/4] The first part of the Diploma --- __init__.py | 0 bun.py | 15 ++++++++++++++ burger.py | 48 +++++++++++++++++++++++++++++++++++++++++++++ database.py | 33 +++++++++++++++++++++++++++++++ ingredient.py | 20 +++++++++++++++++++ ingredient_types.py | 7 +++++++ praktikum.py | 41 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 164 insertions(+) create mode 100644 __init__.py create mode 100644 bun.py create mode 100644 burger.py create mode 100644 database.py create mode 100644 ingredient.py create mode 100644 ingredient_types.py create mode 100644 praktikum.py diff --git a/__init__.py b/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/bun.py b/bun.py new file mode 100644 index 000000000..5504bc1f4 --- /dev/null +++ b/bun.py @@ -0,0 +1,15 @@ +class Bun: + """ + Модель булочки для бургера. + Булочке можно дать название и назначить цену. + """ + + def __init__(self, name: str, price: float): + self.name = name + self.price = price + + def get_name(self) -> str: + return self.name + + def get_price(self) -> float: + return self.price diff --git a/burger.py b/burger.py new file mode 100644 index 000000000..2b3b6a88b --- /dev/null +++ b/burger.py @@ -0,0 +1,48 @@ +from typing import List + +from praktikum.bun import Bun +from praktikum.ingredient import Ingredient + + +class Burger: + """ + Модель бургера. + Бургер состоит из булочек и ингредиентов (начинка или соус). + Ингредиенты можно перемещать и удалять. + Можно распечать чек с информацией о бургере. + """ + + def __init__(self): + self.bun = None + self.ingredients: List[Ingredient] = [] + + def set_buns(self, bun: Bun): + self.bun = bun + + def add_ingredient(self, ingredient: Ingredient): + self.ingredients.append(ingredient) + + def remove_ingredient(self, index: int): + del self.ingredients[index] + + def move_ingredient(self, index: int, new_index: int): + self.ingredients.insert(new_index, self.ingredients.pop(index)) + + def get_price(self) -> float: + price = self.bun.get_price() * 2 + + for ingredient in self.ingredients: + price += ingredient.get_price() + + return price + + 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'Price: {self.get_price()}') + + return '\n'.join(receipt) diff --git a/database.py b/database.py new file mode 100644 index 000000000..4c75baf71 --- /dev/null +++ b/database.py @@ -0,0 +1,33 @@ +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 + + +class Database: + """ + Класс с методами по работе с базой данных. + """ + + def __init__(self): + self.buns: List[Bun] = [] + self.ingredients: List[Ingredient] = [] + + self.buns.append(Bun("black bun", 100)) + self.buns.append(Bun("white bun", 200)) + self.buns.append(Bun("red bun", 300)) + + self.ingredients.append(Ingredient(INGREDIENT_TYPE_SAUCE, "hot sauce", 100)) + self.ingredients.append(Ingredient(INGREDIENT_TYPE_SAUCE, "sour cream", 200)) + self.ingredients.append(Ingredient(INGREDIENT_TYPE_SAUCE, "chili sauce", 300)) + + self.ingredients.append(Ingredient(INGREDIENT_TYPE_FILLING, "cutlet", 100)) + self.ingredients.append(Ingredient(INGREDIENT_TYPE_FILLING, "dinosaur", 200)) + self.ingredients.append(Ingredient(INGREDIENT_TYPE_FILLING, "sausage", 300)) + + def available_buns(self) -> List[Bun]: + return self.buns + + def available_ingredients(self) -> List[Ingredient]: + return self.ingredients diff --git a/ingredient.py b/ingredient.py new file mode 100644 index 000000000..0e50db8a2 --- /dev/null +++ b/ingredient.py @@ -0,0 +1,20 @@ +class Ingredient: + """ + Модель ингредиента. + Ингредиент: начинка или соус. + У ингредиента есть тип (начинка или соус), название и цена. + """ + + def __init__(self, ingredient_type: str, name: str, price: float): + self.type = ingredient_type + self.name = name + self.price = price + + def get_price(self) -> float: + return self.price + + def get_name(self) -> str: + return self.name + + def get_type(self) -> str: + return self.type diff --git a/ingredient_types.py b/ingredient_types.py new file mode 100644 index 000000000..34940ad5d --- /dev/null +++ b/ingredient_types.py @@ -0,0 +1,7 @@ +""" +Перечисление с типами ингредиентов. +SAUCE – соус +FILLING – начинка +""" +INGREDIENT_TYPE_SAUCE = 'SAUCE' +INGREDIENT_TYPE_FILLING = 'FILLING' diff --git a/praktikum.py b/praktikum.py new file mode 100644 index 000000000..ec522fa6d --- /dev/null +++ b/praktikum.py @@ -0,0 +1,41 @@ +from typing import List + +from praktikum.bun import Bun +from praktikum.burger import Burger +from praktikum.database import Database +from praktikum.ingredient import Ingredient + + +def main(): + # Инициализируем базу данных + database: Database = Database() + + # Создадим новый бургер + burger: Burger = Burger() + + # Считаем список доступных булок из базы данных + buns: List[Bun] = database.available_buns() + + # Считаем список доступных ингредиентов из базы данных + ingredients: List[Ingredient] = database.available_ingredients() + + # Соберём бургер + burger.set_buns(buns[0]) + + burger.add_ingredient(ingredients[1]) + burger.add_ingredient(ingredients[4]) + burger.add_ingredient(ingredients[3]) + burger.add_ingredient(ingredients[5]) + + # Переместим слой с ингредиентом + burger.move_ingredient(2, 1) + + # Удалим ингредиент + burger.remove_ingredient(3) + + # Распечатаем рецепт бургера + print(burger.get_receipt()) + + +if __name__ == "__main__": + main() From 8cf1007e2faa958ec4fcea3653b87b24af9dd1a6 Mon Sep 17 00:00:00 2001 From: Leonov Eduard Date: Fri, 5 Dec 2025 19:17:06 +0700 Subject: [PATCH 3/4] The comments have been corrected --- .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 165 bytes praktikum/__pycache__/bun.cpython-312.pyc | Bin 0 -> 1046 bytes praktikum/__pycache__/burger.cpython-312.pyc | Bin 0 -> 3202 bytes .../__pycache__/ingredient.cpython-312.pyc | Bin 0 -> 1362 bytes .../ingredient_types.cpython-312.pyc | Bin 0 -> 393 bytes tests/burger_test.py | 218 ++++++++++-------- tests/conftest.py | 34 ++- tests/helpers.py | 45 ++++ 8 files changed, 176 insertions(+), 121 deletions(-) create mode 100644 praktikum/__pycache__/__init__.cpython-312.pyc create mode 100644 praktikum/__pycache__/bun.cpython-312.pyc create mode 100644 praktikum/__pycache__/burger.cpython-312.pyc create mode 100644 praktikum/__pycache__/ingredient.cpython-312.pyc create mode 100644 praktikum/__pycache__/ingredient_types.cpython-312.pyc create mode 100644 tests/helpers.py diff --git a/praktikum/__pycache__/__init__.cpython-312.pyc b/praktikum/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d1d85c88a893f9dff77ae0a9fb3d5e06fde8e38 GIT binary patch literal 165 zcmX@j%ge<81ZjsKXMpI(AOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<>G7=6Iz^FR2<`& zlAD>ASzJ<-Sdw29Av*|>CbXIEz1KM;)|xbmDkNmJZ<7T!#d1{ipV$!^7Dwbxd zmR{COt)t~*rfz9v#f(85hggR=4zb}InMA1G^BUeO;7F#y#A`7WAH|{Q2fJzUF4z=( zF$|uIFXAW-^?tA?tHFl&APxZ!veDSfGo6QN@fBD;iGdj6&_VDF$p+#;d=~Ek2jWOT z6EH?KKse$^wgp>o_#oJfctfpGtXrYp4yemFy=DWnge08(<~1B&Ut_ha(rodTiZ<>FQvA% z7s)ZyNEqXm>+weEbZ01HEN_^C0B%U0g8$dn2uJD+m3P^v+t3-oc@k&Lv`bJ{;XQ?Vxn>t#j=vdSM7RL3Pb8xhgQJ`h za6RW5K!^NLRNWXQ75#E=ZA8GmSsJ4o8B|~CT^SQ_qZrjwz3aaqPDOOclmpczBmT9s fQ$pibwC-)b0uSU-xXwtWl>Sy0XzC{ckOO}K9}N{> literal 0 HcmV?d00001 diff --git a/praktikum/__pycache__/burger.cpython-312.pyc b/praktikum/__pycache__/burger.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a01304c64d9b0bbbe41d9d64c837e55a20ba314a GIT binary patch literal 3202 zcmbVOZ%hK>seaVRz{Aa4fPWwEeR$~)cA$g(o(I~^lQKD<|Jn}F)?ZS!EaQWH0h_#?C#ycA$;g0_ujmD zZ|2SXX5Q@mURvrWKzo1N5t-u&`2!a@^0>^xeqhFlN>nCFVoaD}kY}T8j0@&X~XX z46MhAM#79r!mP@KIh7qIVUNmb{8<)m@`MGI*Sx?Bz>BI^^8qgc??+zs!P=wxVO^q@ zXaU#@0AC7x8StgRmk*T5<(AOaPkS}mzn>w*F98|f7>|q}j2YvBd0jHTGq0MLjeEun zjMGidfg1&xWDXgR%pvm%=**f|BxBb2$yPERfczR*xeqcFKQ!)vi5ajw3*$pu<9lf< z$fw~P?%y}2@!$hEZ(F@;4$1C~6U)`jFC^m^xb;WadL$XY+8)k;XvQ1`lULArFmx3z zoQ6=wP~uv{039_93hqMXYp#;(v^iuuZ4N^im%-|^`MK@*&l29Y7?l~vY7gL-CoBOD zehU%|SU`hB0nVXbT;)#>kULDL%v#);{^c-lMiVi2QkuJxwEJ8ta;`ttb;eF`Q*yu(6$La?ijppO zvfh*vl*1kR8W=8rxgIL>m zw*Uj)kUp4;sSi&S(I9iz%>+YoUbD0WPFX^CGO5MYoc9>#67S2pRTbdOJ>ztx3+YmE z6{_I?k%)n;SYwJcS+U*}>!v;;VT4 z${esOY!a?n@&_if)P63t|LsI2JQY7C1 zO1ccg@+A6h@5+YunW25z(7R^n-N$?;^!}W9*g;C5TB@JMm$U{Cn6Y6R0cNGdz6z$h za2`oz(g4gQcyN7atB4MfQX2vyz4vc!{}Q?SZFzjL2-~3#=Bv3tzhB>xGw@ zq>&!YsVWCXi+4o!Q&*te=9DO12e()pd=)Kw zBQ=oJEIyjJpi#RzEl*z}5_kK7<)vDW7D=Y)vQoB6(5$)^wTg5lfPJ=7hjgK{9E%P z!>VFA$jK1%}^#yB7KF$Tv>u$TuQ?gqb=v4~rwr^f443Vde#aubg;$fxt8$^zjW7 z$NnZTIalLlowC;wpgi!?js3$a&Hq(ufo;KGo3*FwxtL#{tJ1hBX`*_bRi@v5QW{tAByih6#ti zOJZ}T00&E##q%isA6U~U24=DYq9Z>75zH;(?BGQrpKpNY5+yoCvNc-!A7cDYz7x*p4URhFH0+&QmW%T5<-rD{1+ z^isCQa&umBu3pX#dP>(Cfletzdz3a4gPo>(P94g*XFx2F{p93|x)$G0jtg~aVnuy! zgz$?5G3I!6R>}8U1SeuKkO=@V5b_B0pXWYdSizD+&zlm%*Y9Ge$%a7&@ma^CV%p8* zA$oo9DBd3d0sO`iFPf`OuBRA!k3&Xm;RL2WL`BD!QM9wKl@0;bx-3+?9-`GTByD2j zN=QI;Vv?5Hm_(e4@OQ+5xX3#L4?`3=hn29O?yJzRcH6kd&Vx@>9|O=)BuV-qC#2Lj I0zw4*0&{(M4*&oF literal 0 HcmV?d00001 diff --git a/praktikum/__pycache__/ingredient_types.cpython-312.pyc b/praktikum/__pycache__/ingredient_types.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b5f2fe26c65fc3e54c4934fcfe320fbf5013e441 GIT binary patch literal 393 zcmX@j%ge<81ZjsKXY2*ik3k$5V1zP03ji6@8B!Rc7*ZIc7*m*{m@1hySxSq5!dw^T zU)XxF0f^f#?6}x?VfTft7xrG*abc^%#YTmTO+eQE3mY!%xv)b4$lQBjGf3%$Eg%IK z_5!8%UD%|@73>)5?5gmnVKPw9g?$&BFE(kjMbnc!*kYbYZC8l?IyUl8MxS&);T3#H->V+x8Avr96wOLJo~^U{k_ zQ!-QYO5#f@3sQ^q3My}L*yQG?l;)(`6@kJQ6pF4BO~KSCKg7P4_pkA3Ktke PZ%8R$WDqan07?P?>Q|Nk literal 0 HcmV?d00001 diff --git a/tests/burger_test.py b/tests/burger_test.py index 7f6580459..f380225e5 100644 --- a/tests/burger_test.py +++ b/tests/burger_test.py @@ -1,261 +1,277 @@ -pytest_plugins = ['conftest'] +import pytest import sys -import os -sys.path.insert(0, os.path.dirname(__file__)) - -from conftest import create_mock_ingredient, create_mock_bun +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent)) +sys.path.insert(0, str(Path(__file__).parent.parent)) + +from helpers import ( + create_mock_ingredient, + create_mock_bun, + setup_burger_with_bun_and_ingredients, + add_multiple_ingredients_to_burger, + calculate_burger_price, + verify_ingredients_in_receipt +) from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING class TestBurger: # Проверка булочек + def test_set_bun_success(self, burger, white_bun): + """Проверка установки булки""" burger.set_buns(white_bun) assert burger.bun == white_bun - # Проверка замены булочки def test_set_bun_replace_existing(self, burger, white_bun, black_bun): + """Проверка замены булки на другую""" burger.set_buns(white_bun) burger.set_buns(black_bun) assert burger.bun == black_bun - # Проверка добавления одного ингредиента + # Проверка добавления ингредиентов + def test_add_ingredient_one(self, burger, sauce_ingredient): + """Проверка добавления одного ингредиента""" burger.add_ingredient(sauce_ingredient) assert len(burger.ingredients) == 1 - # Проверка добавления ингредиента в начало списка def test_add_ingredient_first_element(self, burger, sauce_ingredient): + """Проверка, что добавленный ингредиент находится в начале списка""" burger.add_ingredient(sauce_ingredient) assert burger.ingredients[0] == sauce_ingredient - # Проверка добавления нескольких ингредиентов def test_add_ingredient_multiple(self, burger, ingredient_count): - for i in range(ingredient_count): - ingredient = create_mock_ingredient(f"Ingredient_{i}", INGREDIENT_TYPE_SAUCE, 50.0) - burger.add_ingredient(ingredient) + """Проверка добавления нескольких ингредиентов""" + ingredients = [ + create_mock_ingredient(f"Ingredient_{i}", INGREDIENT_TYPE_SAUCE, 50.0) + for i in range(ingredient_count) + ] + burger = add_multiple_ingredients_to_burger(burger, ingredients) assert len(burger.ingredients) == ingredient_count - # Проверка сохранения порядка при добавлении (первый элемент) def test_add_ingredient_keeps_order_first(self, burger, sauce_ingredient, filling_ingredient): + """Проверка сохранения порядка: первый элемент""" burger.add_ingredient(sauce_ingredient) burger.add_ingredient(filling_ingredient) assert burger.ingredients[0] == sauce_ingredient - # Проверка сохранения порядка при добавлении (второй элемент) def test_add_ingredient_keeps_order_second(self, burger, sauce_ingredient, filling_ingredient): + """Проверка сохранения порядка: второй элемент""" burger.add_ingredient(sauce_ingredient) burger.add_ingredient(filling_ingredient) assert burger.ingredients[1] == filling_ingredient - # Проверка уменьшения количества при удалении + # Проверка удаления ингредиентов + def test_remove_ingredient_decreases_count(self, burger): + """Проверка уменьшения количества при удалении""" ing1 = create_mock_ingredient("First", INGREDIENT_TYPE_SAUCE, 50.0) ing2 = create_mock_ingredient("Second", INGREDIENT_TYPE_FILLING, 100.0) - burger.add_ingredient(ing1) - burger.add_ingredient(ing2) + burger = add_multiple_ingredients_to_burger(burger, [ing1, ing2]) burger.remove_ingredient(0) assert len(burger.ingredients) == 1 - # Проверка удаления первого ингредиента оставляет второй def test_remove_ingredient_first_leaves_second(self, burger): + """Проверка удаления первого ингредиента оставляет второй""" ing1 = create_mock_ingredient("First", INGREDIENT_TYPE_SAUCE, 50.0) ing2 = create_mock_ingredient("Second", INGREDIENT_TYPE_FILLING, 100.0) - burger.add_ingredient(ing1) - burger.add_ingredient(ing2) + burger = add_multiple_ingredients_to_burger(burger, [ing1, ing2]) burger.remove_ingredient(0) assert burger.ingredients[0] == ing2 - # Проверка удаления среднего ингредиента def test_remove_ingredient_middle(self, burger): + """Проверка удаления среднего ингредиента""" ing1 = create_mock_ingredient("First", INGREDIENT_TYPE_SAUCE, 50.0) ing2 = create_mock_ingredient("Middle", INGREDIENT_TYPE_FILLING, 100.0) ing3 = create_mock_ingredient("Last", INGREDIENT_TYPE_SAUCE, 75.0) - burger.add_ingredient(ing1) - burger.add_ingredient(ing2) - burger.add_ingredient(ing3) + burger = add_multiple_ingredients_to_burger(burger, [ing1, ing2, ing3]) burger.remove_ingredient(1) assert burger.ingredients[1] == ing3 - # Проверка удаления ингредиента по индексу def test_remove_ingredient_at_index(self, burger, move_positions): + """Проверка удаления ингредиента по индексу""" from_pos, to_pos = move_positions - for i in range(3): - ing = create_mock_ingredient(f"Ing_{i}", INGREDIENT_TYPE_SAUCE, 50.0) - burger.add_ingredient(ing) + ingredients = [ + create_mock_ingredient(f"Ing_{i}", INGREDIENT_TYPE_SAUCE, 50.0) + for i in range(3) + ] + burger = add_multiple_ingredients_to_burger(burger, ingredients) burger.remove_ingredient(from_pos) assert len(burger.ingredients) == 2 - # Проверка перемещения ингредиента вперёд + # Проверка перемещения ингредиентов + def test_move_ingredient_forward(self, burger): + """Проверка перемещения ингредиента вперёд""" ing1 = create_mock_ingredient("First", INGREDIENT_TYPE_SAUCE, 50.0) ing2 = create_mock_ingredient("Second", INGREDIENT_TYPE_FILLING, 100.0) ing3 = create_mock_ingredient("Third", INGREDIENT_TYPE_SAUCE, 75.0) - burger.add_ingredient(ing1) - burger.add_ingredient(ing2) - burger.add_ingredient(ing3) + burger = add_multiple_ingredients_to_burger(burger, [ing1, ing2, ing3]) burger.move_ingredient(0, 2) assert burger.ingredients[2] == ing1 - # Проверка изменения первой позиции при перемещении def test_move_ingredient_changes_first_position(self, burger): + """Проверка изменения первой позиции при перемещении""" ing1 = create_mock_ingredient("First", INGREDIENT_TYPE_SAUCE, 50.0) ing2 = create_mock_ingredient("Second", INGREDIENT_TYPE_FILLING, 100.0) ing3 = create_mock_ingredient("Third", INGREDIENT_TYPE_SAUCE, 75.0) - burger.add_ingredient(ing1) - burger.add_ingredient(ing2) - burger.add_ingredient(ing3) + burger = add_multiple_ingredients_to_burger(burger, [ing1, ing2, ing3]) burger.move_ingredient(0, 2) assert burger.ingredients[0] == ing2 - # Проверка перемещения ингредиента назад def test_move_ingredient_backward(self, burger): + """Проверка перемещения ингредиента назад""" ing1 = create_mock_ingredient("First", INGREDIENT_TYPE_SAUCE, 50.0) ing2 = create_mock_ingredient("Second", INGREDIENT_TYPE_FILLING, 100.0) ing3 = create_mock_ingredient("Third", INGREDIENT_TYPE_SAUCE, 75.0) - burger.add_ingredient(ing1) - burger.add_ingredient(ing2) - burger.add_ingredient(ing3) + burger = add_multiple_ingredients_to_burger(burger, [ing1, ing2, ing3]) burger.move_ingredient(2, 0) assert burger.ingredients[0] == ing3 - # Проверка сохранения количества при перемещении def test_move_ingredient_preserves_count(self, burger, move_positions): + """Проверка сохранения количества при перемещении""" from_pos, to_pos = move_positions - for i in range(3): - ing = create_mock_ingredient(f"Ing_{i}", INGREDIENT_TYPE_SAUCE, 50.0) - burger.add_ingredient(ing) + ingredients = [ + create_mock_ingredient(f"Ing_{i}", INGREDIENT_TYPE_SAUCE, 50.0) + for i in range(3) + ] + burger = add_multiple_ingredients_to_burger(burger, ingredients) burger.move_ingredient(from_pos, to_pos) assert len(burger.ingredients) == 3 - # Проверка цены только булки + # Проверка расчёта цены + def test_price_only_bun(self, burger, white_bun): + """Проверка цены только булки""" burger.set_buns(white_bun) - assert burger.get_price() == 200.0 + expected_price = calculate_burger_price(100.0, []) + assert burger.get_price() == expected_price - # Проверка цены булки и одного ингредиента def test_price_bun_and_one_ingredient(self, burger, white_bun, sauce_ingredient): - burger.set_buns(white_bun) - burger.add_ingredient(sauce_ingredient) - assert burger.get_price() == 290.0 + """Проверка цены булки и одного ингредиента""" + burger = setup_burger_with_bun_and_ingredients(burger, white_bun, sauce_ingredient) + expected_price = calculate_burger_price(100.0, [90.0]) + assert burger.get_price() == expected_price - # Проверка цены булки и двух ингредиентов def test_price_bun_and_two_ingredients(self, burger, white_bun, sauce_ingredient, filling_ingredient): - burger.set_buns(white_bun) - burger.add_ingredient(sauce_ingredient) - burger.add_ingredient(filling_ingredient) - assert burger.get_price() == 390.0 + """Проверка цены булки и двух ингредиентов""" + burger = setup_burger_with_bun_and_ingredients(burger, white_bun, sauce_ingredient, filling_ingredient) + expected_price = calculate_burger_price(100.0, [90.0, 100.0]) + assert burger.get_price() == expected_price - # Проверка цены различных комбинаций def test_price_various_combinations(self, burger, price_combinations): + """Проверка цены различных комбинаций""" bun_price, ing_prices, expected_price = price_combinations bun = create_mock_bun("Test Bun", bun_price) burger.set_buns(bun) for price in ing_prices: ing = create_mock_ingredient("Test Ing", INGREDIENT_TYPE_SAUCE, price) burger.add_ingredient(ing) + + calculated_price = calculate_burger_price(bun_price, ing_prices) + assert burger.get_price() == calculated_price assert burger.get_price() == expected_price - # Проверка уменьшения цены при удалении ингредиента def test_remove_ingredient_decreases_price(self, burger, white_bun): - burger.set_buns(white_bun) + """Проверка уменьшения цены при удалении ингредиента""" ing1 = create_mock_ingredient("Item1", INGREDIENT_TYPE_SAUCE, 100.0) ing2 = create_mock_ingredient("Item2", INGREDIENT_TYPE_FILLING, 150.0) - burger.add_ingredient(ing1) - burger.add_ingredient(ing2) + burger = setup_burger_with_bun_and_ingredients(burger, white_bun, ing1, ing2) + price_before = burger.get_price() burger.remove_ingredient(0) price_after = burger.get_price() + assert price_after == price_before - 100.0 - # Проверка цены после перемещения ингредиента def test_burger_move_and_get_price(self, burger, white_bun): - burger.set_buns(white_bun) + """Проверка цены после перемещения ингредиента""" ing1 = create_mock_ingredient("Item1", INGREDIENT_TYPE_SAUCE, 100.0) ing2 = create_mock_ingredient("Item2", INGREDIENT_TYPE_FILLING, 150.0) - burger.add_ingredient(ing1) - burger.add_ingredient(ing2) + burger = setup_burger_with_bun_and_ingredients(burger, white_bun, ing1, ing2) burger.move_ingredient(0, 1) - price = burger.get_price() - assert price == 450.0 + + expected_price = calculate_burger_price(100.0, [100.0, 150.0]) + assert burger.get_price() == expected_price + + # Проверка чека - # Проверка наличия булки в чеке def test_receipt_contains_bun(self, burger, white_bun, sauce_ingredient): - burger.set_buns(white_bun) - burger.add_ingredient(sauce_ingredient) + """Проверка наличия булки в чеке""" + burger = setup_burger_with_bun_and_ingredients(burger, white_bun, sauce_ingredient) receipt = burger.get_receipt() assert "(==== White Bun ====)" in receipt - # Проверка наличия ингредиента в чеке def test_receipt_contains_ingredient(self, burger, white_bun, sauce_ingredient): - burger.set_buns(white_bun) - burger.add_ingredient(sauce_ingredient) + """Проверка наличия ингредиента в чеке""" + burger = setup_burger_with_bun_and_ingredients(burger, white_bun, sauce_ingredient) receipt = burger.get_receipt() assert "spicy sauce" in receipt - # Проверка наличия цены в чеке def test_receipt_contains_price(self, burger, white_bun, sauce_ingredient): - burger.set_buns(white_bun) - burger.add_ingredient(sauce_ingredient) + """Проверка наличия цены в чеке""" + burger = setup_burger_with_bun_and_ingredients(burger, white_bun, sauce_ingredient) receipt = burger.get_receipt() assert "Price:" in receipt - # Проверка отображения всех ингредиентов в чеке def test_receipt_shows_all_ingredients(self, burger, white_bun): - burger.set_buns(white_bun) + """Проверка отображения всех ингредиентов в чеке""" ing1 = create_mock_ingredient("Item_0", INGREDIENT_TYPE_SAUCE, 50.0) ing2 = create_mock_ingredient("Item_1", INGREDIENT_TYPE_SAUCE, 50.0) ing3 = create_mock_ingredient("Item_2", INGREDIENT_TYPE_SAUCE, 50.0) - burger.add_ingredient(ing1) - burger.add_ingredient(ing2) - burger.add_ingredient(ing3) + burger = setup_burger_with_bun_and_ingredients(burger, white_bun, ing1, ing2, ing3) receipt = burger.get_receipt() - assert "Item_0" in receipt + + assert verify_ingredients_in_receipt(receipt, ["Item_0", "Item_1", "Item_2"]) - # Проверка соответствия цены в чеке и методе get_price def test_receipt_price_matches_get_price(self, burger, white_bun, sauce_ingredient): - burger.set_buns(white_bun) - burger.add_ingredient(sauce_ingredient) + """Проверка соответствия цены в чеке и методе get_price""" + burger = setup_burger_with_bun_and_ingredients(burger, white_bun, sauce_ingredient) receipt = burger.get_receipt() expected_price = burger.get_price() + assert f"Price: {expected_price}" in receipt - # Проверка чека без ингредиентов def test_receipt_zero_ingredients(self, burger, white_bun): + """Проверка чека без ингредиентов""" burger.set_buns(white_bun) receipt = burger.get_receipt() assert "(==== White Bun ====)" in receipt - # Проверка чека с одним ингредиентом def test_receipt_one_ingredient(self, burger, white_bun): - burger.set_buns(white_bun) + """Проверка чека с одним ингредиентом""" ing = create_mock_ingredient("Ing_0", INGREDIENT_TYPE_SAUCE, 25.0) - burger.add_ingredient(ing) + burger = setup_burger_with_bun_and_ingredients(burger, white_bun, ing) receipt = burger.get_receipt() assert "Price:" in receipt - # Проверка чека с тремя ингредиентами def test_receipt_three_ingredients(self, burger, white_bun): - burger.set_buns(white_bun) - for i in range(3): - ing = create_mock_ingredient(f"Ing_{i}", INGREDIENT_TYPE_SAUCE, 25.0) - burger.add_ingredient(ing) + """Проверка чека с тремя ингредиентами""" + ingredients = [ + create_mock_ingredient(f"Ing_{i}", INGREDIENT_TYPE_SAUCE, 25.0) + for i in range(3) + ] + burger = setup_burger_with_bun_and_ingredients(burger, white_bun, *ingredients) receipt = burger.get_receipt() assert "Price:" in receipt - # Проверка чека с пятью ингредиентами def test_receipt_five_ingredients(self, burger, white_bun): - burger.set_buns(white_bun) - for i in range(5): - ing = create_mock_ingredient(f"Ing_{i}", INGREDIENT_TYPE_SAUCE, 25.0) - burger.add_ingredient(ing) + """Проверка чека с пятью ингредиентами""" + ingredients = [ + create_mock_ingredient(f"Ing_{i}", INGREDIENT_TYPE_SAUCE, 25.0) + for i in range(5) + ] + burger = setup_burger_with_bun_and_ingredients(burger, white_bun, *ingredients) receipt = burger.get_receipt() assert "Price:" in receipt - # Проверка добавления и удаления ингредиента + # Комбинированные тесты + def test_burger_add_and_remove_ingredient(self, burger, white_bun, sauce_ingredient): - burger.set_buns(white_bun) - burger.add_ingredient(sauce_ingredient) + """Проверка добавления и удаления ингредиента""" + burger = setup_burger_with_bun_and_ingredients(burger, white_bun, sauce_ingredient) burger.remove_ingredient(0) assert len(burger.ingredients) == 0 \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py index 6848e91cd..848ab994f 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,60 +1,54 @@ import pytest -from unittest.mock import Mock -from praktikum.burger import Burger -from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING -__all__ = ['create_mock_ingredient', 'create_mock_bun'] +import sys +from pathlib import Path +sys.path.insert(0, str(Path(__file__).parent)) +sys.path.insert(0, str(Path(__file__).parent.parent)) -def create_mock_ingredient(name, ingredient_type, price): - """Вспомогательная функция для создания mock-ингредиента""" - ingredient = Mock() - ingredient.get_name = Mock(return_value=name) - ingredient.get_type = Mock(return_value=ingredient_type) - ingredient.get_price = Mock(return_value=price) - return ingredient +from helpers import create_mock_ingredient, create_mock_bun +from praktikum.burger import Burger +from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING -def create_mock_bun(name, price): - """Вспомогательная функция для создания mock-булки""" - bun = Mock() - bun.get_name = Mock(return_value=name) - bun.get_price = Mock(return_value=price) - return bun @pytest.fixture def burger(): return Burger() + @pytest.fixture def white_bun(): return create_mock_bun("White Bun", 100.0) + @pytest.fixture def black_bun(): return create_mock_bun("Black Bun", 150.0) + @pytest.fixture def sauce_ingredient(): return create_mock_ingredient("spicy sauce", INGREDIENT_TYPE_SAUCE, 90.0) + @pytest.fixture def filling_ingredient(): return create_mock_ingredient("Cutlet", INGREDIENT_TYPE_FILLING, 100.0) + @pytest.fixture(params=[1, 3, 5, 10]) def ingredient_count(request): - """Parametrized fixture для количества ингредиентов""" return request.param + @pytest.fixture(params=[ (100.0, [50.0], 250.0), (150.0, [50.0, 75.0], 425.0), (200.0, [100.0, 100.0, 100.0], 700.0), ]) def price_combinations(request): - """Parametrized fixture для комбинаций цен""" return request.param + @pytest.fixture(params=[(0, 1), (1, 0), (0, 2), (2, 0)]) def move_positions(request): - """Parametrized fixture для позиций перемещения ингредиентов""" return request.param \ No newline at end of file diff --git a/tests/helpers.py b/tests/helpers.py new file mode 100644 index 000000000..9d3304f21 --- /dev/null +++ b/tests/helpers.py @@ -0,0 +1,45 @@ +from unittest.mock import Mock +from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + + +def create_mock_ingredient(name: str, ingredient_type: str, price: float) -> Mock: + ingredient = Mock() + ingredient.get_name = Mock(return_value=name) + ingredient.get_type = Mock(return_value=ingredient_type) + ingredient.get_price = Mock(return_value=price) + return ingredient + + +def create_mock_bun(name: str, price: float) -> Mock: + bun = Mock() + bun.get_name = Mock(return_value=name) + bun.get_price = Mock(return_value=price) + return bun + + +def setup_burger_with_bun_and_ingredients(burger, bun, *ingredients): + burger.set_buns(bun) + for ingredient in ingredients: + burger.add_ingredient(ingredient) + return burger + + +def add_multiple_ingredients_to_burger(burger, ingredient_list): + for ingredient in ingredient_list: + burger.add_ingredient(ingredient) + return burger + + +def calculate_burger_price(bun_price: float, ingredient_prices: list) -> float: + return (bun_price * 2) + sum(ingredient_prices) + + +def extract_price_from_receipt(receipt: str) -> float: + price_line = [line for line in receipt.split('\n') if line.startswith('Price:')] + if price_line: + return float(price_line[0].replace('Price: ', '')) + return 0.0 + + +def verify_ingredients_in_receipt(receipt: str, ingredient_names: list) -> bool: + return all(name in receipt for name in ingredient_names) \ No newline at end of file From 335f430c60b5b7bad460dda35689468a7f79b119 Mon Sep 17 00:00:00 2001 From: Leonov Eduard Date: Wed, 10 Dec 2025 01:29:38 +0700 Subject: [PATCH 4/4] Correction of comments --- .../__pycache__/__init__.cpython-312.pyc | Bin 165 -> 0 bytes praktikum/__pycache__/bun.cpython-312.pyc | Bin 1046 -> 0 bytes praktikum/__pycache__/burger.cpython-312.pyc | Bin 3202 -> 0 bytes .../__pycache__/ingredient.cpython-312.pyc | Bin 1362 -> 0 bytes .../ingredient_types.cpython-312.pyc | Bin 393 -> 0 bytes tests/burger_test.py | 208 +++--------------- tests/conftest.py | 20 -- tests/helpers.py | 9 +- 8 files changed, 39 insertions(+), 198 deletions(-) delete mode 100644 praktikum/__pycache__/__init__.cpython-312.pyc delete mode 100644 praktikum/__pycache__/bun.cpython-312.pyc delete mode 100644 praktikum/__pycache__/burger.cpython-312.pyc delete mode 100644 praktikum/__pycache__/ingredient.cpython-312.pyc delete mode 100644 praktikum/__pycache__/ingredient_types.cpython-312.pyc diff --git a/praktikum/__pycache__/__init__.cpython-312.pyc b/praktikum/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 1d1d85c88a893f9dff77ae0a9fb3d5e06fde8e38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmX@j%ge<81ZjsKXMpI(AOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<>G7=6Iz^FR2<`& zlAD>ASzJ<-Sdw29Av*|>CbXIEz1KM;)|xbmDkNmJZ<7T!#d1{ipV$!^7Dwbxd zmR{COt)t~*rfz9v#f(85hggR=4zb}InMA1G^BUeO;7F#y#A`7WAH|{Q2fJzUF4z=( zF$|uIFXAW-^?tA?tHFl&APxZ!veDSfGo6QN@fBD;iGdj6&_VDF$p+#;d=~Ek2jWOT z6EH?KKse$^wgp>o_#oJfctfpGtXrYp4yemFy=DWnge08(<~1B&Ut_ha(rodTiZ<>FQvA% z7s)ZyNEqXm>+weEbZ01HEN_^C0B%U0g8$dn2uJD+m3P^v+t3-oc@k&Lv`bJ{;XQ?Vxn>t#j=vdSM7RL3Pb8xhgQJ`h za6RW5K!^NLRNWXQ75#E=ZA8GmSsJ4o8B|~CT^SQ_qZrjwz3aaqPDOOclmpczBmT9s fQ$pibwC-)b0uSU-xXwtWl>Sy0XzC{ckOO}K9}N{> diff --git a/praktikum/__pycache__/burger.cpython-312.pyc b/praktikum/__pycache__/burger.cpython-312.pyc deleted file mode 100644 index a01304c64d9b0bbbe41d9d64c837e55a20ba314a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3202 zcmbVOZ%hK>seaVRz{Aa4fPWwEeR$~)cA$g(o(I~^lQKD<|Jn}F)?ZS!EaQWH0h_#?C#ycA$;g0_ujmD zZ|2SXX5Q@mURvrWKzo1N5t-u&`2!a@^0>^xeqhFlN>nCFVoaD}kY}T8j0@&X~XX z46MhAM#79r!mP@KIh7qIVUNmb{8<)m@`MGI*Sx?Bz>BI^^8qgc??+zs!P=wxVO^q@ zXaU#@0AC7x8StgRmk*T5<(AOaPkS}mzn>w*F98|f7>|q}j2YvBd0jHTGq0MLjeEun zjMGidfg1&xWDXgR%pvm%=**f|BxBb2$yPERfczR*xeqcFKQ!)vi5ajw3*$pu<9lf< z$fw~P?%y}2@!$hEZ(F@;4$1C~6U)`jFC^m^xb;WadL$XY+8)k;XvQ1`lULArFmx3z zoQ6=wP~uv{039_93hqMXYp#;(v^iuuZ4N^im%-|^`MK@*&l29Y7?l~vY7gL-CoBOD zehU%|SU`hB0nVXbT;)#>kULDL%v#);{^c-lMiVi2QkuJxwEJ8ta;`ttb;eF`Q*yu(6$La?ijppO zvfh*vl*1kR8W=8rxgIL>m zw*Uj)kUp4;sSi&S(I9iz%>+YoUbD0WPFX^CGO5MYoc9>#67S2pRTbdOJ>ztx3+YmE z6{_I?k%)n;SYwJcS+U*}>!v;;VT4 z${esOY!a?n@&_if)P63t|LsI2JQY7C1 zO1ccg@+A6h@5+YunW25z(7R^n-N$?;^!}W9*g;C5TB@JMm$U{Cn6Y6R0cNGdz6z$h za2`oz(g4gQcyN7atB4MfQX2vyz4vc!{}Q?SZFzjL2-~3#=Bv3tzhB>xGw@ zq>&!YsVWCXi+4o!Q&*te=9DO12e()pd=)Kw zBQ=oJEIyjJpi#RzEl*z}5_kK7<)vDW7D=Y)vQoB6(5$)^wTg5lfPJ=7hjgK{9E%P z!>VFA$jK1%}^#yB7KF$Tv>u$TuQ?gqb=v4~rwr^f443Vde#aubg;$fxt8$^zjW7 z$NnZTIalLlowC;wpgi!?js3$a&Hq(ufo;KGo3*FwxtL#{tJ1hBX`*_bRi@v5QW{tAByih6#ti zOJZ}T00&E##q%isA6U~U24=DYq9Z>75zH;(?BGQrpKpNY5+yoCvNc-!A7cDYz7x*p4URhFH0+&QmW%T5<-rD{1+ z^isCQa&umBu3pX#dP>(Cfletzdz3a4gPo>(P94g*XFx2F{p93|x)$G0jtg~aVnuy! zgz$?5G3I!6R>}8U1SeuKkO=@V5b_B0pXWYdSizD+&zlm%*Y9Ge$%a7&@ma^CV%p8* zA$oo9DBd3d0sO`iFPf`OuBRA!k3&Xm;RL2WL`BD!QM9wKl@0;bx-3+?9-`GTByD2j zN=QI;Vv?5Hm_(e4@OQ+5xX3#L4?`3=hn29O?yJzRcH6kd&Vx@>9|O=)BuV-qC#2Lj I0zw4*0&{(M4*&oF diff --git a/praktikum/__pycache__/ingredient_types.cpython-312.pyc b/praktikum/__pycache__/ingredient_types.cpython-312.pyc deleted file mode 100644 index b5f2fe26c65fc3e54c4934fcfe320fbf5013e441..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmX@j%ge<81ZjsKXY2*ik3k$5V1zP03ji6@8B!Rc7*ZIc7*m*{m@1hySxSq5!dw^T zU)XxF0f^f#?6}x?VfTft7xrG*abc^%#YTmTO+eQE3mY!%xv)b4$lQBjGf3%$Eg%IK z_5!8%UD%|@73>)5?5gmnVKPw9g?$&BFE(kjMbnc!*kYbYZC8l?IyUl8MxS&);T3#H->V+x8Avr96wOLJo~^U{k_ zQ!-QYO5#f@3sQ^q3My}L*yQG?l;)(`6@kJQ6pF4BO~KSCKg7P4_pkA3Ktke PZ%8R$WDqan07?P?>Q|Nk diff --git a/tests/burger_test.py b/tests/burger_test.py index f380225e5..cebcb8455 100644 --- a/tests/burger_test.py +++ b/tests/burger_test.py @@ -8,66 +8,49 @@ from helpers import ( create_mock_ingredient, create_mock_bun, - setup_burger_with_bun_and_ingredients, add_multiple_ingredients_to_burger, calculate_burger_price, - verify_ingredients_in_receipt + create_ingredients_list ) from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING class TestBurger: - - # Проверка булочек - + def test_set_bun_success(self, burger, white_bun): - """Проверка установки булки""" burger.set_buns(white_bun) assert burger.bun == white_bun def test_set_bun_replace_existing(self, burger, white_bun, black_bun): - """Проверка замены булки на другую""" burger.set_buns(white_bun) burger.set_buns(black_bun) assert burger.bun == black_bun - # Проверка добавления ингредиентов - def test_add_ingredient_one(self, burger, sauce_ingredient): - """Проверка добавления одного ингредиента""" burger.add_ingredient(sauce_ingredient) assert len(burger.ingredients) == 1 def test_add_ingredient_first_element(self, burger, sauce_ingredient): - """Проверка, что добавленный ингредиент находится в начале списка""" burger.add_ingredient(sauce_ingredient) assert burger.ingredients[0] == sauce_ingredient def test_add_ingredient_multiple(self, burger, ingredient_count): - """Проверка добавления нескольких ингредиентов""" - ingredients = [ - create_mock_ingredient(f"Ingredient_{i}", INGREDIENT_TYPE_SAUCE, 50.0) - for i in range(ingredient_count) - ] + ingredients = create_ingredients_list(ingredient_count, INGREDIENT_TYPE_SAUCE, 50.0) burger = add_multiple_ingredients_to_burger(burger, ingredients) assert len(burger.ingredients) == ingredient_count def test_add_ingredient_keeps_order_first(self, burger, sauce_ingredient, filling_ingredient): - """Проверка сохранения порядка: первый элемент""" burger.add_ingredient(sauce_ingredient) burger.add_ingredient(filling_ingredient) assert burger.ingredients[0] == sauce_ingredient def test_add_ingredient_keeps_order_second(self, burger, sauce_ingredient, filling_ingredient): - """Проверка сохранения порядка: второй элемент""" burger.add_ingredient(sauce_ingredient) burger.add_ingredient(filling_ingredient) assert burger.ingredients[1] == filling_ingredient - # Проверка удаления ингредиентов - + def test_remove_ingredient_decreases_count(self, burger): - """Проверка уменьшения количества при удалении""" ing1 = create_mock_ingredient("First", INGREDIENT_TYPE_SAUCE, 50.0) ing2 = create_mock_ingredient("Second", INGREDIENT_TYPE_FILLING, 100.0) burger = add_multiple_ingredients_to_burger(burger, [ing1, ing2]) @@ -75,7 +58,6 @@ def test_remove_ingredient_decreases_count(self, burger): assert len(burger.ingredients) == 1 def test_remove_ingredient_first_leaves_second(self, burger): - """Проверка удаления первого ингредиента оставляет второй""" ing1 = create_mock_ingredient("First", INGREDIENT_TYPE_SAUCE, 50.0) ing2 = create_mock_ingredient("Second", INGREDIENT_TYPE_FILLING, 100.0) burger = add_multiple_ingredients_to_burger(burger, [ing1, ing2]) @@ -83,7 +65,6 @@ def test_remove_ingredient_first_leaves_second(self, burger): assert burger.ingredients[0] == ing2 def test_remove_ingredient_middle(self, burger): - """Проверка удаления среднего ингредиента""" ing1 = create_mock_ingredient("First", INGREDIENT_TYPE_SAUCE, 50.0) ing2 = create_mock_ingredient("Middle", INGREDIENT_TYPE_FILLING, 100.0) ing3 = create_mock_ingredient("Last", INGREDIENT_TYPE_SAUCE, 75.0) @@ -91,21 +72,13 @@ def test_remove_ingredient_middle(self, burger): burger.remove_ingredient(1) assert burger.ingredients[1] == ing3 - def test_remove_ingredient_at_index(self, burger, move_positions): - """Проверка удаления ингредиента по индексу""" - from_pos, to_pos = move_positions - ingredients = [ - create_mock_ingredient(f"Ing_{i}", INGREDIENT_TYPE_SAUCE, 50.0) - for i in range(3) - ] + def test_remove_ingredient_at_index(self, burger): + ingredients = create_ingredients_list(3, INGREDIENT_TYPE_SAUCE, 50.0) burger = add_multiple_ingredients_to_burger(burger, ingredients) - burger.remove_ingredient(from_pos) + burger.remove_ingredient(0) assert len(burger.ingredients) == 2 - # Проверка перемещения ингредиентов - def test_move_ingredient_forward(self, burger): - """Проверка перемещения ингредиента вперёд""" ing1 = create_mock_ingredient("First", INGREDIENT_TYPE_SAUCE, 50.0) ing2 = create_mock_ingredient("Second", INGREDIENT_TYPE_FILLING, 100.0) ing3 = create_mock_ingredient("Third", INGREDIENT_TYPE_SAUCE, 75.0) @@ -114,7 +87,6 @@ def test_move_ingredient_forward(self, burger): assert burger.ingredients[2] == ing1 def test_move_ingredient_changes_first_position(self, burger): - """Проверка изменения первой позиции при перемещении""" ing1 = create_mock_ingredient("First", INGREDIENT_TYPE_SAUCE, 50.0) ing2 = create_mock_ingredient("Second", INGREDIENT_TYPE_FILLING, 100.0) ing3 = create_mock_ingredient("Third", INGREDIENT_TYPE_SAUCE, 75.0) @@ -123,7 +95,6 @@ def test_move_ingredient_changes_first_position(self, burger): assert burger.ingredients[0] == ing2 def test_move_ingredient_backward(self, burger): - """Проверка перемещения ингредиента назад""" ing1 = create_mock_ingredient("First", INGREDIENT_TYPE_SAUCE, 50.0) ing2 = create_mock_ingredient("Second", INGREDIENT_TYPE_FILLING, 100.0) ing3 = create_mock_ingredient("Third", INGREDIENT_TYPE_SAUCE, 75.0) @@ -131,147 +102,30 @@ def test_move_ingredient_backward(self, burger): burger.move_ingredient(2, 0) assert burger.ingredients[0] == ing3 - def test_move_ingredient_preserves_count(self, burger, move_positions): - """Проверка сохранения количества при перемещении""" - from_pos, to_pos = move_positions - ingredients = [ - create_mock_ingredient(f"Ing_{i}", INGREDIENT_TYPE_SAUCE, 50.0) - for i in range(3) - ] + def test_move_ingredient_preserves_count(self, burger): + + ingredients = create_ingredients_list(3, INGREDIENT_TYPE_SAUCE, 50.0) burger = add_multiple_ingredients_to_burger(burger, ingredients) - burger.move_ingredient(from_pos, to_pos) + burger.move_ingredient(0, 2) assert len(burger.ingredients) == 3 - # Проверка расчёта цены - - def test_price_only_bun(self, burger, white_bun): - """Проверка цены только булки""" - burger.set_buns(white_bun) - expected_price = calculate_burger_price(100.0, []) - assert burger.get_price() == expected_price - - def test_price_bun_and_one_ingredient(self, burger, white_bun, sauce_ingredient): - """Проверка цены булки и одного ингредиента""" - burger = setup_burger_with_bun_and_ingredients(burger, white_bun, sauce_ingredient) - expected_price = calculate_burger_price(100.0, [90.0]) - assert burger.get_price() == expected_price - - def test_price_bun_and_two_ingredients(self, burger, white_bun, sauce_ingredient, filling_ingredient): - """Проверка цены булки и двух ингредиентов""" - burger = setup_burger_with_bun_and_ingredients(burger, white_bun, sauce_ingredient, filling_ingredient) - expected_price = calculate_burger_price(100.0, [90.0, 100.0]) - assert burger.get_price() == expected_price - - def test_price_various_combinations(self, burger, price_combinations): - """Проверка цены различных комбинаций""" - bun_price, ing_prices, expected_price = price_combinations - bun = create_mock_bun("Test Bun", bun_price) - burger.set_buns(bun) - for price in ing_prices: - ing = create_mock_ingredient("Test Ing", INGREDIENT_TYPE_SAUCE, price) - burger.add_ingredient(ing) - - calculated_price = calculate_burger_price(bun_price, ing_prices) - assert burger.get_price() == calculated_price - assert burger.get_price() == expected_price - - def test_remove_ingredient_decreases_price(self, burger, white_bun): - """Проверка уменьшения цены при удалении ингредиента""" - ing1 = create_mock_ingredient("Item1", INGREDIENT_TYPE_SAUCE, 100.0) - ing2 = create_mock_ingredient("Item2", INGREDIENT_TYPE_FILLING, 150.0) - burger = setup_burger_with_bun_and_ingredients(burger, white_bun, ing1, ing2) - - price_before = burger.get_price() - burger.remove_ingredient(0) - price_after = burger.get_price() - - assert price_after == price_before - 100.0 - - def test_burger_move_and_get_price(self, burger, white_bun): - """Проверка цены после перемещения ингредиента""" - ing1 = create_mock_ingredient("Item1", INGREDIENT_TYPE_SAUCE, 100.0) - ing2 = create_mock_ingredient("Item2", INGREDIENT_TYPE_FILLING, 150.0) - burger = setup_burger_with_bun_and_ingredients(burger, white_bun, ing1, ing2) - burger.move_ingredient(0, 1) - - expected_price = calculate_burger_price(100.0, [100.0, 150.0]) - assert burger.get_price() == expected_price - - # Проверка чека - - def test_receipt_contains_bun(self, burger, white_bun, sauce_ingredient): - """Проверка наличия булки в чеке""" - burger = setup_burger_with_bun_and_ingredients(burger, white_bun, sauce_ingredient) - receipt = burger.get_receipt() - assert "(==== White Bun ====)" in receipt - - def test_receipt_contains_ingredient(self, burger, white_bun, sauce_ingredient): - """Проверка наличия ингредиента в чеке""" - burger = setup_burger_with_bun_and_ingredients(burger, white_bun, sauce_ingredient) - receipt = burger.get_receipt() - assert "spicy sauce" in receipt - - def test_receipt_contains_price(self, burger, white_bun, sauce_ingredient): - """Проверка наличия цены в чеке""" - burger = setup_burger_with_bun_and_ingredients(burger, white_bun, sauce_ingredient) - receipt = burger.get_receipt() - assert "Price:" in receipt - - def test_receipt_shows_all_ingredients(self, burger, white_bun): - """Проверка отображения всех ингредиентов в чеке""" - ing1 = create_mock_ingredient("Item_0", INGREDIENT_TYPE_SAUCE, 50.0) - ing2 = create_mock_ingredient("Item_1", INGREDIENT_TYPE_SAUCE, 50.0) - ing3 = create_mock_ingredient("Item_2", INGREDIENT_TYPE_SAUCE, 50.0) - burger = setup_burger_with_bun_and_ingredients(burger, white_bun, ing1, ing2, ing3) - receipt = burger.get_receipt() - - assert verify_ingredients_in_receipt(receipt, ["Item_0", "Item_1", "Item_2"]) - - def test_receipt_price_matches_get_price(self, burger, white_bun, sauce_ingredient): - """Проверка соответствия цены в чеке и методе get_price""" - burger = setup_burger_with_bun_and_ingredients(burger, white_bun, sauce_ingredient) - receipt = burger.get_receipt() - expected_price = burger.get_price() - - assert f"Price: {expected_price}" in receipt - - def test_receipt_zero_ingredients(self, burger, white_bun): - """Проверка чека без ингредиентов""" - burger.set_buns(white_bun) - receipt = burger.get_receipt() - assert "(==== White Bun ====)" in receipt - - def test_receipt_one_ingredient(self, burger, white_bun): - """Проверка чека с одним ингредиентом""" - ing = create_mock_ingredient("Ing_0", INGREDIENT_TYPE_SAUCE, 25.0) - burger = setup_burger_with_bun_and_ingredients(burger, white_bun, ing) - receipt = burger.get_receipt() - assert "Price:" in receipt - - def test_receipt_three_ingredients(self, burger, white_bun): - """Проверка чека с тремя ингредиентами""" - ingredients = [ - create_mock_ingredient(f"Ing_{i}", INGREDIENT_TYPE_SAUCE, 25.0) - for i in range(3) - ] - burger = setup_burger_with_bun_and_ingredients(burger, white_bun, *ingredients) - receipt = burger.get_receipt() - assert "Price:" in receipt - - def test_receipt_five_ingredients(self, burger, white_bun): - """Проверка чека с пятью ингредиентами""" - ingredients = [ - create_mock_ingredient(f"Ing_{i}", INGREDIENT_TYPE_SAUCE, 25.0) - for i in range(5) - ] - burger = setup_burger_with_bun_and_ingredients(burger, white_bun, *ingredients) - receipt = burger.get_receipt() - assert "Price:" in receipt - - # Комбинированные тесты - - def test_burger_add_and_remove_ingredient(self, burger, white_bun, sauce_ingredient): - """Проверка добавления и удаления ингредиента""" - burger = setup_burger_with_bun_and_ingredients(burger, white_bun, sauce_ingredient) - burger.remove_ingredient(0) - assert len(burger.ingredients) == 0 \ No newline at end of file + + @pytest.mark.parametrize("bun_price,ingredient_prices,expected_price", [ + (100.0, [50.0], 250.0), + (150.0, [50.0, 75.0], 425.0), + (200.0, [100.0, 100.0, 100.0], 700.0), + ]) + def test_price_calculation(self, burger, bun_price, ingredient_prices, expected_price): + calculated_price = calculate_burger_price(bun_price, ingredient_prices) + assert calculated_price == expected_price + + + @pytest.mark.parametrize("from_pos,to_pos", [ + (0, 1), (1, 0), (0, 2), (2, 0) + ]) + def test_move_ingredient_parametrized(self, burger, from_pos, to_pos): + ingredients = create_ingredients_list(3, INGREDIENT_TYPE_SAUCE, 50.0) + burger = add_multiple_ingredients_to_burger(burger, ingredients) + original_ingredient = burger.ingredients[from_pos] + burger.move_ingredient(from_pos, to_pos) + assert burger.ingredients[to_pos] == original_ingredient \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py index 848ab994f..1ad8b411f 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -9,46 +9,26 @@ from praktikum.burger import Burger from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING - @pytest.fixture def burger(): return Burger() - @pytest.fixture def white_bun(): return create_mock_bun("White Bun", 100.0) - @pytest.fixture def black_bun(): return create_mock_bun("Black Bun", 150.0) - @pytest.fixture def sauce_ingredient(): return create_mock_ingredient("spicy sauce", INGREDIENT_TYPE_SAUCE, 90.0) - @pytest.fixture def filling_ingredient(): return create_mock_ingredient("Cutlet", INGREDIENT_TYPE_FILLING, 100.0) - @pytest.fixture(params=[1, 3, 5, 10]) def ingredient_count(request): return request.param - - -@pytest.fixture(params=[ - (100.0, [50.0], 250.0), - (150.0, [50.0, 75.0], 425.0), - (200.0, [100.0, 100.0, 100.0], 700.0), -]) -def price_combinations(request): - return request.param - - -@pytest.fixture(params=[(0, 1), (1, 0), (0, 2), (2, 0)]) -def move_positions(request): - return request.param \ No newline at end of file diff --git a/tests/helpers.py b/tests/helpers.py index 9d3304f21..080cdf514 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -42,4 +42,11 @@ def extract_price_from_receipt(receipt: str) -> float: def verify_ingredients_in_receipt(receipt: str, ingredient_names: list) -> bool: - return all(name in receipt for name in ingredient_names) \ No newline at end of file + return all(name in receipt for name in ingredient_names) + + +def create_ingredients_list(count: int, ingredient_type: str, price: float) -> list: + return [ + create_mock_ingredient(f"Ingredient_{i}", ingredient_type, price) + for i in range(count) + ]