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

__pycache__/
*.pyc
*.pyo
*.pyd

.vscode/
.idea/

allure-results/
allure-report/
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,4 @@
**Запуск автотестов и создание HTML-отчета о покрытии**

> `$ pytest --cov=praktikum --cov-report=html`

Empty file removed __init__.py
Empty file.
5 changes: 3 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 Expand Up @@ -46,3 +46,4 @@ def get_receipt(self) -> str:
receipt.append(f'Price: {self.get_price()}')

return '\n'.join(receipt)

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
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 requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
pytest
pytest-cov
13 changes: 13 additions & 0 deletions tests/test_bun.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@

from bun import Bun

class TestBun:

def test_get_name_returns_correct_value(self):
bun = Bun("test_bun", 999.99)
assert bun.get_name() == "test_bun"

def test_get_price_returns_correct_value(self):
bun = Bun("test_bun", 999.99)
assert bun.get_price() == 999.99

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

from burger import Burger
from bun import Bun
from ingredient import Ingredient
from ingredient_types import INGREDIENT_TYPE_FILLING, INGREDIENT_TYPE_SAUCE

class TestBurger:


def test_set_buns_succsess(self):
burger = Burger()
test_bun = Bun("Origin bun",50)
burger.set_buns(test_bun)
assert burger.bun == test_bun


@pytest.mark.parametrize("ingredient_type, name, price", [
(INGREDIENT_TYPE_FILLING,"chicken",100),
(INGREDIENT_TYPE_FILLING,"meet",120),
(INGREDIENT_TYPE_SAUCE, "salsa", 50),
(INGREDIENT_TYPE_SAUCE, "ancle bens", 60)
])
def test_add_ingredient_several_succsess(self,ingredient_type, name, price):
burger = Burger()
bun = Bun("Origin Bun", 40)
burger.set_buns(bun)

initial_count= len(burger.ingredients)
ingredient = Ingredient( ingredient_type,name,price)
burger.add_ingredient(ingredient)
final_count = len(burger.ingredients)
assert final_count == initial_count + 1
assert ingredient in burger.ingredients


def test_rremove_ingredient_only_one_leaves_empty_list(self):

burger = Burger()
burger.set_buns(Bun("Origin Bun", 40))

one_ing= Ingredient(INGREDIENT_TYPE_FILLING,"chicken",100)
burger.add_ingredient(one_ing)

burger.remove_ingredient(0)

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


def test_remove_ingredient_from_empty_list_wait_error(self):

burger = Burger()
burger.set_buns(Bun("Origin Bun", 40))

with pytest.raises(IndexError):
burger.remove_ingredient(0)

def test_remove_ingredient_for_index_del_correctly_ingredient(self):

burger = Burger()
burger.set_buns(Bun("Origin Bun", 40))

first_ing= Ingredient(INGREDIENT_TYPE_FILLING,"chicken",100)
second_ing= Ingredient(INGREDIENT_TYPE_SAUCE, "salsa", 50)
burger.add_ingredient(first_ing)
burger.add_ingredient(second_ing)
burger.remove_ingredient(0)

assert len(burger.ingredients) == 1
assert first_ing not in burger.ingredients

def test_move_ingredient_single_to_new_position(self):
burger = Burger()
burger.set_buns(Bun("Origin Bun", 40))

ing1= Ingredient(INGREDIENT_TYPE_FILLING,"chicken",100)
ing2= Ingredient(INGREDIENT_TYPE_SAUCE, "salsa", 50)
ing3 = Ingredient(INGREDIENT_TYPE_FILLING,"meet",120)

burger.add_ingredient(ing1)
burger.add_ingredient(ing2)
burger.add_ingredient(ing3)

burger.move_ingredient(0, 1)

moved_ingredients = burger.ingredients
assert len(moved_ingredients) == 3
assert moved_ingredients[0] is ing2
assert moved_ingredients[1] is ing1
assert moved_ingredients[2] is ing3

