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

3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Task_1
## Задание 1: Юнит-тесты

### Автотесты для проверки программы, которая помогает заказать бургер в Stellar Burgers
Expand All @@ -21,4 +22,4 @@

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

> `$ pytest --cov=praktikum --cov-report=html`
> `$ pytest --cov=praktikum --cov-report=html`
38 changes: 38 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import pytest
import random

from unittest.mock import Mock
from praktikum.burger import Burger
from praktikum.database import Database


@pytest.fixture(scope='function')
def create_bun_mock():
db = Database()
bun = db.buns[random.randint(0,2)]
mock_bun = Mock()
mock_bun.name = bun.name
mock_bun.price = bun.price
return mock_bun

@pytest.fixture(scope='function')
def create_ingredient_mock():
db = Database()
ingredient = db.ingredients[random.randint(0,5)]
mock_ingredient = Mock()
mock_ingredient.name = ingredient.name
mock_ingredient.price = ingredient.price
mock_ingredient.type = ingredient.type
return mock_ingredient

@pytest.fixture(scope='function')
def create_test_burger():
db = Database()
bun = db.buns[random.randint(0,2)]
ingredient_1 = db.ingredients[random.randint(0,2)]
ingredient_2 = db.ingredients[random.randint(3,5)]
burger = Burger()
burger.set_buns(bun=bun)
burger.add_ingredient(ingredient_1)
burger.add_ingredient(ingredient_2)
return burger, bun, ingredient_1, ingredient_2
Empty file added praktikum/__init__.py
Empty file.
File renamed without changes.
1 change: 1 addition & 0 deletions burger.py → praktikum/burger.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ def __init__(self):

def set_buns(self, bun: Bun):
self.bun = bun
pass

def add_ingredient(self, ingredient: Ingredient):
self.ingredients.append(ingredient)
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
2 changes: 2 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
pytest
pytest-cov
Empty file added test_data/__init__.py
Empty file.
28 changes: 28 additions & 0 deletions test_data/test_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# buns
BLACK_BUN_NAME = "black bun"
BLACK_BUN_PRICE = 100

WHITE_BUN_NAME = "white bun"
WHITE_BUN_PRICE = 200

RED_BUN_NAME = "red bun"
RED_BUN_PRICE = 300

# ingredients
HOT_SAUCE_NAME = "hot sauce"
HOT_SAUCE_PRICE = 50

CUTLET_NAME = "cutlet"
CUTLET_PRICE = 200

SAUSAGE_NAME = "sausage"
SAUSAGE_PRICE = 300

# receipt
EXPECTED_RECEIPT_SINGLE_SAUCE = (
"(==== black bun ====)\n"
"= sauce hot sauce =\n"
"(==== black bun ====)\n"
"\n"
"Price: 250"
)
Empty file added tests/__init__py
Empty file.
22 changes: 22 additions & 0 deletions tests/test_bun.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from praktikum.bun import Bun
from test_data.test_data import BLACK_BUN_NAME, BLACK_BUN_PRICE


class TestBun:
def test_bun_init_name(self):
bun = Bun(BLACK_BUN_NAME, BLACK_BUN_PRICE)
assert bun.name

def test_bun_init_price(self):
bun = Bun(BLACK_BUN_NAME, BLACK_BUN_PRICE)
assert bun.price

def test_bun_get_name_correct(self):
bun = Bun(BLACK_BUN_NAME, BLACK_BUN_PRICE)
bun_name = BLACK_BUN_NAME
assert bun.get_name() == bun_name

def test_bun_get_price_correct(self):
bun = Bun(BLACK_BUN_NAME, BLACK_BUN_PRICE)
bun_price = BLACK_BUN_PRICE
assert bun.get_price() == bun_price
49 changes: 49 additions & 0 deletions tests/test_burger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
from praktikum.burger import Burger


class TestBurger:
def test_burger_init_bun_is_none(self):
burger = Burger()
assert burger.bun is None

def test_burger_init_ingredients_is_empty_list(self):
burger = Burger()
assert burger.ingredients == []

