diff --git a/.coverage b/.coverage new file mode 100644 index 000000000..4ec67b178 Binary files /dev/null and b/.coverage differ 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/requirements.txt b/requirements.txt new file mode 100644 index 000000000..a7b08725c --- /dev/null +++ b/requirements.txt @@ -0,0 +1,7 @@ +coverage==7.13.5 +iniconfig==2.3.0 +packaging==26.0 +pluggy==1.6.0 +Pygments==2.20.0 +pytest==9.0.2 +pytest-cov==7.1.0 diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/test_bun.py b/tests/test_bun.py new file mode 100644 index 000000000..2b43e9f94 --- /dev/null +++ b/tests/test_bun.py @@ -0,0 +1,11 @@ +from praktikum.bun import Bun + + +class TestBun: + def test_get_bun_price(self): + bun = Bun('Краторная булка N-200i', 1255) + assert bun.get_price() == 1255 + + def test_get_bun_name(self): + bun = Bun('Краторная булка N-200i', 1255) + assert bun.get_name() == 'Краторная булка N-200i' diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..2de99731b --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,73 @@ +import praktikum.ingredient_types + + +from unittest.mock import Mock +from praktikum.burger import Burger, Bun +from praktikum.database import Database + + +class TestBurger: + def test_set_buns_correct(self): + burger = Burger() + + bun = Bun('Name_bun', 100.0) + burger.set_buns(bun) + + assert burger.bun == bun + + def test_add_ingredient_correct(self): + burger = Burger() + mock_ingredient = Mock() + + mock_ingredient.get_price.return_value = 9.0 + mock_ingredient.get_name.return_value = 'тест' + mock_ingredient.get_type.return_value = praktikum.ingredient_types.INGREDIENT_TYPE_FILLING + burger.add_ingredient(mock_ingredient) + + assert burger.ingredients[0].get_type() == praktikum.ingredient_types.INGREDIENT_TYPE_FILLING + assert burger.ingredients[0].get_price() == 9.0 + assert burger.ingredients[0].get_name() == 'тест' + + + def test_remove_ingredient_successful(self): + burger = Burger() + mock_ingredient = Mock() + + burger.add_ingredient(mock_ingredient) + burger.remove_ingredient(0) + + assert len(burger.ingredients) == 0 + + def test_get_price_correct(self): + burger = Burger() + base = Database() + + burger.set_buns(base.available_buns()[0]) + burger.add_ingredient(base.available_ingredients()[0]) + burger.add_ingredient(base.available_ingredients()[3]) + + assert burger.get_price() == 400.0 + + def test_get_receipt_correct(self): + burger = Burger() + base = Database() + + burger.set_buns(base.available_buns()[1]) + burger.add_ingredient(base.available_ingredients()[1]) + burger.add_ingredient(base.available_ingredients()[3]) + + expected_receipt = "(==== white bun ====)\n"\ + "= sauce sour cream =\n"\ + "= filling cutlet =\n"\ + "(==== white bun ====)\n\n"\ + "Price: 700" + assert expected_receipt == burger.get_receipt() + + def test_move_ingredient_forward(self): + burger = Burger() + + burger.ingredients = ["bun", "cutlet", "cheese", "sauce"] + burger.move_ingredient(2, 1) + expected = ["bun", "cheese", "cutlet", "sauce"] + + assert burger.ingredients == expected \ No newline at end of file diff --git a/tests/test_database.py b/tests/test_database.py new file mode 100644 index 000000000..b29932b04 --- /dev/null +++ b/tests/test_database.py @@ -0,0 +1,40 @@ +from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING +from praktikum.database import Database + + +class TestDataBase: + def test_get_available_ingredients_correct(self): + data_ingredients = Database() + + available_ingredients = data_ingredients.available_ingredients() + assert len(available_ingredients) == 6 + + def test_get_available_buns_correct(self): + data_bun = Database() + + available_buns = data_bun.available_buns() + assert len(available_buns) == 3 + + def test_get_available_ingredients_prices_correct(self): + data_price = Database() + + ingredients = data_price.available_ingredients() + price = {i.get_name(): i.get_price() for i in ingredients} + + assert price['hot sauce'] == 100 + + def test_get_count_available_sauces_correct(self): + count_ingredients = Database() + + ingredients = count_ingredients.available_ingredients() + type_sauce = [i for i in ingredients if i.get_type() == INGREDIENT_TYPE_SAUCE] + + assert len(type_sauce) == 3 + + def test_get_count_available_fillings_correct(self): + correct_ingredients = Database() + + ingredients = correct_ingredients.available_ingredients() + type_fillings = [i for i in ingredients if i.get_type() == INGREDIENT_TYPE_FILLING] + + assert len(type_fillings) == 3 diff --git a/tests/test_ingredient.py b/tests/test_ingredient.py new file mode 100644 index 000000000..e8d4f0e01 --- /dev/null +++ b/tests/test_ingredient.py @@ -0,0 +1,24 @@ +import pytest +from praktikum.ingredient import Ingredient +from praktikum.ingredient_types import * + + +class TestIngredient: + def test_get_name_correct_name(self): + ingredient = Ingredient(INGREDIENT_TYPE_SAUCE, 'Соус традиционный галактический', 15) + assert ingredient.get_name() == 'Соус традиционный галактический' + + def test_get_price_correct_price(self): + ingredient = Ingredient(INGREDIENT_TYPE_SAUCE, 'Тест', 15) + assert ingredient.get_price() == 15 + + @pytest.mark.parametrize( + 'type, name, price, expected_ingredient', + [ + [INGREDIENT_TYPE_SAUCE, 'Соус традиционный галактический', 15, 'SAUCE'], + [INGREDIENT_TYPE_FILLING, 'Хрустящие минеральные кольца', 300, 'FILLING'] + ] + ) + def test_get_type_correct_type(self, name, price, type, expected_ingredient): + ingredient = Ingredient(type, name, price) + assert ingredient.get_type() == expected_ingredient \ No newline at end of file