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/pytest.ini b/pytest.ini new file mode 100644 index 000000000..03f586d41 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,2 @@ +[pytest] +pythonpath = . \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..cffeec658 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pytest +pytest-cov \ No newline at end of file diff --git a/tests/test_bun.py b/tests/test_bun.py new file mode 100644 index 000000000..1ed4b9a22 --- /dev/null +++ b/tests/test_bun.py @@ -0,0 +1,15 @@ +from praktikum.bun import Bun +import pytest + + +class TestBun: + @pytest.mark.parametrize("name, price", [ + ("black bun", 100), + ("white bun", 200), + ("red bun", 300) + ]) + def test_bun_initialization(self, name, price): + bun = Bun(name, price) + + assert bun.get_name() == name + assert bun.get_price() == price diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..8391b858f --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,101 @@ +from praktikum.burger import Burger +from unittest.mock import Mock + + +class TestBurger: + def test_set_buns(self): + burger = Burger() + mock_bun = Mock() + mock_bun.get_price.return_value = 100 + mock_bun.get_name.return_value = "black bun" + + burger.set_buns(mock_bun) + assert burger.bun == mock_bun + + def test_add_ingredient(self): + burger = Burger() + mock_ingredient = Mock() + mock_ingredient.get_price.return_value = 50 + mock_ingredient.get_name.return_value = "sausage" + mock_ingredient.get_type.return_value = "FILLING" + + burger.add_ingredient(mock_ingredient) + assert burger.ingredients[0] == mock_ingredient + + def test_remove_ingredient(self): + burger = Burger() + mock_ingredient = Mock() + mock_ingredient.get_price.return_value = 50 + mock_ingredient.get_name.return_value = "sausage" + mock_ingredient.get_type.return_value = "FILLING" + + burger.add_ingredient(mock_ingredient) + burger.remove_ingredient(0) + + assert len(burger.ingredients) == 0 + + def test_move_ingredient(self): + burger = Burger() + mock_ingredient1 = Mock() + mock_ingredient1.get_price.return_value = 50 + mock_ingredient1.get_name.return_value = "sausage" + mock_ingredient1.get_type.return_value = "FILLING" + + mock_ingredient2 = Mock() + mock_ingredient2.get_price.return_value = 30 + mock_ingredient2.get_name.return_value = "ketchup" + mock_ingredient2.get_type.return_value = "SAUCE" + + burger.add_ingredient(mock_ingredient1) + burger.add_ingredient(mock_ingredient2) + + burger.move_ingredient(0, 1) + + assert burger.ingredients[0] == mock_ingredient2 + assert burger.ingredients[1] == mock_ingredient1 + + def test_get_price(self): + burger = Burger() + mock_bun = Mock() + mock_bun.get_price.return_value = 100 + mock_bun.get_name.return_value = "black bun" + + mock_ingredient1 = Mock() + mock_ingredient1.get_price.return_value = 50 + mock_ingredient1.get_name.return_value = "sausage" + mock_ingredient1.get_type.return_value = "FILLING" + + mock_ingredient2 = Mock() + mock_ingredient2.get_price.return_value = 30 + mock_ingredient2.get_name.return_value = "ketchup" + mock_ingredient2.get_type.return_value = "SAUCE" + + burger.set_buns(mock_bun) + burger.add_ingredient(mock_ingredient1) + burger.add_ingredient(mock_ingredient2) + + assert burger.get_price() == 280 + + def test_get_receipt(self): + burger = Burger() + mock_bun = Mock() + mock_bun.get_price.return_value = 100 + mock_bun.get_name.return_value = "black bun" + + mock_ingredient1 = Mock() + mock_ingredient1.get_price.return_value = 50 + mock_ingredient1.get_name.return_value = "sausage" + mock_ingredient1.get_type.return_value = "FILLING" + + mock_ingredient2 = Mock() + mock_ingredient2.get_price.return_value = 30 + mock_ingredient2.get_name.return_value = "ketchup" + mock_ingredient2.get_type.return_value = "SAUCE" + + burger.set_buns(mock_bun) + burger.add_ingredient(mock_ingredient1) + burger.add_ingredient(mock_ingredient2) + + expected_receipt = '(==== black bun ====)\n= filling sausage =\n= sauce ketchup =\n(==== black bun ====)\n\nPrice: 280' + + assert burger.get_receipt() == expected_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..03d736e69 --- /dev/null +++ b/tests/test_database.py @@ -0,0 +1,26 @@ +from praktikum.database import Database +from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE + + +class TestDatabase: + def test_database_has_buns(self): + database = Database() + + assert len(database.available_buns()) > 0 + + def test_available_buns(self): + database = Database() + + buns = database.available_buns() + + assert buns[0].name == "black bun" + assert buns[0].price == 100 + + def test_available_ingredients(self): + database = Database() + + ingredients = database.available_ingredients() + + assert ingredients[0].name == "hot sauce" + assert ingredients[0].price == 100 + assert ingredients[0].type == INGREDIENT_TYPE_SAUCE \ No newline at end of file diff --git a/tests/test_ingredient.py b/tests/test_ingredient.py new file mode 100644 index 000000000..f09562292 --- /dev/null +++ b/tests/test_ingredient.py @@ -0,0 +1,31 @@ +import pytest +from praktikum.ingredient import Ingredient +from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + + +class TestIngredient: + @pytest.mark.parametrize("ingredient_type, name, price", [ + (INGREDIENT_TYPE_SAUCE, "hot sauce", 100), + (INGREDIENT_TYPE_FILLING, "sausage", 300), + ]) + def test_ingredient_initialization(self, ingredient_type, name, price): + ingredient = Ingredient(ingredient_type, name, price) + + assert ingredient.type == ingredient_type + assert ingredient.name == name + assert ingredient.price == price + + def test_get_name(self): + ingredient = Ingredient(INGREDIENT_TYPE_FILLING, "sausage", 50) + + assert ingredient.get_name() == "sausage" + + def test_get_price(self): + ingredient = Ingredient(INGREDIENT_TYPE_FILLING, "sausage", 50) + + assert ingredient.get_price() == 50 + + def test_get_type(self): + ingredient = Ingredient(INGREDIENT_TYPE_SAUCE, "hot sauce", 50) + + assert ingredient.get_type() == INGREDIENT_TYPE_SAUCE \ No newline at end of file