From 8d6b50d3821972c20a10a02745913be7cb6a017f Mon Sep 17 00:00:00 2001 From: Ivan Shugarov Date: Sun, 14 Jun 2026 20:39:56 +0300 Subject: [PATCH] feat: complete task 1 unit tests with mocks and 100% coverage report --- .env | 1 + burger.py | 4 +-- database.py | 6 ++-- praktikum.py | 8 +++--- tests/test_bun.py | 10 +++++++ tests/test_burger.py | 59 ++++++++++++++++++++++++++++++++++++++++ tests/test_database.py | 10 +++++++ tests/test_ingredient.py | 13 +++++++++ 8 files changed, 102 insertions(+), 9 deletions(-) create mode 100644 .env 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/.env b/.env new file mode 100644 index 000000000..60f01f7ec --- /dev/null +++ b/.env @@ -0,0 +1 @@ +PYTHONPATH=. \ No newline at end of file diff --git a/burger.py b/burger.py index 2b3b6a88b..fdcf6160e 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 Diplom_1.bun import Bun +from Diplom_1.ingredient import Ingredient class Burger: diff --git a/database.py b/database.py index 4c75baf71..51dca3056 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 Diplom_1.bun import Bun +from Diplom_1.ingredient import Ingredient +from Diplom_1.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING class Database: diff --git a/praktikum.py b/praktikum.py index ec522fa6d..c2e8e6026 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 Diplom_1.bun import Bun +from Diplom_1.burger import Burger +from Diplom_1.database import Database +from Diplom_1.ingredient import Ingredient def main(): diff --git a/tests/test_bun.py b/tests/test_bun.py new file mode 100644 index 000000000..9b3a7ad87 --- /dev/null +++ b/tests/test_bun.py @@ -0,0 +1,10 @@ +from bun import Bun + +class TestBun: + def test_get_bun_name(self): + bun = Bun("Метеоритная булка",988) + assert bun.get_name() == "Метеоритная булка" + + def test_get_bun_price(self): + bun = Bun("Метеоритная булка",988) + assert bun.get_price() == 988 diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..2579db4ac --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,59 @@ +from burger import Burger +from unittest.mock import Mock + + +class TestBurger: + def test_set_buns(self): + burger = Burger() + mock_bun = Mock() + burger.set_buns(mock_bun) + assert burger.bun == mock_bun + + def test_add_ingredient(self): + burger = Burger() + mock_ingredient = Mock() + burger.add_ingredient(mock_ingredient) + assert mock_ingredient in burger.ingredients + + def test_remove_ingredient(self): + burger = Burger() + mock_ingredient = Mock() + burger.add_ingredient(mock_ingredient) + burger.remove_ingredient(0) + assert mock_ingredient not in burger.ingredients + + def test_move_ingredient(self): + mock_1 = Mock() + mock_2 = Mock() + burger = Burger() + burger.add_ingredient(mock_1) + burger.add_ingredient(mock_2) + burger.move_ingredient(0,1) + assert burger.ingredients[0] == mock_2 + + def test_get_price(self): + mock_bun = Mock() + mock_ingredient = Mock() + mock_bun.get_price.return_value = 100 + mock_ingredient.get_price.return_value = 50 + burger = Burger() + burger.set_buns(mock_bun) + burger.add_ingredient(mock_ingredient) + assert burger.get_price() == 250 + + def test_get_receipt(self): + mock_bun = Mock() + mock_ingredient = Mock() + mock_bun.get_price.return_value = 100 + mock_bun.get_name.return_value = "Метеоритная булка" + mock_ingredient.get_name.return_value = "Лунный Тар-Тар" + mock_ingredient.get_price.return_value = 50 + mock_ingredient.get_type.return_value = "SAUCE" + burger = Burger() + burger.set_buns(mock_bun) + burger.add_ingredient(mock_ingredient) + receipt = burger.get_receipt() + assert "Метеоритная булка" in receipt + assert "sauce" in receipt + assert "Лунный Тар-Тар" in receipt + assert "250" in receipt diff --git a/tests/test_database.py b/tests/test_database.py new file mode 100644 index 000000000..049e2ba24 --- /dev/null +++ b/tests/test_database.py @@ -0,0 +1,10 @@ +from Diplom_1.database import Database + +class TestDatabase: + def test_available_buns(self): + DB = Database() + assert len(DB.available_buns()) == 3 and DB.available_buns()[0].get_name() == "black bun" + + def test_available_ingredients(self): + DB = Database() + assert len(DB.available_ingredients()) == 6 and DB.available_ingredients()[0].get_name() == "hot sauce" \ No newline at end of file diff --git a/tests/test_ingredient.py b/tests/test_ingredient.py new file mode 100644 index 000000000..cc65dfd9d --- /dev/null +++ b/tests/test_ingredient.py @@ -0,0 +1,13 @@ +from ingredient import Ingredient +import pytest +from ingredient_types import INGREDIENT_TYPE_SAUCE,INGREDIENT_TYPE_FILLING + +class TestIngredient: + @pytest.mark.parametrize("ingredient_type, name, price", + [(INGREDIENT_TYPE_SAUCE, "Лунный Тар-Тар", 50),(INGREDIENT_TYPE_FILLING, "Метеоритная котлета", 150)]) + def test_ingredient_getters_success(self, ingredient_type, name, price): + ingredient = Ingredient(ingredient_type, name, price) + assert ingredient.get_price() == price + assert ingredient.get_name() == name + assert ingredient.get_type() == ingredient_type + \ No newline at end of file