diff --git a/htmlcov.zip b/htmlcov.zip new file mode 100644 index 000000000..ada0a57aa Binary files /dev/null and b/htmlcov.zip 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/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/conftest.py b/tests/conftest.py new file mode 100644 index 000000000..280c2ce88 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,38 @@ +import pytest +from praktikum.bun import Bun +from praktikum.burger import Burger +from praktikum.ingredient import Ingredient +from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + +BUN_PRICE = 50 +BUN_NAME_1 = "Test Bun 1" +BUN_NAME_2 = "Test Bun 2" +SAUCE_NAME = "Test Sauce" +FILLING_NAME = "Test Filling" +SAUCE_PRICE = 20 +FILLING_PRICE = 40 + + +@pytest.fixture +def mock_bun(): + return Bun(BUN_NAME_1, BUN_PRICE) + + +@pytest.fixture +def mock_bun_2(): + return Bun(BUN_NAME_2, BUN_PRICE) + + +@pytest.fixture +def mock_sauce(): + return Ingredient(INGREDIENT_TYPE_SAUCE, SAUCE_NAME, SAUCE_PRICE) + + +@pytest.fixture +def mock_filling(): + return Ingredient(INGREDIENT_TYPE_FILLING, FILLING_NAME, FILLING_PRICE) + + +@pytest.fixture +def burger(): + return Burger() diff --git a/tests/test_bun.py b/tests/test_bun.py new file mode 100644 index 000000000..76b283fb1 --- /dev/null +++ b/tests/test_bun.py @@ -0,0 +1,15 @@ +import pytest +from praktikum.bun import Bun + +BUN_NAME_1 = "sesame" +BUN_NAME_2 = "plain" +BUN_PRICE = 50.0 + +@pytest.mark.parametrize("name", [BUN_NAME_1, BUN_NAME_2]) +def test_bun_name(name): + bun = Bun(name, BUN_PRICE) + assert bun.get_name() == name + +def test_bun_price(): + bun = Bun(BUN_NAME_1, BUN_PRICE) + assert bun.get_price() == BUN_PRICE \ No newline at end of file diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..da1c7418f --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,53 @@ +BUN_PRICE = 50 +BUN_NAME_1 = "Test Bun 1" +BUN_NAME_2 = "Test Bun 2" +SAUCE_NAME = "Test Sauce" +FILLING_NAME = "Test Filling" +SAUCE_PRICE = 20 +FILLING_PRICE = 40 + +def test_add_one_ingredient(burger, mock_sauce): + burger.add_ingredient(mock_sauce) + assert burger.ingredients[0].get_name() == SAUCE_NAME, "Ингредиент не был добавлен корректно" + +def test_add_two_ingredients(burger, mock_sauce, mock_filling): + burger.add_ingredient(mock_sauce) + burger.add_ingredient(mock_filling) + assert burger.ingredients[0].get_name() == SAUCE_NAME and burger.ingredients[ + 1].get_name() == FILLING_NAME, "Ингредиенты не были добавлены корректно" + +def test_remove_ingredient(burger, mock_sauce, mock_filling): + burger.add_ingredient(mock_sauce) + burger.add_ingredient(mock_filling) + burger.remove_ingredient(1) + assert burger.ingredients[0].get_name() == SAUCE_NAME and len( + burger.ingredients) == 1, "Ингредиент не был удален корректно" + +def test_move_ingredient(burger, mock_sauce, mock_filling): + burger.add_ingredient(mock_sauce) + burger.add_ingredient(mock_filling) + burger.move_ingredient(0, 1) + assert burger.ingredients[0].get_name() == FILLING_NAME and burger.ingredients[ + 1].get_name() == SAUCE_NAME, "Ингредиент не был перемещен корректно" + +def test_get_price(burger, mock_bun, mock_sauce, mock_filling): + burger.set_buns(mock_bun) + burger.add_ingredient(mock_sauce) + burger.add_ingredient(mock_filling) + expected_price = BUN_PRICE * 2 + SAUCE_PRICE + FILLING_PRICE + assert burger.get_price() == expected_price, f"Общая цена бургера {burger.get_price()} не соответствует ожидаемой {expected_price}" + +def test_get_receipt(burger, mock_bun, mock_sauce, mock_filling): + burger.set_buns(mock_bun) + burger.add_ingredient(mock_sauce) + burger.add_ingredient(mock_filling) + expected_price = BUN_PRICE * 2 + SAUCE_PRICE + FILLING_PRICE + expected = ( + f'(==== {BUN_NAME_1} ====)\n' + f'= sauce {SAUCE_NAME} =\n' + f'= filling {FILLING_NAME} =\n' + f'(==== {BUN_NAME_1} ====)\n' + f'\n' + f'Price: {expected_price}' + ) + assert burger.get_receipt() == expected, 'Полный вывод чека не совпадает с ожидаемым' diff --git a/tests/test_database.py b/tests/test_database.py new file mode 100644 index 000000000..4d7293bb5 --- /dev/null +++ b/tests/test_database.py @@ -0,0 +1,14 @@ +from database import Database +from praktikum.bun import Bun +from praktikum.ingredient import Ingredient + + +def test_database_lists(): + db = Database() + buns = db.available_buns() + ingredients = db.available_ingredients() + + assert isinstance(buns, list) + assert isinstance(ingredients, list) + assert len(buns) == 3 + assert len(ingredients) == 6 diff --git a/tests/test_ingredient.py b/tests/test_ingredient.py new file mode 100644 index 000000000..15cd859da --- /dev/null +++ b/tests/test_ingredient.py @@ -0,0 +1,32 @@ +import pytest +from praktikum.ingredient import Ingredient +from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + +SAUCE_NAME = "Test Sauce" +FILLING_NAME = "Test Filling" +SAUCE_PRICE = 20 +FILLING_PRICE = 40 + +@pytest.mark.parametrize("ingredient_type, name, price", [ + (INGREDIENT_TYPE_SAUCE, SAUCE_NAME, SAUCE_PRICE), + (INGREDIENT_TYPE_FILLING, FILLING_NAME, FILLING_PRICE) +]) +def test_ingredient_type(ingredient_type, name, price): + ingredient = Ingredient(ingredient_type, name, price) + assert ingredient.get_type() == ingredient_type, f"Тип ингредиента '{ingredient.get_type()}' не соответствует ожидаемому '{ingredient_type}'" + +@pytest.mark.parametrize("ingredient_type, name, price", [ + (INGREDIENT_TYPE_SAUCE, SAUCE_NAME, SAUCE_PRICE), + (INGREDIENT_TYPE_FILLING, FILLING_NAME, FILLING_PRICE) +]) +def test_ingredient_name(ingredient_type, name, price): + ingredient = Ingredient(ingredient_type, name, price) + assert ingredient.get_name() == name, f"Название ингредиента '{ingredient.get_name()}' не соответствует ожидаемому '{name}'" + +@pytest.mark.parametrize("ingredient_type, name, price", [ + (INGREDIENT_TYPE_SAUCE, SAUCE_NAME, SAUCE_PRICE), + (INGREDIENT_TYPE_FILLING, FILLING_NAME, FILLING_PRICE) +]) +def test_ingredient_price(ingredient_type, name, price): + ingredient = Ingredient(ingredient_type, name, price) + assert ingredient.get_price() == price, f"Цена ингредиента {ingredient.get_price()} не соответствует ожидаемой {price}" \ No newline at end of file