diff --git a/.coverage b/.coverage new file mode 100644 index 000000000..428a0c501 Binary files /dev/null and b/.coverage differ diff --git a/__pycache__/__init__.cpython-312.pyc b/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..ad5c6426c Binary files /dev/null and b/__pycache__/__init__.cpython-312.pyc differ diff --git a/__pycache__/bun.cpython-312.pyc b/__pycache__/bun.cpython-312.pyc new file mode 100644 index 000000000..558b15b64 Binary files /dev/null and b/__pycache__/bun.cpython-312.pyc differ diff --git a/__pycache__/burger.cpython-312.pyc b/__pycache__/burger.cpython-312.pyc new file mode 100644 index 000000000..c9d3075ea Binary files /dev/null and b/__pycache__/burger.cpython-312.pyc differ diff --git a/__pycache__/database.cpython-312.pyc b/__pycache__/database.cpython-312.pyc new file mode 100644 index 000000000..3cc8a7551 Binary files /dev/null and b/__pycache__/database.cpython-312.pyc differ diff --git a/__pycache__/ingredient.cpython-312.pyc b/__pycache__/ingredient.cpython-312.pyc new file mode 100644 index 000000000..aa8249ff4 Binary files /dev/null and b/__pycache__/ingredient.cpython-312.pyc differ diff --git a/__pycache__/ingredient_types.cpython-312.pyc b/__pycache__/ingredient_types.cpython-312.pyc new file mode 100644 index 000000000..4c417718e Binary files /dev/null and b/__pycache__/ingredient_types.cpython-312.pyc differ 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/coverage.xml b/coverage.xml new file mode 100644 index 000000000..70e0844b4 --- /dev/null +++ b/coverage.xml @@ -0,0 +1,276 @@ + + + + + + D:\Mistral\QA\ЯПАвто\projects\Project\Task_1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/tests/__pycache__/test_bun.cpython-312-pytest-8.4.2.pyc b/tests/__pycache__/test_bun.cpython-312-pytest-8.4.2.pyc new file mode 100644 index 000000000..d829f5c19 Binary files /dev/null and b/tests/__pycache__/test_bun.cpython-312-pytest-8.4.2.pyc differ diff --git a/tests/__pycache__/test_burger.cpython-312-pytest-8.4.2.pyc b/tests/__pycache__/test_burger.cpython-312-pytest-8.4.2.pyc new file mode 100644 index 000000000..658472f9e Binary files /dev/null and b/tests/__pycache__/test_burger.cpython-312-pytest-8.4.2.pyc differ diff --git a/tests/__pycache__/test_database.cpython-312-pytest-8.4.2.pyc b/tests/__pycache__/test_database.cpython-312-pytest-8.4.2.pyc new file mode 100644 index 000000000..926ba55e8 Binary files /dev/null and b/tests/__pycache__/test_database.cpython-312-pytest-8.4.2.pyc differ diff --git a/tests/__pycache__/test_ingredient.cpython-312-pytest-8.4.2.pyc b/tests/__pycache__/test_ingredient.cpython-312-pytest-8.4.2.pyc new file mode 100644 index 000000000..5bfbe5150 Binary files /dev/null and b/tests/__pycache__/test_ingredient.cpython-312-pytest-8.4.2.pyc differ diff --git a/tests/test_bun.py b/tests/test_bun.py new file mode 100644 index 000000000..c5d4afc3f --- /dev/null +++ b/tests/test_bun.py @@ -0,0 +1,36 @@ +import pytest + +import sys +import os +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) + +from bun import Bun + + +class TestBun: + + @pytest.mark.parametrize( + "name", + [ + "black bun", + "white bun", + "", + ] + ) + def test_get_name_returns_correct_name(self, name): + bun = Bun(name, 100.0) + + assert bun.get_name() == name + + @pytest.mark.parametrize( + "price", + [ + 100.0, + 50.5, + 0, + ] + ) + def test_get_price_returns_correct_price(self, price): + bun = Bun("test bun", price) + + assert bun.get_price() == price \ No newline at end of file diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..01ea2a5e6 --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,107 @@ +import pytest +from unittest.mock import Mock + +import sys +import os +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) +from burger import Burger + + +class TestBurger: + + @pytest.mark.parametrize("bun_price, ingredient_prices, expected_price", [ + (100, [], 200), + (100, [50], 250), + (100, [50, 25], 275), + (0, [10, 20], 30), + ]) + def test_get_price(self, bun_price, ingredient_prices, expected_price): + burger = Burger() + + bun = Mock() + bun.get_price.return_value = bun_price + burger.set_buns(bun) + + for price in ingredient_prices: + ingredient = Mock() + ingredient.get_price.return_value = price + burger.add_ingredient(ingredient) + + assert burger.get_price() == expected_price + + + @pytest.mark.parametrize("index, new_index, expected_order", [ + (0, 2, [2, 3, 1]), + (2, 0, [3, 1, 2]), + (1, 1, [1, 2, 3]), + ]) + def test_move_ingredient(self, index, new_index, expected_order): + burger = Burger() + + ingredients = [] + for i in [1, 2, 3]: + ingredient = Mock() + ingredient.get_name.return_value = str(i) + ingredients.append(ingredient) + burger.add_ingredient(ingredient) + + burger.move_ingredient(index, new_index) + + result_order = [int(i.get_name()) for i in burger.ingredients] + + assert result_order == expected_order + + + @pytest.mark.parametrize("ingredient_type, expected_type", [ + ("SAUCE", "sauce"), + ("FILLING", "filling"), + ]) + def test_get_receipt_contains_correct_ingredient_type(self, ingredient_type, expected_type): + burger = Burger() + + bun = Mock() + bun.get_name.return_value = "black bun" + bun.get_price.return_value = 100 + burger.set_buns(bun) + + ingredient = Mock() + ingredient.get_type.return_value = ingredient_type + ingredient.get_name.return_value = "ketchup" + ingredient.get_price.return_value = 50 + burger.add_ingredient(ingredient) + + receipt = burger.get_receipt() + + assert f"= {expected_type} ketchup =" in receipt + + + def test_get_receipt_contains_bun(self): + burger = Burger() + + bun = Mock() + bun.get_name.return_value = "black bun" + bun.get_price.return_value = 100 + burger.set_buns(bun) + + receipt = burger.get_receipt() + + assert "(==== black bun ====)" in receipt + + + def test_get_receipt_contains_correct_price(self): + burger = Burger() + + bun = Mock() + bun.get_name.return_value = "black bun" + bun.get_price.return_value = 100 + burger.set_buns(bun) + + ingredient = Mock() + ingredient.get_type.return_value = "SAUCE" + ingredient.get_name.return_value = "ketchup" + ingredient.get_price.return_value = 50 + burger.add_ingredient(ingredient) + + receipt = burger.get_receipt() + + assert "Price: 250" in receipt \ No newline at end of file diff --git a/tests/test_database.py b/tests/test_database.py new file mode 100644 index 000000000..9b6f137e2 --- /dev/null +++ b/tests/test_database.py @@ -0,0 +1,67 @@ +import pytest +import sys +import os +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) +from database import Database +from burger import Burger + + +class TestDatabase: + + def test_burger_price_with_single_bun(self): + db = Database() + burger = Burger() + + bun = db.available_buns()[0] + burger.set_buns(bun) + + expected_price = bun.get_price() * 2 + assert burger.get_price() == expected_price + + def test_burger_price_with_bun_and_ingredients(self): + db = Database() + burger = Burger() + + bun = db.available_buns()[0] + burger.set_buns(bun) + + ingredient = db.available_ingredients()[0] + burger.add_ingredient(ingredient) + + + expected_price = bun.get_price() * 2 + ingredient.get_price() + assert burger.get_price() == expected_price + + def test_burger_receipt_contains_bun_and_ingredient(self): + db = Database() + burger = Burger() + + bun = db.available_buns()[0] + burger.set_buns(bun) + + ingredient = db.available_ingredients()[0] + burger.add_ingredient(ingredient) + + receipt = burger.get_receipt() + + + assert bun.get_name() in receipt + assert ingredient.get_name() in receipt + + + expected_price = bun.get_price() * 2 + ingredient.get_price() + assert f"Price: {expected_price}" in receipt + + def test_burger_with_multiple_ingredients(self): + db = Database() + burger = Burger() + + bun = db.available_buns()[0] + burger.set_buns(bun) + + ingredients = db.available_ingredients()[:3] + for ing in ingredients: + burger.add_ingredient(ing) + + expected_price = bun.get_price() * 2 + sum(ing.get_price() for ing in ingredients) + assert burger.get_price() == expected_price \ No newline at end of file diff --git a/tests/test_ingredient.py b/tests/test_ingredient.py new file mode 100644 index 000000000..1a2d773cf --- /dev/null +++ b/tests/test_ingredient.py @@ -0,0 +1,23 @@ +import pytest +import sys +import os +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) +from ingredient import Ingredient + + +class TestIngredient: + + @pytest.mark.parametrize("price", [0, 10, 50, 99.9]) + def test_get_price(self, price): + ingredient = Ingredient("SAUCE", "test", price) + assert ingredient.get_price() == price + + @pytest.mark.parametrize("name", ["ketchup", "cheese", ""]) + def test_get_name(self, name): + ingredient = Ingredient("SAUCE", name, 50) + assert ingredient.get_name() == name + + @pytest.mark.parametrize("ingredient_type", ["SAUCE", "FILLING"]) + def test_get_type(self, ingredient_type): + ingredient = Ingredient(ingredient_type, "test", 50) + assert ingredient.get_type() == ingredient_type \ No newline at end of file