From d16f17b554fc7910e1676afd842aa47cbb003b68 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 13:18:58 +0300 Subject: [PATCH 01/32] generated tests --- tests/test_burger.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/test_burger.py diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..e69de29bb From a8e5200bad63786e4ef2397f8a1b7b97a19be837 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 13:26:47 +0300 Subject: [PATCH 02/32] generated classTestBurger --- tests/test_burger.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/test_burger.py b/tests/test_burger.py index e69de29bb..c6a5bbd5e 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -0,0 +1,7 @@ +import pytest +from unittest.mock import Mock +from praktikum.burger import Burger + + +class TestBurger: + #Тесты для класса Burger \ No newline at end of file From ff8fd21d81ff71c1bba4e1a4c586a1487522e592 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 13:40:41 +0300 Subject: [PATCH 03/32] add test_1 --- tests/test_burger.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/test_burger.py b/tests/test_burger.py index c6a5bbd5e..1b0887546 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -4,4 +4,9 @@ class TestBurger: - #Тесты для класса Burger \ No newline at end of file + #Тесты для класса Burger + def test_init(self): + """Тест 1: Проверка инициализации бургера""" + burger = Burger() + assert burger.bun is None, "Булочка должна быть None при инициализации" + assert burger.ingredients == [], "Список ингредиентов должен быть пустым" \ No newline at end of file From 10d13305c456125f9a6d25e3cfcb8092cda17d26 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 13:41:22 +0300 Subject: [PATCH 04/32] add test_2 --- tests/test_burger.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/tests/test_burger.py b/tests/test_burger.py index 1b0887546..19dc7a8c8 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -9,4 +9,17 @@ def test_init(self): """Тест 1: Проверка инициализации бургера""" burger = Burger() assert burger.bun is None, "Булочка должна быть None при инициализации" - assert burger.ingredients == [], "Список ингредиентов должен быть пустым" \ No newline at end of file + assert burger.ingredients == [], "Список ингредиентов должен быть пустым" + + def test_set_buns(self): + """Тест 2: Установка булочки""" + mock_bun = Mock() + mock_bun.get_name.return_value = "Test Bun" + mock_bun.get_price.return_value = 50.0 + + burger = Burger() + burger.set_buns(mock_bun) + + assert burger.bun == mock_bun, "Булочка должна сохраниться в объекте" + assert burger.bun.get_name() == "Test Bun", "Название булочки должно совпадать" + assert burger.bun.get_price() == 50.0, "Цена булочки должна совпадать" \ No newline at end of file From e4e28df0c40f14046b23f016f9c9004078523c2f Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 13:42:01 +0300 Subject: [PATCH 05/32] add test_3 --- tests/test_burger.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/test_burger.py b/tests/test_burger.py index 19dc7a8c8..05fb1217f 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -22,4 +22,18 @@ def test_set_buns(self): assert burger.bun == mock_bun, "Булочка должна сохраниться в объекте" assert burger.bun.get_name() == "Test Bun", "Название булочки должно совпадать" - assert burger.bun.get_price() == 50.0, "Цена булочки должна совпадать" \ No newline at end of file + assert burger.bun.get_price() == 50.0, "Цена булочки должна совпадать" + + def test_add_ingredient(self): + """Тест 3: Добавление одного ингредиента""" + mock_ingredient = Mock() + mock_ingredient.get_name.return_value = "Test Ingredient" + mock_ingredient.get_price.return_value = 30.0 + mock_ingredient.get_type.return_value = "sauce" + + burger = Burger() + burger.add_ingredient(mock_ingredient) + + assert len(burger.ingredients) == 1, "Должен быть 1 ингредиент" + assert burger.ingredients[0] == mock_ingredient, "Ингредиент должен сохраниться" + assert burger.ingredients[0].get_name() == "Test Ingredient" \ No newline at end of file From 90ded7b186880a08110c8ccc6746f69b276d91b1 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 13:42:32 +0300 Subject: [PATCH 06/32] add test_4 --- tests/test_burger.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/test_burger.py b/tests/test_burger.py index 05fb1217f..467d4f244 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -36,4 +36,18 @@ def test_add_ingredient(self): assert len(burger.ingredients) == 1, "Должен быть 1 ингредиент" assert burger.ingredients[0] == mock_ingredient, "Ингредиент должен сохраниться" - assert burger.ingredients[0].get_name() == "Test Ingredient" \ No newline at end of file + assert burger.ingredients[0].get_name() == "Test Ingredient" + + def test_add_multiple_ingredients(self): + """Тест 4: Добавление нескольких ингредиентов""" + mock_ing1 = Mock() + mock_ing2 = Mock() + mock_ing3 = Mock() + + burger = Burger() + burger.add_ingredient(mock_ing1) + burger.add_ingredient(mock_ing2) + burger.add_ingredient(mock_ing3) + + assert len(burger.ingredients) == 3, "Должно быть 3 ингредиента" + assert burger.ingredients == [mock_ing1, mock_ing2, mock_ing3], "Порядок должен сохраняться" \ No newline at end of file From d3c11628b5e9366511f3f2b173fa37e9222a2adc Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 13:43:03 +0300 Subject: [PATCH 07/32] add test_5 --- tests/test_burger.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/tests/test_burger.py b/tests/test_burger.py index 467d4f244..dedb7025f 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -50,4 +50,20 @@ def test_add_multiple_ingredients(self): burger.add_ingredient(mock_ing3) assert len(burger.ingredients) == 3, "Должно быть 3 ингредиента" - assert burger.ingredients == [mock_ing1, mock_ing2, mock_ing3], "Порядок должен сохраняться" \ No newline at end of file + assert burger.ingredients == [mock_ing1, mock_ing2, mock_ing3], "Порядок должен сохраняться" + + def test_remove_ingredient(self): + """Тест 5: Удаление ингредиента по индексу""" + mock_ing1 = Mock() + mock_ing2 = Mock() + mock_ing3 = Mock() + + burger = Burger() + burger.add_ingredient(mock_ing1) + burger.add_ingredient(mock_ing2) + burger.add_ingredient(mock_ing3) + + burger.remove_ingredient(1) # Удаляем второй ингредиент + + assert len(burger.ingredients) == 2, "Должно остаться 2 ингредиента" + assert burger.ingredients == [mock_ing1, mock_ing3], "Порядок должен сохраниться" \ No newline at end of file From b56cde1e1457ebf543234eb6f2feea12db330987 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 13:43:34 +0300 Subject: [PATCH 08/32] add test_6 --- tests/test_burger.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/test_burger.py b/tests/test_burger.py index dedb7025f..27ed68d82 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -66,4 +66,18 @@ def test_remove_ingredient(self): burger.remove_ingredient(1) # Удаляем второй ингредиент assert len(burger.ingredients) == 2, "Должно остаться 2 ингредиента" - assert burger.ingredients == [mock_ing1, mock_ing3], "Порядок должен сохраниться" \ No newline at end of file + assert burger.ingredients == [mock_ing1, mock_ing3], "Порядок должен сохраниться" + + def test_remove_ingredient_first(self): + """Тест 6: Удаление первого ингредиента""" + mock_ing1 = Mock() + mock_ing2 = Mock() + + burger = Burger() + burger.add_ingredient(mock_ing1) + burger.add_ingredient(mock_ing2) + + burger.remove_ingredient(0) + + assert len(burger.ingredients) == 1 + assert burger.ingredients[0] == mock_ing2 \ No newline at end of file From 4993cbfdfe6c1a8aa7925126912a96e29711f501 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 13:45:48 +0300 Subject: [PATCH 09/32] add test_7 --- tests/test_burger.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/tests/test_burger.py b/tests/test_burger.py index 27ed68d82..28a5b2a2f 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -80,4 +80,32 @@ def test_remove_ingredient_first(self): burger.remove_ingredient(0) assert len(burger.ingredients) == 1 - assert burger.ingredients[0] == mock_ing2 \ No newline at end of file + assert burger.ingredients[0] == mock_ing2 + + def test_remove_ingredient_last(self): + """Тест 7: Удаление последнего ингредиента""" + mock_ing1 = Mock() + mock_ing2 = Mock() + + burger = Burger() + burger.add_ingredient(mock_ing1) + burger.add_ingredient(mock_ing2) + + burger.remove_ingredient(1) + + assert len(burger.ingredients) == 1 + assert burger.ingredients[0] == mock_ing1 + + @pytest.mark.parametrize("from_idx,to_idx,expected_order", [ + # Перемещение первого на второе место + (0, 1, [1, 0, 2]), + # Перемещение второго на первое место + (1, 0, [1, 0, 2]), + # Перемещение первого в конец + (0, 2, [1, 2, 0]), + # Перемещение последнего на первое место + (2, 0, [2, 0, 1]), + # Перемещение в ту же позицию (ничего не меняется) + (0, 0, [0, 1, 2]), + (1, 1, [0, 1, 2]), + ]) \ No newline at end of file From ca1a91569150105bcb0a5a73c9394062a108f290 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 13:47:26 +0300 Subject: [PATCH 10/32] add test_9 --- tests/test_burger.py | 59 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-) diff --git a/tests/test_burger.py b/tests/test_burger.py index 28a5b2a2f..acba94422 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -68,7 +68,7 @@ def test_remove_ingredient(self): assert len(burger.ingredients) == 2, "Должно остаться 2 ингредиента" assert burger.ingredients == [mock_ing1, mock_ing3], "Порядок должен сохраниться" - def test_remove_ingredient_first(self): + def test_remove_ingredient_first(self): """Тест 6: Удаление первого ингредиента""" mock_ing1 = Mock() mock_ing2 = Mock() @@ -108,4 +108,59 @@ def test_remove_ingredient_last(self): # Перемещение в ту же позицию (ничего не меняется) (0, 0, [0, 1, 2]), (1, 1, [0, 1, 2]), - ]) \ No newline at end of file + ]) + + def test_move_ingredient(self, from_idx, to_idx, expected_order): + """Тест 8: Перемещение ингредиента с параметризацией""" + # Создаем 3 разных мока + mock_ing1 = Mock() + mock_ing2 = Mock() + mock_ing3 = Mock() + ingredients = [mock_ing1, mock_ing2, mock_ing3] + + burger = Burger() + for ing in ingredients: + burger.add_ingredient(ing) + + burger.move_ingredient(from_idx, to_idx) + + # Проверяем порядок + expected_ingredients = [ingredients[i] for i in expected_order] + assert burger.ingredients == expected_ingredients, f"Неверный порядок при перемещении с {from_idx} на {to_idx}" + + @pytest.mark.parametrize("bun_price,ingredient_prices,expected_price", [ + # Только булочка + (100.0, [], 200.0), + # Булочка + один ингредиент + (100.0, [50.0], 250.0), + # Булочка + два ингредиента + (100.0, [50.0, 30.0], 280.0), + # Дешевая булочка + (10.0, [5.0, 3.0], 28.0), + # Бесплатная булочка + (0.0, [50.0], 50.0), + # Бесплатные ингредиенты + (100.0, [0.0, 0.0], 200.0), + # Только бесплатная булочка + (0.0, [], 0.0), + # Много ингредиентов + (50.0, [10.0, 20.0, 30.0, 40.0], 200.0), + ]) + + def test_get_price(self, bun_price, ingredient_prices, expected_price): + """Тест 9: Расчет цены бургера с параметризацией""" + # Создаем мок для булочки + mock_bun = Mock() + mock_bun.get_price.return_value = bun_price + + burger = Burger() + burger.set_buns(mock_bun) + + # Добавляем ингредиенты с заданными ценами + for price in ingredient_prices: + mock_ing = Mock() + mock_ing.get_price.return_value = price + burger.add_ingredient(mock_ing) + + assert burger.get_price() == expected_price, \ + f"Цена {burger.get_price()} не совпадает с ожидаемой {expected_price}" \ No newline at end of file From 0eb1fae1d8206abddd0e92fcdce42f8ed6e71bf6 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 13:48:51 +0300 Subject: [PATCH 11/32] add test_10 --- tests/test_burger.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/tests/test_burger.py b/tests/test_burger.py index acba94422..e552d513b 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -163,4 +163,22 @@ def test_get_price(self, bun_price, ingredient_prices, expected_price): burger.add_ingredient(mock_ing) assert burger.get_price() == expected_price, \ - f"Цена {burger.get_price()} не совпадает с ожидаемой {expected_price}" \ No newline at end of file + f"Цена {burger.get_price()} не совпадает с ожидаемой {expected_price}" + + def test_get_receipt_without_ingredients(self): + """Тест 10: Чек без ингредиентов (только булочка)""" + mock_bun = Mock() + mock_bun.get_name.return_value = "Black Bun" + mock_bun.get_price.return_value = 100.0 + + burger = Burger() + burger.set_buns(mock_bun) + + expected_receipt = ( + "(==== Black Bun ====)\n" + "(==== Black Bun ====)\n" + "Price: 200.0" + ) + + assert burger.get_receipt() == expected_receipt + From 618ee34d21995524ec912fb8c35f74bca7d0c6a0 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 13:49:22 +0300 Subject: [PATCH 12/32] add test_11 --- tests/test_burger.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests/test_burger.py b/tests/test_burger.py index e552d513b..c4dbad981 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -182,3 +182,33 @@ def test_get_receipt_without_ingredients(self): assert burger.get_receipt() == expected_receipt + def test_get_receipt_with_ingredients(self): + """Тест 11: Чек с ингредиентами""" + mock_bun = Mock() + mock_bun.get_name.return_value = "White Bun" + mock_bun.get_price.return_value = 80.0 + + mock_ing1 = Mock() + mock_ing1.get_type.return_value = "sauce" + mock_ing1.get_name.return_value = "Spicy Sauce" + mock_ing1.get_price.return_value = 40.0 + + mock_ing2 = Mock() + mock_ing2.get_type.return_value = "filling" + mock_ing2.get_name.return_value = "Chicken Cutlet" + mock_ing2.get_price.return_value = 120.0 + + burger = Burger() + burger.set_buns(mock_bun) + burger.add_ingredient(mock_ing1) + burger.add_ingredient(mock_ing2) + + expected_receipt = ( + "(==== White Bun ====)\n" + "= sauce spicy sauce =\n" + "= filling chicken cutlet =\n" + "(==== White Bun ====)\n" + "Price: 320.0" + ) + + assert burger.get_receipt() == expected_receipt \ No newline at end of file From f5d09a1659062d61c1e89550dcb08020173a60ef Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 13:50:48 +0300 Subject: [PATCH 13/32] add test_12 --- tests/test_burger.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/tests/test_burger.py b/tests/test_burger.py index c4dbad981..6993cac0a 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -211,4 +211,32 @@ def test_get_receipt_with_ingredients(self): "Price: 320.0" ) - assert burger.get_receipt() == expected_receipt \ No newline at end of file + assert burger.get_receipt() == expected_receipt + + def test_get_receipt_with_one_ingredient(self): + """Тест 12: Чек с одним ингредиентом""" + mock_bun = Mock() + mock_bun.get_name.return_value = "Rye Bun" + mock_bun.get_price.return_value = 60.0 + + mock_ing = Mock() + mock_ing.get_type.return_value = "sauce" + mock_ing.get_name.return_value = "BBQ Sauce" + mock_ing.get_price.return_value = 30.0 + + burger = Burger() + burger.set_buns(mock_bun) + burger.add_ingredient(mock_ing) + + expected_receipt = ( + "(==== Rye Bun ====)\n" + "= sauce bbq sauce =\n" + "(==== Rye Bun ====)\n" + "Price: 150.0" + ) + + assert burger.get_receipt() == expected_receipt + + + + \ No newline at end of file From 36a73c26dd1568ab8642441aec73ec81a75c55f2 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 13:51:34 +0300 Subject: [PATCH 14/32] add test_13 --- tests/test_burger.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tests/test_burger.py b/tests/test_burger.py index 6993cac0a..e143a1823 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -237,6 +237,37 @@ def test_get_receipt_with_one_ingredient(self): assert burger.get_receipt() == expected_receipt + def test_get_receipt_with_mixed_case_types(self): + """Тест 13: Чек с разным регистром типов ингредиентов""" + mock_bun = Mock() + mock_bun.get_name.return_value = "Bun" + mock_bun.get_price.return_value = 50.0 + + mock_ing1 = Mock() + mock_ing1.get_type.return_value = "SAUCE" # Верхний регистр + mock_ing1.get_name.return_value = "Ketchup" + mock_ing1.get_price.return_value = 20.0 + + mock_ing2 = Mock() + mock_ing2.get_type.return_value = "FILLING" # Верхний регистр + mock_ing2.get_name.return_value = "Cheese" + mock_ing2.get_price.return_value = 30.0 + + burger = Burger() + burger.set_buns(mock_bun) + burger.add_ingredient(mock_ing1) + burger.add_ingredient(mock_ing2) + + # Проверяем, что тип приводится к нижнему регистру + expected_receipt = ( + "(==== Bun ====)\n" + "= sauce ketchup =\n" + "= filling cheese =\n" + "(==== Bun ====)\n" + "Price: 150.0" + ) + + assert burger.get_receipt() == expected_receipt \ No newline at end of file From 7500586cf8f845fa623b02801e015c3a32d35221 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 13:52:35 +0300 Subject: [PATCH 15/32] add test_14 --- tests/test_burger.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tests/test_burger.py b/tests/test_burger.py index e143a1823..d9182e20f 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -269,5 +269,41 @@ def test_get_receipt_with_mixed_case_types(self): assert burger.get_receipt() == expected_receipt + def test_get_receipt_complex_scenario(self): + """Тест 14: Сложный сценарий со многими ингредиентами""" + mock_bun = Mock() + mock_bun.get_name.return_value = "Sesame Bun" + mock_bun.get_price.return_value = 90.0 + + ingredients_data = [ + ("sauce", "Mayo", 25.0), + ("filling", "Beef Patty", 150.0), + ("sauce", "Mustard", 15.0), + ("filling", "Bacon", 80.0), + ("sauce", "Garlic Sauce", 20.0), + ] + + burger = Burger() + burger.set_buns(mock_bun) + + for ing_type, ing_name, ing_price in ingredients_data: + mock_ing = Mock() + mock_ing.get_type.return_value = ing_type + mock_ing.get_name.return_value = ing_name + mock_ing.get_price.return_value = ing_price + burger.add_ingredient(mock_ing) + + expected_receipt = ( + "(==== Sesame Bun ====)\n" + "= sauce mayo =\n" + "= filling beef patty =\n" + "= sauce mustard =\n" + "= filling bacon =\n" + "= sauce garlic sauce =\n" + "(==== Sesame Bun ====)\n" + "Price: 470.0" + ) + + assert burger.get_receipt() == expected_receipt \ No newline at end of file From 96b9bde093a6dceaa623071a23791fce6dea3049 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 13:53:08 +0300 Subject: [PATCH 16/32] add test_15 --- tests/test_burger.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/test_burger.py b/tests/test_burger.py index d9182e20f..5446a1f29 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -306,4 +306,24 @@ def test_get_receipt_complex_scenario(self): assert burger.get_receipt() == expected_receipt + def test_get_receipt_with_mock_price_calculation(self): + """Тест 15: Проверка, что в чеке используется метод get_price()""" + mock_bun = Mock() + mock_bun.get_name.return_value = "Test Bun" + mock_bun.get_price.return_value = 70.0 + + mock_ing = Mock() + mock_ing.get_type.return_value = "sauce" + mock_ing.get_name.return_value = "Test Sauce" + mock_ing.get_price.return_value = 30.0 + + burger = Burger() + burger.set_buns(mock_bun) + burger.add_ingredient(mock_ing) + + receipt = burger.get_receipt() + + # Проверяем, что цена вычислена правильно + assert "Price: 170.0" in receipt # 70*2 + 30 = 170 + \ No newline at end of file From f70567bb5ccce88349058403e52b76cd1e88590a Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 14:15:24 +0300 Subject: [PATCH 17/32] upgrade test_burger.py --- tests/test_burger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_burger.py b/tests/test_burger.py index 5446a1f29..d6dbf81cc 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -1,6 +1,6 @@ import pytest from unittest.mock import Mock -from praktikum.burger import Burger +from burger import Burger class TestBurger: From 96e8ceb48b1b435061c2fb70a6a3925e386b9c3a Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 14:37:37 +0300 Subject: [PATCH 18/32] burger.py --- burger.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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: From 5b96b4b4b7ed6135bd27493162b497fece229dd6 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 14:41:13 +0300 Subject: [PATCH 19/32] upgrade import test_burger.py --- tests/test_burger.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_burger.py b/tests/test_burger.py index d6dbf81cc..187062015 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -1,6 +1,7 @@ import pytest from unittest.mock import Mock from burger import Burger +from bun import Bun class TestBurger: From 6d957a7826756e925ee91ad1f3b4d61f1b58a2af Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 14:41:49 +0300 Subject: [PATCH 20/32] upgrade import test_burger.py --- tests/test_burger.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_burger.py b/tests/test_burger.py index 187062015..d6dbf81cc 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -1,7 +1,6 @@ import pytest from unittest.mock import Mock from burger import Burger -from bun import Bun class TestBurger: From c41c5fb663c531b0a4daad37f12844fb5b581fd0 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 14:43:33 +0300 Subject: [PATCH 21/32] upgrade test_11 --- tests/test_burger.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_burger.py b/tests/test_burger.py index d6dbf81cc..63e7d838d 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -190,12 +190,12 @@ def test_get_receipt_with_ingredients(self): mock_ing1 = Mock() mock_ing1.get_type.return_value = "sauce" - mock_ing1.get_name.return_value = "Spicy Sauce" + mock_ing1.get_name.return_value = "Spicy Sauce" # ← Оригинальное название mock_ing1.get_price.return_value = 40.0 mock_ing2 = Mock() mock_ing2.get_type.return_value = "filling" - mock_ing2.get_name.return_value = "Chicken Cutlet" + mock_ing2.get_name.return_value = "Chicken Cutlet" # ← Оригинальное название mock_ing2.get_price.return_value = 120.0 burger = Burger() @@ -205,8 +205,8 @@ def test_get_receipt_with_ingredients(self): expected_receipt = ( "(==== White Bun ====)\n" - "= sauce spicy sauce =\n" - "= filling chicken cutlet =\n" + "= sauce Spicy Sauce =\n" # ← Исправлено + "= filling Chicken Cutlet =\n" # ← Исправлено "(==== White Bun ====)\n" "Price: 320.0" ) From acb02cb9dd2858b81b93f3d193e8f40215f9c545 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 14:49:40 +0300 Subject: [PATCH 22/32] upgrade test_13 --- tests/test_burger.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/tests/test_burger.py b/tests/test_burger.py index 63e7d838d..2df09816c 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -221,7 +221,7 @@ def test_get_receipt_with_one_ingredient(self): mock_ing = Mock() mock_ing.get_type.return_value = "sauce" - mock_ing.get_name.return_value = "BBQ Sauce" + mock_ing.get_name.return_value = "BBQ Sauce" # ← Оригинальное название mock_ing.get_price.return_value = 30.0 burger = Burger() @@ -230,7 +230,7 @@ def test_get_receipt_with_one_ingredient(self): expected_receipt = ( "(==== Rye Bun ====)\n" - "= sauce bbq sauce =\n" + "= sauce BBQ Sauce =\n" # ← Исправлено "(==== Rye Bun ====)\n" "Price: 150.0" ) @@ -244,12 +244,12 @@ def test_get_receipt_with_mixed_case_types(self): mock_bun.get_price.return_value = 50.0 mock_ing1 = Mock() - mock_ing1.get_type.return_value = "SAUCE" # Верхний регистр + mock_ing1.get_type.return_value = "SAUCE" mock_ing1.get_name.return_value = "Ketchup" mock_ing1.get_price.return_value = 20.0 mock_ing2 = Mock() - mock_ing2.get_type.return_value = "FILLING" # Верхний регистр + mock_ing2.get_type.return_value = "FILLING" mock_ing2.get_name.return_value = "Cheese" mock_ing2.get_price.return_value = 30.0 @@ -258,11 +258,10 @@ def test_get_receipt_with_mixed_case_types(self): burger.add_ingredient(mock_ing1) burger.add_ingredient(mock_ing2) - # Проверяем, что тип приводится к нижнему регистру expected_receipt = ( "(==== Bun ====)\n" - "= sauce ketchup =\n" - "= filling cheese =\n" + "= sauce Ketchup =\n" # ← Исправлено (Ketchup с заглавной) + "= filling Cheese =\n" # ← Исправлено (Cheese с заглавной) "(==== Bun ====)\n" "Price: 150.0" ) From 3b61ace03256b3987397a3390478ce1d83c4d69c Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 14:50:11 +0300 Subject: [PATCH 23/32] upgrade test_14 --- tests/test_burger.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/test_burger.py b/tests/test_burger.py index 2df09816c..950114892 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -294,11 +294,11 @@ def test_get_receipt_complex_scenario(self): expected_receipt = ( "(==== Sesame Bun ====)\n" - "= sauce mayo =\n" - "= filling beef patty =\n" - "= sauce mustard =\n" - "= filling bacon =\n" - "= sauce garlic sauce =\n" + "= sauce Mayo =\n" # ← Исправлено + "= filling Beef Patty =\n" # ← Исправлено + "= sauce Mustard =\n" # ← Исправлено + "= filling Bacon =\n" # ← Исправлено + "= sauce Garlic Sauce =\n" # ← Исправлено "(==== Sesame Bun ====)\n" "Price: 470.0" ) From 9fef8508a0cedca64b1f5ab10cb96a29b2d47fdb Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 14:56:53 +0300 Subject: [PATCH 24/32] upgrade test_burger.py --- tests/test_burger.py | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/tests/test_burger.py b/tests/test_burger.py index 950114892..6a8203155 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -190,12 +190,12 @@ def test_get_receipt_with_ingredients(self): mock_ing1 = Mock() mock_ing1.get_type.return_value = "sauce" - mock_ing1.get_name.return_value = "Spicy Sauce" # ← Оригинальное название + mock_ing1.get_name.return_value = "Spicy Sauce" mock_ing1.get_price.return_value = 40.0 mock_ing2 = Mock() mock_ing2.get_type.return_value = "filling" - mock_ing2.get_name.return_value = "Chicken Cutlet" # ← Оригинальное название + mock_ing2.get_name.return_value = "Chicken Cutlet" mock_ing2.get_price.return_value = 120.0 burger = Burger() @@ -205,8 +205,8 @@ def test_get_receipt_with_ingredients(self): expected_receipt = ( "(==== White Bun ====)\n" - "= sauce Spicy Sauce =\n" # ← Исправлено - "= filling Chicken Cutlet =\n" # ← Исправлено + "= sauce Spicy Sauce =\n" + "= filling Chicken Cutlet =\n" "(==== White Bun ====)\n" "Price: 320.0" ) @@ -221,7 +221,7 @@ def test_get_receipt_with_one_ingredient(self): mock_ing = Mock() mock_ing.get_type.return_value = "sauce" - mock_ing.get_name.return_value = "BBQ Sauce" # ← Оригинальное название + mock_ing.get_name.return_value = "BBQ Sauce" mock_ing.get_price.return_value = 30.0 burger = Burger() @@ -230,8 +230,7 @@ def test_get_receipt_with_one_ingredient(self): expected_receipt = ( "(==== Rye Bun ====)\n" - "= sauce BBQ Sauce =\n" # ← Исправлено - "(==== Rye Bun ====)\n" + "= sauce BBQ Sauce =\n" "Price: 150.0" ) @@ -260,8 +259,8 @@ def test_get_receipt_with_mixed_case_types(self): expected_receipt = ( "(==== Bun ====)\n" - "= sauce Ketchup =\n" # ← Исправлено (Ketchup с заглавной) - "= filling Cheese =\n" # ← Исправлено (Cheese с заглавной) + "= sauce Ketchup =\n" + "= filling Cheese =\n" "(==== Bun ====)\n" "Price: 150.0" ) @@ -294,11 +293,11 @@ def test_get_receipt_complex_scenario(self): expected_receipt = ( "(==== Sesame Bun ====)\n" - "= sauce Mayo =\n" # ← Исправлено - "= filling Beef Patty =\n" # ← Исправлено - "= sauce Mustard =\n" # ← Исправлено - "= filling Bacon =\n" # ← Исправлено - "= sauce Garlic Sauce =\n" # ← Исправлено + "= sauce Mayo =\n" + "= filling Beef Patty =\n" + "= sauce Mustard =\n" + "= filling Bacon =\n" + "= sauce Garlic Sauce =\n" "(==== Sesame Bun ====)\n" "Price: 470.0" ) From 516f34d03c9ec3b5973697af09fdad711517205b Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Sun, 2 Aug 2026 15:17:37 +0300 Subject: [PATCH 25/32] upgrade test_10_14 --- tests/test_burger.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/test_burger.py b/tests/test_burger.py index 6a8203155..853881140 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -177,6 +177,7 @@ def test_get_receipt_without_ingredients(self): expected_receipt = ( "(==== Black Bun ====)\n" "(==== Black Bun ====)\n" + "\n" "Price: 200.0" ) @@ -208,6 +209,7 @@ def test_get_receipt_with_ingredients(self): "= sauce Spicy Sauce =\n" "= filling Chicken Cutlet =\n" "(==== White Bun ====)\n" + "\n" "Price: 320.0" ) @@ -231,6 +233,8 @@ def test_get_receipt_with_one_ingredient(self): expected_receipt = ( "(==== Rye Bun ====)\n" "= sauce BBQ Sauce =\n" + "(==== Rye Bun ====)\n" + "\n" "Price: 150.0" ) @@ -262,6 +266,7 @@ def test_get_receipt_with_mixed_case_types(self): "= sauce Ketchup =\n" "= filling Cheese =\n" "(==== Bun ====)\n" + "\n" "Price: 150.0" ) @@ -299,6 +304,7 @@ def test_get_receipt_complex_scenario(self): "= filling Bacon =\n" "= sauce Garlic Sauce =\n" "(==== Sesame Bun ====)\n" + "\n" "Price: 470.0" ) From 35f01541727c99d13c95b648838f70de880a8452 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Mon, 3 Aug 2026 15:43:09 +0300 Subject: [PATCH 26/32] upgrade README.md --- README.md | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 272081708..413ba5590 100644 --- a/README.md +++ b/README.md @@ -4,14 +4,37 @@ ### Реализованные сценарии -Созданы юнит-тесты, покрывающие классы `Bun`, `Burger`, `Ingredient`, `Database` +Создан юнит-тест, покрывающий класс `Burger` + +Использованы **моки** и **параметризация** для изоляции зависимостей и проверки различных сценариев. + +**Проверяемые методы:** +- Инициализация бургера (`__init__`) +- Установка булочки (`set_buns`) +- Добавление ингредиентов (`add_ingredient`) +- Удаление ингредиентов по индексу (`remove_ingredient`) +- Перемещение ингредиентов (`move_ingredient`) — параметризованный тест (6 сценариев) +- Расчёт стоимости бургера (`get_price`) — параметризованный тест (8 сценариев) +- Формирование чека (`get_receipt`) — 5 различных сценариев + Процент покрытия 100% (отчет: `htmlcov/index.html`) ### Структура проекта -- `praktikum` - пакет, содержащий код программы -- `tests` - пакет, содержащий тесты, разделенные по классам. Например, `bun_test.py`, `burger_test.py` и т.д. +## 📂 Структура проекта +Diplom_1/ +├── praktikum/ # Код программы (исходники) +│ ├── init.py +│ ├── bun.py +│ ├── ingredient.py +│ └── burger.py +├── tests/ # Тесты +│ └── test_burger.py # Тесты для класса Burger +├── requirements.txt # Зависимости +├── pytest.ini # Настройки pytest +├── .gitignore # Игнорируемые файлы +└── README.md # Описание проекта ### Запуск автотестов From 110b614696662d106604a08239d483313326b0a2 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Mon, 3 Aug 2026 15:48:27 +0300 Subject: [PATCH 27/32] generated .gitignore --- .gitignore | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..4c2baa391 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +игнорирем все файлы с расширением +.env +.coverage +*.pyc +*.bak + +игнорируем файлы +Thumbs.db +Desktop.ini + +игнорируем директории +.pytest_cache/ +venv/ +__pycache__/ \ No newline at end of file From 3b198c3e7edc7b1a26277fde7ceb705ab06b62b7 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Mon, 3 Aug 2026 15:58:43 +0300 Subject: [PATCH 28/32] recover praktikum.py --- praktikum.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/praktikum.py b/praktikum.py index ec522fa6d..ea60c1778 100644 --- a/praktikum.py +++ b/praktikum.py @@ -39,3 +39,5 @@ def main(): if __name__ == "__main__": main() + + From ddb32b998d5274df1df5ef2cc5dc0df9bf478ce0 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Fri, 7 Aug 2026 19:49:45 +0300 Subject: [PATCH 29/32] generated __init__.py --- tests/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/__init__.py diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 000000000..e69de29bb From 6708f003465a1b533ef22ff7a4b0a68dc1dd804e Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Fri, 7 Aug 2026 19:51:19 +0300 Subject: [PATCH 30/32] delete __init__.py --- __init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 __init__.py diff --git a/__init__.py b/__init__.py deleted file mode 100644 index e69de29bb..000000000 From 2208b5664c3155c6282a40c89f803caf6be40e42 Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Fri, 7 Aug 2026 20:00:46 +0300 Subject: [PATCH 31/32] requirements.txt --- requirements.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..e69de29bb From f822e2117b97d52b7d65e4abd4c03ca6d213cb3e Mon Sep 17 00:00:00 2001 From: Sergey Sizov Date: Fri, 7 Aug 2026 20:03:20 +0300 Subject: [PATCH 32/32] upgrade requirements.txt --- requirements.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/requirements.txt b/requirements.txt index e69de29bb..392c73154 100644 --- a/requirements.txt +++ b/requirements.txt @@ -0,0 +1,2 @@ +pytest==7.4.3 +pytest-cov==4.1.0 \ No newline at end of file