From 64ba38e3f6e31433b83dfacbbe5f9bab9b07d5ba Mon Sep 17 00:00:00 2001 From: Bulat Gabaev Date: Tue, 4 Aug 2026 00:00:46 +0700 Subject: [PATCH 1/2] Add unit tests for Burger --- .gitignore | 5 ++++ burger.py | 4 +-- database.py | 6 ++--- praktikum.py | 8 +++--- tests/conftest.py | 26 +++++++++++++++++++ tests/test_burger.py | 60 ++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 100 insertions(+), 9 deletions(-) create mode 100644 .gitignore create mode 100644 tests/conftest.py create mode 100644 tests/test_burger.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..00bfc53c7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +__pycache__/ +*.pyc +.pytest_cache/ +.coverage +htmlcov/ \ 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..84d3685d0 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 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/tests/conftest.py b/tests/conftest.py new file mode 100644 index 000000000..9a4e15327 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,26 @@ +import pytest +from unittest.mock import Mock + +from burger import Burger + + +@pytest.fixture +def burger(): + return Burger() + + +@pytest.fixture +def mock_bun(): + bun = Mock() + bun.get_name.return_value = "big bun" + bun.get_price.return_value = 100 + return bun + + +@pytest.fixture +def mock_ingredient(): + ingredient = Mock() + ingredient.get_type.return_value = "SAUCE" + ingredient.get_name.return_value = "chilli sauce" + ingredient.get_price.return_value = 50 + return ingredient \ No newline at end of file diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..7ec2fff73 --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,60 @@ +from unittest.mock import Mock + +from burger import Burger + + +class TestBurger: + + def test_constructor_creates_empty_burger(self): + burger = Burger() + + assert burger.bun is None + assert burger.ingredients == [] + + + def test_set_buns_set_bun(self, burger, mock_bun): + burger.set_buns(mock_bun) + + assert burger.bun == mock_bun + + + def test_add_ingredient_adds_ingredient_to_list(self, burger, mock_ingredient): + burger.add_ingredient(mock_ingredient) + + assert burger.ingredients == [mock_ingredient] + + + def test_remove_ingredient_removes_ingredient_by_index(self, burger, mock_ingredient): + burger.add_ingredient(mock_ingredient) + burger.remove_ingredient(0) + + assert burger.ingredients == [] + + + def test_move_ingredient_changes_ingredient_position(self, burger, mock_ingredient): + second_ingredient = Mock() + + burger.add_ingredient(mock_ingredient) + burger.add_ingredient(second_ingredient) + + burger.move_ingredient(0, 1) + + assert burger.ingredients == [second_ingredient, mock_ingredient] + + + def test_get_price_returns_correct_burger_price(self, burger, mock_bun, mock_ingredient): + burger.set_buns(mock_bun) + burger.add_ingredient(mock_ingredient) + + assert burger.get_price() == 250 + + + def test_get_receipt_returns_correct_receipt(self, burger, mock_bun, mock_ingredient): + burger.set_buns(mock_bun) + burger.add_ingredient(mock_ingredient) + + receipt = burger.get_receipt() + + assert "big bun" in receipt + assert "sauce chilli sauce" in receipt + assert "250" in receipt From 7388a6422ccd73536bdddecc52ecc65f69ba3264 Mon Sep 17 00:00:00 2001 From: Bulat Gabaev Date: Thu, 6 Aug 2026 17:10:34 +0700 Subject: [PATCH 2/2] Fix after review --- tests/test_burger.py | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/tests/test_burger.py b/tests/test_burger.py index 7ec2fff73..7441653b9 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -1,3 +1,4 @@ +import pytest from unittest.mock import Mock from burger import Burger @@ -5,10 +6,15 @@ class TestBurger: - def test_constructor_creates_empty_burger(self): + def test_constructor_sets_bun_to_none(self): burger = Burger() assert burger.bun is None + + + def test_constructor_creates_empty_ingredients_list(self): + burger = Burger() + assert burger.ingredients == [] @@ -53,8 +59,33 @@ def test_get_receipt_returns_correct_receipt(self, burger, mock_bun, mock_ingred burger.set_buns(mock_bun) burger.add_ingredient(mock_ingredient) - receipt = burger.get_receipt() + expected_receipt = ( + "(==== big bun ====)\n" + "= sauce chilli sauce =\n" + "(==== big bun ====)\n" + "\n" + "Price: 250" + ) + + assert burger.get_receipt() == expected_receipt + + # Негативные проверки + + def test_remove_ingredient_raises_index_error_for_invalid_index(self, burger): + with pytest.raises(IndexError): + burger.remove_ingredient(0) + + + def test_move_ingredient_raises_index_error_for_invalid_index(self, burger): + with pytest.raises(IndexError): + burger.move_ingredient(0, 1) + + + def test_get_price_raises_attribute_error_without_bun(self, burger): + with pytest.raises(AttributeError): + burger.get_price() + - assert "big bun" in receipt - assert "sauce chilli sauce" in receipt - assert "250" in receipt + def test_get_receipt_raises_attribute_error_without_bun(self, burger): + with pytest.raises(AttributeError): + burger.get_receipt()