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.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.idea
__pycache__/
8 changes: 8 additions & 0 deletions helpers/helpers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import string
import random


def generate_random_string(length):
letters = string.ascii_lowercase
random_string = ''.join(random.choice(letters) for i in range(length))
return random_string
5 changes: 5 additions & 0 deletions praktikum/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from .bun import Bun
from .burger import Burger
from .database import Database
from .ingredient import Ingredient
from .ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
5 changes: 5 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
allure-pytest==2.15.2
allure-python-commons==2.15.2
coverage==7.12.0
pytest==9.0.1
pytest-cov==7.0.0
File renamed without changes.
56 changes: 56 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import random
from unittest.mock import Mock
import pytest

from helpers.helpers import generate_random_string
from praktikum import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING


@pytest.fixture(scope='function')
def bun_mock():
bun_mock = Mock()
bun_mock.name = generate_random_string(10)
bun_mock.price = float(random.randint(1, 1000))
bun_mock.get_price.return_value = bun_mock.price
bun_mock.get_name.return_value = bun_mock.name

return bun_mock


@pytest.fixture(scope='function')
def ingredient_mock():
ingredient_mock = Mock()
ingredient_mock.name = generate_random_string(10)
ingredient_mock.price = float(random.randint(1, 1000))
ingredient_mock.get_price.return_value = ingredient_mock.price
ingredient_mock.get_type.return_value = ingredient_mock.type
ingredient_mock.get_name.return_value = ingredient_mock.name

return ingredient_mock


@pytest.fixture(scope='function')
def sauce_mock():
sauce_mock = Mock()
sauce_mock.type = INGREDIENT_TYPE_SAUCE
sauce_mock.name = generate_random_string(10)
sauce_mock.price = float(random.randint(1, 1000))
sauce_mock.get_price.return_value = sauce_mock.price
sauce_mock.get_type.return_value = sauce_mock.type
sauce_mock.get_name.return_value = sauce_mock.name

return sauce_mock


@pytest.fixture(scope='function')
def filling_mock():
filling_mock = Mock()
filling_mock.type = INGREDIENT_TYPE_FILLING
filling_mock.name = generate_random_string(10)
filling_mock.price = float(random.randint(1, 1000))
filling_mock.get_price.return_value = filling_mock.price
filling_mock.get_type.return_value = filling_mock.type
filling_mock.get_name.return_value = filling_mock.name

return filling_mock

22 changes: 22 additions & 0 deletions tests/test_bun.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import allure

from praktikum import Bun
from helpers.helpers import *


class TestBun:
@allure.title("Проверка получения названия булочки")
def test_get_name(self):
name = generate_random_string(10)
price = float(random.randint(1, 1000))
bun = Bun(name, price)
assert bun.get_name() == name

@allure.title("Проверка получения цены булочки")
def test_get_price(self):
name = generate_random_string(10)
price = float(random.randint(1, 1000))
bun = Bun(name, price)
assert bun.get_price() == price


83 changes: 83 additions & 0 deletions tests/test_burger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import pytest
import allure

from praktikum import Burger, INGREDIENT_TYPE_FILLING, INGREDIENT_TYPE_SAUCE


class TestBurger:
@allure.title('Проверка присвоения булочки бургеру')
def test_set_buns(self, bun_mock):
burger = Burger()
burger.set_buns(bun_mock)
assert burger.bun.name == bun_mock.name and burger.bun.price == bun_mock.price

@allure.title('Проверка добавления ингредиента в бургер')
@pytest.mark.parametrize('ingredient_type', (INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING))
def test_add_ingredient(self, ingredient_mock, ingredient_type):
ingredient_mock.type = ingredient_type
burger = Burger()
burger.add_ingredient(ingredient_mock)
assert burger.ingredients[-1].type == ingredient_mock.type and \
burger.ingredients[-1].name == ingredient_mock.name and \
burger.ingredients[-1].price == ingredient_mock.price

@allure.title('Проверка удаления ингредиента из бургерв')
@pytest.mark.parametrize('ingredient_type', (INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING))
def test_remove_ingredient(self, ingredient_mock, ingredient_type):
ingredient_mock.type = ingredient_type
burger = Burger()
burger.add_ingredient(ingredient_mock)
burger.remove_ingredient(-1)
assert len(burger.ingredients) == 0

@allure.title('Проверка перемешивания ингредиентов в бургере')
def test_move_ingredient(self, sauce_mock, filling_mock):
burger = Burger()
burger.add_ingredient(sauce_mock)
burger.add_ingredient(filling_mock)
burger.move_ingredient(-1, 0)
assert burger.ingredients[0] is filling_mock and burger.ingredients[1] is sauce_mock

