diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 000000000..d3fe49cff --- /dev/null +++ b/.coveragerc @@ -0,0 +1,3 @@ +[run] +omit = + praktikum.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..395a0dce1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +__pycache__/ +*.py[cod] +.pytest_cache/ +.coverage +coverage.xml +.vscode/ +.idea/ +venv/ +.venv/ +env/ +.DS_Store +Thumbs.db +*.log 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/pytest.ini b/pytest.ini new file mode 100644 index 000000000..a635c5c03 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,2 @@ +[pytest] +pythonpath = . diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/test_bun.py b/tests/test_bun.py new file mode 100644 index 000000000..9604a60db --- /dev/null +++ b/tests/test_bun.py @@ -0,0 +1,13 @@ +from bun import Bun + +class TestBun: + + def test_get_name_returns_name(self): + bun = Bun("Aff", 23) + assert bun.get_name() == "Aff" + + def test_get_price_return_price(slf): + bun = Bun("OJH", 100.00) + assert bun.get_price()==100.00 + + \ No newline at end of file diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..6f1f302fa --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,112 @@ +import pytest +from unittest.mock import Mock + +from burger import Burger + +class TestBurger: + + def test_set_buns_sets_bun(self): + burger = Burger() + + bun = Mock() + bun.get_name.return_value = "булка" + bun.get_price.return_value = 100 + + burger.set_buns(bun) + + assert burger.bun == bun + + def test_add_ingredient_adds_ingredient(self): + burger = Burger() + + ingredient = Mock() + ingredient.get_type.return_value = "соус" + ingredient.get_name.return_value = "кетчуп" + ingredient.get_price.return_value = 50 + + burger.add_ingredient(ingredient) + + assert len(burger.ingredients) == 1 + assert burger.ingredients[0] == ingredient + + def test_remove_ingredient_removes_ingredient(self): + burger = Burger() + + ingredient_1 = Mock() + ingredient_1.get_name.return_value = "кетчуп" + + ingredient_2 = Mock() + ingredient_2.get_name.return_value = "котлетв" + + burger.add_ingredient(ingredient_1) + burger.add_ingredient(ingredient_2) + + burger.remove_ingredient(0) + + assert len(burger.ingredients) == 1 + assert burger.ingredients[0] == ingredient_2 + + def test_move_ingredient_moves_ingredient(self): + burger = Burger() + + ingredient_1 = Mock() + ingredient_1.get_name.return_value = "кетчуп" + + ingredient_2 = Mock() + ingredient_2.get_name.return_value = "котлета" + + burger.add_ingredient(ingredient_1) + burger.add_ingredient(ingredient_2) + + burger.move_ingredient(0, 1) + + assert burger.ingredients[0] == ingredient_2 + assert burger.ingredients[1] == ingredient_1 + + @pytest.mark.parametrize( + "bun_price, ingredient_price, expected_price", + [ + (100, 50, 250), + (200, 100, 500), + ] + ) + def test_get_price_returns_correct_price(self, bun_price, ingredient_price, expected_price): + burger = Burger() + + bun = Mock() + bun.get_name.return_value = "булочка" + bun.get_price.return_value = bun_price + + ingredient = Mock() + ingredient.get_type.return_value = "соус" + ingredient.get_name.return_value = "кетчуп" + ingredient.get_price.return_value = ingredient_price + + burger.set_buns(bun) + burger.add_ingredient(ingredient) + + assert burger.get_price() == expected_price + + def test_get_receipt_returns_correct_receipt(self): + burger = Burger() + + bun = Mock() + bun.get_name.return_value = "булочка" + bun.get_price.return_value = 100 + + ingredient = Mock() + ingredient.get_type.return_value = "соус" + ingredient.get_name.return_value = "кетчуп" + ingredient.get_price.return_value = 50 + + burger.set_buns(bun) + burger.add_ingredient(ingredient) + + expected_receipt = ( + "(==== булочка ====)\n" + "= соус кетчуп =\n" + "(==== булочка ====)\n\n" + "Price: 250" + ) + + 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..d5c652c62 --- /dev/null +++ b/tests/test_database.py @@ -0,0 +1,57 @@ +import pytest + +from database import Database +from ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + + +class TestDatabase: + + def test_available_buns_returns_list_of_three_buns(self): + db = Database() + + buns = db.available_buns() + + assert len(buns) == 3 + + @pytest.mark.parametrize( + "index, expected_name, expected_price", + [ + (0, "black bun", 100), + (1, "white bun", 200), + (2, "red bun", 300), + ] + ) + def test_available_buns_returns_correct_buns(self, index, expected_name, expected_price): + db = Database() + + buns = db.available_buns() + + assert buns[index].get_name() == expected_name + assert buns[index].get_price() == expected_price + + def test_available_ingredients_returns_list_of_six_ingredients(self): + db = Database() + + ingredients = db.available_ingredients() + + assert len(ingredients) == 6 + + @pytest.mark.parametrize( + "index, expected_type, expected_name, expected_price", + [ + (0, INGREDIENT_TYPE_SAUCE, "hot sauce", 100), + (1, INGREDIENT_TYPE_SAUCE, "sour cream", 200), + (2, INGREDIENT_TYPE_SAUCE, "chili sauce", 300), + (3, INGREDIENT_TYPE_FILLING, "cutlet", 100), + (4, INGREDIENT_TYPE_FILLING, "dinosaur", 200), + (5, INGREDIENT_TYPE_FILLING, "sausage", 300), + ] + ) + def test_available_ingredients_returns_correct_ingredients(self, index, expected_type, expected_name, expected_price): + db = Database() + + ingredients = db.available_ingredients() + + assert ingredients[index].get_type() == expected_type + assert ingredients[index].get_name() == expected_name + assert ingredients[index].get_price() == expected_price diff --git a/tests/test_ingridient.py b/tests/test_ingridient.py new file mode 100644 index 000000000..c546d6e39 --- /dev/null +++ b/tests/test_ingridient.py @@ -0,0 +1,21 @@ +import pytest + +from ingredient import Ingredient + + +class TestIngredient: + + def test_get_price_returns_price(self): + ingredient = Ingredient("sauce", "ketchup", 50) + + assert ingredient.get_price() == 50 + + def test_get_name_returns_name(self): + ingredient = Ingredient("sauce", "ketchup", 50) + + assert ingredient.get_name() == "ketchup" + + def test_get_type_returns_type(self): + ingredient = Ingredient("sauce", "ketchup", 50) + + assert ingredient.get_type() == "sauce"