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
19 changes: 19 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
__pycache__/
*.py[cod]
*.pyo
*.pyd

venv/
.env

.vscode/
.idea/

.pytest_cache/

*.log

allure-results/

htmlcov/
.coverage
44 changes: 44 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
from praktikum.bun import Bun
from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE
from praktikum.ingredient import Ingredient
from data.ingredient_data import INGREDIENT_NAME_SAUCE, INGREDIENT_PRICE_SAUCE
from praktikum.database import Database
from praktikum.burger import Burger
from data.bun_data import BUN_NAME, BUN_PRICE
from unittest.mock import Mock
import pytest

@pytest.fixture()
def bun():
return Bun(BUN_NAME, BUN_PRICE)

@pytest.fixture()
def ingredient():
return Ingredient(INGREDIENT_TYPE_SAUCE, INGREDIENT_NAME_SAUCE, INGREDIENT_PRICE_SAUCE)

@pytest.fixture()
def burger():
burger = Burger()
return burger

@pytest.fixture()
def mock_bun():
mock_bun = Mock()
mock_bun.get_price.return_value = BUN_PRICE
mock_bun.get_name.return_value = BUN_NAME
return mock_bun

@pytest.fixture()
def database():
database = Database()
return database

@pytest.fixture()
def make_ingredient():
def create_mock(name=INGREDIENT_NAME_SAUCE, price=INGREDIENT_PRICE_SAUCE, type=INGREDIENT_TYPE_SAUCE):
mock = Mock()
mock.get_name.return_value = name
mock.get_price.return_value = price
mock.get_type.return_value = type
return mock
return create_mock
2 changes: 2 additions & 0 deletions data/bun_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
BUN_NAME = "burger test_1"
BUN_PRICE = 10
6 changes: 6 additions & 0 deletions data/ingredient_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
INGREDIENT_NAME_SAUCE = "test sause"
INGREDIENT_NAME_FILLING = "test filling"

INGREDIENT_PRICE_SAUCE = 2
INGREDIENT_PRICE_FILLING = 5

2 changes: 2 additions & 0 deletions helpers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
def calculate_expected_price(bun_price, ingredient_prices):
return (bun_price * 2) + sum(ingredient_prices)
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Binary file added requirements.txt
Binary file not shown.
8 changes: 8 additions & 0 deletions tests/test_bun.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from data.bun_data import BUN_NAME, BUN_PRICE

class TestBun:
def test_get_name_returns_correct_name(self, bun):
assert bun.get_name() == BUN_NAME

def test_get_price_returns_correct_price(self, bun):
assert bun.get_price() == BUN_PRICE
72 changes: 72 additions & 0 deletions tests/test_burger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
from data.bun_data import BUN_NAME
from helpers import calculate_expected_price
from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING
from data.ingredient_data import INGREDIENT_NAME_FILLING, INGREDIENT_NAME_SAUCE, INGREDIENT_PRICE_SAUCE, INGREDIENT_PRICE_FILLING
import pytest

class TestBurger:
def test_set_buns_sets_correct_bun(self, burger, mock_bun):
burger.set_buns(mock_bun)
assert burger.bun == mock_bun

@pytest.mark.parametrize("count", [1, 2])
def test_add_ingredient_successfully(self, burger, make_ingredient, count):
ingredients = []
for _ in range(count):
mock_ingredient = make_ingredient()
burger.add_ingredient(mock_ingredient)
ingredients.append(mock_ingredient)

assert len(burger.ingredients) == count
assert burger.ingredients == ingredients

def test_remove_ingredient_successfully(self, burger, make_ingredient):
burger.add_ingredient(make_ingredient())
burger.remove_ingredient(0)
assert burger.ingredients == []

def test_move_ingredient_successfully(self, burger, make_ingredient):
mock_ingredient1 = make_ingredient()
mock_ingredient2 = make_ingredient()

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

burger.move_ingredient(0, 1)

assert burger.ingredients == [mock_ingredient2, mock_ingredient1]

def test_get_price_returns_correct_value(self, burger, mock_bun, make_ingredient):
mock_ingredient1 = make_ingredient(INGREDIENT_NAME_SAUCE, INGREDIENT_PRICE_SAUCE, INGREDIENT_TYPE_SAUCE)
mock_ingredient2 = make_ingredient(INGREDIENT_NAME_FILLING, INGREDIENT_PRICE_FILLING, INGREDIENT_TYPE_FILLING)

burger.set_buns(mock_bun)

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

ingredient_prices = [mock_ingredient1.get_price(), mock_ingredient2.get_price()]
expected_price = calculate_expected_price(mock_bun.get_price(), ingredient_prices)

assert burger.get_price() == expected_price


def test_get_receipt_format_is_correct(self, burger, mock_bun, make_ingredient):
mock_ingredient1 = make_ingredient(INGREDIENT_NAME_SAUCE, INGREDIENT_PRICE_SAUCE, INGREDIENT_TYPE_SAUCE)
mock_ingredient2 = make_ingredient(INGREDIENT_NAME_FILLING, INGREDIENT_PRICE_FILLING, INGREDIENT_TYPE_FILLING)

burger.set_buns(mock_bun)

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

receipt = burger.get_receipt()
ingredient_prices = [mock_ingredient1.get_price(), mock_ingredient2.get_price()]

expected_price = calculate_expected_price(mock_bun.get_price(), ingredient_prices)

assert BUN_NAME in receipt
assert INGREDIENT_NAME_SAUCE in receipt
assert INGREDIENT_NAME_FILLING in receipt
assert f"Price: {str(expected_price)}" in receipt

15 changes: 15 additions & 0 deletions tests/test_database.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from praktikum.bun import Bun
from praktikum.ingredient import Ingredient

class TestDatabase:
def test_available_buns_returns_buns(self, database):
buns = database.available_buns()

assert isinstance(buns, list)
assert all(isinstance(bun, Bun) for bun in buns)

def test_available_ingredients_returns_ingredients(self, database):
ingredients = database.available_ingredients()

assert isinstance(ingredients, list)
assert all(isinstance(ingredient, Ingredient) for ingredient in ingredients)
19 changes: 19 additions & 0 deletions tests/test_ingredient.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING
from praktikum.ingredient import Ingredient
from data.ingredient_data import INGREDIENT_PRICE_SAUCE, INGREDIENT_NAME_SAUCE, INGREDIENT_NAME_FILLING, INGREDIENT_PRICE_FILLING
import pytest

class TestIngredient:
def test_get_price_returns_correct_price(self, ingredient):
assert ingredient.get_price() == INGREDIENT_PRICE_SAUCE

def test_get_name_returns_correct_name(self, ingredient):
assert ingredient.get_name() == INGREDIENT_NAME_SAUCE

@pytest.mark.parametrize("ingredient_obj,expected_type", [
(Ingredient(INGREDIENT_TYPE_SAUCE, INGREDIENT_NAME_SAUCE, INGREDIENT_PRICE_SAUCE), INGREDIENT_TYPE_SAUCE),
(Ingredient(INGREDIENT_TYPE_FILLING, INGREDIENT_NAME_FILLING, INGREDIENT_PRICE_FILLING), INGREDIENT_TYPE_FILLING)
])
def test_get_type_returns_correct_type(self, ingredient_obj, expected_type):
assert ingredient_obj.get_type() == expected_type