diff --git a/README.md b/praktikum/README.md similarity index 92% rename from README.md rename to praktikum/README.md index 272081708..33e49c616 100644 --- a/README.md +++ b/praktikum/README.md @@ -1,5 +1,9 @@ ## Задание 1: Юнит-тесты +## Студент: Никита Будылдин + +## Когорта: PYTHON_31 + ### Автотесты для проверки программы, которая помогает заказать бургер в Stellar Burgers ### Реализованные сценарии 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/praktikum/requirements.txt b/praktikum/requirements.txt new file mode 100644 index 000000000..23e82be5c Binary files /dev/null and b/praktikum/requirements.txt differ diff --git a/tests/.coverage b/tests/.coverage new file mode 100644 index 000000000..f7c6dd6ec Binary files /dev/null and b/tests/.coverage differ diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 000000000..86cebba44 --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1,2 @@ +.pytest_cache +__pycache__ diff --git a/__init__.py b/tests/__init__.py similarity index 100% rename from __init__.py rename to tests/__init__.py diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..0393e6774 --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,99 @@ +import pytest +from praktikum.burger import Burger +from unittest.mock import Mock +from praktikum.ingredient_types import INGREDIENT_TYPE_FILLING, INGREDIENT_TYPE_SAUCE + +class TestBurger: + def test_set_bun(self): + burger = Burger() + mock_bun = Mock() + mock_bun.get_name.return_value = 'Name_bun' + mock_bun.get_price.return_value = 9.0 + burger.set_buns(mock_bun) + assert burger.bun.get_price() == 9.0 + assert burger.bun.get_name() == 'Name_bun' + + def test_add_ingredient(self): + burger = Burger() + mock_ingredient = Mock() + mock_ingredient.get_name.return_value = 'Name_bun' + mock_ingredient.get_price.return_value = 9.0 + mock_ingredient.get_type.return_value = INGREDIENT_TYPE_FILLING + burger.add_ingredient(mock_ingredient) + assert burger.ingredients[0].get_price() == 9.0 + assert burger.ingredients[0].get_name() == 'Name_bun' + assert burger.ingredients[0].get_type() == INGREDIENT_TYPE_FILLING + + def test_remove_ingredient(self): + burger = Burger() + mock_ingredient = Mock() + mock_ingredient.get_name.return_value = 'Name_bun' + mock_ingredient.get_price.return_value = 9.0 + mock_ingredient.get_type.return_value = INGREDIENT_TYPE_FILLING + burger.add_ingredient(mock_ingredient) + burger.remove_ingredient(0) + assert burger.ingredients == [] + + def test_move_ingredient(self): + burger = Burger() + mock_ingredient = Mock() + mock_ingredient.get_name.return_value = 'Name_bun' + mock_ingredient.get_price.return_value = 9.0 + mock_ingredient.get_type.return_value = INGREDIENT_TYPE_FILLING + burger.add_ingredient(mock_ingredient) + burger.ingredients[0].get_price() == 9.0 + burger.ingredients[0].get_name() == 'Name_bun' + burger.ingredients[0].get_type() == INGREDIENT_TYPE_FILLING + burger.move_ingredient(0, 0) + assert burger.ingredients[0] is mock_ingredient + + @pytest.mark.parametrize( + "bun_price, ingredients, expected_price", + [ + (9.0, [], 18.0), + (10.0, [(5.0, INGREDIENT_TYPE_FILLING)], 25.0), + (8.0, [(3.0, INGREDIENT_TYPE_FILLING), (4.0, INGREDIENT_TYPE_FILLING)], 23.0), + (7.5, [(0.0, INGREDIENT_TYPE_FILLING)], 15.0), + ] + ) + def test_get_price(self, bun_price, ingredients, expected_price): + burger = Burger() + + mock_bun = Mock() + mock_bun.get_name.return_value = 'Name_bun' + mock_bun.get_price.return_value = bun_price + burger.bun = mock_bun + + for price, type_ in ingredients: + mock_ingredient = Mock() + mock_ingredient.get_price.return_value = price + mock_ingredient.get_type.return_value = type_ + burger.add_ingredient(mock_ingredient) + + total_price = burger.get_price() + assert total_price == expected_price + + def test_get_receipt(self): + burger = Burger() + mock_bun = Mock() + mock_bun.get_name.return_value = 'Classic Bun' + burger.bun = mock_bun + mock_ingredient1 = Mock() + mock_ingredient1.get_type.return_value = INGREDIENT_TYPE_FILLING + mock_ingredient1.get_name.return_value = 'Cutlet' + mock_ingredient2 = Mock() + mock_ingredient2.get_type.return_value = INGREDIENT_TYPE_SAUCE + mock_ingredient2.get_name.return_value = 'Hot Sauce' + burger.add_ingredient(mock_ingredient1) + burger.add_ingredient(mock_ingredient2) + burger.get_price = Mock(return_value=155.00) + receipt = burger.get_receipt() + expected = ( + '(==== Classic Bun ====)\n' + '= filling Cutlet =\n' + '= sauce Hot Sauce =\n' + '(==== Classic Bun ====)\n' + '\n' + 'Price: 155.0' + ) + assert receipt == expected \ No newline at end of file