diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..eb6c72225 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +__pycache__/ +.pytest_cache/ +.coverage +htmlcov/ +.idea/ +.vscode/ +venv/ +env/ \ No newline at end of file diff --git a/coverage_report.txt b/coverage_report.txt new file mode 100644 index 000000000..0207f2faf Binary files /dev/null and b/coverage_report.txt differ diff --git a/data/data.py b/data/data.py new file mode 100644 index 000000000..5b2163077 --- /dev/null +++ b/data/data.py @@ -0,0 +1,6 @@ +BUN_NAMES_DATA = ["Краторная булка N-200i", "", "12345!@#", "Long Name " * 10] +BUN_PRICES_DATA = [1250.50, 0, -100, 999999.99] + +INGREDIENT_TYPES_DATA = ["SAUCE", "FILLING", "", "UNKNOWN"] +INGREDIENT_NAMES_DATA = ["Соус Spicy-X", "", " ", "Динамический ингредиент"] +INGREDIENT_PRICES_DATA = [90, 0, -50.5, 10.15] \ 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/requirements.txt b/requirements.txt new file mode 100644 index 000000000..571035fb9 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/test_bun.py b/tests/test_bun.py new file mode 100644 index 000000000..43923f149 --- /dev/null +++ b/tests/test_bun.py @@ -0,0 +1,14 @@ +import pytest +from praktikum.bun import Bun +from data.data import BUN_NAMES_DATA, BUN_PRICES_DATA + +class TestBun: + @pytest.mark.parametrize("name", BUN_NAMES_DATA) + def test_get_name_returns_correct_name(self, name): + bun = Bun(name, 100) + assert bun.get_name() == name + + @pytest.mark.parametrize("price", BUN_PRICES_DATA) + def test_get_price_returns_correct_price(self, price): + bun = 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..42c603d8c --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,71 @@ +from unittest.mock import Mock +from praktikum.burger import Burger + +class TestBurger: + def test_set_buns_sets_correct_bun(self): + burger = Burger() + mock_bun = Mock() + + burger.set_buns(mock_bun) + + assert burger.bun == mock_bun + + def test_add_ingredient_adds_ingredient_to_list(self): + burger = Burger() + mock_ingredient = Mock() + + burger.add_ingredient(mock_ingredient) + + assert burger.ingredients == [mock_ingredient] + + def test_remove_ingredient_removes_ingredient_from_list(self): + burger = Burger() + mock_ingredient = Mock() + burger.ingredients.append(mock_ingredient) + + burger.remove_ingredient(0) + + assert len(burger.ingredients) == 0 + + def test_move_ingredient_changes_ingredient_index(self): + burger = Burger() + mock_ingredient_1 = Mock() + mock_ingredient_2 = Mock() + burger.ingredients.extend([mock_ingredient_1, mock_ingredient_2]) + + burger.move_ingredient(0, 1) + + assert burger.ingredients == [mock_ingredient_2, mock_ingredient_1] + + def test_get_price_calculates_correct_total_price(self): + burger = Burger() + + mock_bun = Mock() + mock_bun.get_price.return_value = 100 + burger.set_buns(mock_bun) + + mock_ingredient = Mock() + mock_ingredient.get_price.return_value = 50 + burger.add_ingredient(mock_ingredient) + + assert burger.get_price() == 250 + + def test_get_receipt_returns_correct_string(self): + burger = Burger() + + mock_bun = Mock() + mock_bun.get_name.return_value = "Белая булка" + mock_bun.get_price.return_value = 100 + burger.set_buns(mock_bun) + + mock_ingredient = Mock() + mock_ingredient.get_type.return_value = "SAUCE" + mock_ingredient.get_name.return_value = "Острый соус" + mock_ingredient.get_price.return_value = 50 + burger.add_ingredient(mock_ingredient) + + receipt = burger.get_receipt() + + assert "Белая булка" in receipt + assert "Острый соус" in receipt + assert "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..f55bcabc6 --- /dev/null +++ b/tests/test_database.py @@ -0,0 +1,12 @@ +from praktikum.database import Database + +class TestDatabase: + def test_available_buns_returns_not_empty_list(self): + database = Database() + buns = database.available_buns() + assert len(buns) > 0 + + def test_available_ingredients_returns_not_empty_list(self): + database = Database() + ingredients = database.available_ingredients() + assert len(ingredients) > 0 \ No newline at end of file diff --git a/tests/test_ingredient.py b/tests/test_ingredient.py new file mode 100644 index 000000000..d8dbcb507 --- /dev/null +++ b/tests/test_ingredient.py @@ -0,0 +1,19 @@ +import pytest +from praktikum.ingredient import Ingredient +from data.data import INGREDIENT_TYPES_DATA, INGREDIENT_NAMES_DATA, INGREDIENT_PRICES_DATA + +class TestIngredient: + @pytest.mark.parametrize("ing_type", INGREDIENT_TYPES_DATA) + def test_get_type_returns_correct_type(self, ing_type): + ingredient = Ingredient(ing_type, "Начинка", 100) + assert ingredient.get_type() == ing_type + + @pytest.mark.parametrize("name", INGREDIENT_NAMES_DATA) + def test_get_name_returns_correct_name(self, name): + ingredient = Ingredient("SAUCE", name, 100) + assert ingredient.get_name() == name + + @pytest.mark.parametrize("price", INGREDIENT_PRICES_DATA) + def test_get_price_returns_correct_price(self, price): + ingredient = Ingredient("SAUCE", "Соус", price) + assert ingredient.get_price() == price \ No newline at end of file