diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..1bdddcf29 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# Coverage reports +htmlcov/ +.coverage +.coverage.* +.cache + +# Virtual environments (if created locally) +venv/ +env/ +ENV/ + +# IDEs and editors +.idea/ +.vscode/ +*.swp +*.swo +.DS_Store +Thumbs.db + +# Logs and databases +*.log +*.sqlite3 + +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db + +.venv/ +.pytest_cache/ \ No newline at end of file diff --git a/__init__.py b/praktikum/__init__.py similarity index 100% rename from __init__.py rename to praktikum/__init__.py 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/requirements.txt b/requirements.txt new file mode 100644 index 000000000..d121ad03e Binary files /dev/null and b/requirements.txt differ diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 000000000..f27698fe8 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,34 @@ +import pytest +from unittest.mock import Mock + +@pytest.fixture +def mock_bun(): + bun = Mock() + bun.get_price.return_value = 988 + bun.get_name.return_value = "Флюоресцентная булка" + return bun + +@pytest.fixture +def mock_ingredients(): + + ing1 = Mock() + ing1.get_price.return_value = 3000 + ing1.get_name.return_value = "Говяжий метеорит" + ing1.get_type.return_value = "FILLING" + + ing2 = Mock() + ing2.get_price.return_value = 15 + ing2.get_name.return_value = "Соус традиционный галактический" + ing2.get_type.return_value = "SAUCE" + + ing3 = Mock() + ing3.get_price.return_value = 4400 + ing3.get_name.return_value = "Мини-салат Экзо-Плантаго" + ing3.get_type.return_value = "FILLING" + + ing4 = Mock() + ing4.get_price.return_value = 4142 + ing4.get_name.return_value = "Сыр с астероидной плесенью" + ing4.get_type.return_value = "FILLING" + + return [ing1, ing2, ing3, ing4] \ No newline at end of file diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..cf32001a2 --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,82 @@ +import pytest +import allure +from praktikum.burger import Burger + +class TestBurger: + + def test_buns_set(self, mock_bun): + burger = Burger() + burger.set_buns(mock_bun) + assert burger.bun == mock_bun + + def test_add_ingredient(self, mock_ingredients): + burger = Burger() + for ing in mock_ingredients: + burger.add_ingredient(ing) + assert burger.ingredients == mock_ingredients + + def test_remove_ingredient(self, mock_ingredients): + burger = Burger() + for ing in mock_ingredients: + burger.add_ingredient(ing) + burger.remove_ingredient(2) + assert burger.ingredients == [mock_ingredients[0], mock_ingredients[1], mock_ingredients[3]] + + @pytest.mark.parametrize("index, index_2, index_3, index_4", [ + (0, 1, 2, 3), + (3, 1, 2, 0), + ]) + def test_move_ingredient(self, index, index_2, index_3, index_4, mock_ingredients): + burger = Burger() + for ing in mock_ingredients: + burger.add_ingredient(ing) + moved_ingredient = burger.ingredients[index] + burger.move_ingredient(index, index_4) + assert burger.ingredients[index_4] == moved_ingredient + + def test_get_price(self, mock_bun, mock_ingredients): + mock_bun.get_price.return_value = 988 + mock_ingredients[0].get_price.return_value = 3000 + mock_ingredients[1].get_price.return_value = 15 + mock_ingredients[2].get_price.return_value = 4400 + mock_ingredients[3].get_price.return_value = 4142 + + burger = Burger() + burger.set_buns(mock_bun) + burger.add_ingredient(mock_ingredients[0]) + burger.add_ingredient(mock_ingredients[1]) + burger.add_ingredient(mock_ingredients[2]) + burger.add_ingredient(mock_ingredients[3]) + + price = 988 * 2 + 3000 + 15 + 4400 + 4142 + assert burger.get_price() == price + + def test_get_receipt(self, mock_bun, mock_ingredients): + mock_bun.get_name.return_value = "Флюоресцентная булка" + mock_ingredients[0].get_type.return_value = "FILLING" + mock_ingredients[0].get_name.return_value = "Говяжий метеорит" + mock_ingredients[1].get_type.return_value = "SAUCE" + mock_ingredients[1].get_name.return_value = "Соус традиционный галактический" + mock_ingredients[2].get_type.return_value = "FILLING" + mock_ingredients[2].get_name.return_value = "Мини-салат Экзо-Плантаго" + mock_ingredients[3].get_type.return_value = "FILLING" + mock_ingredients[3].get_name.return_value = "Сыр с астероидной плесенью" + + burger = Burger() + burger.set_buns(mock_bun) + burger.add_ingredient(mock_ingredients[0]) + burger.add_ingredient(mock_ingredients[1]) + burger.add_ingredient(mock_ingredients[2]) + burger.add_ingredient(mock_ingredients[3]) + + receipt = burger.get_receipt() + final_recept = ( + '(==== Флюоресцентная булка ====)\n' + '= filling Говяжий метеорит =\n' + '= sauce Соус традиционный галактический =\n' + '= filling Мини-салат Экзо-Плантаго =\n' + '= filling Сыр с астероидной плесенью =\n' + '(==== Флюоресцентная булка ====)\n\n' + 'Price: 13533' + ) + assert receipt == final_recept