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
24 changes: 24 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
*.log

tmp/

.env.*
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

.idea/
.vscode/

*cache/
.cache/
__pycache__/
*.py[cod]
*$py.class
.pytest_cache/
.cache

4 changes: 2 additions & 2 deletions burger.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from typing import List

from praktikum.bun import Bun
from praktikum.ingredient import Ingredient
from bun import Bun
from ingredient import Ingredient


class Burger:
Expand Down
51 changes: 51 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import pytest
from unittest.mock import MagicMock

import sys
import os
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))


from bun import Bun

from burger import Burger
from database import Database
from helpers.data import BUNS_INFO, INGREDIENTS_INFO
from ingredient import Ingredient


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


@pytest.fixture
def mock_create_buns():
bun_mock = MagicMock(spec=Bun)
bun_mock.get_name.return_value = BUNS_INFO[0]["bun_name"]
bun_mock.get_price.return_value = BUNS_INFO[0]["bun_price"]
return bun_mock

@pytest.fixture
def mock_create_ingredient():
ingredient_mock = MagicMock(spec=Ingredient)

ingredient_mock.get_name.return_value = INGREDIENTS_INFO[0]["ingredient_name"]
ingredient_mock.get_type.return_value = INGREDIENTS_INFO[0]["ingredient_type"]
ingredient_mock.get_price.return_value = INGREDIENTS_INFO[0]["ingredient_price"]

return ingredient_mock

@pytest.fixture
def mock_create_additional_ingredient():
ingredient_mock_2 = MagicMock(spec=Ingredient)

ingredient_mock_2.get_name.return_value = INGREDIENTS_INFO[1]["ingredient_name"]
ingredient_mock_2.get_type.return_value = INGREDIENTS_INFO[1]["ingredient_type"]
ingredient_mock_2.get_price.return_value = INGREDIENTS_INFO[1]["ingredient_price"]

return ingredient_mock_2

@pytest.fixture
def db():
return Database()
6 changes: 3 additions & 3 deletions database.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from typing import List

from praktikum.bun import Bun
from praktikum.ingredient import Ingredient
from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING
from bun import Bun
from ingredient import Ingredient
from ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING


class Database:
Expand Down
13 changes: 13 additions & 0 deletions helpers/data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@

BUNS_INFO = [
{"bun_name": "Краторная булка N-200i", "bun_price": 999.9},
{"bun_name": "Флюоресцентная булка R2-D3", "bun_price": 444.4}
]

INGREDIENTS_INFO = [
{"ingredient_name": "Биокотлета из марсианской Магнолии", "ingredient_type": "FILLING", "ingredient_price": 424.0},
{"ingredient_name": "Плоды Фалленианского дерева", "ingredient_type": "FILLING", "ingredient_price": 874.0}
]



8 changes: 4 additions & 4 deletions praktikum.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from typing import List

from praktikum.bun import Bun
from praktikum.burger import Burger
from praktikum.database import Database
from praktikum.ingredient import Ingredient
from bun import Bun
from burger import Burger
from database import Database
from ingredient import Ingredient


def main():
Expand Down
2 changes: 2 additions & 0 deletions pytest.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[pytest]
testpaths = tests
Empty file added tests/__init__.py
Empty file.
20 changes: 20 additions & 0 deletions tests/test_bun.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import pytest

from bun import Bun
from helpers.data import BUNS_INFO

class TestBun:

@pytest.mark.parametrize("bun_data", BUNS_INFO)
def test_get_name_returns_bun_name(self, bun_data):
bun = Bun(bun_data["bun_name"], bun_data["bun_price"])

assert bun.get_name() == bun_data["bun_name"]
assert isinstance(bun_data["bun_name"], str)

@pytest.mark.parametrize("bun_data", BUNS_INFO)
def test_get_price_returns_bun_price(self, bun_data):
bun = Bun(bun_data["bun_name"], bun_data["bun_price"])

assert bun.get_price() == bun_data["bun_price"]
assert isinstance(bun_data["bun_price"] , float)
79 changes: 79 additions & 0 deletions tests/test_burger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@

