diff --git a/praktikum/__init__.py b/praktikum/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/praktikum/__pycache__/__init__.cpython-310.pyc b/praktikum/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 000000000..1bf18dbbd Binary files /dev/null and b/praktikum/__pycache__/__init__.cpython-310.pyc differ diff --git a/praktikum/__pycache__/bun.cpython-310.pyc b/praktikum/__pycache__/bun.cpython-310.pyc new file mode 100644 index 000000000..9f45cd291 Binary files /dev/null and b/praktikum/__pycache__/bun.cpython-310.pyc differ diff --git a/praktikum/__pycache__/burger.cpython-310.pyc b/praktikum/__pycache__/burger.cpython-310.pyc new file mode 100644 index 000000000..d723c997e Binary files /dev/null and b/praktikum/__pycache__/burger.cpython-310.pyc differ diff --git a/praktikum/__pycache__/ingredient.cpython-310.pyc b/praktikum/__pycache__/ingredient.cpython-310.pyc new file mode 100644 index 000000000..e3cbbf907 Binary files /dev/null and b/praktikum/__pycache__/ingredient.cpython-310.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 96% rename from burger.py rename to praktikum/burger.py index 2b3b6a88b..8264fde27 100644 --- a/burger.py +++ b/praktikum/burger.py @@ -43,6 +43,6 @@ def get_receipt(self) -> str: receipt.append(f'= {str(ingredient.get_type()).lower()} {ingredient.get_name()} =') receipt.append(f'(==== {self.bun.get_name()} ====)\n') - receipt.append(f'Price: {self.get_price()}') + receipt.append(f'Price: {self.get_price()}\n') return '\n'.join(receipt) 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/pytest.ini b/pytest.ini new file mode 100644 index 000000000..dd5e2415f --- /dev/null +++ b/pytest.ini @@ -0,0 +1,4 @@ +[pytest] +addopts = -q --maxfail=1 +testpaths = tests +pythonpath = . diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..989ec82c1 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pytest==8.4.2 +pytest-cov==7.0.0 diff --git a/tests/.DS_Store b/tests/.DS_Store new file mode 100644 index 000000000..74be77285 Binary files /dev/null and b/tests/.DS_Store differ diff --git a/tests/__pycache__/conftest.cpython-310-pytest-8.3.2.pyc b/tests/__pycache__/conftest.cpython-310-pytest-8.3.2.pyc new file mode 100644 index 000000000..09b92f31e Binary files /dev/null and b/tests/__pycache__/conftest.cpython-310-pytest-8.3.2.pyc differ diff --git a/tests/__pycache__/conftest.cpython-310-pytest-8.4.2.pyc b/tests/__pycache__/conftest.cpython-310-pytest-8.4.2.pyc new file mode 100644 index 000000000..05e3e98ed Binary files /dev/null and b/tests/__pycache__/conftest.cpython-310-pytest-8.4.2.pyc differ diff --git a/tests/__pycache__/conftest.cpython-312-pytest-8.4.2.pyc b/tests/__pycache__/conftest.cpython-312-pytest-8.4.2.pyc new file mode 100644 index 000000000..895dfcc15 Binary files /dev/null and b/tests/__pycache__/conftest.cpython-312-pytest-8.4.2.pyc differ diff --git a/tests/__pycache__/test_burger_mutations.cpython-310-pytest-8.3.2.pyc b/tests/__pycache__/test_burger_mutations.cpython-310-pytest-8.3.2.pyc new file mode 100644 index 000000000..9e8b97e1d Binary files /dev/null and b/tests/__pycache__/test_burger_mutations.cpython-310-pytest-8.3.2.pyc differ diff --git a/tests/__pycache__/test_burger_mutations.cpython-310-pytest-8.4.2.pyc b/tests/__pycache__/test_burger_mutations.cpython-310-pytest-8.4.2.pyc new file mode 100644 index 000000000..64baac85d Binary files /dev/null and b/tests/__pycache__/test_burger_mutations.cpython-310-pytest-8.4.2.pyc differ diff --git a/tests/__pycache__/test_burger_mutations.cpython-312-pytest-8.4.2.pyc b/tests/__pycache__/test_burger_mutations.cpython-312-pytest-8.4.2.pyc new file mode 100644 index 000000000..a574936bf Binary files /dev/null and b/tests/__pycache__/test_burger_mutations.cpython-312-pytest-8.4.2.pyc differ diff --git a/tests/__pycache__/test_burger_price_param.cpython-310-pytest-8.3.2.pyc b/tests/__pycache__/test_burger_price_param.cpython-310-pytest-8.3.2.pyc new file mode 100644 index 000000000..c2c459f08 Binary files /dev/null and b/tests/__pycache__/test_burger_price_param.cpython-310-pytest-8.3.2.pyc differ diff --git a/tests/__pycache__/test_burger_price_param.cpython-310-pytest-8.4.2.pyc b/tests/__pycache__/test_burger_price_param.cpython-310-pytest-8.4.2.pyc new file mode 100644 index 000000000..dd059a646 Binary files /dev/null and b/tests/__pycache__/test_burger_price_param.cpython-310-pytest-8.4.2.pyc differ diff --git a/tests/__pycache__/test_burger_price_param.cpython-312-pytest-8.4.2.pyc b/tests/__pycache__/test_burger_price_param.cpython-312-pytest-8.4.2.pyc new file mode 100644 index 000000000..b3fb223de Binary files /dev/null and b/tests/__pycache__/test_burger_price_param.cpython-312-pytest-8.4.2.pyc differ diff --git a/tests/__pycache__/test_burger_receipt.cpython-310-pytest-8.3.2.pyc b/tests/__pycache__/test_burger_receipt.cpython-310-pytest-8.3.2.pyc new file mode 100644 index 000000000..4c1e0d3fd Binary files /dev/null and b/tests/__pycache__/test_burger_receipt.cpython-310-pytest-8.3.2.pyc differ diff --git a/tests/__pycache__/test_burger_receipt.cpython-310-pytest-8.4.2.pyc b/tests/__pycache__/test_burger_receipt.cpython-310-pytest-8.4.2.pyc new file mode 100644 index 000000000..4dbd309d8 Binary files /dev/null and b/tests/__pycache__/test_burger_receipt.cpython-310-pytest-8.4.2.pyc differ diff --git a/tests/__pycache__/test_burger_receipt.cpython-312-pytest-8.4.2.pyc b/tests/__pycache__/test_burger_receipt.cpython-312-pytest-8.4.2.pyc new file mode 100644 index 000000000..5487bbaea Binary files /dev/null and b/tests/__pycache__/test_burger_receipt.cpython-312-pytest-8.4.2.pyc differ diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 000000000..7e65868df --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,15 @@ +from unittest.mock import MagicMock + +import pytest + + +@pytest.fixture +def mk_ing(): + def _make(label: str, *, price: int = 1, type_: str = "FILLING"): + ing = MagicMock() + ing.get_name.return_value = label + ing.get_price.return_value = price + ing.get_type.return_value = type_ + return ing + + return _make diff --git a/tests/test_burger_mutations.py b/tests/test_burger_mutations.py new file mode 100644 index 000000000..b0c3cb23c --- /dev/null +++ b/tests/test_burger_mutations.py @@ -0,0 +1,40 @@ +from praktikum.burger import Burger + + +class TestBurgerMutations: + def test_add_ingredient_appends_to_list(self, mk_ing): + burger = Burger() + ingredient = mk_ing("A") + + burger.add_ingredient(ingredient) + + assert [item.get_name() for item in burger.ingredients] == ["A"] + + def test_remove_ingredient_by_index(self, mk_ing): + burger = Burger() + burger.add_ingredient(mk_ing("A")) + burger.add_ingredient(mk_ing("C")) + burger.add_ingredient(mk_ing("D")) + + burger.remove_ingredient(1) + + assert [item.get_name() for item in burger.ingredients] == ["A", "D"] + + def test_move_ingredient_changes_positions(self, mk_ing): + burger = Burger() + burger.add_ingredient(mk_ing("A")) + burger.add_ingredient(mk_ing("C")) + burger.add_ingredient(mk_ing("D")) + + burger.move_ingredient(0, 2) + + assert [item.get_name() for item in burger.ingredients] == ["C", "D", "A"] + + def test_set_buns_assigns_bun(self, mk_ing): + burger = Burger() + bun = mk_ing("Black Bun", price=100, type_="BUN") + + burger.set_buns(bun) + + assert burger.bun is bun + assert burger.bun.get_type() == "BUN" diff --git a/tests/test_burger_price_param.py b/tests/test_burger_price_param.py new file mode 100644 index 000000000..296b621aa --- /dev/null +++ b/tests/test_burger_price_param.py @@ -0,0 +1,31 @@ +import pytest +from unittest.mock import MagicMock + +from praktikum.burger import Burger + + +class TestBurgerPrice: + @pytest.mark.parametrize( + "bun_price, ingredient_prices, expected", + [ + (0, [], 0), + (50, [], 100), + (80, [20], 180), + (100, [10, 20, 30], 260), + ], + ) + def test_total_price_parametrized(self, bun_price, ingredient_prices, expected): + burger = Burger() + bun = MagicMock() + bun.get_price.return_value = bun_price + bun.get_name.return_value = "Any Bun" + burger.set_buns(bun) + + for price in ingredient_prices: + ingredient = MagicMock() + ingredient.get_price.return_value = price + ingredient.get_name.return_value = f"i{price}" + ingredient.get_type.return_value = "FILLING" + burger.add_ingredient(ingredient) + + assert burger.get_price() == expected diff --git a/tests/test_burger_receipt.py b/tests/test_burger_receipt.py new file mode 100644 index 000000000..dac695071 --- /dev/null +++ b/tests/test_burger_receipt.py @@ -0,0 +1,23 @@ +from praktikum.burger import Burger + + +class TestBurgerReceipt: + def test_receipt_text_full_match(self, mk_ing): + burger = Burger() + bun = mk_ing("Black Bun", price=100, type_="BUN") + sauce = mk_ing("spicy", price=30, type_="SAUCE") + filling = mk_ing("beef", price=70, type_="FILLING") + + burger.set_buns(bun) + burger.add_ingredient(sauce) + burger.add_ingredient(filling) + + expected = ( + f"(==== {bun.get_name()} ====)\n" + f"= sauce {sauce.get_name()} =\n" + f"= filling {filling.get_name()} =\n" + f"(==== {bun.get_name()} ====)\n" + f"\nPrice: {2 * bun.get_price() + sauce.get_price() + filling.get_price()}\n" + ) + + assert burger.get_receipt() == expected