@pytest.mark.parametrize('ingredient_type', (INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING))
@allure.title('Проверка получения цены бургера c одним ингредиентом')
def test_get_price_one_ingredient(self, bun_mock, ingredient_mock, ingredient_type):
ingredient_mock.type = ingredient_type
burger = Burger()
burger.set_buns(bun_mock)
burger.add_ingredient(ingredient_mock)
assert burger.get_price() == bun_mock.price * 2 + ingredient_mock.price

@allure.title('Проверка получения цены бургера c несколькими ингредиентами')
def test_get_price(self, bun_mock, sauce_mock, filling_mock):
burger = Burger()
burger.set_buns(bun_mock)
burger.add_ingredient(sauce_mock)
burger.add_ingredient(filling_mock)
assert burger.get_price() == bun_mock.price * 2 + sauce_mock.price + filling_mock.price

@pytest.mark.parametrize('ingredient_type', (INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING))
@allure.title('Проверка распечатки чека с информацией о бургере с одним ингредиентом')
def test_get_receipt(self, bun_mock, ingredient_mock, ingredient_type):
ingredient_mock.type = ingredient_type
burger = Burger()
burger.set_buns(bun_mock)
burger.add_ingredient(ingredient_mock)
receipt = burger.get_receipt()
assert bun_mock.name in receipt \
and ingredient_mock.name in receipt \
and ingredient_type.lower() in receipt \
and f'Price: {bun_mock.price * 2 + ingredient_mock.price}' in receipt

@allure.title('Проверка распечатки чека с информацией о бургере с несколькими ингредиентами')
def test_get_receipt(self, bun_mock, sauce_mock, filling_mock):
burger = Burger()
burger.set_buns(bun_mock)
burger.add_ingredient(sauce_mock)
burger.add_ingredient(filling_mock)
receipt = burger.get_receipt()
assert bun_mock.name in receipt \
and sauce_mock.name in receipt \
and filling_mock.name in receipt \
and sauce_mock.type.lower() in receipt \
and filling_mock.type.lower() in receipt \
and f'Price: {bun_mock.price * 2 + sauce_mock.price + filling_mock.price}' in receipt
39 changes: 39 additions & 0 deletions tests/test_database.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import allure

from praktikum import Database


class TestDatabase:
@allure.title('Проверка, что в базе данных есть булочки')
def test_available_buns(self):
database = Database()
buns = database.available_buns()
assert buns[0].name == "black bun" and buns[0].price == 100 \
and buns[1].name == "white bun" and buns[1].price == 200 \
and buns[2].name == "red bun" and buns[2].price == 300

@allure.title('Проверка, что в базе данных есть соусы')
def test_available_ingredients_sauce(self):
database = Database()
ingredients = database.available_ingredients()
sauces = []
for ingredient in ingredients:
if ingredient.type == 'SAUCE':
sauces.append(ingredient)
assert sauces[0].name == 'hot sauce' and sauces[0].price == 100 \
and sauces[1].name == 'sour cream' and sauces[1].price == 200 \
and sauces[2].name == 'chili sauce' and sauces[2].price == 300

@allure.title('Проверка, что в базе данных есть начинки')
def test_available_ingredients_filling(self):
database = Database()
ingredients = database.available_ingredients()
fillings = []
for ingredient in ingredients:
if ingredient.type == 'FILLING':
fillings.append(ingredient)
assert fillings[0].name == "cutlet" and fillings[0].price == 100 \
and fillings[1].name == "dinosaur" and fillings[1].price == 200 \
and fillings[2].name == "sausage" and fillings[2].price == 300


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
import allure

from praktikum import Ingredient, INGREDIENT_TYPE_FILLING, INGREDIENT_TYPE_SAUCE
from helpers.helpers import *


class TestIngredient:

@pytest.mark.parametrize('ingredient_type', (INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING))
@allure.title(f'Проверка получения цены ингредиента')
def test_get_price(self, ingredient_type):
ingredient_type = ingredient_type
name = generate_random_string(10)
price = float(random.randint(1, 1000))
ingredient = Ingredient(ingredient_type, name, price)
assert ingredient.get_price() == price

@pytest.mark.parametrize('ingredient_type', (INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING))
@allure.title('Проверка получения названия ингредиента')
def test_get_name(self, ingredient_type):
ingredient_type = ingredient_type
name = generate_random_string(10)
price = float(random.randint(1, 1000))
ingredient = Ingredient(ingredient_type, name, price)
assert ingredient.get_name() == name

@pytest.mark.parametrize('ingredient_type', (INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING))
@allure.title('Проверка получения типа ингредиента')
def test_get_type(self, ingredient_type):
ingredient_type = ingredient_type
name = generate_random_string(10)
price = float(random.randint(1, 1000))
ingredient = Ingredient(ingredient_type, name, price)
assert ingredient.get_type() == ingredient_type