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
12 changes: 12 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
venv/
.venv/
__pycache__/
*.py[cod]
.pytest_cache/
.coverage
.coverage.*
coverage.xml
.vscode/
.idea/
.DS_Store
Thumbs.d
17 changes: 3 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,8 @@

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

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

### Структура проекта
Тесты запускаются с помощью `pytest-cov`.

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

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

**Установка зависимостей**

> `$ pip install -r requirements.txt`

**Запуск автотестов и создание HTML-отчета о покрытии**

> `$ pytest --cov=praktikum --cov-report=html`
Общее тестовое покрытие проекта — **77.53%**.
25 changes: 25 additions & 0 deletions data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
class Data:

BLACK_BUN = "black bun"
WHITE_BUN = "white bun"
RED_BUN = "red bun"

BLACK_BUN_PRICE = 100
WHITE_BUN_PRICE = 200
RED_BUN_PRICE = 300

HOT_SAUCE = "hot sauce"
SOUR_CREAM = "sour cream"
CHILLI_SAUCE = "chili sauce"

HOT_SAUCE_PRICE = 100
SOUR_CREAM_PRICE = 200
CHILLI_SAUCE_PRICE = 300

CUTLET = "cutlet"
DINOSAUR = "dinosaur"
SAUSAGE = "sausage"

CUTLET_PRICE = 100
DINOSAUR_PRICE = 200
SAUSAGE_PRICE = 300
Empty file added praktikum/__init__.py
Empty file.
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.
106 changes: 106 additions & 0 deletions tests/test_burger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
from unittest.mock import Mock

from praktikum.burger import Burger
from praktikum.bun import Bun

from data import Data
from praktikum.ingredient_types import INGREDIENT_TYPE_FILLING


class TestBurger:


def test_set_buns(self):

burger = Burger()

bun = Bun(
Data.BLACK_BUN,
Data.BLACK_BUN_PRICE
)

burger.set_buns(bun)

assert burger.bun == bun


def test_add_ingredient(self):

burger = Burger()

ingredient = Mock()

burger.add_ingredient(ingredient)

assert burger.ingredients[0] == ingredient


def test_remove_ingredient(self):

burger = Burger()

ingredient = Mock()

burger.add_ingredient(ingredient)
burger.remove_ingredient(0)

assert len(burger.ingredients) == 0


def test_move_ingredient(self):

burger = Burger()

first = Mock()
second = Mock()

burger.add_ingredient(first)
burger.add_ingredient(second)

burger.move_ingredient(0, 1)

assert burger.ingredients[0] == second
assert burger.ingredients[1] == first


def test_get_price(self):

burger = Burger()

bun = Mock()
bun.get_price.return_value = 100

ingredient = Mock()
ingredient.get_price.return_value = 50

burger.set_buns(bun)
burger.add_ingredient(ingredient)

assert burger.get_price() == 250


def test_get_receipt(self):

burger = Burger()

bun = Bun(
Data.RED_BUN,
Data.RED_BUN_PRICE
)

ingredient = Mock()
ingredient.get_type.return_value = INGREDIENT_TYPE_FILLING
ingredient.get_name.return_value = Data.CUTLET
ingredient.get_price.return_value = Data.CUTLET_PRICE

burger.set_buns(bun)
burger.add_ingredient(ingredient)

expected_result = (
"(==== red bun ====)\n"
"= filling cutlet =\n"
"(==== red bun ====)\n\n"
"Price: 700"
)

assert burger.get_receipt() == expected_result
52 changes: 52 additions & 0 deletions tests/test_burn.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import pytest

from praktikum.bun import Bun
from data import Data


class TestBun:

@pytest.mark.parametrize(
"name, price",
[
(Data.BLACK_BUN, Data.BLACK_BUN_PRICE),
(Data.WHITE_BUN, Data.WHITE_BUN_PRICE),
(Data.RED_BUN, Data.RED_BUN_PRICE)
]
)
def test_init(self, name, price):

bun = Bun(name, price)

assert bun.name == name
assert bun.price == price


@pytest.mark.parametrize(
"name, price",
[
(Data.BLACK_BUN, Data.BLACK_BUN_PRICE),
(Data.WHITE_BUN, Data.WHITE_BUN_PRICE),
(Data.RED_BUN, Data.RED_BUN_PRICE)
]
)
def test_get_name(self, name, price):

bun = Bun(name, price)

assert bun.get_name() == name


@pytest.mark.parametrize(
"name, price",
[
(Data.BLACK_BUN, Data.BLACK_BUN_PRICE),
(Data.WHITE_BUN, Data.WHITE_BUN_PRICE),
(Data.RED_BUN, Data.RED_BUN_PRICE)
]
)
def test_get_price(self, name, price):

bun = Bun(name, price)

assert bun.get_price() == price
26 changes: 26 additions & 0 deletions tests/test_database.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from praktikum.database import Database

from data import Data


class TestDatabase:


def test_available_buns(self):

database = Database()

buns = database.available_buns()

assert len(buns) == 3
assert buns[0].get_name() == Data.BLACK_BUN


def test_available_ingredients(self):

database = Database()

ingredients = database.available_ingredients()

assert len(ingredients) == 6
assert ingredients[0].get_name() == Data.HOT_SAUCE
118 changes: 118 additions & 0 deletions tests/test_ingredient.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
import pytest

from praktikum.ingredient import Ingredient
from praktikum.ingredient_types import (
INGREDIENT_TYPE_SAUCE,
INGREDIENT_TYPE_FILLING
)

from data import Data


class TestIngredient:


@pytest.mark.parametrize(
"ingredient_type, name, price",
[
(
INGREDIENT_TYPE_SAUCE,
Data.HOT_SAUCE,
Data.HOT_SAUCE_PRICE
),
(
INGREDIENT_TYPE_SAUCE,
Data.SOUR_CREAM,
Data.SOUR_CREAM_PRICE
),
(
INGREDIENT_TYPE_SAUCE,
Data.CHILLI_SAUCE,
Data.CHILLI_SAUCE_PRICE
),
(
INGREDIENT_TYPE_FILLING,
Data.CUTLET,
Data.CUTLET_PRICE
),
(
INGREDIENT_TYPE_FILLING,
Data.DINOSAUR,
Data.DINOSAUR_PRICE
),
(
INGREDIENT_TYPE_FILLING,
Data.SAUSAGE,
Data.SAUSAGE_PRICE
)
]
)
def test_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",
[
(
INGREDIENT_TYPE_SAUCE,
Data.HOT_SAUCE,
Data.HOT_SAUCE_PRICE
),
(
INGREDIENT_TYPE_FILLING,
Data.CUTLET,
Data.CUTLET_PRICE
)
]
)
def test_get_price(
self,
ingredient_type,
name,
price
):

ingredient = Ingredient(
ingredient_type,
name,
price
)

assert ingredient.get_price() == price


def test_get_name(self):

ingredient = Ingredient(
INGREDIENT_TYPE_SAUCE,
Data.HOT_SAUCE,
Data.HOT_SAUCE_PRICE
)

assert ingredient.get_name() == Data.HOT_SAUCE


def test_get_type(self):

ingredient = Ingredient(
INGREDIENT_TYPE_FILLING,
Data.CUTLET,
Data.CUTLET_PRICE
)

assert ingredient.get_type() == INGREDIENT_TYPE_FILLING