diff --git a/conftest.py b/conftest.py new file mode 100644 index 000000000..078817edd --- /dev/null +++ b/conftest.py @@ -0,0 +1,25 @@ +import pytest + +from burger import Burger +from database import Database +from ingredient_types import INGREDIENT_TYPE_SAUCE +from ingredient import Ingredient +from bun import Bun + + + +@pytest.fixture(scope="function") +def bun(): + return Bun("Белая булка", 100) + +@pytest.fixture(scope="function") +def ingredient(): + return Ingredient(INGREDIENT_TYPE_SAUCE, "Сыр", 50) + +@pytest.fixture(scope="function") +def burger(): + return Burger() + +@pytest.fixture(scope="function") +def database(): + return Database() \ No newline at end of file diff --git a/test/test_bun.py b/test/test_bun.py new file mode 100644 index 000000000..28d93967e --- /dev/null +++ b/test/test_bun.py @@ -0,0 +1,14 @@ + +from bun import Bun + + + +class TestBun: + + def test_get_name(self): + bun = Bun("Белая булка", 100) + assert bun.get_name() == "Белая булка" + + def test_get_price(self): + bun = Bun("Белая булка", 100) + assert bun.get_price() == 100 \ No newline at end of file diff --git a/test/test_burger.py b/test/test_burger.py new file mode 100644 index 000000000..898bf0018 --- /dev/null +++ b/test/test_burger.py @@ -0,0 +1,75 @@ +from unittest.mock import Mock + +import pytest + + +class TestBurger: + def test_burger_set_bun(self, burger): + bun_mock = Mock() + burger.set_buns(bun_mock) + + assert burger.bun == bun_mock + + def test_burger_add_ingredient(self, burger): + ingredient_mock = Mock() + burger.add_ingredient(ingredient_mock) + + assert ingredient_mock in burger.ingredients + + def test_burger_remove_ingredient(self, burger): + ingredient_mock = Mock() + burger.add_ingredient(ingredient_mock) + burger.remove_ingredient(0) + + assert ingredient_mock not in burger.ingredients + + + @pytest.mark.parametrize("index, new_index", [ + (0, 1), + (0, 0), + ]) + def test_burger_move_ingredient(self, index, new_index, burger): + ingredient_mock1 = Mock() + ingredient_mock2 = Mock() + burger.add_ingredient(ingredient_mock1) + burger.add_ingredient(ingredient_mock2) + burger.move_ingredient(index, new_index) + + assert burger.ingredients[new_index] == ingredient_mock1 + + @pytest.mark.parametrize("bun_price, ingredient_price, expected_price", [ + (10, 5, 25), + (20, 10, 50) + ]) + def test_burger_get_price(self, bun_price, ingredient_price, expected_price, burger): + bun_mock = Mock() + bun_mock.get_price.return_value = bun_price + burger.set_buns(bun_mock) + + ingredient_mock = Mock() + ingredient_mock.get_price.return_value = ingredient_price + burger.add_ingredient(ingredient_mock) + + assert burger.get_price() == expected_price + + def test_burger_get_receipt(self, burger): + bun_mock = Mock() + bun_mock.get_name.return_value = "Булка" + bun_mock.get_price.return_value = 0 + burger.set_buns(bun_mock) + + ingredient_mock = Mock() + ingredient_mock.get_type.return_value = "Начинка" + ingredient_mock.get_name.return_value = "Сыр" + ingredient_mock.get_price.return_value = 0 + burger.add_ingredient(ingredient_mock) + + expected_receipt = ( + "(==== Булка ====)\n" + "= начинка Сыр =\n" + "(==== Булка ====)\n" + "\n" + "Price: 0" + ) + + assert burger.get_receipt() == expected_receipt \ No newline at end of file diff --git a/test/test_database.py b/test/test_database.py new file mode 100644 index 000000000..75fb8cf2d --- /dev/null +++ b/test/test_database.py @@ -0,0 +1,42 @@ +import pytest + +from ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + + +class TestDatabase: + + def test_available_buns_returns_three_buns(self, database): + buns = database.available_buns() + + assert len(buns) == 3 + + @pytest.mark.parametrize("index, name, price", [ + (0, "black bun", 100), + (1, "white bun", 200), + (2, "red bun", 300), + ]) + def test_available_buns_content(self, database, index, name, price): + bun = database.available_buns()[index] + + assert bun.get_name() == name + assert bun.get_price() == price + + def test_available_ingredients_returns_six_ingredients(self, database): + ingredients = database.available_ingredients() + + assert len(ingredients) == 6 + + @pytest.mark.parametrize("index, ingredient_type, name, 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_content(self, database, index, ingredient_type, name, price): + ingredient = database.available_ingredients()[index] + + assert ingredient.get_type() == ingredient_type + assert ingredient.get_name() == name + assert ingredient.get_price() == price diff --git a/test/test_ingredient.py b/test/test_ingredient.py new file mode 100644 index 000000000..20ed80ae4 --- /dev/null +++ b/test/test_ingredient.py @@ -0,0 +1,21 @@ +import pytest + +from ingredient import Ingredient +from ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + + +class TestIngredient: + + @pytest.mark.parametrize("ingredient_type", [ + INGREDIENT_TYPE_SAUCE, + INGREDIENT_TYPE_FILLING, + ]) + def test_get_type(self, ingredient_type): + ingredient = Ingredient(ingredient_type, "Сыр", 50) + assert ingredient.get_type() == ingredient_type + + def test_get_name(self, ingredient): + assert ingredient.get_name() == "Сыр" + + def test_get_price(self, ingredient): + assert ingredient.get_price() == 50