def test_move_ingredient_from_bad_position_wait_error(self):
burger = Burger()
burger.set_buns(Bun("Origin Bun", 40))

ing1= Ingredient(INGREDIENT_TYPE_FILLING,"chicken",100)
ing2= Ingredient(INGREDIENT_TYPE_SAUCE, "salsa", 50)

burger.add_ingredient(ing1)
burger.add_ingredient(ing2)

with pytest.raises(IndexError):
burger.move_ingredient(5,0)

def test_get_price_includes_bun_twice_and_ingredients(self):
burger = Burger()
bun =Bun("Origin Bun", 40)
burger.set_buns(bun)

ing1= Ingredient(INGREDIENT_TYPE_FILLING,"chicken",100)
ing2= Ingredient(INGREDIENT_TYPE_SAUCE, "salsa", 50)

burger.add_ingredient(ing1)
burger.add_ingredient(ing2)

expected_price = (bun.get_price() * 2) + ing1.get_price() + ing2.get_price()

assert burger.get_price() == expected_price

def test_get_receipt_full_content(self):
burger = Burger()
bun =Bun("Origin Bun", 40)
burger.set_buns(bun)

ing1= Ingredient(INGREDIENT_TYPE_FILLING,"chicken",100)
ing2= Ingredient(INGREDIENT_TYPE_SAUCE, "salsa", 50)

burger.add_ingredient(ing1)
burger.add_ingredient(ing2)

receipt = burger.get_receipt()

expected_lines: List[str] = [
f'(==== {bun.get_name()} ====)',
f'= {str(ing1.get_type()).lower()} {ing1.get_name()} =',
f'= {str(ing2.get_type().lower())} {ing2.get_name()} =', # исправлено: .lower() после get_type()
f'(==== {bun.get_name()} ====)',
"",
f'Price: {burger.get_price()}',
]
expected = '\n'.join(expected_lines)
assert receipt == expected
42 changes: 42 additions & 0 deletions tests/test_database.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
from database import Database

from ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING

class TestDatabase:

def test_available_buns_init_buns_in_database(self):

db = Database()
buns = db.available_buns()


actual_pairs = [(bun.get_name(), bun.get_price()) for bun in buns]

expected_pairs = [
("black bun", 100),
("white bun", 200),
("red bun", 300),
]

assert actual_pairs == expected_pairs

def test_available_ingredients_init_in_database(self):
db = Database()
ingredients = db.available_ingredients()

actual = [
(ing.get_type(), ing.get_name(), ing.get_price())
for ing in ingredients
]

# Ожидаемый набор — ровно в том порядке, как они добавлены в __init__
expected = [
(INGREDIENT_TYPE_SAUCE, "hot sauce", 100),
(INGREDIENT_TYPE_SAUCE, "sour cream", 200),
(INGREDIENT_TYPE_SAUCE, "chili sauce", 300),
(INGREDIENT_TYPE_FILLING, "cutlet", 100),
(INGREDIENT_TYPE_FILLING, "dinosaur", 200),
(INGREDIENT_TYPE_FILLING, "sausage", 300),
]

assert actual == expected
27 changes: 27 additions & 0 deletions tests/test_ingredient.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from ingredient import Ingredient

class TestIngredient:

def test_get_price_sucsess(self):
ingredient_type = "INGREDIENT_TYPE_FILLING"
name = "chicken"
price = 100.0

ing = Ingredient(ingredient_type, name, price)
assert ing.get_price() == price

def test_get_name_sucsess(self):
ingredient_type = "INGREDIENT_TYPE_FILLING"
name = "chicken"
price = 100.0

ing = Ingredient(ingredient_type, name, price)
assert ing.get_name() == name

def test_get_type_sucsess(self):
ingredient_type = "INGREDIENT_TYPE_FILLING"
name = "chicken"
price = 100.0

ing = Ingredient(ingredient_type, name, price)
assert ing.get_type() == ingredient_type