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.
19 changes: 19 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
venv/
env/
ENV/
.venv/

*.pyc
*.pyo
*.pyd
*.pyc
__pycache__/
.python-version


.cache/
*.swp
*.swo
.idea/

.pytest_cache
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@

### Реализованные сценарии

Созданы юнит-тесты, покрывающие классы `Bun`, `Burger`, `Ingredient`, `Database`
Созданы юнит-тесты, покрывающие класс `Burger`

Процент покрытия 100% (отчет: `htmlcov/index.html`)

### Структура проекта

- `praktikum` - пакет, содержащий код программы
- `tests` - пакет, содержащий тесты, разделенные по классам. Например, `bun_test.py`, `burger_test.py` и т.д.
- `tests` - пакет, содержащий тесты

### Запуск автотестов

Expand Down
37 changes: 37 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import pytest
from unittest.mock import Mock
from data import TEST_BUN, TEST_SAUCE, TEST_FILLING


@pytest.fixture
def mock_bun():
mock = Mock()
mock.get_name.return_value = TEST_BUN["name"]
mock.get_price.return_value = TEST_BUN["price"]
return mock


@pytest.fixture
def mock_sauce():
mock = Mock()
mock.get_type.return_value = TEST_SAUCE["type"]
mock.get_name.return_value = TEST_SAUCE["name"]
mock.get_price.return_value = TEST_SAUCE["price"]
return mock


@pytest.fixture
def mock_filling():
mock = Mock()
mock.get_type.return_value = TEST_FILLING["type"]
mock.get_name.return_value = TEST_FILLING["name"]
mock.get_price.return_value = TEST_FILLING["price"]
return mock


@pytest.fixture
def mock_ingredients(mock_sauce, mock_filling):
return {
TEST_SAUCE["type"]: mock_sauce,
TEST_FILLING["type"]: mock_filling
}
7 changes: 7 additions & 0 deletions data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Общие тестовые данные
TEST_BUN = {"name": "black bun", "price": 100}
TEST_SAUCE = {"type": "SAUCE", "name": "hot souce", "price": 100}
TEST_FILLING = {"type": "FILLING", "name": "cutlet", "price": 100}

# Расчёт цены
PRICE_TEST_CASE = [(100, 100, 100, 400)]
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.
4 changes: 4 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
pytest==8.2.2
pytest-cov==5.0.0
allure-pytest==2.13.5
coverage==7.5.3
74 changes: 74 additions & 0 deletions tests/test_burger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import pytest
from unittest.mock import Mock

from praktikum.burger import Burger

from data import TEST_BUN, TEST_SAUCE, TEST_FILLING, PRICE_TEST_CASE


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

@pytest.mark.parametrize("ingredient_type", [TEST_SAUCE["type"], TEST_FILLING["type"]])
def test_add_ingredient(self, ingredient_type, mock_ingredients):
burger = Burger()
ingredient = mock_ingredients[ingredient_type]

burger.add_ingredient(ingredient)

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

def test_remove_ingredient(self, mock_sauce, mock_filling):
burger = Burger()
burger.add_ingredient(mock_sauce)
burger.add_ingredient(mock_filling)
burger.remove_ingredient(0)
assert burger.ingredients == [mock_filling]

def test_move_ingredient(self, mock_sauce, mock_filling):
burger = Burger()
burger.add_ingredient(mock_sauce)
burger.add_ingredient(mock_filling)
burger.move_ingredient(0, 1)
assert burger.ingredients == [mock_filling, mock_sauce]

@pytest.mark.parametrize(
"bun_price, ing1_price, ing2_price, expected_price",
PRICE_TEST_CASE
)
def test_get_price(self, bun_price, ing1_price, ing2_price, expected_price, mock_bun):
mock_bun.get_price.return_value = bun_price

ingredient_1 = Mock()
ingredient_1.get_price.return_value = ing1_price

ingredient_2 = Mock()
ingredient_2.get_price.return_value = ing2_price

burger = Burger()
burger.set_buns(mock_bun)
burger.add_ingredient(ingredient_1)
burger.add_ingredient(ingredient_2)

assert burger.get_price() == expected_price

def test_get_receipt(self, mock_bun, mock_sauce, mock_filling):
burger = Burger()
burger.set_buns(mock_bun)
burger.add_ingredient(mock_sauce)
burger.add_ingredient(mock_filling)

expected_receipt = (
f"(==== {TEST_BUN['name']} ====)\n"
f"= {TEST_SAUCE['type'].lower()} {TEST_SAUCE['name']} =\n"
f"= {TEST_FILLING['type'].lower()} {TEST_FILLING['name']} =\n"
f"(==== {TEST_BUN['name']} ====)\n"
f"\n"
f"Price: {burger.get_price()}"
)

assert burger.get_receipt() == expected_receipt