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..7441653b9 --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,91 @@ +import pytest +from unittest.mock import Mock + +from burger import Burger + + +class TestBurger: + + 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 == [] + + + 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) + + 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() + + + def test_get_receipt_raises_attribute_error_without_bun(self, burger): + with pytest.raises(AttributeError): + burger.get_receipt()