From 3025a1a994efe51d7fa4ccee1646a61f6f0f2461 Mon Sep 17 00:00:00 2001 From: olezha_grady Date: Wed, 19 Aug 2026 11:00:38 +0300 Subject: [PATCH] Add unit tests for burger application --- .gitignore | 5 +++ burger.py | 4 +- database.py | 8 ++-- praktikum.py | 8 ++-- requirements.txt | 2 + tests/test_bun.py | 18 ++++++++ tests/test_burger.py | 88 ++++++++++++++++++++++++++++++++++++++++ tests/test_database.py | 26 ++++++++++++ tests/test_ingredient.py | 21 ++++++++++ 9 files changed, 169 insertions(+), 11 deletions(-) create mode 100644 .gitignore create mode 100644 requirements.txt create mode 100644 tests/test_bun.py create mode 100644 tests/test_burger.py create mode 100644 tests/test_database.py create mode 100644 tests/test_ingredient.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..8814cbb5f --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.venv/ +__pycache__/ +.pytest_cache/ +htmlcov/ +.coverage \ No newline at end of file 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/database.py b/database.py index 4c75baf71..88154fbb7 100644 --- a/database.py +++ b/database.py @@ -1,8 +1,6 @@ -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..cffeec658 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pytest +pytest-cov \ No newline at end of file diff --git a/tests/test_bun.py b/tests/test_bun.py new file mode 100644 index 000000000..4e7e813eb --- /dev/null +++ b/tests/test_bun.py @@ -0,0 +1,18 @@ +import pytest + +from bun import Bun + + +@pytest.mark.parametrize( + "name, price", + [ + ("black bun", 100), + ("white bun", 200), + ("red bun", 300), + ] +) +def test_bun_get_name_and_price(name, price): + bun = Bun(name, price) + + assert bun.get_name() == name + assert bun.get_price() == 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..e9271aaaa --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,88 @@ +from unittest.mock import Mock +from burger import Burger +from bun import Bun +from ingredient import Ingredient +from ingredient_types import INGREDIENT_TYPE_FILLING + + +def test_set_buns(): + burger = Burger() + bun = Bun("black bun", 100) + + burger.set_buns(bun) + + assert burger.bun == bun + + +def test_add_ingredient(): + burger = Burger() + ingredient = Ingredient(INGREDIENT_TYPE_FILLING, "cutlet", 100) + + burger.add_ingredient(ingredient) + + assert burger.ingredients == [ingredient] + + +def test_remove_ingredient(): + burger = Burger() + first_ingredient = Ingredient(INGREDIENT_TYPE_FILLING, "cutlet", 100) + second_ingredient = Ingredient(INGREDIENT_TYPE_FILLING, "sausage", 300) + + burger.add_ingredient(first_ingredient) + burger.add_ingredient(second_ingredient) + + burger.remove_ingredient(0) + + assert burger.ingredients == [second_ingredient] + + +def test_move_ingredient(): + burger = Burger() + first_ingredient = Ingredient(INGREDIENT_TYPE_FILLING, "cutlet", 100) + second_ingredient = Ingredient(INGREDIENT_TYPE_FILLING, "sausage", 300) + + burger.add_ingredient(first_ingredient) + burger.add_ingredient(second_ingredient) + + burger.move_ingredient(0, 1) + + assert burger.ingredients == [second_ingredient, first_ingredient] + + +def test_get_price(): + burger = Burger() + + bun = Mock() + bun.get_price.return_value = 100 + + ingredient = Mock() + ingredient.get_price.return_value = 50 + + burger.set_buns(bun) + burger.add_ingredient(ingredient) + + assert burger.get_price() == 250 + +def test_get_receipt(): + burger = Burger() + + bun = Mock() + bun.get_name.return_value = "black bun" + bun.get_price.return_value = 100 + + ingredient = Mock() + ingredient.get_type.return_value = "FILLING" + ingredient.get_name.return_value = "cutlet" + ingredient.get_price.return_value = 50 + + burger.set_buns(bun) + burger.add_ingredient(ingredient) + + expected_receipt = ( + "(==== black bun ====)\n" + "= filling cutlet =\n" + "(==== black bun ====)\n" + "\n" + "Price: 250") + + assert burger.get_receipt() == expected_receipt \ No newline at end of file diff --git a/tests/test_database.py b/tests/test_database.py new file mode 100644 index 000000000..9b856fe8d --- /dev/null +++ b/tests/test_database.py @@ -0,0 +1,26 @@ +from database import Database + + +def test_available_buns(): + database = Database() + + buns = database.available_buns() + + assert len(buns) == 3 + assert buns[0].get_name() == "black bun" + assert buns[1].get_name() == "white bun" + assert buns[2].get_name() == "red bun" + + +def test_available_ingredients(): + database = Database() + + ingredients = database.available_ingredients() + + assert len(ingredients) == 6 + assert ingredients[0].get_name() == "hot sauce" + assert ingredients[1].get_name() == "sour cream" + assert ingredients[2].get_name() == "chili sauce" + assert ingredients[3].get_name() == "cutlet" + assert ingredients[4].get_name() == "dinosaur" + assert ingredients[5].get_name() == "sausage" \ No newline at end of file diff --git a/tests/test_ingredient.py b/tests/test_ingredient.py new file mode 100644 index 000000000..b3cc8f576 --- /dev/null +++ b/tests/test_ingredient.py @@ -0,0 +1,21 @@ +import pytest + +from ingredient import Ingredient +from ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + + +@pytest.mark.parametrize( + "ingredient_type, name, price", + [ + (INGREDIENT_TYPE_SAUCE, "hot sauce", 100), + (INGREDIENT_TYPE_SAUCE, "sour cream", 200), + (INGREDIENT_TYPE_FILLING, "cutlet", 100), + (INGREDIENT_TYPE_FILLING, "sausage", 300), + ] +) +def test_ingredient_getters(ingredient_type, name, price): + ingredient = Ingredient(ingredient_type, name, price) + + assert ingredient.get_type() == ingredient_type + assert ingredient.get_name() == name + assert ingredient.get_price() == price \ No newline at end of file