class TestBurger:

def test_set_buns_adds_buns_to_burger(self, burger, mock_create_buns):
burger.set_buns(mock_create_buns)

assert mock_create_buns.get_name() == burger.bun.get_name()

def test_add_ingredient_adds_ingredients_to_burger(self, burger, mock_create_ingredient):
burger.add_ingredient(mock_create_ingredient)

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


def test_remove_ingredient_deletes_ingredient_from_burger(self, burger, mock_create_ingredient):
burger.add_ingredient(mock_create_ingredient)
burger.remove_ingredient(0)

assert len(burger.ingredients) == 0
assert mock_create_ingredient not in burger.ingredients

def test_move_ingredient_replaces_ingredients(self, burger, mock_create_ingredient, mock_create_additional_ingredient):
burger.add_ingredient(mock_create_ingredient)
burger.add_ingredient(mock_create_additional_ingredient)

burger.move_ingredient(1, 0)

assert burger.ingredients[0].get_name() == mock_create_additional_ingredient.get_name()
assert burger.ingredients[1].get_name() == mock_create_ingredient.get_name()


def test_get_price_returns_burger_price(self, burger, mock_create_buns, mock_create_ingredient):
burger.set_buns(mock_create_buns)
burger.add_ingredient(mock_create_ingredient)

expected_price = mock_create_buns.get_price.return_value * 2 + \
mock_create_ingredient.get_price.return_value

actual_price = burger.get_price()

assert actual_price == expected_price


def test_get_receipt_returns_receipt_of_order(self, burger, mock_create_buns, mock_create_ingredient, mock_create_additional_ingredient):
burger.set_buns(mock_create_buns)
burger.add_ingredient(mock_create_ingredient)
burger.add_ingredient(mock_create_additional_ingredient)

expected_receipt_lines = [
f'(==== {mock_create_buns.get_name()} ====)',
f'= {mock_create_ingredient.get_type().lower()} {mock_create_ingredient.get_name()} =',
f'= {mock_create_additional_ingredient.get_type().lower()} {mock_create_additional_ingredient.get_name()} =',
f'(==== {mock_create_buns.get_name()} ====)\n',
f'Price: {burger.get_price()}'
]

expected_receipt = '\n'.join(expected_receipt_lines)
true_receipt = burger.get_receipt()

assert true_receipt == expected_receipt


















16 changes: 16 additions & 0 deletions tests/test_database.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@

class TestDatabase:
def test_available_buns_returns_list_of_buns(self, db):
available_buns = db.available_buns()

assert len(available_buns) == 3
assert isinstance(available_buns, list)


def test_available_ingredients_returns_list_of_ingredients(self, db):
available_ingredients = db.available_ingredients()

assert len(available_ingredients) == 6
assert isinstance(available_ingredients, list)


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

from ingredient import Ingredient
from helpers.data import INGREDIENTS_INFO


class TestIngredient:

@pytest.mark.parametrize("ingredient_data", INGREDIENTS_INFO)
def test_get_price_returns_price_of_ingredient(self, ingredient_data):
ingredient = Ingredient(ingredient_data["ingredient_type"], ingredient_data["ingredient_name"], ingredient_data["ingredient_price"])

assert ingredient.get_price() == ingredient_data["ingredient_price"]


@pytest.mark.parametrize("ingredient_data", INGREDIENTS_INFO)
def test_get_name_returns_name_of_ingredient(self, ingredient_data):
ingredient = Ingredient(ingredient_data["ingredient_type"], ingredient_data["ingredient_name"], ingredient_data["ingredient_price"])

assert ingredient.get_name() == ingredient_data["ingredient_name"]


@pytest.mark.parametrize("ingredient_data", INGREDIENTS_INFO)
def test_get_type_returns_type_of_ingredient(self, ingredient_data):
ingredient = Ingredient(ingredient_data["ingredient_type"], ingredient_data["ingredient_name"], ingredient_data["ingredient_price"])

assert ingredient.get_type() == ingredient_data["ingredient_type"]