From a53301277bc869b7137b767b90523fc41224f90b Mon Sep 17 00:00:00 2001 From: mex613 Date: Sat, 1 Aug 2026 20:37:03 +0300 Subject: [PATCH] version1 --- .coverage | Bin 0 -> 53248 bytes .gitignore | 13 ++ __init__.py => praktikum/__init__.py | 0 bun.py => praktikum/bun.py | 0 burger.py => praktikum/burger.py | 0 database.py => praktikum/database.py | 0 ingredient.py => praktikum/ingredient.py | 0 .../ingredient_types.py | 0 praktikum.py => praktikum/praktikum.py | 0 requirements.txt | 2 + tests/conftest.py | 19 +++ tests/data.py | 8 ++ tests/test_burger.py | 119 ++++++++++++++++++ 13 files changed, 161 insertions(+) create mode 100644 .coverage create mode 100644 .gitignore rename __init__.py => praktikum/__init__.py (100%) rename bun.py => praktikum/bun.py (100%) rename burger.py => praktikum/burger.py (100%) rename database.py => praktikum/database.py (100%) rename ingredient.py => praktikum/ingredient.py (100%) rename ingredient_types.py => praktikum/ingredient_types.py (100%) rename praktikum.py => praktikum/praktikum.py (100%) create mode 100644 requirements.txt create mode 100644 tests/conftest.py create mode 100644 tests/data.py create mode 100644 tests/test_burger.py diff --git a/.coverage b/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..2a2b56cce9ea9353796fb8f5f05d7d5dbe3b896b GIT binary patch literal 53248 zcmeI)&2Jk;7zf~8JGE=a(FT>sN~0=sL1|RS#i|fc4iMT%v{ZsZi#SBMV|$!z6r`1o{&(*sXg$%JG=f!zkJCKm1ujuBSUe5@KzM4C3t(CS)|IYqgdZ%!8*3MT7RXTwU0uX=z1YQ||-sMuhytruI{yLP6jtYI* zRKC8SJNMbf`jriFW&OiT8$urwCyRo%wKcIWeD9X%DqpnijuN)pvYRrr-7OJrt2A{K zs1~nTbc|LlPFRie^IqL2cGO-aPLNzJRJ)-*K!qrK%jFc}WRiVV z_^PdZ}~NNwoApeh&IR8Z6NTO57Emu_=g z1r;ItHEenm=WeKL>wC`W&=VcojjQPfc4&L9P`j!bg{pOE1uKk}ZiF{n8!GD>SLm9~ znOti~XOQ`joJsN|bDM&5y_9v3kuOb|NR?T;9-2D*N1R zb4Xhb>O0b$DLJ>O&K0@#jY#zyzaj=XD{(bkuOhe-)C1m_&6VFhW*XEh)oyU3Loc1` zG77!;d7T=+UZcCxo!5@$%gf8=-5YU7VV-)!4uk$qVWiXa50B|Oe13et;ZZW$Nq7`> zI>KwmLxyt;-8j^nhsVt66hrzv(1e#Hq)1>(KOWDqn7?YI0Uj3op7OQP-&za^;QXab2h11?si_Zn3wR%a@my%-e;y8zrrk zJmg2ZP}-7*Orz;3N68@a(~0C+lVqA>FiWOmBsoLXSr3ORlccNHlAWWy{7k;Q zuweG|h~RmNZ%0Nd!AAx|;J`xg{NZ?Bqf#&FAC%S%TMF($!pIb zUR}W8d1_CoR^#L}yg&7Vz@}xDm#yGzdQ_}z%YbL0U_~@MucM@^*9OXQA)ss8frw*x zdR2OVP)4xFWo+GCiDOC^7oO&?(4b4l7wtHXbX&=K#mlfRmF9jPoO~TUiBLwdLW44( zA$p+9w9w=%&sb^s)h?NEsg7*v;m(aRRN}2|^;B_sH99Xt721vxoFon=?pU{EAez3S zlgU~d2S#Gs2cy!(d_-r`IaJqXbtU_(zQaviukk& zK(7QGnbtLVni=U?2Tl$;*(Wqh(@Uh`&c)zEhWu1tfoDYB>PbV?8viht_{DWd#v51Rwwb z2tWV=5P$##AOHafKmY=Lfl~H_nf@9eQ_L%1JKmY;|fB*y_ z009U<00Izzz!V5vG-r(7;<>Y%R|EQ5h0Xn6_U}Eo{oscOKkomz|HuBl&93iVSIsck zJa2b9o|8P(Yji^Hg!WG4Y&IgFz8{IcWPv~bH?7|c`oRVP2tWV=5P$##AOHafKmY;| zfWR~fT%74G7AEulAK(8sO%01!AOHafKmY;|fB*y_009U<00I*i$eLMWPJjOY#IT-B zynGZ00SG_<0uX=z1Rwwb2tWV=5P-lG2xPN!1^xN|Bg1+$1py%h2tWV=5P$##AOHaf zKmY;|fB*z0B`|Bw6bi?G>izZmua2od|9@;)k0(_;%7Fj`AOHafKmY;|fB*y_009U< zV2T80=+^-8=l{n16h(zlAOHafKmY;|fB*y_009U<00I!0xB!3tkN5u*XGMV!fB*y_ y009U<00Izz00bZafvFPU|NqDP|EX#c1OovGKmY;|fB*y_009U<00I!0xWNCBqkCEa literal 0 HcmV?d00001 diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..55ec5e02f --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +__pycache__/ +.pytest_cache/ +allure-results/ +allure-report/ + +*.pyc +*.pyo +*.pyd + +.idea/ +.vscode/ + +.env 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 100% rename from burger.py rename to praktikum/burger.py 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/praktikum.py b/praktikum/praktikum.py similarity index 100% rename from praktikum.py rename to praktikum/praktikum.py diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..65a06064d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pytest==9.0.3 +pytest-cov==7.1.0 \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 000000000..4258dadde --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,19 @@ +from unittest.mock import Mock + +import pytest + +from praktikum.burger import Burger + + +@pytest.fixture +def burger(): + return Burger() + + +@pytest.fixture +def bun(): + bun = Mock() + bun.get_name.return_value = 'black bun' + bun.get_price.return_value = 100 + return bun + \ No newline at end of file diff --git a/tests/data.py b/tests/data.py new file mode 100644 index 000000000..0fe563906 --- /dev/null +++ b/tests/data.py @@ -0,0 +1,8 @@ +BUN_NAME = 'black bun' +BUN_PRICE = 100 + +SAUCE_NAME = 'hot sauce' +SAUCE_PRICE = 20 + +FILLING_NAME = 'cutlet' +FILLING_PRICE = 50 diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..0c990b387 --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,119 @@ +from unittest.mock import Mock + +import pytest + +from praktikum.ingredient_types import ( + INGREDIENT_TYPE_FILLING, + INGREDIENT_TYPE_SAUCE +) + +from tests.data import ( + BUN_NAME, + SAUCE_NAME, + SAUCE_PRICE, + FILLING_NAME, + FILLING_PRICE +) + + +class TestBurger: + + def test_set_buns_sets_bun(self, burger, bun): + burger.set_buns(bun) + + assert burger.bun == bun + + def test_add_ingredient_adds_ingredient_to_list(self, burger): + ingredient = Mock() + + burger.add_ingredient(ingredient) + + assert ingredient in burger.ingredients + + def test_remove_ingredient_removes_ingredient_from_list(self, burger): + ingredient = Mock() + + burger.add_ingredient(ingredient) + burger.remove_ingredient(0) + + assert ingredient not in burger.ingredients + + def test_remove_ingredient_with_invalid_index_raises_index_error( + self, + burger + ): + with pytest.raises(IndexError): + burger.remove_ingredient(0) + + def test_move_ingredient_changes_order_of_ingredients(self, burger): + ingredient_1 = Mock() + ingredient_2 = Mock() + + burger.add_ingredient(ingredient_1) + burger.add_ingredient(ingredient_2) + + burger.move_ingredient(0, 1) + + assert burger.ingredients == [ingredient_2, ingredient_1] + + def test_move_ingredient_with_invalid_index_raises_index_error( + self, + burger + ): + with pytest.raises(IndexError): + burger.move_ingredient(0, 1) + + @pytest.mark.parametrize( + 'ingredient_prices, expected_price', + [ + ([], 200), + ([50], 250), + ([50, 30], 280) + ] + ) + def test_get_price_returns_correct_price( + self, + burger, + bun, + ingredient_prices, + expected_price + ): + burger.set_buns(bun) + + for price in ingredient_prices: + ingredient = Mock() + ingredient.get_price.return_value = price + burger.add_ingredient(ingredient) + + assert burger.get_price() == expected_price + + def test_get_receipt_returns_correct_receipt( + self, + burger, + bun + ): + burger.set_buns(bun) + + sauce = Mock() + sauce.get_type.return_value = INGREDIENT_TYPE_SAUCE + sauce.get_name.return_value = SAUCE_NAME + sauce.get_price.return_value = SAUCE_PRICE + + filling = Mock() + filling.get_type.return_value = INGREDIENT_TYPE_FILLING + filling.get_name.return_value = FILLING_NAME + filling.get_price.return_value = FILLING_PRICE + + burger.add_ingredient(sauce) + burger.add_ingredient(filling) + + expected_receipt = ( + f'(==== {BUN_NAME} ====)\n' + f'= sauce {SAUCE_NAME} =\n' + f'= filling {FILLING_NAME} =\n' + f'(==== {BUN_NAME} ====)\n\n' + 'Price: 270' + ) + + assert burger.get_receipt() == expected_receipt + \ No newline at end of file