From fa0ab39b4e0b79d8d8dd35bd021f8442e5ef8c71 Mon Sep 17 00:00:00 2001 From: Darya Petrowskikh Date: Tue, 3 Mar 2026 16:10:29 +0500 Subject: [PATCH 1/6] add data, conftest, test_set_buns, test_add_ingredient --- .gitignore | 54 ++++++++++++++ README.md | 72 +++++++++++++++---- __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/conftest.py | 25 +++++++ tests/data.py | 15 ++++ tests/test_add_ingredient.py | 50 +++++++++++++ tests/test_set_buns.py | 30 ++++++++ 14 files changed, 234 insertions(+), 12 deletions(-) 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/conftest.py create mode 100644 tests/data.py create mode 100644 tests/test_add_ingredient.py create mode 100644 tests/test_set_buns.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..ffdd5dc67 --- /dev/null +++ b/.gitignore @@ -0,0 +1,54 @@ +# Игнорируем виртуальные окружения +.env +.envrc +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Node.js зависимости +node_modules/ + +# Артефакты сборки +dist/ +build/ + +# Генерируемые файлы +*.pyc +*.log +*.json + +# IDE и системные файлы +.idea/ +.vscode/ +.DS_Store +Thumbs.db + +#Прочее +*.txt +__pycache__ +.pytest_cache +tests/__pycache__/ + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py.cover +.hypothesis/ +.pytest_cache/ +cover/ + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec \ No newline at end of file diff --git a/README.md b/README.md index 272081708..8b17dc587 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,72 @@ ## Задание 1: Юнит-тесты +# Тестирование веб-приложения https://stellarburgers.education-services.ru/ , которая помогает заказать бургер в Stellar Burgers +В данном проекте реализованы автоматизированные тесты с использованием фреймворка pytest. -### Автотесты для проверки программы, которая помогает заказать бургер в Stellar Burgers +--- +## Структура проекта +### `praktikum` - пакет, содержащий код программы -### Реализованные сценарии +### Тесты в директории `tests` -Созданы юнит-тесты, покрывающие классы `Bun`, `Burger`, `Ingredient`, `Database` +## Тестируются основные функции класса `Burger` +- Добавление булочек в бургер (`set_buns`) +- Добавление ингрелиентов в бургер (`add_ingredient`) +- Удаление ингредиентов (по индексу) (`remove_ingredient`) +- Перемещение ингредиентов (`move_ingredient`) +- Получение цены бургера (`get_price`) +- Вывод рецепта бургера (`get_receipt`) -Процент покрытия 100% (отчет: `htmlcov/index.html`) +## Описание тестов -### Структура проекта +### 1. `test_set_buns` +Проверяет, что в бургер успешно добавляются булочки. -- `praktikum` - пакет, содержащий код программы -- `tests` - пакет, содержащий тесты, разделенные по классам. Например, `bun_test.py`, `burger_test.py` и т.д. +### 2.1. `test_add_ingredient` +Проверяет, что в бургер успешно добавляются ингредиенты. -### Запуск автотестов +### 2.2. `test_add_multiple_ingredients_param` +Убеждается, что в бургер можно добавить несколько ингредиентов -**Установка зависимостей** +### 3.1 `test_remove_ingredient` +Проверяет, что можно удалить необходимый ингредиент -> `$ pip install -r requirements.txt` +### 3.2. `test_remove_ingredient_invalid_index` +Проверяет, что нельзя удалить недобавленный ингредиент(с несуществующем индексом) + +### 3.3. `test_remove_from_empty_burger` +Убеждается, что в пустом бургере (без ингредиентов) нечего удалять + +### 4. `test_move_ingredient_param` +Проверяет, что ингредиенты успешно перемещаются внутри бургера + +### 5. `test_get_price` +Гарантирует, что цену возможно вывести цену + +### 6. `test_get_price_param` +Проверяет, что цену можно получить и с несколькими ингредиентами + +### 7. `test_get_receipt` +Проверяет, что получаемый рецепт соответствует эталону + +--- + +## Описание остальных файлов + +**conftest.py** +Содержит фикстуры для создания моков + +**data.py** +Содержит данные для тестов + +--- + +## Как запустить тесты +pytest -v + +## Как установить все зависимости +pip install -r requirements.txt + +## Отчет о покрытии +pytest --cov=praktikum --cov-report=html` -**Запуск автотестов и создание HTML-отчета о покрытии** -> `$ pytest --cov=praktikum --cov-report=html` 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/conftest.py b/tests/conftest.py new file mode 100644 index 000000000..1211e73f9 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,25 @@ +import pytest +from unittest.mock import Mock +from tests.data import Credentials + +@pytest.fixture +def create_mock_bun(): + """Фикстура возвращает мок булок""" + def _create_mock_bun(name, price): + mock_bun = Mock() + mock_bun.get_name.return_value = name + mock_bun.get_price.return_value = price + return mock_bun + return _create_mock_bun # возвращаем внутреннюю функцию + +@pytest.fixture +def create_mock_ingredient(): + """Фикстура возвращает моков ингредиентов""" + def _create_mock_ingredient(type, name, price): + mock_ingredient = Mock() + mock_ingredient.get_type.return_value = type + mock_ingredient.get_name.return_value = name + mock_ingredient.get_price.return_value = price + return mock_ingredient + return _create_mock_ingredient + diff --git a/tests/data.py b/tests/data.py new file mode 100644 index 000000000..7f7496ee9 --- /dev/null +++ b/tests/data.py @@ -0,0 +1,15 @@ +from praktikum.ingredient_types import * + +class Credentials: + bun_names = ["black bun", "white bun", "red bun", "чёрная булка", "белая булка", "красная булка"] + bun_prices = [100, 200, 300, 101, 99, 109, 201, 299, 301] + + ingredient_combination = [ + (INGREDIENT_TYPE_SAUCE, "hot sauce", 100), + (INGREDIENT_TYPE_SAUCE, "sour cream", 200), + (INGREDIENT_TYPE_SAUCE, "chili sauce", 300), + (INGREDIENT_TYPE_FILLING, "cutlet", 100), + (INGREDIENT_TYPE_FILLING, "dinosaur", 200), + (INGREDIENT_TYPE_FILLING, "sausage", 300)] + + diff --git a/tests/test_add_ingredient.py b/tests/test_add_ingredient.py new file mode 100644 index 000000000..13964f237 --- /dev/null +++ b/tests/test_add_ingredient.py @@ -0,0 +1,50 @@ +from unittest.mock import Mock +from unittest.mock import patch +import pytest +from praktikum.burger import Burger +from praktikum.bun import Bun +from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING +from tests.data import Credentials + +class TestAddIngredient: + ''' + Проверяется метод добавления ингредиентов + def add_ingredient(self, ingredient: Ingredient): + self.ingredients.append(ingredient) + ''' + + @pytest.mark.parametrize("ingredient_type, ingredient_name, ingredient_price", Credentials.ingredient_combination) + def test_add_ingredient(self, ingredient_type, ingredient_name, ingredient_price, create_mock_ingredient): + + mok_ingredient = create_mock_ingredient(ingredient_type, ingredient_name, ingredient_price) + burger = Burger() + burger.add_ingredient(mok_ingredient) + + assert len(burger.ingredients) == 1, "Ингредиент не добавился в бургер" + + added_ingredient = burger.ingredients[0] #получить добавленный ингредиент + + assert added_ingredient.get_type() == ingredient_type, \ + f"Ожидался тип '{ingredient_type}', получен '{added_ingredient.get_type()}'" + assert added_ingredient.get_name() == ingredient_name, \ + f"Ожидалось имя '{ingredient_name}', получено '{added_ingredient.get_name()}'" + assert added_ingredient.get_price() == ingredient_price, \ + f"Ожидалась цена {ingredient_price}, получена {added_ingredient.get_price()}" + + #Проверяем, что можно добавить разное количество ингредиентов + @pytest.mark.parametrize("ingredients_count", [1, 2, 3, 4, 5]) + def test_add_multiple_ingredients_param(self, ingredients_count, create_mock_ingredient): + burger = Burger() + + for i in range(ingredients_count): + mock_ingredient = create_mock_ingredient( + INGREDIENT_TYPE_SAUCE, + f"sauce_{i}", + i * 100 + ) + burger.add_ingredient(mock_ingredient) + + assert len(burger.ingredients) == ingredients_count, \ + f"Ожидалось {ingredients_count} ингредиентов, получено {len(burger.ingredients)}" + + diff --git a/tests/test_set_buns.py b/tests/test_set_buns.py new file mode 100644 index 000000000..c8e4e3aad --- /dev/null +++ b/tests/test_set_buns.py @@ -0,0 +1,30 @@ +from unittest.mock import Mock +from unittest.mock import patch +import pytest +from praktikum.burger import Burger +from praktikum.bun import Bun +from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING +from tests.data import Credentials + +class TestSetBuns: + + ''' + Проверяется метод добавления булочек + def set_buns(self, bun: Bun): + self.bun = bun + ''' + @pytest.mark.parametrize("bun_name, bun_price", zip(Credentials.bun_names, Credentials.bun_prices)) + + def test_set_buns(self, bun_name, bun_price, create_mock_bun): + + bun_mock = create_mock_bun(bun_name, bun_price) + burger = Burger() + burger.set_buns(bun_mock) + + assert burger.bun is not None, "Булка не установлена" + assert burger.bun.get_name() == bun_name, \ + f"Ожидалось имя булки '{bun_name}', получено '{burger.bun.get_name()}'" + assert burger.bun.get_price() == bun_price,\ + f"Ожидалась цена булки '{bun_price}', получено '{burger.bun.get_price()}'" + + From 1e9de2eaff9eda426a964634a9af286f389ad684 Mon Sep 17 00:00:00 2001 From: Darya Petrowskikh Date: Tue, 3 Mar 2026 23:42:35 +0500 Subject: [PATCH 2/6] add test_remove_ingredient --- tests/test_remove_ingredient.py | 52 +++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 tests/test_remove_ingredient.py diff --git a/tests/test_remove_ingredient.py b/tests/test_remove_ingredient.py new file mode 100644 index 000000000..d7f100cdf --- /dev/null +++ b/tests/test_remove_ingredient.py @@ -0,0 +1,52 @@ +from unittest.mock import Mock +from unittest.mock import patch +import pytest +from praktikum.burger import Burger +from praktikum.bun import Bun +from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING +from tests.data import Credentials + +class TestRemoveIngdient: + + + ''' + Проверяется метод удаления ингредиентов + def remove_ingredient(self, index: int): + del self.ingredients[index] + ''' + + def test_remove_ingredient(self): + burger = Burger() + + ingredients = [ + Mock(get_name=Mock(return_value="sour cream")), + Mock(get_name=Mock(return_value="dinosaur")), + Mock(get_name=Mock(return_value="cutlet")) + ] + + for ing in ingredients: + burger.add_ingredient(ing) + + burger.remove_ingredient(1) + + assert len(burger.ingredients) == 2, \ + f"ожидалось 2 ингредиента, получено {len(burger.ingredients)}" + assert burger.ingredients[0] is ingredients[0], \ + f"ожидалось sour cream" + assert burger.ingredients[1] is ingredients[2] , \ + f"ожидалось cutlet" + + #Проверяем ошибку при несуществующем индексе + def test_remove_ingredient_invalid_index(self): + burger = Burger() + burger.add_ingredient(Mock()) # один ингредиент + + with pytest.raises(IndexError): + burger.remove_ingredient(5) # ожидается ошибка по индексу + + #Проверяем ошибку при пустом бургере, без ингредиентов + def test_remove_from_empty_burger(self): + burger = Burger() + + with pytest.raises(IndexError): + burger.remove_ingredient(0) # ожидается ошибка по индексу From 841cc369605a61b87f08e057376bdb6a1b8570d0 Mon Sep 17 00:00:00 2001 From: Darya Petrowskikh Date: Wed, 4 Mar 2026 00:10:04 +0500 Subject: [PATCH 3/6] add test_move_ingredient, test_get_price --- tests/test_get_price.py | 62 +++++++++++++++++++++++++++++++++++ tests/test_move_ingredient.py | 44 +++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 tests/test_get_price.py create mode 100644 tests/test_move_ingredient.py diff --git a/tests/test_get_price.py b/tests/test_get_price.py new file mode 100644 index 000000000..418b380c0 --- /dev/null +++ b/tests/test_get_price.py @@ -0,0 +1,62 @@ +from unittest.mock import Mock +from unittest.mock import patch +import pytest +from praktikum.burger import Burger +from praktikum.bun import Bun +from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING +from tests.data import Credentials + +class TestGetPrice: + + '''Проверяется метод получения цены на бургер + def get_price(self) -> float: + price = self.bun.get_price() * 2 + + for ingredient in self.ingredients: + price += ingredient.get_price() + + return price + ''' + + @pytest.mark.parametrize("bun_price, ingredient_price, expected_price", [ + (100, 100, 300), + (200, 200, 600), + (300, 300, 900) + ]) + + def test_get_price(self, bun_price, ingredient_price, expected_price): + mock_bun = Mock() + mock_bun.get_price.return_value = bun_price + mock_ingredient = Mock() + mock_ingredient.get_price.return_value = ingredient_price + + burger = Burger() + burger.set_buns(mock_bun) + burger.add_ingredient(mock_ingredient) + price = burger.get_price() + + assert price == expected_price, \ + f"Ожидалась цена {expected_price}, но получена {price}" + + #несколько ингредиентов + @pytest.mark.parametrize("bun_price, ingredient_price, expected_price", [ + (100, [100, 100], 400), + (200, [200, 100], 700), + (300, [300, 200, 100], 1200) + ]) + def test_get_price_param(self, bun_price, ingredient_price, expected_price): + mock_bun = Mock() + mock_bun.get_price.return_value = bun_price + + burger = Burger() + burger.set_buns(mock_bun) + + for ing_price in ingredient_price: + mock_ingredient = Mock() + mock_ingredient.get_price.return_value = ing_price + burger.add_ingredient(mock_ingredient) + + price = burger.get_price() + + assert price == expected_price, \ + f"Ожидалась цена {expected_price}, но получена {price}" diff --git a/tests/test_move_ingredient.py b/tests/test_move_ingredient.py new file mode 100644 index 000000000..3f0d84fd4 --- /dev/null +++ b/tests/test_move_ingredient.py @@ -0,0 +1,44 @@ +from unittest.mock import Mock +from unittest.mock import patch +import pytest +from praktikum.burger import Burger +from praktikum.bun import Bun +from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING +from tests.data import Credentials + +class TestRemoveIngdient: + + ''' + Проверяется метод перемещения ингредиентов + def test_move_ingredient(self, index: int, new_index: int): + self.ingredients.insert(new_index, self.ingredients.pop(index)) + ''' + + @pytest.mark.parametrize("move_from, move_to, expected_burger", [ + (0, 2, ["dinosaur", "cutlet", "sour cream"]), # первый в конец + (2, 0, ["cutlet", "sour cream", "dinosaur"]), # последний в начало + (1, 2, ["sour cream", "cutlet", "dinosaur"]), # средний в конец + (1, 0, ["dinosaur", "sour cream", "cutlet"]), # средний в начало + ]) + def test_move_ingredient_param(self, move_from, move_to, expected_burger): + burger = Burger() + + ingredients = [ + Mock(get_name=Mock(return_value="sour cream")), + Mock(get_name=Mock(return_value="dinosaur")), + Mock(get_name=Mock(return_value="cutlet")) + ] + + for ing in ingredients: + burger.add_ingredient(ing) + + burger.move_ingredient(move_from, move_to) + + result_names = [] + for ing in burger.ingredients: + name = ing.get_name() + result_names.append(name) + + assert result_names == expected_burger, \ + f"Ожидался порядок {expected_burger}, получен {result_names}" + From 01c73f373a6eebaedfa1759f608c4f4a07e46808 Mon Sep 17 00:00:00 2001 From: Darya Petrowskikh Date: Wed, 4 Mar 2026 01:26:25 +0500 Subject: [PATCH 4/6] add test_get_peceipt --- README.md | 2 +- tests/conftest.py | 18 +++++++++++++++-- tests/data.py | 34 ++++++++++++++++++++++++++++++++- tests/test_add_ingredient.py | 3 --- tests/test_get_price.py | 4 ---- tests/test_get_receipt.py | 29 ++++++++++++++++++++++++++++ tests/test_move_ingredient.py | 10 +++------- tests/test_remove_ingredient.py | 4 ---- tests/test_set_buns.py | 4 ---- 9 files changed, 82 insertions(+), 26 deletions(-) create mode 100644 tests/test_get_receipt.py diff --git a/README.md b/README.md index 8b17dc587..d23c5f8ac 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,6 @@ pytest -v pip install -r requirements.txt ## Отчет о покрытии -pytest --cov=praktikum --cov-report=html` +pytest --cov=praktikum --cov-report=html diff --git a/tests/conftest.py b/tests/conftest.py index 1211e73f9..15f2532c9 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,6 +1,6 @@ import pytest from unittest.mock import Mock -from tests.data import Credentials +from praktikum.burger import Burger @pytest.fixture def create_mock_bun(): @@ -14,7 +14,7 @@ def _create_mock_bun(name, price): @pytest.fixture def create_mock_ingredient(): - """Фикстура возвращает моков ингредиентов""" + """Фикстура возвращает мок ингредиентов""" def _create_mock_ingredient(type, name, price): mock_ingredient = Mock() mock_ingredient.get_type.return_value = type @@ -23,3 +23,17 @@ def _create_mock_ingredient(type, name, price): return mock_ingredient return _create_mock_ingredient +@pytest.fixture +def create_mock_burger(create_mock_bun, create_mock_ingredient): + """Фикстура создает бургер""" + def _create_mock_burger(bun_name, ingredients_data): + bun_mock = create_mock_bun(bun_name, 0) + burger = Burger() + burger.set_buns(bun_mock) + + for ing_type, ing_name in ingredients_data: + ing_mock = create_mock_ingredient(ing_type, ing_name, 0) + burger.add_ingredient(ing_mock) + return burger + return _create_mock_burger + diff --git a/tests/data.py b/tests/data.py index 7f7496ee9..9b08f2fd9 100644 --- a/tests/data.py +++ b/tests/data.py @@ -12,4 +12,36 @@ class Credentials: (INGREDIENT_TYPE_FILLING, "dinosaur", 200), (INGREDIENT_TYPE_FILLING, "sausage", 300)] - + receipt_data = [ + ("black bun", + [(INGREDIENT_TYPE_SAUCE, "hot sauce")], + 300, + "(==== black bun ====)\n= sauce hot sauce =\n(==== black bun ====)\n\nPrice: 300" + ), + ("white bun", + [(INGREDIENT_TYPE_FILLING, "cutlet")], + 400, + "(==== white bun ====)\n= filling cutlet =\n(==== white bun ====)\n\nPrice: 400" + ), + ("red bun", + [(INGREDIENT_TYPE_SAUCE, "sour cream"), (INGREDIENT_TYPE_FILLING, "dinosaur")], + 500, + "(==== red bun ====)\n= sauce sour cream =\n= filling dinosaur =\n(==== red bun ====)\n\nPrice: 500" + ), + ("black bun", + [ + (INGREDIENT_TYPE_SAUCE, "hot sauce"), + (INGREDIENT_TYPE_FILLING, "cutlet"), + (INGREDIENT_TYPE_SAUCE, "chili sauce"), + (INGREDIENT_TYPE_FILLING, "dinosaur") + ], + 1000, + "(==== black bun ====)\n= sauce hot sauce =\n= filling cutlet =\n= sauce chili sauce =\n= filling dinosaur =\n(==== black bun ====)\n\nPrice: 1000" + ), + ( + "white bun", + [], + 200, + "(==== white bun ====)\n(==== white bun ====)\n\nPrice: 200" + ) + ] diff --git a/tests/test_add_ingredient.py b/tests/test_add_ingredient.py index 13964f237..d67b3ac60 100644 --- a/tests/test_add_ingredient.py +++ b/tests/test_add_ingredient.py @@ -1,8 +1,5 @@ -from unittest.mock import Mock -from unittest.mock import patch import pytest from praktikum.burger import Burger -from praktikum.bun import Bun from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING from tests.data import Credentials diff --git a/tests/test_get_price.py b/tests/test_get_price.py index 418b380c0..a71a93702 100644 --- a/tests/test_get_price.py +++ b/tests/test_get_price.py @@ -1,10 +1,6 @@ from unittest.mock import Mock -from unittest.mock import patch import pytest from praktikum.burger import Burger -from praktikum.bun import Bun -from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING -from tests.data import Credentials class TestGetPrice: diff --git a/tests/test_get_receipt.py b/tests/test_get_receipt.py new file mode 100644 index 000000000..025a12500 --- /dev/null +++ b/tests/test_get_receipt.py @@ -0,0 +1,29 @@ +from unittest.mock import patch +import pytest +from tests.data import Credentials + +class TestGetReceipt: + + '''Проверяется метод получения рецепта на бургер + 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) + ''' + + @pytest.mark.parametrize("bun_name, ingredients_data, mock_price, expected_receipt", Credentials.receipt_data) + @patch('praktikum.burger.Burger.get_price') + def test_get_receipt(self, mock_get_price, bun_name, ingredients_data, mock_price, expected_receipt, create_mock_burger): + + burger = create_mock_burger(bun_name, ingredients_data) + mock_get_price.return_value = mock_price + receipt = burger.get_receipt() + + assert receipt == expected_receipt + diff --git a/tests/test_move_ingredient.py b/tests/test_move_ingredient.py index 3f0d84fd4..28718837a 100644 --- a/tests/test_move_ingredient.py +++ b/tests/test_move_ingredient.py @@ -1,16 +1,12 @@ from unittest.mock import Mock -from unittest.mock import patch import pytest from praktikum.burger import Burger -from praktikum.bun import Bun -from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING -from tests.data import Credentials -class TestRemoveIngdient: +class TestRemoveIngredient: - ''' + ''' Проверяется метод перемещения ингредиентов - def test_move_ingredient(self, index: int, new_index: int): + def move_ingredient(self, index: int, new_index: int): self.ingredients.insert(new_index, self.ingredients.pop(index)) ''' diff --git a/tests/test_remove_ingredient.py b/tests/test_remove_ingredient.py index d7f100cdf..da3930e65 100644 --- a/tests/test_remove_ingredient.py +++ b/tests/test_remove_ingredient.py @@ -1,10 +1,6 @@ from unittest.mock import Mock -from unittest.mock import patch import pytest from praktikum.burger import Burger -from praktikum.bun import Bun -from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING -from tests.data import Credentials class TestRemoveIngdient: diff --git a/tests/test_set_buns.py b/tests/test_set_buns.py index c8e4e3aad..c407cfc2a 100644 --- a/tests/test_set_buns.py +++ b/tests/test_set_buns.py @@ -1,9 +1,5 @@ -from unittest.mock import Mock -from unittest.mock import patch import pytest from praktikum.burger import Burger -from praktikum.bun import Bun -from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING from tests.data import Credentials class TestSetBuns: From 2258e29b4015932dfcef2cbbb9f48530d7105f1d Mon Sep 17 00:00:00 2001 From: Darya Petrowskikh Date: Wed, 4 Mar 2026 01:45:42 +0500 Subject: [PATCH 5/6] modified: .gitignore, tests/test_get_receipt.py --- .gitignore | 1 + tests/test_get_receipt.py | 1 + 2 files changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index ffdd5dc67..f9539a38e 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,7 @@ htmlcov/ .tox/ .nox/ .coverage +.htmlcov .coverage.* .cache nosetests.xml diff --git a/tests/test_get_receipt.py b/tests/test_get_receipt.py index 025a12500..a88da41f4 100644 --- a/tests/test_get_receipt.py +++ b/tests/test_get_receipt.py @@ -1,6 +1,7 @@ from unittest.mock import patch import pytest from tests.data import Credentials +from praktikum.burger import Burger class TestGetReceipt: From 0d6cb86458744bc2fa783e7fdb2e1cc2ddb54927 Mon Sep 17 00:00:00 2001 From: Darya Petrowskikh Date: Wed, 4 Mar 2026 02:02:18 +0500 Subject: [PATCH 6/6] brought beauty to the files --- tests/conftest.py | 2 +- tests/data.py | 1 + tests/test_add_ingredient.py | 3 +-- tests/test_get_price.py | 1 + tests/test_get_receipt.py | 3 ++- tests/test_move_ingredient.py | 3 ++- tests/test_remove_ingredient.py | 1 + tests/test_set_buns.py | 3 +-- 8 files changed, 10 insertions(+), 7 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 15f2532c9..091d6bbfb 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -2,6 +2,7 @@ from unittest.mock import Mock from praktikum.burger import Burger + @pytest.fixture def create_mock_bun(): """Фикстура возвращает мок булок""" @@ -36,4 +37,3 @@ def _create_mock_burger(bun_name, ingredients_data): burger.add_ingredient(ing_mock) return burger return _create_mock_burger - diff --git a/tests/data.py b/tests/data.py index 9b08f2fd9..2acbd9873 100644 --- a/tests/data.py +++ b/tests/data.py @@ -1,5 +1,6 @@ from praktikum.ingredient_types import * + class Credentials: bun_names = ["black bun", "white bun", "red bun", "чёрная булка", "белая булка", "красная булка"] bun_prices = [100, 200, 300, 101, 99, 109, 201, 299, 301] diff --git a/tests/test_add_ingredient.py b/tests/test_add_ingredient.py index d67b3ac60..38260c4fe 100644 --- a/tests/test_add_ingredient.py +++ b/tests/test_add_ingredient.py @@ -3,6 +3,7 @@ from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING from tests.data import Credentials + class TestAddIngredient: ''' Проверяется метод добавления ингредиентов @@ -43,5 +44,3 @@ def test_add_multiple_ingredients_param(self, ingredients_count, create_mock_ing assert len(burger.ingredients) == ingredients_count, \ f"Ожидалось {ingredients_count} ингредиентов, получено {len(burger.ingredients)}" - - diff --git a/tests/test_get_price.py b/tests/test_get_price.py index a71a93702..86d4336f9 100644 --- a/tests/test_get_price.py +++ b/tests/test_get_price.py @@ -2,6 +2,7 @@ import pytest from praktikum.burger import Burger + class TestGetPrice: '''Проверяется метод получения цены на бургер diff --git a/tests/test_get_receipt.py b/tests/test_get_receipt.py index a88da41f4..5dd1d7ae8 100644 --- a/tests/test_get_receipt.py +++ b/tests/test_get_receipt.py @@ -3,6 +3,7 @@ from tests.data import Credentials from praktikum.burger import Burger + class TestGetReceipt: '''Проверяется метод получения рецепта на бургер @@ -27,4 +28,4 @@ def test_get_receipt(self, mock_get_price, bun_name, ingredients_data, mock_pric receipt = burger.get_receipt() assert receipt == expected_receipt - + \ No newline at end of file diff --git a/tests/test_move_ingredient.py b/tests/test_move_ingredient.py index 28718837a..069080f1b 100644 --- a/tests/test_move_ingredient.py +++ b/tests/test_move_ingredient.py @@ -2,6 +2,7 @@ import pytest from praktikum.burger import Burger + class TestRemoveIngredient: ''' @@ -37,4 +38,4 @@ def test_move_ingredient_param(self, move_from, move_to, expected_burger): assert result_names == expected_burger, \ f"Ожидался порядок {expected_burger}, получен {result_names}" - + \ No newline at end of file diff --git a/tests/test_remove_ingredient.py b/tests/test_remove_ingredient.py index da3930e65..1b2d9e9e6 100644 --- a/tests/test_remove_ingredient.py +++ b/tests/test_remove_ingredient.py @@ -2,6 +2,7 @@ import pytest from praktikum.burger import Burger + class TestRemoveIngdient: diff --git a/tests/test_set_buns.py b/tests/test_set_buns.py index c407cfc2a..1a7a27dfd 100644 --- a/tests/test_set_buns.py +++ b/tests/test_set_buns.py @@ -2,6 +2,7 @@ from praktikum.burger import Burger from tests.data import Credentials + class TestSetBuns: ''' @@ -22,5 +23,3 @@ def test_set_buns(self, bun_name, bun_price, create_mock_bun): f"Ожидалось имя булки '{bun_name}', получено '{burger.bun.get_name()}'" assert burger.bun.get_price() == bun_price,\ f"Ожидалась цена булки '{bun_price}', получено '{burger.bun.get_price()}'" - -