From 6144a29cfad34042e7bce98a2ef940511f8424b4 Mon Sep 17 00:00:00 2001 From: Polina Spiridonova Date: Sun, 15 Mar 2026 22:17:42 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=B8=20=D0=BE?= =?UTF-8?q?=D1=82=D1=87=D0=B5=D1=82=20=D0=BE=20=D0=BF=D0=BE=D0=BA=D1=80?= =?UTF-8?q?=D1=8B=D1=82=D0=B8=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=201=20=D0=B4=D0=B8=D0=BF=D0=BB?= =?UTF-8?q?=D0=BE=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BF=D1=80=D0=BE=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 + conftest.py | 53 + coverage.json | 1911 +++++++++++++++++ __init__.py => praktikum/__init__.py | 0 bun.py => praktikum/bun.py | 0 burger.py => praktikum/burger.py | 1 - database.py => praktikum/database.py | 0 ingredient.py => praktikum/ingredient.py | 0 .../ingredient_types.py | 0 requirements.txt | 3 + tests.py | 143 ++ 11 files changed, 2114 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 conftest.py create mode 100644 coverage.json rename __init__.py => praktikum/__init__.py (100%) rename bun.py => praktikum/bun.py (100%) rename burger.py => praktikum/burger.py (99%) rename database.py => praktikum/database.py (100%) rename ingredient.py => praktikum/ingredient.py (100%) rename ingredient_types.py => praktikum/ingredient_types.py (100%) create mode 100644 requirements.txt create mode 100644 tests.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..489f9e2ae --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.DS_Store +__pycache__/ +.pytest_cache/ +.venv/ \ No newline at end of file diff --git a/conftest.py b/conftest.py new file mode 100644 index 000000000..41de26ab3 --- /dev/null +++ b/conftest.py @@ -0,0 +1,53 @@ +import pytest +from praktikum.bun import Bun +from praktikum.database import Database +from praktikum.ingredient import Ingredient +from praktikum.burger import Burger +from unittest.mock import Mock, patch +from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + +# Фикстуры для моков + +@pytest.fixture +def bun_mock(): + mock_bun = Mock(spec=Bun) + mock_bun.get_name.return_value = 'Каменная булка' + mock_bun.get_price.return_value = 1000 + return mock_bun + +@pytest.fixture +def ingredient_mock(): + mock_ingredient = Mock(spec=Ingredient) + mock_ingredient.get_name.return_value = 'Тестовый соус' + mock_ingredient.get_price.return_value = 50 + mock_ingredient.get_type.return_value = INGREDIENT_TYPE_SAUCE + return mock_ingredient + +@pytest.fixture +def ingredient_mock_filling(): + mock_ingredient = Mock(spec=Ingredient) + mock_ingredient.get_name.return_value = 'Тестовая начинка' + mock_ingredient.get_price.return_value = 750 + mock_ingredient.get_type.return_value = INGREDIENT_TYPE_FILLING + return mock_ingredient + + +# Фикстуры для объектов + +@pytest.fixture +def bun(): + return Bun("Черная булка", 900) + +@pytest.fixture +def database(): + return Database() + +@pytest.fixture +def ingredient(): + return Ingredient(INGREDIENT_TYPE_SAUCE, "Острый соус", 99) + +@pytest.fixture +def burger(): + return Burger() + + diff --git a/coverage.json b/coverage.json new file mode 100644 index 000000000..26f69664d --- /dev/null +++ b/coverage.json @@ -0,0 +1,1911 @@ +{ + "meta": { + "format": 3, + "version": "7.12.0", + "timestamp": "2026-03-15T21:32:33.366894", + "branch_coverage": false, + "show_contexts": false + }, + "files": { + "conftest.py": { + "executed_lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 11, + 12, + 13, + 14, + 15, + 16, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 37, + 38, + 39, + 41, + 42, + 43, + 45, + 46, + 47, + 49, + 50, + 51 + ], + "summary": { + "covered_lines": 39, + "num_statements": 39, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [], + "functions": { + "bun_mock": { + "executed_lines": [ + 13, + 14, + 15, + 16 + ], + "summary": { + "covered_lines": 4, + "num_statements": 4, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "ingredient_mock": { + "executed_lines": [ + 20, + 21, + 22, + 23, + 24 + ], + "summary": { + "covered_lines": 5, + "num_statements": 5, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "ingredient_mock_filling": { + "executed_lines": [ + 28, + 29, + 30, + 31, + 32 + ], + "summary": { + "covered_lines": 5, + "num_statements": 5, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "bun": { + "executed_lines": [ + 39 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "database": { + "executed_lines": [ + 43 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "ingredient": { + "executed_lines": [ + 47 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "burger": { + "executed_lines": [ + 51 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "": { + "executed_lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 11, + 12, + 18, + 19, + 26, + 27, + 37, + 38, + 41, + 42, + 45, + 46, + 49, + 50 + ], + "summary": { + "covered_lines": 21, + "num_statements": 21, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + } + }, + "classes": { + "": { + "executed_lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 11, + 12, + 13, + 14, + 15, + 16, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 37, + 38, + 39, + 41, + 42, + 43, + 45, + 46, + 47, + 49, + 50, + 51 + ], + "summary": { + "covered_lines": 39, + "num_statements": 39, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + } + } + }, + "praktikum.py": { + "executed_lines": [], + "summary": { + "covered_lines": 0, + "num_statements": 20, + "percent_covered": 0.0, + "percent_covered_display": "0", + "missing_lines": 20, + "excluded_lines": 0, + "percent_statements_covered": 0.0, + "percent_statements_covered_display": "0" + }, + "missing_lines": [ + 1, + 3, + 4, + 5, + 6, + 9, + 11, + 14, + 17, + 20, + 23, + 25, + 26, + 27, + 28, + 31, + 34, + 37, + 40, + 41 + ], + "excluded_lines": [], + "functions": { + "main": { + "executed_lines": [], + "summary": { + "covered_lines": 0, + "num_statements": 12, + "percent_covered": 0.0, + "percent_covered_display": "0", + "missing_lines": 12, + "excluded_lines": 0, + "percent_statements_covered": 0.0, + "percent_statements_covered_display": "0" + }, + "missing_lines": [ + 11, + 14, + 17, + 20, + 23, + 25, + 26, + 27, + 28, + 31, + 34, + 37 + ], + "excluded_lines": [] + }, + "": { + "executed_lines": [], + "summary": { + "covered_lines": 0, + "num_statements": 8, + "percent_covered": 0.0, + "percent_covered_display": "0", + "missing_lines": 8, + "excluded_lines": 0, + "percent_statements_covered": 0.0, + "percent_statements_covered_display": "0" + }, + "missing_lines": [ + 1, + 3, + 4, + 5, + 6, + 9, + 40, + 41 + ], + "excluded_lines": [] + } + }, + "classes": { + "": { + "executed_lines": [], + "summary": { + "covered_lines": 0, + "num_statements": 20, + "percent_covered": 0.0, + "percent_covered_display": "0", + "missing_lines": 20, + "excluded_lines": 0, + "percent_statements_covered": 0.0, + "percent_statements_covered_display": "0" + }, + "missing_lines": [ + 1, + 3, + 4, + 5, + 6, + 9, + 11, + 14, + 17, + 20, + 23, + 25, + 26, + 27, + 28, + 31, + 34, + 37, + 40, + 41 + ], + "excluded_lines": [] + } + } + }, + "praktikum/__init__.py": { + "executed_lines": [ + 0 + ], + "summary": { + "covered_lines": 0, + "num_statements": 0, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [], + "functions": { + "": { + "executed_lines": [], + "summary": { + "covered_lines": 0, + "num_statements": 0, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + } + }, + "classes": { + "": { + "executed_lines": [], + "summary": { + "covered_lines": 0, + "num_statements": 0, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + } + } + }, + "praktikum/bun.py": { + "executed_lines": [ + 1, + 2, + 7, + 8, + 9, + 11, + 12, + 14, + 15 + ], + "summary": { + "covered_lines": 8, + "num_statements": 8, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [], + "functions": { + "Bun.__init__": { + "executed_lines": [ + 8, + 9 + ], + "summary": { + "covered_lines": 2, + "num_statements": 2, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "Bun.get_name": { + "executed_lines": [ + 12 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "Bun.get_price": { + "executed_lines": [ + 15 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "": { + "executed_lines": [ + 1, + 2, + 7, + 11, + 14 + ], + "summary": { + "covered_lines": 4, + "num_statements": 4, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + } + }, + "classes": { + "Bun": { + "executed_lines": [ + 8, + 9, + 12, + 15 + ], + "summary": { + "covered_lines": 4, + "num_statements": 4, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "": { + "executed_lines": [ + 1, + 2, + 7, + 11, + 14 + ], + "summary": { + "covered_lines": 4, + "num_statements": 4, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + } + } + }, + "praktikum/burger.py": { + "executed_lines": [ + 1, + 2, + 3, + 6, + 7, + 14, + 15, + 16, + 18, + 19, + 21, + 22, + 24, + 25, + 27, + 28, + 30, + 31, + 33, + 34, + 36, + 38, + 39, + 41, + 42, + 44, + 45, + 47 + ], + "summary": { + "covered_lines": 27, + "num_statements": 27, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [], + "functions": { + "Burger.__init__": { + "executed_lines": [ + 15, + 16 + ], + "summary": { + "covered_lines": 2, + "num_statements": 2, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "Burger.set_buns": { + "executed_lines": [ + 19 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "Burger.add_ingredient": { + "executed_lines": [ + 22 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "Burger.remove_ingredient": { + "executed_lines": [ + 25 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "Burger.move_ingredient": { + "executed_lines": [ + 28 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "Burger.get_price": { + "executed_lines": [ + 31, + 33, + 34, + 36 + ], + "summary": { + "covered_lines": 4, + "num_statements": 4, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "Burger.get_receipt": { + "executed_lines": [ + 39, + 41, + 42, + 44, + 45, + 47 + ], + "summary": { + "covered_lines": 6, + "num_statements": 6, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "": { + "executed_lines": [ + 1, + 2, + 3, + 6, + 7, + 14, + 18, + 21, + 24, + 27, + 30, + 38 + ], + "summary": { + "covered_lines": 11, + "num_statements": 11, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + } + }, + "classes": { + "Burger": { + "executed_lines": [ + 15, + 16, + 19, + 22, + 25, + 28, + 31, + 33, + 34, + 36, + 39, + 41, + 42, + 44, + 45, + 47 + ], + "summary": { + "covered_lines": 16, + "num_statements": 16, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "": { + "executed_lines": [ + 1, + 2, + 3, + 6, + 7, + 14, + 18, + 21, + 24, + 27, + 30, + 38 + ], + "summary": { + "covered_lines": 11, + "num_statements": 11, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + } + } + }, + "praktikum/database.py": { + "executed_lines": [ + 1, + 3, + 4, + 5, + 8, + 9, + 13, + 14, + 15, + 17, + 18, + 19, + 21, + 22, + 23, + 25, + 26, + 27, + 29, + 30, + 32, + 33 + ], + "summary": { + "covered_lines": 21, + "num_statements": 21, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [], + "functions": { + "Database.__init__": { + "executed_lines": [ + 14, + 15, + 17, + 18, + 19, + 21, + 22, + 23, + 25, + 26, + 27 + ], + "summary": { + "covered_lines": 11, + "num_statements": 11, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "Database.available_buns": { + "executed_lines": [ + 30 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "Database.available_ingredients": { + "executed_lines": [ + 33 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "": { + "executed_lines": [ + 1, + 3, + 4, + 5, + 8, + 9, + 13, + 29, + 32 + ], + "summary": { + "covered_lines": 8, + "num_statements": 8, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + } + }, + "classes": { + "Database": { + "executed_lines": [ + 14, + 15, + 17, + 18, + 19, + 21, + 22, + 23, + 25, + 26, + 27, + 30, + 33 + ], + "summary": { + "covered_lines": 13, + "num_statements": 13, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "": { + "executed_lines": [ + 1, + 3, + 4, + 5, + 8, + 9, + 13, + 29, + 32 + ], + "summary": { + "covered_lines": 8, + "num_statements": 8, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + } + } + }, + "praktikum/ingredient.py": { + "executed_lines": [ + 1, + 2, + 8, + 9, + 10, + 11, + 13, + 14, + 16, + 17, + 19, + 20 + ], + "summary": { + "covered_lines": 11, + "num_statements": 11, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [], + "functions": { + "Ingredient.__init__": { + "executed_lines": [ + 9, + 10, + 11 + ], + "summary": { + "covered_lines": 3, + "num_statements": 3, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "Ingredient.get_price": { + "executed_lines": [ + 14 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "Ingredient.get_name": { + "executed_lines": [ + 17 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "Ingredient.get_type": { + "executed_lines": [ + 20 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "": { + "executed_lines": [ + 1, + 2, + 8, + 13, + 16, + 19 + ], + "summary": { + "covered_lines": 5, + "num_statements": 5, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + } + }, + "classes": { + "Ingredient": { + "executed_lines": [ + 9, + 10, + 11, + 14, + 17, + 20 + ], + "summary": { + "covered_lines": 6, + "num_statements": 6, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "": { + "executed_lines": [ + 1, + 2, + 8, + 13, + 16, + 19 + ], + "summary": { + "covered_lines": 5, + "num_statements": 5, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + } + } + }, + "praktikum/ingredient_types.py": { + "executed_lines": [ + 1, + 6, + 7 + ], + "summary": { + "covered_lines": 2, + "num_statements": 2, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [], + "functions": { + "": { + "executed_lines": [ + 1, + 6, + 7 + ], + "summary": { + "covered_lines": 2, + "num_statements": 2, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + } + }, + "classes": { + "": { + "executed_lines": [ + 1, + 6, + 7 + ], + "summary": { + "covered_lines": 2, + "num_statements": 2, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + } + } + }, + "tests.py": { + "executed_lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 9, + 12, + 17, + 18, + 19, + 20, + 23, + 24, + 27, + 28, + 31, + 33, + 34, + 35, + 38, + 39, + 40, + 41, + 42, + 43, + 46, + 47, + 48, + 49, + 50, + 54, + 57, + 58, + 59, + 63, + 65, + 66, + 67, + 71, + 73, + 74, + 75, + 78, + 80, + 81, + 83, + 84, + 86, + 87, + 88, + 91, + 93, + 94, + 95, + 97, + 100, + 101, + 103, + 105, + 106, + 107, + 109, + 110, + 111, + 112, + 116, + 119, + 125, + 127, + 128, + 129, + 130, + 134, + 135, + 138, + 139, + 142, + 143 + ], + "summary": { + "covered_lines": 80, + "num_statements": 80, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [], + "functions": { + "TestBun.test_bun_create": { + "executed_lines": [ + 18, + 19, + 20 + ], + "summary": { + "covered_lines": 3, + "num_statements": 3, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "TestBun.test_bun_get_name": { + "executed_lines": [ + 24 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "TestBun.test_bun_get_price": { + "executed_lines": [ + 28 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "TestDatabase.test_database_init": { + "executed_lines": [ + 34, + 35 + ], + "summary": { + "covered_lines": 2, + "num_statements": 2, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "TestDatabase.test_available_buns": { + "executed_lines": [ + 39, + 40, + 41, + 42, + 43 + ], + "summary": { + "covered_lines": 5, + "num_statements": 5, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "TestDatabase.test_available_ingredients": { + "executed_lines": [ + 47, + 48, + 49, + 50 + ], + "summary": { + "covered_lines": 4, + "num_statements": 4, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "TestBurger.test_set_buns": { + "executed_lines": [ + 58, + 59 + ], + "summary": { + "covered_lines": 2, + "num_statements": 2, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "TestBurger.test_add_ingredient": { + "executed_lines": [ + 65, + 66, + 67 + ], + "summary": { + "covered_lines": 3, + "num_statements": 3, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "TestBurger.test_remove_ingredient": { + "executed_lines": [ + 73, + 74, + 75 + ], + "summary": { + "covered_lines": 3, + "num_statements": 3, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "TestBurger.test_move_ingredient": { + "executed_lines": [ + 80, + 81, + 83, + 84, + 86, + 87, + 88 + ], + "summary": { + "covered_lines": 7, + "num_statements": 7, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "TestBurger.test_get_burger_price": { + "executed_lines": [ + 93, + 94, + 95, + 97 + ], + "summary": { + "covered_lines": 4, + "num_statements": 4, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "TestBurger.test_get_receipt": { + "executed_lines": [ + 103, + 105, + 106, + 107, + 109, + 110, + 111, + 112 + ], + "summary": { + "covered_lines": 8, + "num_statements": 8, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "TestIngredient.test_ingredient_create": { + "executed_lines": [ + 127, + 128, + 129, + 130 + ], + "summary": { + "covered_lines": 4, + "num_statements": 4, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "TestIngredient.test_ingredient_get_price": { + "executed_lines": [ + 135 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "TestIngredient.test_ingredient_get_name": { + "executed_lines": [ + 139 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "TestIngredient.test_ingredient_get_type": { + "executed_lines": [ + 143 + ], + "summary": { + "covered_lines": 1, + "num_statements": 1, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "": { + "executed_lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 9, + 12, + 17, + 23, + 27, + 31, + 33, + 38, + 46, + 54, + 57, + 63, + 71, + 78, + 91, + 100, + 101, + 116, + 119, + 125, + 134, + 138, + 142 + ], + "summary": { + "covered_lines": 30, + "num_statements": 30, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + } + }, + "classes": { + "TestBun": { + "executed_lines": [ + 18, + 19, + 20, + 24, + 28 + ], + "summary": { + "covered_lines": 5, + "num_statements": 5, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "TestDatabase": { + "executed_lines": [ + 34, + 35, + 39, + 40, + 41, + 42, + 43, + 47, + 48, + 49, + 50 + ], + "summary": { + "covered_lines": 11, + "num_statements": 11, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "TestBurger": { + "executed_lines": [ + 58, + 59, + 65, + 66, + 67, + 73, + 74, + 75, + 80, + 81, + 83, + 84, + 86, + 87, + 88, + 93, + 94, + 95, + 97, + 103, + 105, + 106, + 107, + 109, + 110, + 111, + 112 + ], + "summary": { + "covered_lines": 27, + "num_statements": 27, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "TestIngredient": { + "executed_lines": [ + 127, + 128, + 129, + 130, + 135, + 139, + 143 + ], + "summary": { + "covered_lines": 7, + "num_statements": 7, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + }, + "": { + "executed_lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 9, + 12, + 17, + 23, + 27, + 31, + 33, + 38, + 46, + 54, + 57, + 63, + 71, + 78, + 91, + 100, + 101, + 116, + 119, + 125, + 134, + 138, + 142 + ], + "summary": { + "covered_lines": 30, + "num_statements": 30, + "percent_covered": 100.0, + "percent_covered_display": "100", + "missing_lines": 0, + "excluded_lines": 0, + "percent_statements_covered": 100.0, + "percent_statements_covered_display": "100" + }, + "missing_lines": [], + "excluded_lines": [] + } + } + } + }, + "totals": { + "covered_lines": 188, + "num_statements": 208, + "percent_covered": 90.38461538461539, + "percent_covered_display": "90", + "missing_lines": 20, + "excluded_lines": 0, + "percent_statements_covered": 90.38461538461539, + "percent_statements_covered_display": "90" + } +} \ No newline at end of file diff --git a/__init__.py b/praktikum/__init__.py similarity index 100% rename from __init__.py rename to praktikum/__init__.py diff --git a/bun.py b/praktikum/bun.py similarity index 100% rename from bun.py rename to praktikum/bun.py diff --git a/burger.py b/praktikum/burger.py similarity index 99% rename from burger.py rename to praktikum/burger.py index 2b3b6a88b..b0de7a301 100644 --- a/burger.py +++ b/praktikum/burger.py @@ -1,5 +1,4 @@ from typing import List - from praktikum.bun import Bun from praktikum.ingredient import Ingredient diff --git a/database.py b/praktikum/database.py similarity index 100% rename from database.py rename to praktikum/database.py diff --git a/ingredient.py b/praktikum/ingredient.py similarity index 100% rename from ingredient.py rename to praktikum/ingredient.py diff --git a/ingredient_types.py b/praktikum/ingredient_types.py similarity index 100% rename from ingredient_types.py rename to praktikum/ingredient_types.py diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..083c3ff5f --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +coverage==7.13.4 +pytest==9.0.2 +pytest-cov==7.0.0 \ No newline at end of file diff --git a/tests.py b/tests.py new file mode 100644 index 000000000..875da1c36 --- /dev/null +++ b/tests.py @@ -0,0 +1,143 @@ +import pytest +from praktikum.bun import Bun +from praktikum.burger import Burger +from praktikum.ingredient import Ingredient +from praktikum.database import Database +from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING +from unittest.mock import Mock, patch + +class TestBun: + + # Создание булки с параметризацией + @pytest.mark.parametrize("name, price", [ + ("Булка с кунжутом", 850), + ("Бриошь", 930), + ("Цельнозерновая", 750) + ]) + def test_bun_create(self, name, price): + bun = Bun(name, price) + assert bun.get_name() == name + assert bun.get_price() == price + + # Получение названия булки + def test_bun_get_name(self, bun): + assert bun.get_name() == "Черная булка" + + # Получение цены булки + def test_bun_get_price(self, bun): + assert bun.get_price() == 900 + + +class TestDatabase: + + def test_database_init(self, database): + assert len(database.available_buns()) == 3 + assert len(database.available_ingredients()) == 6 + + # Получение списка доступных булок + def test_available_buns(self, database): + buns = database.available_buns() + assert len(buns) == 3 + assert buns[0].get_name() == "black bun" + assert buns[1].get_name() == "white bun" + assert buns[2].get_name() == "red bun" + + # Получение списка доступных ингредиентов + def test_available_ingredients(self, database): + ingredients = database.available_ingredients() + assert len(ingredients) == 6 + assert ingredients[0].get_type() == INGREDIENT_TYPE_SAUCE + assert ingredients[3].get_type() == INGREDIENT_TYPE_FILLING + + + +class TestBurger: + + # Выбор булок + def test_set_buns(self, burger, bun_mock): + burger.set_buns(bun_mock) + assert burger.bun == bun_mock + + + # Добавление ингредиента + def test_add_ingredient(self, burger, ingredient_mock): + + burger.add_ingredient(ingredient_mock) + assert len(burger.ingredients) == 1 + assert burger.ingredients[0] == ingredient_mock + + + # Удаление ингредиента + def test_remove_ingredient(self, burger, ingredient_mock): + + burger.add_ingredient(ingredient_mock) + burger.remove_ingredient(0) + assert len(burger.ingredients) == 0 + + # Перемещение ингредиента + def test_move_ingredient(self, burger): + + ingredient1 = Mock(spec=Ingredient) + ingredient2 = Mock(spec=Ingredient) + + burger.add_ingredient(ingredient1) + burger.add_ingredient(ingredient2) + + burger.move_ingredient(0, 1) + assert burger.ingredients[0] == ingredient2 + assert burger.ingredients[1] == ingredient1 + + # Получение цены бургера + def test_get_burger_price(self, burger, bun_mock, ingredient_mock, ingredient_mock_filling): + + burger.set_buns(bun_mock) + burger.add_ingredient(ingredient_mock) + burger.add_ingredient(ingredient_mock_filling) + # (1000 * 2) + 50 + 750 = 2800 + assert burger.get_price() == 2800 + + # Получение чека + @patch('praktikum.burger.Burger.get_price') + def test_get_receipt(self, mock_get_price, burger, bun_mock, ingredient_mock): + + mock_get_price.return_value = 2050 # (1000 * 2) + 50 = 2050 + # Сборка бургера + burger.set_buns(bun_mock) + burger.add_ingredient(ingredient_mock) + receipt = burger.get_receipt() + # Проверка содержимого чека + assert '(==== Каменная булка ====)' in receipt + assert '= sauce Тестовый соус =' in receipt + assert 'Price: 2050' in receipt + + + +class TestIngredient: + + # Создание ингредиента с параметризацией + @pytest.mark.parametrize("ingredient_type, name, price", [ + (INGREDIENT_TYPE_SAUCE, "Кетчунез", 70), + (INGREDIENT_TYPE_SAUCE, "Сладкий чили", 80), + (INGREDIENT_TYPE_FILLING, "Котлета", 950), + (INGREDIENT_TYPE_FILLING, "Огурчики", 40) + ]) + def test_ingredient_create(self, ingredient_type, name, price): + + ingredient = Ingredient(ingredient_type, name, price) + assert ingredient.get_type() == ingredient_type + assert ingredient.get_name() == name + assert ingredient.get_price() == price + + # Получение цены ингредиента + def test_ingredient_get_price(self, ingredient): + assert ingredient.get_price() == 99 + + # Получение названия ингредиента + def test_ingredient_get_name(self, ingredient): + assert ingredient.get_name() == "Острый соус" + + # Получение типа ингредиента + def test_ingredient_get_type(self, ingredient): + assert ingredient.get_type() == INGREDIENT_TYPE_SAUCE + +