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 .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/inspectionProfiles/profiles_settings.xml
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нужно исправить: из финального проекта нужно удалить все файлы и папки, которые не относятся к решению задачи

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 16 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# conftest.py
import pytest
from praktikum.burger import Burger
from helpers import make_mock_bun, make_mock_ingredient

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

@pytest.fixture
def mock_bun():
return make_mock_bun()

@pytest.fixture
def mock_ingredient():
return make_mock_ingredient()
15 changes: 15 additions & 0 deletions helpers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# helpers.py
from unittest.mock import Mock

def make_mock_bun(name="Sesame Bun", price=3.0):
bun = Mock()
bun.get_name.return_value = name
bun.get_price.return_value = price
return bun

def make_mock_ingredient(name="Lettuce", ing_type="Vegetable", price=1.2):
ing = Mock()
ing.get_name.return_value = name
ing.get_type.return_value = ing_type
ing.get_price.return_value = price
return ing
59 changes: 59 additions & 0 deletions models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
class Bun:
def __init__(self, name, price):
self.name = name
self.price = price

def get_name(self):
return self.name

def get_price(self):
return self.price

class Ingredient:
def __init__(self, name, ingredient_type, price):
self.name = name
self.type = ingredient_type
self.price = price

def get_name(self):
return self.name

def get_type(self):
return self.type

def get_price(self):
return self.price

class Burger:
def __init__(self):
self.bun = None
self.ingredients = []

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

def add_ingredient(self, ingredient):
self.ingredients.append(ingredient)

def remove_ingredient(self, ingredient):
self.ingredients.remove(ingredient)

def move_ingredient(self, old_index, new_index):
self.ingredients.insert(new_index, self.ingredients.pop(old_index))

def get_price(self):
total = 0
if self.bun:
total += self.bun.get_price() * 2
for ing in self.ingredients:
total += ing.get_price()
return total

def get_receipt(self):
lines = []
lines.append(f"(==== {self.bun.get_name()} ====)")
for ing in self.ingredients:
lines.append(f"= {str(ing.get_type()).lower()} {ing.get_name()} =")
lines.append(f"(==== {self.bun.get_name()} ====)")
lines.append(f"Price: {self.get_price()}")
return "\n".join(lines)
File renamed without changes.
File renamed without changes.
3 changes: 1 addition & 2 deletions burger.py → praktikum/burger.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from typing import List

from praktikum.bun import Bun
from praktikum.ingredient import Ingredient
from models import Burger, Bun, Ingredient


class Burger:
Expand Down
6 changes: 3 additions & 3 deletions database.py → praktikum/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 praktikum.praktikum import Bun
from praktikum.praktikum import Ingredient
from praktikum.praktikum import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING


class Database:
Expand Down
File renamed without changes.
File renamed without changes.
6 changes: 2 additions & 4 deletions praktikum.py → praktikum/praktikum.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
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 database import Database
from models import Burger, Bun, Ingredient

def main():
# Инициализируем базу данных
Expand Down
Empty file added tests/__init__.py
Empty file.
23 changes: 23 additions & 0 deletions tests/test_burger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
def test_price_without_ingredients(burger, mock_bun):
burger.set_buns(mock_bun)
assert burger.get_price() == mock_bun.get_price.return_value * 2

def test_set_bun_and_add_ingredients_and_price(burger, mock_bun, mock_ingredient):
burger.set_buns(mock_bun)
burger.add_ingredient(mock_ingredient)
expected_price = mock_bun.get_price.return_value * 2 + mock_ingredient.get_price.return_value
assert burger.get_price() == expected_price

def test_move_and_remove_ingredients_order(burger, mock_ingredient):
burger.add_ingredient(mock_ingredient)
burger.move_ingredient(0, 0) # пример перемещения, если есть такая логика
burger.remove_ingredient(0)
assert burger.ingredients == []

def test_receipt_format_includes_bun_and_ingredients(burger, mock_bun, mock_ingredient):
burger.set_buns(mock_bun)
burger.add_ingredient(mock_ingredient)
receipt = burger.get_receipt()
assert f"(==== {mock_bun.get_name()} ====)" in receipt
assert f"= {str(mock_ingredient.get_type()).lower()} {mock_ingredient.get_name()}" in receipt
assert f"Price: {burger.get_price()}" in receipt