Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .coverage
Binary file not shown.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Empty file added tests/__init__.py
Empty file.
40 changes: 40 additions & 0 deletions tests/test_bun.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import pytest
from praktikum.bun import Bun

class TestBun:
"""Тесты для класса Bun"""

@pytest.mark.parametrize("name,price,expected_name,expected_price", [
("black bun", 100, "black bun", 100),
("white bun", 200.5, "white bun", 200.5),
("red bun", 0, "red bun", 0),
("", 50, "", 50),
])
def test_bun_init(self, name, price, expected_name, expected_price):
"""Тест инициализации булочки"""
bun = Bun(name, price)
assert bun.name == expected_name
assert bun.price == expected_price

@pytest.mark.parametrize("name,price", [
("black bun", 100),
("white bun", 200),
("test bun", 150.75),
])
def test_get_name(self, name, price):
"""Тест получения названия булочки"""
bun = Bun(name, price)
result = bun.get_name()
assert result == name

@pytest.mark.parametrize("name,price", [
("black bun", 100),
("white bun", 200.5),
("red bun", 0),
("test", 999.99),
])
def test_get_price(self, name, price):
"""Тест получения цены булочки"""
bun = Bun(name, price)
result = bun.get_price()
assert result == price
127 changes: 127 additions & 0 deletions tests/test_burger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
import pytest
from unittest.mock import Mock, MagicMock
from praktikum.burger import Burger
from praktikum.bun import Bun
from praktikum.ingredient import Ingredient
from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING

class TestBurger:
"""Тесты для класса Burger"""

def test_burger_init(self):
"""Тест инициализации бургера"""
burger = Burger()
assert burger.bun is None
assert burger.ingredients == []

def test_set_buns(self):
"""Тест установки булочки"""
burger = Burger()
mock_bun = Mock(spec=Bun)
mock_bun.name = "test bun"
mock_bun.price = 100

burger.set_buns(mock_bun)

assert burger.bun == mock_bun
assert burger.bun.name == "test bun"


def test_add_ingredient(self):
"""Тест добавления ингредиента"""
burger = Burger()
mock_ingredient = Mock(spec=Ingredient)
mock_ingredient.name = "test ingredient"

burger.add_ingredient(mock_ingredient)

assert len(burger.ingredients) == 1
assert burger.ingredients[0] == mock_ingredient

@pytest.mark.parametrize("ingredient_name,ingredient_price,ingredient_type", [
("hot sauce", 100, INGREDIENT_TYPE_SAUCE),
("cutlet", 200, INGREDIENT_TYPE_FILLING),
("sour cream", 150, INGREDIENT_TYPE_SAUCE),
])
def test_add_ingredient_multiple(self, ingredient_name, ingredient_price, ingredient_type):
"""Тест добавления нескольких ингредиентов"""
burger = Burger()
ingredient = Ingredient(ingredient_type, ingredient_name, ingredient_price)

burger.add_ingredient(ingredient)

assert len(burger.ingredients) == 1
assert burger.ingredients[0].get_name() == ingredient_name
assert burger.ingredients[0].get_price() == ingredient_price

def test_remove_ingredient(self):
"""Тест удаления ингредиента"""
burger = Burger()
ingredient1 = Mock(spec=Ingredient)
ingredient2 = Mock(spec=Ingredient)
ingredient3 = Mock(spec=Ingredient)

burger.ingredients = [ingredient1, ingredient2, ingredient3]

burger.remove_ingredient(1)

assert len(burger.ingredients) == 2
assert ingredient1 in burger.ingredients
assert ingredient2 not in burger.ingredients
assert ingredient3 in burger.ingredients


def test_move_ingredient(self):
"""Тест перемещения ингредиента"""
burger = Burger()
ingredient1 = Mock(spec=Ingredient)
ingredient2 = Mock(spec=Ingredient)
ingredient3 = Mock(spec=Ingredient)

burger.ingredients = [ingredient1, ingredient2, ingredient3]

burger.move_ingredient(2, 0)

assert burger.ingredients == [ingredient3, ingredient1, ingredient2]


def test_get_price_with_bun_no_ingredients(self):
"""Тест получения цены с булочкой"""
burger = Burger()
mock_bun = Mock(spec=Bun)
mock_bun.get_price.return_value = 100

burger.set_buns(mock_bun)

price = burger.get_price()

assert price == 200 # 2 булочки по 100


def test_get_receipt(self):
"""Тест получения чека"""
burger = Burger()
mock_bun = Mock(spec=Bun)
mock_bun.get_name.return_value = "black bun"
mock_bun.get_price.return_value = 100
burger.set_buns(mock_bun)

