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.
7 changes: 7 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"python.testing.pytestArgs": [
"tests"
],
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true
}
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
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
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
18 changes: 18 additions & 0 deletions tests/test_bun.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from bun import Bun

class TestBun:
def test_initialization_sets_name_attribute(self):
bun = Bun('Black Bun', 100)
assert bun.name == 'Black Bun'

def test_initialization_sets_price_attribute(self):
bun = Bun('White Bun', 200)
assert bun.price == 200

def test_get_name_returns_correct_value(self):
bun = Bun('Red Bun', 150)
assert bun.get_name() == 'Red Bun'

def test_get_price_returns_correct_value(self):
bun = Bun('Golden Bun', 300)
assert bun.get_price() == 300
91 changes: 91 additions & 0 deletions tests/test_burger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
from burger import Burger
from unittest.mock import Mock

class TestBurger:

def test_set_buns_assigns_correct_bun(self):
burger = Burger()
mock_bun = Mock()
burger.set_buns(mock_bun)
assert burger.bun == mock_bun

def test_add_ingredient_increases_count(self):
burger = Burger()
mock_ingredient = Mock()
burger.add_ingredient(mock_ingredient)
assert len(burger.ingredients) == 1

def test_add_ingredient_contains_correct_object(self):
burger = Burger()
mock_ingredient = Mock()
burger.add_ingredient(mock_ingredient)
assert burger.ingredients[0] == mock_ingredient

def test_remove_ingredient_decreases_count(self):
burger = Burger()
mock_ingredient = Mock()
burger.add_ingredient(mock_ingredient)
burger.remove_ingredient(0)
assert len(burger.ingredients) == 0

def test_move_ingredient_changes_first_element(self):
burger = Burger()
ingred_1, ingred_2 = Mock(), Mock()
burger.add_ingredient(ingred_1)
burger.add_ingredient(ingred_2)
burger.move_ingredient(0, 1)
assert burger.ingredients[0] == ingred_2

def test_move_ingredient_changes_second_element(self):
burger = Burger()
ingred_1, ingred_2 = Mock(), Mock()
burger.add_ingredient(ingred_1)
burger.add_ingredient(ingred_2)
burger.move_ingredient(0, 1)
assert burger.ingredients[1] == ingred_1

def test_get_price_calculates_correct_sum(self):
burger = Burger()
mock_bun = Mock()
mock_bun.get_price.return_value = 100
burger.set_buns(mock_bun)

mock_ingredient = Mock()
mock_ingredient.get_price.return_value = 50
burger.add_ingredient(mock_ingredient)

assert burger.get_price() == 250

def test_get_receipt_contains_bun_name(self):
burger = Burger()
mock_bun = Mock()
mock_bun.get_name.return_value = "Black Bun"
mock_bun.get_price.return_value = 100
burger.set_buns(mock_bun)

receipt = burger.get_receipt()
assert "Black Bun" in receipt

def test_get_receipt_contains_ingredient_name(self):
burger = Burger()
mock_ingredient = Mock()
mock_ingredient.get_name.return_value = "Cutlet"
mock_ingredient.get_price.return_value = 50
mock_ingredient.get_type.return_value = "FILLING"
burger.add_ingredient(mock_ingredient)

mock_bun = Mock()
mock_bun.get_price.return_value = 100
burger.set_buns(mock_bun)

receipt = burger.get_receipt()
assert "Cutlet" in receipt

def test_get_receipt_contains_total_price(self):
burger = Burger()
mock_bun = Mock()
mock_bun.get_price.return_value = 100
burger.set_buns(mock_bun)

receipt = burger.get_receipt()
assert "200" in receipt
29 changes: 29 additions & 0 deletions tests/test_database.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from database import Database

class TestDatabase:

def test_available_buns_returns_correct_count(self):
db = Database()
buns = db.available_buns()

assert len(buns) == 3

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

assert len(ingredients) == 6

def test_database_has_specific_bun(self):
db = Database()
buns = db.available_buns()

names = [bun.get_name() for bun in buns]
assert "white bun" in names

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

names = [ing.get_name() for ing in ingredients]
assert "hot sauce" in names
32 changes: 32 additions & 0 deletions tests/test_ingredient.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import pytest
from ingredient import Ingredient
from ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING

class TestIngredient:

@pytest.mark.parametrize("ing_type", [INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING])
def test_get_type_returns_correct_value(self, ing_type):
ingredient = Ingredient(ing_type, "sour cream", 100)
assert ingredient.get_type() == ing_type
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Нужно исправить: здесь и далее: это юнит тесты, на каждый метод должен быть отдельный тест


@pytest.mark.parametrize("name", ["sour cream", "cutlet"])
def test_get_name_returns_correct_value(self, name):
ingredient = Ingredient(INGREDIENT_TYPE_SAUCE, name, 100)
assert ingredient.get_name() == name

@pytest.mark.parametrize("price", [100, 200])
def test_get_price_returns_correct_value(self, price):
ingredient = Ingredient(INGREDIENT_TYPE_SAUCE, "sour cream", price)
assert ingredient.get_price() == price

def test_initialization_sets_type_attribute(self):
ingredient = Ingredient(INGREDIENT_TYPE_FILLING, "chicken", 150)
assert ingredient.type == INGREDIENT_TYPE_FILLING

def test_initialization_sets_name_attribute(self):
ingredient = Ingredient(INGREDIENT_TYPE_FILLING, "chicken", 150)
assert ingredient.name == "chicken"

def test_initialization_sets_price_attribute(self):
ingredient = Ingredient(INGREDIENT_TYPE_FILLING, "chicken", 150)
assert ingredient.price == 150