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
16 changes: 16 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
__pycache__/
*.pyc
*.pyo
*.pyd
venv/
env/
.venv/
ENV/
dist/
build/
*.egg-info/
*.egg
.pytest_cache/
.coverage
htmlcov/
.tox/
5 changes: 2 additions & 3 deletions burger.py
Original file line number Diff line number Diff line change
@@ -1,8 +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:
"""
Expand Down
10 changes: 10 additions & 0 deletions data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
BUN_DATA = {
"name": "black bun",
"price": 100
}

INGREDIENTS_DATA = [
{"type": "SAUCE", "name": "hot sauce", "price": 100},
{"type": "FILLING", "name": "cutlet", "price": 100},
{"type": "FILLING", "name": "dinosaur", "price": 200},
]
Binary file added requirements.txt
Binary file not shown.
Empty file added tests/__init__.py
Empty file.
42 changes: 42 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import pytest
from unittest.mock import Mock
from burger import Burger
from data import *


#пустой объект Burger
@pytest.fixture
def new_burger():
return Burger()

# Мок-булка
@pytest.fixture
def bun_in_burger():
bun = Mock()
bun.name = BUN_DATA["name"]
bun.price = BUN_DATA["price"]
bun.get_price.return_value = BUN_DATA["price"]
bun.get_name.return_value = BUN_DATA["name"]
return bun

# список для бургера
@pytest.fixture
def ingredients_in_burger():
ingredients = []
for i in INGREDIENTS_DATA:
ingredient = Mock()
ingredient.type = i["type"]
ingredient.name = i["name"]
ingredient.price = i["price"]
ingredient.get_type.return_value = i["type"]
ingredient.get_name.return_value = i["name"]
ingredient.get_price.return_value = i["price"]
ingredients.append(ingredient)
return ingredients

# мок с булкой и ингредиентами
@pytest.fixture
def mocked_burger(new_burger, bun_in_burger, ingredients_in_burger):
new_burger.set_buns(bun_in_burger)
new_burger.ingredients = ingredients_in_burger.copy()
return new_burger
54 changes: 54 additions & 0 deletions tests/test_burger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import pytest

class TestBurger:

# изначальное состояние (без ингредиентов)
def test_burger_initialization(self, new_burger):
assert new_burger.bun is None
assert new_burger.ingredients == []

# проверяем добав. одной булки
def test_set_buns_single_bun_added_in_burger(self, new_burger, bun_in_burger):
new_burger.set_buns(bun_in_burger)
assert new_burger.bun == bun_in_burger

# Проверка добавления 2-ух ингрдтв. в бугрере
def test_add_ingredient_two_ingridients_added_in_burger(self, new_burger, ingredients_in_burger):
new_burger.add_ingredient(ingredients_in_burger[0])
new_burger.add_ingredient(ingredients_in_burger[1])
assert ingredients_in_burger[0] and ingredients_in_burger[1] in new_burger.ingredients

# удаляем первый ингредиент
def test_remove_ingredient_first_ingredient_delete_from_burger(self, new_burger, ingredients_in_burger):
new_burger.ingredients = ingredients_in_burger.copy()
new_burger.remove_ingredient(0)
expected_ingredients = ingredients_in_burger[1:]
assert new_burger.ingredients == expected_ingredients

# ингредиенты внутри списка
def test_move_ingredient_moves_two_ingredient_in_burger_changed(self, new_burger, ingredients_in_burger):
new_burger.ingredients = ingredients_in_burger.copy()
new_burger.move_ingredient(0, 1)
assert new_burger.ingredients[0] == ingredients_in_burger[1] and new_burger.ingredients[1] == ingredients_in_burger[0]

# расчет цены
@pytest.mark.parametrize("ingredients", [[0, 1], [1, 2], [0, 2], [0, 1, 2]])
def test_get_price_various_ingredients_correct_price(self, mocked_burger, bun_in_burger, ingredients_in_burger, ingredients):
selected_ingredients = [ingredients_in_burger[i] for i in ingredients]
mocked_burger.ingredients = selected_ingredients
expected_price = bun_in_burger.get_price.return_value * 2 + sum(i.get_price.return_value for i in selected_ingredients)
price = mocked_burger.get_price()
assert price == expected_price

# чек
@pytest.mark.parametrize("ingredients", [[0, 1], [1, 2], [0, 2], [0, 1, 2]])
def test_get_receipt_various_ingredients_expected_price(self, mocked_burger, bun_in_burger, ingredients_in_burger, ingredients):
selected_ingredients = [ingredients_in_burger[i] for i in ingredients]
mocked_burger.ingredients = selected_ingredients
receipt = mocked_burger.get_receipt()
expected_lines = [f'(==== {bun_in_burger.get_name.return_value} ====)']
expected_lines += [f'= {ing.get_type.return_value.lower()} {ing.get_name.return_value} =' for ing in selected_ingredients]
expected_lines.append(f'(==== {bun_in_burger.get_name.return_value} ====)\n')
expected_lines.append(f'Price: {mocked_burger.get_price()}')
expected_receipt = '\n'.join(expected_lines)
assert receipt == expected_receipt