mock_ingredient1 = Mock(spec=Ingredient)
mock_ingredient1.get_type.return_value = INGREDIENT_TYPE_SAUCE
mock_ingredient1.get_name.return_value = "hot sauce"
mock_ingredient1.get_price.return_value = 50

mock_ingredient2 = Mock(spec=Ingredient)
mock_ingredient2.get_type.return_value = INGREDIENT_TYPE_FILLING
mock_ingredient2.get_name.return_value = "cutlet"
mock_ingredient2.get_price.return_value = 150

burger.add_ingredient(mock_ingredient1)
burger.add_ingredient(mock_ingredient2)

receipt = burger.get_receipt()

assert "(==== black bun ====)" in receipt
assert "= sauce hot sauce =" in receipt
assert "= filling cutlet =" in receipt
assert "Price: 400" in receipt
52 changes: 52 additions & 0 deletions tests/test_database.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import pytest
from praktikum.database import Database
from praktikum.bun import Bun
from praktikum.ingredient import Ingredient
from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING

class TestDatabase:
"""Тесты для класса Database"""

def test_initialization_database(self):
"""Тест инициализации"""
database = Database()

assert len(database.buns) == 3
assert len(database.ingredients) == 6


def test_available_buns_content(self):
"""Тест содержания доступных булок"""
database = Database()
buns = database.available_buns()

bun_names = [bun.get_name() for bun in buns]
bun_prices = [bun.get_price() for bun in buns]

assert "black bun" in bun_names
assert "white bun" in bun_names
assert "red bun" in bun_names
assert 100 in bun_prices
assert 200 in bun_prices
assert 300 in bun_prices

def test_available_ingredients(self):
"""Тест получения доступных ингредиентов"""
database = Database()
ingredients = database.available_ingredients()

assert len(ingredients) == 6

def test_available_ingredients_content(self):
"""Тест содержания доступных ингредиентов"""
database = Database()
ingredients = database.available_ingredients()

ing_names = [ing.get_name() for ing in ingredients]

assert "hot sauce" in ing_names
assert "sour cream" in ing_names
assert "chili sauce" in ing_names
assert "cutlet" in ing_names
assert "dinosaur" in ing_names
assert "sausage" in ing_names
52 changes: 52 additions & 0 deletions tests/test_ingridient.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import pytest
from praktikum.ingredient import Ingredient
from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING

class TestIngredient:
"""Тесты для класса Ingredient"""

@pytest.mark.parametrize("ingredient_type, name, price", [
(INGREDIENT_TYPE_SAUCE, "hot sauce", 100),
(INGREDIENT_TYPE_FILLING, "cutlet", 200),
(INGREDIENT_TYPE_SAUCE, "sour cream", 150.5),
(INGREDIENT_TYPE_FILLING, "dinosaur", 0),
])
def test_ingredient_init(self, ingredient_type, name, price):
"""Тест инициализации ингредиента"""
ingredient = Ingredient(ingredient_type, name, price)
assert ingredient.type == ingredient_type
assert ingredient.name == name
assert ingredient.price == price

@pytest.mark.parametrize("ingredient_type, name, price,expected", [
(INGREDIENT_TYPE_SAUCE, "hot sauce", 100, "hot sauce"),
(INGREDIENT_TYPE_FILLING, "cutlet", 200, "cutlet"),
(INGREDIENT_TYPE_SAUCE, "chili sauce", 300, "chili sauce"),
])
def test_get_name(self, ingredient_type, name, price, expected):
"""Тест получения названия ингредиента"""
ingredient = Ingredient(ingredient_type, name, price)
result = ingredient.get_name()
assert result == expected

@pytest.mark.parametrize("ingredient_type, name, price, expected", [
(INGREDIENT_TYPE_SAUCE, "hot sauce", 100, 100),
(INGREDIENT_TYPE_FILLING, "cutlet", 200.5, 200.5),
(INGREDIENT_TYPE_SAUCE, "sour cream", 0, 0),
])
def test_get_price(self, ingredient_type, name, price, expected):
"""Тест получения цены ингредиента"""
ingredient = Ingredient(ingredient_type, name, price)
result = ingredient.get_price()
assert result == expected

@pytest.mark.parametrize("ingredient_type, name, price,expected", [
(INGREDIENT_TYPE_SAUCE, "hot sauce", 100, INGREDIENT_TYPE_SAUCE),
(INGREDIENT_TYPE_FILLING, "cutlet", 200, INGREDIENT_TYPE_FILLING),
])
def test_get_type(self, ingredient_type, name, price, expected):
"""Тест получения типа ингредиента"""
ingredient = Ingredient(ingredient_type, name, price)
result = ingredient.get_type()
assert result == expected
assert result in [INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING]