diff --git a/.coverage b/.coverage new file mode 100644 index 000000000..60d30dd8c Binary files /dev/null and b/.coverage differ diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..ed8ebf583 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__ \ No newline at end of file diff --git a/README.md b/README.md index 272081708..76486b0e9 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,24 @@ -## Задание 1: Юнит-тесты +## Дипломный проект. Задание 1: Юнит-тесты +
+ +## Студент: Рогожников Алексей + +## Когорта: #32 +
### Автотесты для проверки программы, которая помогает заказать бургер в Stellar Burgers ### Реализованные сценарии -Созданы юнит-тесты, покрывающие классы `Bun`, `Burger`, `Ingredient`, `Database` +Созданы юнит-тесты, покрывающие класс `Burger` Процент покрытия 100% (отчет: `htmlcov/index.html`) ### Структура проекта -- `praktikum` - пакет, содержащий код программы -- `tests` - пакет, содержащий тесты, разделенные по классам. Например, `bun_test.py`, `burger_test.py` и т.д. +- `praktikum`, `bun`,`burger`, `database`, `ingredient`.. - файлы, содержащие код программы +- `test_burger` - файл с тестами, покрывающий класс Burger +- `conftest` - файл с фикстурами ### Запуск автотестов diff --git a/__init__.py b/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/burger.py b/burger.py index 2b3b6a88b..3f71aaa29 100644 --- a/burger.py +++ b/burger.py @@ -1,7 +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/conftest.py b/conftest.py new file mode 100644 index 000000000..3d2f1bd89 --- /dev/null +++ b/conftest.py @@ -0,0 +1,36 @@ +import pytest +from unittest.mock import Mock +from burger import Burger +from ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + + +# Мок булочки +@pytest.fixture +def mock_bun(): + mock_bun = Mock() + mock_bun.get_name.return_value = "red bun" + mock_bun.get_price.return_value = 300 + return mock_bun + +# Мок соуса +@pytest.fixture +def mock_sauce(): + mock_sauce = Mock() + mock_sauce.get_price.return_value = 200 + mock_sauce.get_name.return_value = "sour cream" + mock_sauce.get_type.return_value = INGREDIENT_TYPE_SAUCE + return mock_sauce + +# Мок начинки +@pytest.fixture +def mock_filling(): + mock_filling = Mock() + mock_filling.get_price.return_value = 200 + mock_filling.get_name.return_value = "dinosaur" + mock_filling.get_type.return_value = INGREDIENT_TYPE_FILLING + return mock_filling + +# Создаем объект бургера +@pytest.fixture +def burger(): + return Burger() diff --git a/database.py b/database.py index 4c75baf71..84d3685d0 100644 --- a/database.py +++ b/database.py @@ -1,8 +1,8 @@ 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 +from bun import Bun +from ingredient import Ingredient +from ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING class Database: diff --git a/praktikum.py b/praktikum.py index ec522fa6d..88b77abd1 100644 --- a/praktikum.py +++ b/praktikum.py @@ -1,9 +1,9 @@ from typing import List -from praktikum.bun import Bun -from praktikum.burger import Burger -from praktikum.database import Database -from praktikum.ingredient import Ingredient +from bun import Bun +from burger import Burger +from database import Database +from ingredient import Ingredient def main(): diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..bfc2333d3 Binary files /dev/null and b/requirements.txt differ diff --git a/test_burger.py b/test_burger.py new file mode 100644 index 000000000..2f8a05d34 --- /dev/null +++ b/test_burger.py @@ -0,0 +1,52 @@ +import pytest + + + +class TestBurger: + + # Проверка наличия булочки в бургере + def test_set_buns_in_burger(self, mock_bun, burger): + burger.set_buns(mock_bun) + assert burger.bun == mock_bun + + # Проверка добавления ингредиента(соуса) в бургер + def test_add_ingredient_in_burger(self, mock_sauce, burger): + burger.add_ingredient(mock_sauce) + assert burger.ingredients == [mock_sauce] + + # Проверка удаления ингредиента(начинки) из бургера с параметризацией + @pytest.mark.parametrize("ingredient", ["INGREDIENT_TYPE_SAUCE", "INGREDIENT_TYPE_FILLING"]) + def test_remove_ingredient_in_burger(self, burger, ingredient): + burger.add_ingredient(ingredient) + burger.remove_ingredient(0) + assert burger.ingredients == [] + + # Проверка перемещения ингредиентов в бургере + def test_move_ingredient_in_burger(self, mock_sauce, mock_filling, burger): + burger.add_ingredient(mock_sauce) + burger.add_ingredient(mock_filling) + burger.move_ingredient(0, 1) + assert burger.ingredients[0] == mock_filling + + # Проверка стоимости бургера + def test_get_price_burger(self, mock_bun, mock_sauce, mock_filling, burger): + burger.set_buns(mock_bun) + burger.add_ingredient(mock_sauce) + burger.add_ingredient(mock_filling) + assert burger.get_price() == 1000 + + # Проверка чека с информацией о бургере + def test_get_receipt_in_burger(self, mock_bun, mock_sauce, mock_filling, burger): + burger.set_buns(mock_bun) + burger.add_ingredient(mock_sauce) + burger.add_ingredient(mock_filling) + receipt = burger.get_receipt() + expected_receipt = ( + f"(==== {mock_bun.get_name()} ====)\n" + f"= {str(mock_sauce.get_type()).lower()} {mock_sauce.get_name()} =\n" + f"= {str(mock_filling.get_type()).lower()} {mock_filling.get_name()} =\n" + f"(==== {mock_bun.get_name()} ====)\n" + f"\nPrice: {mock_bun.get_price() * 2 + mock_sauce.get_price() + mock_filling.get_price()}" + ) + assert receipt == expected_receipt +