def test_burger_set_buns_bun_is_set(self, create_bun_mock):
burger = Burger()
bun = create_bun_mock
burger.set_buns(bun)
assert burger.bun == bun

def test_burger_add_ingredient_ingredient_is_added(self, create_bun_mock, create_ingredient_mock):
burger = Burger()
bun = create_bun_mock
ingredient = create_ingredient_mock
burger.set_buns(bun)
burger.add_ingredient(ingredient)
assert burger.ingredients == [ingredient]

def test_burger_remove_ingredient_ingredient_is_removed(self, create_test_burger):
burger = create_test_burger[0]
burger.remove_ingredient(0)
assert len(burger.ingredients) == 1

def test_burger_move_ingredient_ingredient_is_moved(self, create_test_burger):
burger, bun, ingredient_1, ingredient_2 = create_test_burger
burger.move_ingredient(0, 1)
assert burger.ingredients == [ingredient_2, ingredient_1]

def test_burger_get_price_price_is_correct(self, create_test_burger):
burger = create_test_burger[0]
price = (burger.bun.price * 2) + burger.ingredients[0].price + burger.ingredients[1].price
assert burger.get_price() == price

def test_burger_receipt_is_correct(self, create_test_burger):
burger = create_test_burger[0]
expected_receipt = (f'(==== {burger.bun.name} ====)\n'
f'= sauce {burger.ingredients[0].name} =\n'
f'= filling {burger.ingredients[1].name} =\n'
f'(==== {burger.bun.name} ====)\n\n'
f'Price: {burger.get_price()}')
assert expected_receipt == burger.get_receipt()
36 changes: 36 additions & 0 deletions tests/test_database.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import pytest
import praktikum.ingredient_types as ingredient_types

from praktikum.database import Database


class TestDatabase:
def test_database_init_buns_is_set(self):
db = Database()
assert len(db.buns) == 3

def test_database_init_ingredients_is_set(self):
db = Database()
assert len(db.ingredients) == 6

@pytest.mark.parametrize('ingredient_index', [0, 1, 2])
def test_database_init_sauces_in_ingredients(self, ingredient_index):
db = Database()
expected_ingredient_type = ingredient_types.INGREDIENT_TYPE_SAUCE
actual_ingredient_type = db.ingredients[ingredient_index].type
assert actual_ingredient_type == expected_ingredient_type

@pytest.mark.parametrize('ingredient_index', [3, 4, 5])
def test_database_init_fillings_in_ingredients(self, ingredient_index):
db = Database()
expected_ingredient_type = ingredient_types.INGREDIENT_TYPE_FILLING
actual_ingredient_type = db.ingredients[ingredient_index].type
assert actual_ingredient_type == expected_ingredient_type

def test_database_available_buns_list_is_correct(self):
db = Database()
assert db.available_buns() == db.buns

def test_database_available_ingredients_list_is_correct(self):
db = Database()
assert db.available_ingredients() == db.ingredients
36 changes: 36 additions & 0 deletions tests/test_ingredient.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import pytest
from praktikum.database import Database


class TestIngredient:
@pytest.mark.parametrize('ingredient_type_by_index', [0, 3])
def test_ingredient_init_is_type(self, ingredient_type_by_index):
db = Database()
ingredient = db.ingredients[ingredient_type_by_index]
assert ingredient.type

def test_ingredient_init_is_name(self):
db = Database()
ingredient = db.ingredients[0]
assert ingredient.name

def test_ingredient_init_is_price(self):
db = Database()
ingredient = db.ingredients[0]
assert ingredient.price

@pytest.mark.parametrize('ingredient_type_by_index', [0, 3])
def test_ingredient_get_type_correct(self, ingredient_type_by_index):
db = Database()
ingredient = db.ingredients[ingredient_type_by_index]
assert ingredient.get_type() == ingredient.type

def test_ingredient_get_name_correct(self):
db = Database()
ingredient = db.ingredients[0]
assert ingredient.get_name() == ingredient.name

def test_ingredient_get_price_correct(self):
db = Database()
ingredient = db.ingredients[0]
assert ingredient.get_price() == ingredient.price