From 0c2aec171a1e29f806eb53c70e5b029c83c14ab5 Mon Sep 17 00:00:00 2001 From: Aleksey Rogozhnikov Date: Tue, 6 Jan 2026 18:09:43 +0500 Subject: [PATCH 1/2] Diplom_1 --- .coverage | Bin 0 -> 53248 bytes .gitignore | 1 + README.md | 15 ++++++++++---- __init__.py | 0 burger.py | 4 ++-- conftest.py | 36 ++++++++++++++++++++++++++++++++ database.py | 6 +++--- praktikum.py | 8 ++++---- requirements.txt | Bin 0 -> 276 bytes test_burger.py | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 109 insertions(+), 13 deletions(-) create mode 100644 .coverage create mode 100644 .gitignore delete mode 100644 __init__.py create mode 100644 conftest.py create mode 100644 requirements.txt create mode 100644 test_burger.py diff --git a/.coverage b/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..60d30dd8c70232bcd59d587e98e5f016cc8b82d5 GIT binary patch literal 53248 zcmeI4TWBO%8ON(qnLb@fr%tk+Nl)jpeJ0s#cW%AY%!9fs=(rnjadBOp^}-JJRCg*# zX?Itqs(LQSB3TDU6d!!h2Niq}!H0#_2SE`85fKDYa76+>7#*2qBntyBGPn}IbLvz& znVBrJ`?6%`UvyXhtInmq?{~g)PMuVzKlR)*e(Z_WAZ)v_IBg6YrfGaw2*WUJdJoY% z-581f^ngCiefltI8`ZCk4)ISLxy)w`{`sMCzLZFLQ1`l{cCwi_ty-F1|gK$M!-w54KbKQ#;g}dirGax%J$BDOL(0(iqM9c3eH#?CZ z`$0!|m%U~;_Ezrc;G%?CpM4q`uZZI=#a8D5+Ha^W~QtmI*3<3Kxm-)(b`w(R+PpgB|IvPF|p-Hv~u>+LoE zqUe=eRBm*FMIoJ_2$&tr6h4qQ4T?(da&)0Zw@!7p8wcvRPK{r$(Jps&B+Ck=l6mcd z3KWT_-tgmSPuK^7X7BVNp(E1|j~m%b4hD(rMXi6wUkl%ws7GHjHO71ovAOyP;+hZ!zSsMq8^b9J~+nfz5t(QnhBFW=SyljWJ7$shBsEM0V4 zG@5LP#!usdB_h>#uGQ6IpB9 zT}isTY?OU9URw9=sxFz0o^oR^_S>G2S(GsbX=IM#R?dv?{6Qqm+`4 zp@}zhW$UeCM>cW2CiilcoRzn7nM6m)!G1g)yH2m_-p))Bk3TF1_2NN0T2KI5C8!X009sH0T2KI z5ZEJ-v!=}S&j5V`)`YG93XpvN|5by(x|bCK1V8`;KmY_l00ck)1V8`;KmY_l;0O?y zH!b6ZCm%oed_=#xaE^W}DLnU-ztIZX`lDVu*XV}y`$+U73-bBD$^UH73mXW400@8p z2!H?xfB*=900@8p2!Oy*A~0{gVBhEZAHV;1lo}Scf&d7B00@8p2!H?xfB*=900@A< z+a_Sq*93-==l^dS{LQyr9tA)E1V8`;KmY_l00ck)1V8`;KmY`e00GMyvgPxCWB3Rd z3ll*A1V8`;KmY_l00ck)1V8`;KmY{ZF#-AfAM5{jj1L7t00ck)1V8`;KmY_l00ck) z1VG?O5RlLRE6#Te{vZB2|0n+|{}cZm{}ulk|1tj&|33dV{|3Lxzr;iC^Yi>O{NsF? ze~_Q%^ZX<~!8y-3|8xHB{LA^fv*rBJ`K|Ly=cmrg&JU$#PlqiO2iDCR6NSt zifmMg(H)joB0t6+Qexy58&P6-gbgdf^NcHz<;+onW!X?7c3Dn|e#Qosu=+CtBy7{l z*z$zE%d#rrHe*bQTf;1)#Lg%?ro_zx>sR8&IJ1yv>{ZbNpFa`#-^Jyv(O~p4-l@^9HT_x1GN@zjuD^ z{M>oP`JwY&=bO$o=S8Xz8wh{^2!H?xfB*=900@8p2!OzYPQcE{bv-TYD_T`gm9<)` zKC0Ei{H#{#VMeRU{Ipi(+b6Y}-4F~6(TeAXwaRj?70WuQ+8xrW zpXIc&`UkVbieOm-Qkb^6YwNVzEUOi*{I%K{&1iL#{zQ>bzA@gf)%7V$t8LMzsx$4a i3jY89LGO<69|S-E1V8`;KmY_l00ck)1VG?HAn<>LT*C + +## Студент: Рогожников Алексей + +## Когорта: #32 +
### Автотесты для проверки программы, которая помогает заказать бургер в Stellar Burgers ### Реализованные сценарии -Созданы юнит-тесты, покрывающие классы `Bun`, `Burger`, `Ingredient`, `Database` +Созданы юнит-тесты, покрывающие класс `Burger` Процент покрытия 100% (отчет: `htmlcov/index.html`) ### Структура проекта -- `praktikum` - пакет, содержащий код программы -- `tests` - пакет, содержащий тесты, разделенные по классам. Например, `bun_test.py`, `burger_test.py` и т.д. +- `praktikum`, `bun`,`burger`, `database`, `ingredient`.. - файлы, содержащие код программы +- `test_burger` - файл с тестами, покрывающий класс Burger +- `conftest` - файл с фикстурами ### Запуск автотестов diff --git a/__init__.py b/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/burger.py b/burger.py index 2b3b6a88b..3f71aaa29 100644 --- a/burger.py +++ b/burger.py @@ -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: diff --git a/conftest.py b/conftest.py new file mode 100644 index 000000000..3d2f1bd89 --- /dev/null +++ b/conftest.py @@ -0,0 +1,36 @@ +import pytest +from unittest.mock import Mock +from burger import Burger +from ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + + +# Мок булочки +@pytest.fixture +def mock_bun(): + mock_bun = Mock() + mock_bun.get_name.return_value = "red bun" + mock_bun.get_price.return_value = 300 + return mock_bun + +# Мок соуса +@pytest.fixture +def mock_sauce(): + mock_sauce = Mock() + mock_sauce.get_price.return_value = 200 + mock_sauce.get_name.return_value = "sour cream" + mock_sauce.get_type.return_value = INGREDIENT_TYPE_SAUCE + return mock_sauce + +# Мок начинки +@pytest.fixture +def mock_filling(): + mock_filling = Mock() + mock_filling.get_price.return_value = 200 + mock_filling.get_name.return_value = "dinosaur" + mock_filling.get_type.return_value = INGREDIENT_TYPE_FILLING + return mock_filling + +# Создаем объект бургера +@pytest.fixture +def burger(): + return Burger() diff --git a/database.py b/database.py index 4c75baf71..84d3685d0 100644 --- a/database.py +++ b/database.py @@ -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: diff --git a/praktikum.py b/praktikum.py index ec522fa6d..88b77abd1 100644 --- a/praktikum.py +++ b/praktikum.py @@ -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(): diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..bfc2333d3d950309d6d92baeed845784e3e5ca13 GIT binary patch literal 276 zcmZXPT?)c55C*?z!J{Zm)rt?^!7G#!gIKF*6?%E=?AjJV!X_az*`NMh>8hHztJH%H2-ul%r#D9*0;|O$)za_ literal 0 HcmV?d00001 diff --git a/test_burger.py b/test_burger.py new file mode 100644 index 000000000..9831bd0b8 --- /dev/null +++ b/test_burger.py @@ -0,0 +1,52 @@ +import pytest + + + +class TestBurger: + + # Проверка наличия булочки в бургере + def test_set_buns_in_burger(self, mock_bun, burger): + burger.set_buns(mock_bun) + assert burger.bun == mock_bun + + # Проверка добавления ингредиента(соуса) в бургер + def test_add_ingredient_in_burger(self, mock_sauce, burger): + burger.add_ingredient(mock_sauce) + assert burger.ingredients == [mock_sauce] + + # Проверка удаления ингредиента(начинки) из бургера с параметризацией + @pytest.mark.parametrize("ingredient", ["sauce", "filling"]) + def test_remove_ingredient_in_burger(self, burger, ingredient): + burger.add_ingredient(ingredient) + burger.remove_ingredient(0) + assert burger.ingredients == [] + + # Проверка перемещения ингредиентов в бургере + def test_move_ingredient_in_burger(self, mock_sauce, mock_filling, burger): + burger.add_ingredient(mock_sauce) + burger.add_ingredient(mock_filling) + burger.move_ingredient(0, 1) + assert burger.ingredients[0] == mock_filling + + # Проверка стоимости бургера + def test_get_price_burger(self, mock_bun, mock_sauce, mock_filling, burger): + burger.set_buns(mock_bun) + burger.add_ingredient(mock_sauce) + burger.add_ingredient(mock_filling) + assert burger.get_price() == 1000 + + # Проверка чека с информацией о бургере + def test_get_receipt_in_burger(self, mock_bun, mock_sauce, mock_filling, burger): + burger.set_buns(mock_bun) + burger.add_ingredient(mock_sauce) + burger.add_ingredient(mock_filling) + receipt = burger.get_receipt() + expected_receipt = ( + f"(==== {mock_bun.get_name()} ====)\n" + f"= {str(mock_sauce.get_type()).lower()} {mock_sauce.get_name()} =\n" + f"= {str(mock_filling.get_type()).lower()} {mock_filling.get_name()} =\n" + f"(==== {mock_bun.get_name()} ====)\n" + f"\nPrice: {mock_bun.get_price() * 2 + mock_sauce.get_price() + mock_filling.get_price()}" + ) + assert receipt == expected_receipt + From a7d4da39d1e99511bdac3bfc746972290152a445 Mon Sep 17 00:00:00 2001 From: Aleksey Rogozhnikov Date: Sun, 18 Jan 2026 00:38:04 +0500 Subject: [PATCH 2/2] diplom1 --- test_burger.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test_burger.py b/test_burger.py index 9831bd0b8..2f8a05d34 100644 --- a/test_burger.py +++ b/test_burger.py @@ -15,7 +15,7 @@ def test_add_ingredient_in_burger(self, mock_sauce, burger): assert burger.ingredients == [mock_sauce] # Проверка удаления ингредиента(начинки) из бургера с параметризацией - @pytest.mark.parametrize("ingredient", ["sauce", "filling"]) + @pytest.mark.parametrize("ingredient", ["INGREDIENT_TYPE_SAUCE", "INGREDIENT_TYPE_FILLING"]) def test_remove_ingredient_in_burger(self, burger, ingredient): burger.add_ingredient(ingredient) burger.remove_ingredient(0) @@ -24,7 +24,7 @@ def test_remove_ingredient_in_burger(self, burger, ingredient): # Проверка перемещения ингредиентов в бургере def test_move_ingredient_in_burger(self, mock_sauce, mock_filling, burger): burger.add_ingredient(mock_sauce) - burger.add_ingredient(mock_filling) + burger.add_ingredient(mock_filling) burger.move_ingredient(0, 1) assert burger.ingredients[0] == mock_filling