diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 000000000..b241d3a81 Binary files /dev/null and b/.DS_Store differ diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..b908d4cbe --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +__pycache__/ +*.pyc +.DS_Store diff --git a/__pycache__/praktikum.cpython-314.pyc b/__pycache__/praktikum.cpython-314.pyc new file mode 100644 index 000000000..a92a94a75 Binary files /dev/null and b/__pycache__/praktikum.cpython-314.pyc differ diff --git a/README.md b/praktikum/README.md similarity index 100% rename from README.md rename to praktikum/README.md diff --git a/__init__.py b/praktikum/__init__.py similarity index 100% rename from __init__.py rename to praktikum/__init__.py diff --git a/praktikum/__pycache__/__init__.cpython-314.pyc b/praktikum/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 000000000..204e4bd34 Binary files /dev/null and b/praktikum/__pycache__/__init__.cpython-314.pyc differ diff --git a/praktikum/__pycache__/bun.cpython-314.pyc b/praktikum/__pycache__/bun.cpython-314.pyc new file mode 100644 index 000000000..4a68221dd Binary files /dev/null and b/praktikum/__pycache__/bun.cpython-314.pyc differ diff --git a/praktikum/__pycache__/burger.cpython-314.pyc b/praktikum/__pycache__/burger.cpython-314.pyc new file mode 100644 index 000000000..3b6ea9218 Binary files /dev/null and b/praktikum/__pycache__/burger.cpython-314.pyc differ diff --git a/praktikum/__pycache__/ingredient.cpython-314.pyc b/praktikum/__pycache__/ingredient.cpython-314.pyc new file mode 100644 index 000000000..5b4f8fe99 Binary files /dev/null and b/praktikum/__pycache__/ingredient.cpython-314.pyc differ diff --git a/praktikum/__pycache__/ingredient_types.cpython-314.pyc b/praktikum/__pycache__/ingredient_types.cpython-314.pyc new file mode 100644 index 000000000..c5da80a9d Binary files /dev/null and b/praktikum/__pycache__/ingredient_types.cpython-314.pyc differ diff --git a/bun.py b/praktikum/bun.py similarity index 100% rename from bun.py rename to praktikum/bun.py diff --git a/burger.py b/praktikum/burger.py similarity index 100% rename from burger.py rename to praktikum/burger.py diff --git a/database.py b/praktikum/database.py similarity index 100% rename from database.py rename to praktikum/database.py diff --git a/ingredient.py b/praktikum/ingredient.py similarity index 100% rename from ingredient.py rename to praktikum/ingredient.py diff --git a/ingredient_types.py b/praktikum/ingredient_types.py similarity index 100% rename from ingredient_types.py rename to praktikum/ingredient_types.py diff --git a/praktikum.py b/praktikum/praktikum.py similarity index 100% rename from praktikum.py rename to praktikum/praktikum.py diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/__pycache__/__init__.cpython-314.pyc b/tests/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 000000000..d4cccf520 Binary files /dev/null and b/tests/__pycache__/__init__.cpython-314.pyc differ diff --git a/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc b/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc new file mode 100644 index 000000000..7631bf434 Binary files /dev/null and b/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc differ diff --git a/tests/__pycache__/test_burger.cpython-314-pytest-9.0.2.pyc b/tests/__pycache__/test_burger.cpython-314-pytest-9.0.2.pyc new file mode 100644 index 000000000..922d40060 Binary files /dev/null and b/tests/__pycache__/test_burger.cpython-314-pytest-9.0.2.pyc differ diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 000000000..7aa0bc039 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,26 @@ +import pytest +from unittest.mock import Mock +from praktikum.bun import Bun +from praktikum.ingredient import Ingredient +from praktikum.burger import Burger + +@pytest.fixture +def burger(): + return Burger() + +@pytest.fixture +def mock_bun(): + bun = Mock(spec=Bun) + bun.get_name.return_value = "Black Bun" + bun.get_price.return_value = 100.0 + return bun + +@pytest.fixture +def mock_ingredient(): + def _mock_ingredient(ingredient_type, name, price): + ingredient = Mock(spec=Ingredient) + ingredient.get_type.return_value = ingredient_type + ingredient.get_name.return_value = name + ingredient.get_price.return_value = price + return ingredient + return _mock_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..7f34a69fc --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,111 @@ +import pytest +from unittest.mock import Mock +from praktikum.bun import Bun +from praktikum.ingredient import Ingredient +from praktikum.burger import Burger +from praktikum.ingredient_types import * + + +class TestBurger: + + def test_initial_state(self, burger): + burger = Burger() + assert burger.bun is None + assert burger.ingredients == [] + + + def test_burger_with_bun_and_ingredient_state(self): + mock_bun = Mock() + mock_ingredient = Mock() + bun = mock_bun('black bun', 100.0) + ingredient = mock_ingredient(INGREDIENT_TYPE_SAUCE, 'hot sauce', 100.0) + burger = Burger() + burger.set_buns(bun) + burger.add_ingredient(ingredient) + assert burger.bun == bun + assert len(burger.ingredients) == 1 + assert burger.ingredients[0] == ingredient + + def test_set_buns(self, burger, mock_bun): + burger.set_buns(mock_bun) + assert burger.bun == mock_bun + + + def test_add_ingredient(self, burger, mock_ingredient): + ingredient = mock_ingredient("TOPPING", "Pepperoni", 50.0) + burger.add_ingredient(ingredient) + assert ingredient in burger.ingredients + + @pytest.mark.parametrize("index", [0, -1]) + def test_remove_ingredient(self, burger, mock_ingredient, index): + ingredient = mock_ingredient("SAUCE", "Barbecue", 30.0) + burger.add_ingredient(ingredient) + burger.remove_ingredient(index) + assert len(burger.ingredients) == 0 + + @pytest.mark.parametrize( + "start_index, new_index", + [(0, 1), (1, 0), (0, 0)] + ) + def test_move_ingredient(self, burger, mock_ingredient, start_index, new_index): + ingredient1 = mock_ingredient("TOPPING", "Pepperoni", 50.0) + ingredient2 = mock_ingredient("SAUCE", "Barbecue", 30.0) + burger.add_ingredient(ingredient1) + burger.add_ingredient(ingredient2) + + original_names = [ingredient1.get_name(), ingredient2.get_name()] + + burger.move_ingredient(start_index, new_index) + + current_names = [ing.get_name() for ing in burger.ingredients] + + + expected_names = original_names.copy() + expected_names.insert(new_index, expected_names.pop(start_index)) + + assert current_names == expected_names + + @pytest.mark.parametrize( + "bun_price, ingredient_prices, expected_price", + [ + (100.0, [], 200.0), + (150.0, [50.0], 350.0), + (100.0, [50.0, 30.0], 280.0), + ] + ) + def test_get_price(self, burger, mock_bun, mock_ingredient, bun_price, ingredient_prices, expected_price): + mock_bun.get_price.return_value = bun_price + burger.set_buns(mock_bun) + + for i, price in enumerate(ingredient_prices): + ingredient = mock_ingredient(f"TYPE_{i}", f"Ingredient_{i}", price) + burger.add_ingredient(ingredient) + + assert burger.get_price() == expected_price + + def test_get_receipt(self, burger, mock_bun, mock_ingredient): + burger.set_buns(mock_bun) + ingredient = mock_ingredient("TOPPING", "Pepperoni", 50.0) + burger.add_ingredient(ingredient) + + receipt = burger.get_receipt() + expected_lines = [ + '(==== Black Bun ====)', + '= topping Pepperoni =', + '(==== Black Bun ====)\n', + f'Price: {200.0 + 50.0}' + ] + expected_receipt = '\n'.join(expected_lines) + + assert receipt == expected_receipt + + def test_get_receipt_no_ingredients(self, burger, mock_bun): + burger.set_buns(mock_bun) + receipt = burger.get_receipt() + expected_lines = [ + '(==== Black Bun ====)', + '(==== Black Bun ====)\n', + 'Price: 200.0' + ] + expected_receipt = '\n'.join(expected_lines) + assert receipt == expected_receipt \ No newline at end of file