From a74022d029f13bf46250f97631d7eb16a8c8a3e0 Mon Sep 17 00:00:00 2001 From: Anastasia Vorobeva Date: Sun, 6 Sep 2026 13:35:05 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A4=D0=B8=D0=BD=D0=B0=D0=BB=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=201:=20=D0=A1=D0=BE=D0=B7=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=B0=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83?= =?UTF-8?q?=D1=80=D0=B0=20=D0=BF=D0=BE=20=D0=A2=D0=97,=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B0=D1=82=D0=BE?= =?UTF-8?q?=D0=BC=D0=B0=D1=80=D0=BD=D1=8B=D0=B5=20=D1=8E=D0=BD=D0=B8=D1=82?= =?UTF-8?q?-=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D1=81=20=D0=BC=D0=BE=D0=BA?= =?UTF-8?q?=D0=B0=D0=BC=D0=B8=20=D0=B8=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D1=80=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B5=D0=B9,?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BA=D1=80=D1=8B=D1=82=D0=B8=D0=B5=20100%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .coverage | Bin 0 -> 53248 bytes .idea/.gitignore | 5 ++ .idea/Diplom_1.iml | 14 +++ .../inspectionProfiles/profiles_settings.xml | 6 ++ .idea/misc.xml | 7 ++ .idea/modules.xml | 8 ++ .idea/vcs.xml | 6 ++ .../test_bun.cpython-313-pytest-9.1.0.pyc | Bin 0 -> 2942 bytes .../test_burger.cpython-313-pytest-9.1.0.pyc | Bin 0 -> 11449 bytes praktikum.py | 41 --------- __init__.py => praktikum/__init__.py | 0 .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 154 bytes praktikum/__pycache__/bun.cpython-313.pyc | Bin 0 -> 1079 bytes praktikum/__pycache__/burger.cpython-313.pyc | Bin 0 -> 3237 bytes .../__pycache__/database.cpython-313.pyc | Bin 0 -> 2446 bytes .../__pycache__/ingredient.cpython-313.pyc | Bin 0 -> 1401 bytes .../ingredient_types.cpython-313.pyc | Bin 0 -> 382 bytes 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 requirements.txt | Bin 0 -> 1186 bytes tests/__init__.py | 0 tests/__pycache__/__init__.cpython-313.pyc | Bin 0 -> 150 bytes .../bun_test.cpython-313-pytest-9.1.0.pyc | Bin 0 -> 3413 bytes .../burger_test.cpython-313-pytest-9.1.0.pyc | Bin 0 -> 11455 bytes ...database_test.cpython-313-pytest-9.1.0.pyc | Bin 0 -> 6622 bytes ...gredient_test.cpython-313-pytest-9.1.0.pyc | Bin 0 -> 4885 bytes tests/bun_test.py | 34 +++++++ tests/burger_test.py | 84 ++++++++++++++++++ tests/database_test.py | 30 +++++++ tests/ingredient_test.py | 43 +++++++++ 33 files changed, 237 insertions(+), 41 deletions(-) create mode 100644 .coverage create mode 100644 .idea/.gitignore create mode 100644 .idea/Diplom_1.iml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 __pycache__/test_bun.cpython-313-pytest-9.1.0.pyc create mode 100644 __pycache__/test_burger.cpython-313-pytest-9.1.0.pyc delete mode 100644 praktikum.py rename __init__.py => praktikum/__init__.py (100%) create mode 100644 praktikum/__pycache__/__init__.cpython-313.pyc create mode 100644 praktikum/__pycache__/bun.cpython-313.pyc create mode 100644 praktikum/__pycache__/burger.cpython-313.pyc create mode 100644 praktikum/__pycache__/database.cpython-313.pyc create mode 100644 praktikum/__pycache__/ingredient.cpython-313.pyc create mode 100644 praktikum/__pycache__/ingredient_types.cpython-313.pyc 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%) create mode 100644 requirements.txt create mode 100644 tests/__init__.py create mode 100644 tests/__pycache__/__init__.cpython-313.pyc create mode 100644 tests/__pycache__/bun_test.cpython-313-pytest-9.1.0.pyc create mode 100644 tests/__pycache__/burger_test.cpython-313-pytest-9.1.0.pyc create mode 100644 tests/__pycache__/database_test.cpython-313-pytest-9.1.0.pyc create mode 100644 tests/__pycache__/ingredient_test.cpython-313-pytest-9.1.0.pyc create mode 100644 tests/bun_test.py create mode 100644 tests/burger_test.py create mode 100644 tests/database_test.py create mode 100644 tests/ingredient_test.py diff --git a/.coverage b/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..961e77219d3c51fe08b57698ebe278a12eed9bee GIT binary patch literal 53248 zcmeI)+iw(A90%~3o!!~)cH2`$+?0m&yqMC^7B`xJ1p^goB%*?X@u6{;-92r`?#wK6 zfi}c6i$st=!T2xu>K}kU8htY+JYY02yht?B2ZIm(&Rq6Vx`ZVmQ1YF0cjxvyd(P+F zc6Ph_!I@K5Ao#ND*=E3BQN|QiRgQ74C`y5DBXmobJgsEY4SH0&*88m%l(`!(jIa-t zlKzpxJ|5Y_W=kujzlOgm9V(m~w(>KDIXZv^0uX=z1fCgz)|pbiJU*^o`7|)A4H0-| zO?dJB$np0V7tSv7vkPyWTIBIQzOTq>nVsbe+;cDSrttW()ezir>Q>DREN6uWt0Fx+ z^hI6HS+tL4EqUTx6ff5dt4>jYSfM1Eo@JZf2452!Gtmjjvjt*3h<8vT!dh|U8GK(7 zKFvL`EIi@VgdgW(pH-hOPJgyp%$IlVQm=`qOr}?(zu}(J(2h<~PA*eIHP@@l+*du* zsjUishMVmY)?CWxdJvb^bL|6x%Nv#x71Qypz;Ycf)`uXg6i$P(=L1f!i;#Uu@te zg?;F{*`_W#!6zl$l z2EBAL%rJ1HZG$S`sL);M>T^T+^5mp??LyR0B#%+G0>8ad=xH?V-F=#lJl?$AB+>639SHxU$G#(b7bVH)1Qz_`>#mRn6r`-gMN_(}~8rSpXi3#;e zA!0AA0FP@}NO7jp&S$X&*_BP;qASdU;`@UvZN2j7qXH z)XHb`<=wm0R@@`xxFm16oDw8 z`qi;al;!JMq;J!pFK=2;mgSyKmfsc|vlq<14C&hC$SR zH_s>d4J8AeEGL4msQ&FDM$wdzHXQ|Vr{fky?+jQ#5d?lyhI8_?^W#^R7 z6AvO3$fu}N`qV|Yq?sm~9F-$hn*LmqOk}FIS&zHBtdy=4FRhCEl8a}f6J{U+%NAUo z5@jZ8SeHzn*E~T7lesj?7>TWJ%~hPtTXZBHL*vp+PiYToJF<$6ioBOs$wTs`Tx(Lz zm-p{iTVc|J6L(Ore#ewGd(S9%fU_~dyhtGdWqECxFmR&q1=q0L5_%VwO3=h z^sM9sQgK>d;H&JOLVs8w009U<00Izz00bZa0SG_<0uXri1T;0H=H>N&hW( z?4KQ3Kx7&M5P$##AOHafKmY;|fB*y_0D-nZN!zQYZv$kC+C(9F7eIdgua90+*iH5Y zdxw=qf1nL45P$##AOHafKmY;|fB*y_0D;FNu&8I17CSz_bk3(=3RpUQeCdSn*8;b> zbi!&jTswI%DoahzTnntV&|acn)uErWu!IvB!A4W~^pgQca+00Izz00bZa0SG_<0uXpi0&iwpOdagXuk0uGJ#Aot00bZa0SG_<0uX=z1Rwwb2teSe6VUanS{T)D4&~_a z`K<0v6tlGUVs8GoyN*`UXnl|NW$V^AU)yRvLtA5+&u`__Y@sl!M&JKuKP&7W`veAR4MGu)wmfiq} zKL1z7c0`eoNeDmy0uX=z1Rwwb2tWV=5P$##9#KGk{*UYbN5n%I1Rwwb2tWV=5P$## sAOHafKwyUm$nXE-`hSO17P1Ke2tWV=5P$##AOHafKmY;|ctnB!0cNFP9RL6T literal 0 HcmV?d00001 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 000000000..b58b603fe --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/Diplom_1.iml b/.idea/Diplom_1.iml new file mode 100644 index 000000000..67e1d0e20 --- /dev/null +++ b/.idea/Diplom_1.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 000000000..105ce2da2 --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 000000000..391ef09ff --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 000000000..2cbdfb84d --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..35eb1ddfb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/__pycache__/test_bun.cpython-313-pytest-9.1.0.pyc b/__pycache__/test_bun.cpython-313-pytest-9.1.0.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5b3fcbdbe3be94122e8bbfcedc7feefa7adca4cf GIT binary patch literal 2942 zcmd^B-)|H}9H0Glw|D&&N-=;yE=X-R)}vsH2%e%;Ath0{ z+T({PLP$g&>Vt_155D+@4-f<5->@4%$RtJ*pNKEYnV9(GcXoH~uGnZA@yW?%=KFg- z^PTVPOtYsaji4Rd|Ha!$5uu+L!oZvW~9sG5SKNQDhrx&pOLR=0+n8_*Gi1xO^JzS5r}0}45uQZE)c0G z=R=s>G#c|gD|yE0;!c?MsK6)H<;`e3HX})0A!<3HC28`Q>3RU*KAUv0t7cTqk&Hts zB~z0%vAz|g{^!9-|8nqw{~e4sfVzgTJjNd+k%r=4rrXisc!Wy3BMgnfrWHa8rb91>8_}?-LLo6G=;GATF>yS$)um~b+pe}#?OFGO+3e#hX6fdh?QuIQNaOLkI6C98 z6<)n%q>Ju;GDt zrVd+)F=6i~@+9k?U>$png&iZ@r=UB7?kQa#PoJ8;qihM3EqB!o4@4!EZYpXb@oT@V z3^&&U)nrr@hk0sgs`B$h;MsuaCLH0*Mnw*%B1_D7NyRg1swJYySVq`oM@E=qk3)=k zuQFe+W}#NYgB_tN11wou-7Jgy11L5`$ZB2;YWl%M5lXxKwE!L^a;Zc5Og8f FKLI`DV;BGc literal 0 HcmV?d00001 diff --git a/__pycache__/test_burger.cpython-313-pytest-9.1.0.pyc b/__pycache__/test_burger.cpython-313-pytest-9.1.0.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb7378efb1301b1109b9788a71e280b9fdb53989 GIT binary patch literal 11449 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 literal 0 HcmV?d00001 diff --git a/praktikum.py b/praktikum.py deleted file mode 100644 index ec522fa6d..000000000 --- a/praktikum.py +++ /dev/null @@ -1,41 +0,0 @@ -from typing import List - -from praktikum.bun import Bun -from praktikum.burger import Burger -from praktikum.database import Database -from praktikum.ingredient import Ingredient - - -def main(): - # Инициализируем базу данных - database: Database = Database() - - # Создадим новый бургер - burger: Burger = Burger() - - # Считаем список доступных булок из базы данных - buns: List[Bun] = database.available_buns() - - # Считаем список доступных ингредиентов из базы данных - ingredients: List[Ingredient] = database.available_ingredients() - - # Соберём бургер - burger.set_buns(buns[0]) - - burger.add_ingredient(ingredients[1]) - burger.add_ingredient(ingredients[4]) - burger.add_ingredient(ingredients[3]) - burger.add_ingredient(ingredients[5]) - - # Переместим слой с ингредиентом - burger.move_ingredient(2, 1) - - # Удалим ингредиент - burger.remove_ingredient(3) - - # Распечатаем рецепт бургера - print(burger.get_receipt()) - - -if __name__ == "__main__": - main() diff --git a/__init__.py b/praktikum/__init__.py similarity index 100% rename from __init__.py rename to praktikum/__init__.py diff --git a/praktikum/__pycache__/__init__.cpython-313.pyc b/praktikum/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b80c0383a2c251a33da741eea39753544ae05f54 GIT binary patch literal 154 zcmey&%ge<81VJWqvq1D?5CH>>P{wB#AY&>+I)f&o-%5reCLr%KNa~iQvsFxJacWU< zOn`HYOKNd;Nq#|$OJ+e%elC=XH;gGLO3W_F%r4E1iI30B%PfhH*DI*J#bJ}1pHiBW YYFESxGznx=F^KVznURsPh#ANN05xePP5=M^ literal 0 HcmV?d00001 diff --git a/praktikum/__pycache__/bun.cpython-313.pyc b/praktikum/__pycache__/bun.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f6f941a2e5b56060b0938d0bb3f275be3a68729 GIT binary patch literal 1079 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 literal 0 HcmV?d00001 diff --git a/praktikum/__pycache__/ingredient.cpython-313.pyc b/praktikum/__pycache__/ingredient.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..784575e317c67d5b3c8fd6339bf6daca0ce5f617 GIT binary patch literal 1401 zcmbtUO-vI(6rSzww%eryv|!qL*$5^yF+?L=(0Bn4UWj3X>0y&eElabov~_lSC?~)K zLxS-{!a+}7z1SyEWci~)+6nm`&L6;NEDcpK>g>1H46D<-o2q5h;)WcGq%m;4_R zgsOf6rSrG^gzxhMeiUpQ{E#2>Pr(|%eXtMsaj?Pb<2v8{lbp)|TW97yBY4ch_xCjF2MPlV-DW zsGw(t<6<#TStV3F+g)TTGF{rkXa-35V0y}$_iW}_Pp7RJ+gtX_6>G++xaF1hLho4> zmS6UrYn5whHUPv`k`dj#j;=4HqG3=m=Zh`skb`i#*-NChRpVOf%8B4lpZzrv z@$4=qf@Bh};QxULo|St~g`v0EYyyXkb-=K7N>|DYRTu39r7x;^x4kn!>7v6t-*rlM zsSMjON*BrnFl5hXp}Odn^FG7&GZFCyS~%)(m{QNr`%Z!8eV;kctG?|~y4T7_OqJog z5DMGtJqEQ&enu2kYb0d#<_Eb!V5#31%VG5lQA3y1%+ q_??9pC4!7%Bzz97=cGMsmHUX@22MoB&4w&V(s?8)rGF7n;=*ra&VXS6 literal 0 HcmV?d00001 diff --git a/praktikum/__pycache__/ingredient_types.cpython-313.pyc b/praktikum/__pycache__/ingredient_types.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..545d93ac29046c741f01a42941b133e329a07be0 GIT binary patch literal 382 zcmey&%ge<81VJWqvyK4i#~=<2FhUuh1%QmH48aUV48e>=jKNGrOzF&;ETu(2VXh1F zFKoTo0L1MVc3f<{u=~Q+3wtl@xUf~>Vxz*vCLnA7g$)<>T-c!iWbVDN8Km^W7LbAq zdx6sXE^N}{3U&;2c2#)PFd3-l!oG{m7aO_UJbipT{oKKVKy4d9rUU6+7dCL+Vg;+e z#ST^Dr^$SaJw84qKRG`BmMBnDkgJQQt6xZbNMwL(JVdQHx-eAlN`}uMKi+b5wu%WY zPAw{q32=^aNiEJU$uEd;$t=jp&xKO)hA{<2iPKLnR)3&sVSMMc_r~Bl?AEA zdIgoYIBatBQ%ZAE?TSDF3JSVn2_W%-nURt4BNGcF%Lgt7NrejxqBo?JFEWT1aR4O& D+$)e! literal 0 HcmV?d00001 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/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..617d627c710488e56ea16b26904cb1d0f476065a GIT binary patch literal 1186 zcmZ`&?M{P05ZvD;J_=1KwY5Kd2NNH_Agz>W0RgM^;nkU04yYd?y_W9W?B2}W*JoR19yhL z4eEtG;^W=tn1Copt~Eo3`iMAZ*keNS@4ypbjtXxFOtbvHd5(~4(TdWHAPBklRi%C+|*g3Xq?I`eXA=OHqCl`W>6XkkW zaHi{(^}f{0>od4j$tlOy=#kkI)*QSgR@ac)E!44=(>W?9)yTza*nh%)vbciHFtOKf zu`7o{J8*Y{hvepoN6a0j;vAj<_HeD3pP%{KpgJaCTJ<~~HG}UDJscHMw?#K5wlv3* zjT-uind%p4=!qUvnaDZEFfGqwD1bbuBh#_8E3AI5R$h7TszEz2mxp5~Hw zo_D`MheW*8javJJ-g~P#J^hjH2eZsu;Q4UYp!e^2=_7l1YB)U|qVJ(gi`g5wc&@Cw F^9|0`ufYHS literal 0 HcmV?d00001 diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/__pycache__/__init__.cpython-313.pyc b/tests/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8376263bad3271063b8051b0cd7ffe879bf46b06 GIT binary patch literal 150 zcmey&%ge<81ctVAvq1D?5CH>>P{wB#AY&>+I)f&o-%5reCLr%KNa~iUvsFxJacWU< zOn`HYOKNd;Nq#|$OJ+e%elC=XH;gGsEiNgJiI30B%PfhH*DI*J#bJ}1pHiBWYFESx UGzDZ!F^KVznURsPh#ANN0CWl?jQ{`u literal 0 HcmV?d00001 diff --git a/tests/__pycache__/bun_test.cpython-313-pytest-9.1.0.pyc b/tests/__pycache__/bun_test.cpython-313-pytest-9.1.0.pyc new file mode 100644 index 0000000000000000000000000000000000000000..126fc1594d979ac63291bd397d5b6d5040d010cb GIT binary patch literal 3413 zcmeHJ-ES0C6u&b&yF0u6l1dS<;ELAn7+earh-d``g+PMRVF^h$xtVUKW$o(H_U|3+{9?&6Z(Rzi3v}hGatKCsA&Cq@@8}HIp>~_ zd(NHx-CJ*KOA{Dew44kCW-PhDIPplFL?n)^CZQNvN%78} zCFe``D5iG4X4t@D3`jVVz@S{;4+nIb48uLw zw}Wmh8<=bpMxha2DhmS+ZC;A0d+_$@590+XH*svVh&UfO?tj~ej=)-fe zw1%F|c@@dW27Hq^IDtDoHh=CiBTY!IR|SMPY9u6?TTY<_w*a!(D{44uCNzRHQ+nx_6u?@~&Co zjyO1|2nV+HWUG_?ij{sRU^0UlAV$|=}4_)*rkfa6NU*E7GFxO{btP=^-SrwVUB2qw@sd+mNuqi1m6Cl zm%n6IUS`Z>{6RWqva)7V{q3ruRWut`W>Z|UbYqM?fV+x&Ai_G3Z^6WV1#6?i(@|l- z7yP)-M1^Oq6hz5{gAZ)kSja;=tio$s3R`t+!Zxdgt);4AmV=3|Enpw40`!$4m#a?l zUavK%2^$6_+cj3PXwhU$FWU4?&8X>o%^n{UbAQqSame}{$YJu!64KH6;p3OvSDuL7 z=;%B(b#ls)drnNv9E9o2Vz;B`x*Ys2gZ^Mc@|mlkvl=?LDdEDDzc8QQ6$~Eri%1Ri zHMyq_n$jk7-1i-s};lS&`(LKoP;S+ldqB6W87+kG{J%mXDa7`gr_)vy_6t)}* zT-$_oBf<9(!?z221W5+Tqd?{&7E?gQvvc6Yi}^bM)Hg2x-N&N~Q_hb-(fvemHFS$IFE zxlFxlhEkrUv}}&n3?2AZO5dny2Hu4rbx=B1VwP=`Dtg5PMZ&+~xK!5I1aEkeAyiagFMB;5#rcKzTiCQ@aH=6el@C%w-B$uD}JNp9L j1aA0}v@po6m>>w>5%L~6+V(A3@oS=6$lfMEyv_awK#bC^ literal 0 HcmV?d00001 diff --git a/tests/__pycache__/burger_test.cpython-313-pytest-9.1.0.pyc b/tests/__pycache__/burger_test.cpython-313-pytest-9.1.0.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9b2bd0f5dafbd80b63b001b8369bdb07a2ff66d2 GIT binary patch literal 11455 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 literal 0 HcmV?d00001 diff --git a/tests/__pycache__/database_test.cpython-313-pytest-9.1.0.pyc b/tests/__pycache__/database_test.cpython-313-pytest-9.1.0.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2f5ee97ae3e63b1529108c0897077efc5f92aead GIT binary patch literal 6622 zcmeHMQEwZ^5#A$@U0Jj$M`DmLq)kbQT)A=WB7u#%h0iP!P{83ton^+< z9lLvsDi=wLq9|lE4+aVYZh-=NtA+j<(v(Bv5TFlv(pzDn2;i4wX7BcR6lhBckoH9j zYHoIRW^Qly?wgs_&Y?pY0_~fh{o|v*CkXipJF=+(vvUEM`$Q+Ya+NSeTw_<_JeDO_ zRF=r%NbG9zN{XejR~FVV^2NXXg!I z?vn*^9~RRU7T04Z2vgA~OXw=lq@Dnp(v#phm80J94U4vkL*RHZxgnu0$R?tBgt zx=$+M*ffqpvz4-P9W{2fa6DFlrSV%iHXYd8ab0mPmDRcT3319(!T5X1(jh`BNvVIG zO0IW>1&WmuB}I>aP%6cygJss$ir5O&yFT30mfSdz^EnTqrLn%d9F|(W>o}>%4J2~T za+cYK2Sc2ZC2w45v`qL->1m1`97^&=_kUB^i|C4I@O1s~76V#nu|#*Jl?OJ8I7 zqHHS9V)OHx%ALZQsm9v59MAkdV6yXB-eL1&vsO13>z08Y*boXc?>5$4_?`@t zc`qAPvtBot)nHX;rC~D58-`)fuGQU|&AnvZ0S)dQH~1~5Szi*W#&X?RH0y?Ku2^2$ z;O0#WJ$Q#NimB8b`xlHk%sXn_bl8gN8rJU`b<;Lo7=f=@wU}R@H@T({{a?8xdT}@7oSv3I0zYe;{8TJ^9zU zb^1hmrK`Qx)?VvqQ|s!N+L3#uzpSi1iE;6pzX~vSZL?kY*7EnIK`1rV;jIAh`@1MgA0$-I2GzAn7FRG>~Z64I-^S zxf%8o92RMUABc-Zj`%2pZ#K&&P~-JM@v!RHt_g`n7)UXP;NI+>fpoATJ^=qCtj}{I z=@aefy^D8OTeQ&C#@gB#FfDDYqn!q3qasLKD|BI4{2t-(X`kPsh4odR?Fg#~AE^YVG~@_F+cAGRovwwCYG;P;5aFgy%)w`d-p7ugPq$0B^70`iRyeeo^| zp4lYq#X(s{pgKM%%ivXj_MBvDZ~+%4Q~#5)Y#VcMf$9vg%dd=vYW6aqYR$4;&M?hl zN01;i%Zln)ucC@7V__A6+*h!B9LcLlb|Em0An-dlERSJU{QTG$1u zkx4wKMwx#RwC-t+QHB2tNDp8~PIX60?U7PvWM+K`OO^8-1lEa-q9AQ;qDzBchfW9} z=}BPdF`d9_C6KlIdcODzI&trOR73W_H1r3)H;SQB$ZXMx7a-C5P!=DQE0MxsaA9*$ zt{jw&@Xf!dY=ks9Bh%ztj+^CXvugQ(ngdhzI+8b#ya{Cc8)#k%l(@NU$&_^thYLvd zm8}Y_ETVdtrLwcwJ%^htX;YdeVMfgAkU zEjrWHCfnL1FfDDeqve2k2q_|vwl>p+Vexx}!#SVdqBHBC`D{m6MfgAkPcnx JDFGs;`Yritn6dx> literal 0 HcmV?d00001 diff --git a/tests/__pycache__/ingredient_test.cpython-313-pytest-9.1.0.pyc b/tests/__pycache__/ingredient_test.cpython-313-pytest-9.1.0.pyc new file mode 100644 index 0000000000000000000000000000000000000000..04e1c7b756c2ddd3d791054aee94fef38bfa3a94 GIT binary patch literal 4885 zcmeHL&2JM&6rWwM?e*HumOvn+Y3nAW!Xh|869NKIa)P)qG11aGF-ib>RGh90IlnG;Lj!Glt8KO-UwX&7wY1_!y zh4JC@Bg11?@zv{BhOu%kH#AK5ZB&0ga``go3QkCeimp&^=UCo(J7>Zx90}!xaeKbO z?g))1*UL;&_4Me9wK)e_JODHgQ(_|T1_UQ8)!wV=&7 z6}WzuMuw`Eu33)aigC8!?Htx43V$K^tKWomzl$bdO`LYEH5VFS7HDN5CycxM!qGU? z$aVRZHl}mjsf!31w+^~pE^t$j^MpUzIPBn!4R#%ui}rI0e@*S@2i(3&Xu{hisM(Ha zjQSY_oO*xVD2a_@AlTbEVZfc4mz}zIomb0?y}slir^Za0_YQkwytHS;>!}E@eWsij zdrLF*ycW#@d#&2v58$?l>#$t^>mFV)H~*7;XO4#rYu(uXSvGE z3`&b*3*0k4n@w}`7kUm>=K9m7^qtG3vMI(L^HjjNsv~JLGoxAd)|YM{OiQ;@S*P>y zv`MAL%R%J^Z}(mhXs9xGgpp&6^fPk&S&M3#8nNv0PCy7yo=8iC?RzSEBT?yWWzK@P z5vzpm!Ua{=G0`fdV3aB<(P#q9c(Pj5tzy}v5#4|uCT+*&4Wp`0*%?K&#hA;R_xPZ%=N zI2+!X$I+nhX;2t&1Sk4nP&jEa%uV@?o*p`t&p}np{FR~ndCi=)j7t7|v7#F#_koY* zSvkynu*jguROV>LE>ytaRT1i7RY}>z1%nW+VBv36y{ggddYIdyJA*ItHz41me_PSs z)IE8zy4;q%BdyB&SLCjm+_fYQF3DZX@&RD(%Qbm$MRb45%yPgN9p<4pcxT?%)fy5Q zAdX{c>iK}h4|)b9U;RiNtV6cwjbSjqBMhE=hrw)h*0*hZZFmp$wuHgH*IUD25{Id7 z4}uvCJqN)yAd!zDD3KZ2!$=z&BZ#TYmF#1tc1HFy(!mIP$Pwve#e$X=@`RYevFF6D`&r6C?C8+|@)RKE7e1qr{+7bE`-k}ey*oL+Z^a*VXeSELC zjy@N+egL$OKbyc$7gTT)_=&N@h;ww>G5+*5JLuT4HvynCuW-_NfxiueE&}a&?x@pU zle?G1%#z%_EcXC&zpW-`Rz&x=%q%^==r9k(3_~EdORXV+0pd88rk)R2{Gew*^3{*T zjEz7G@c)A(6|sHx#h6MMmyD^Zt^uFG`0J{w+pvqNjPZ1ln3i5FYh?q>5$D)Vg_25U zX&esQ0Phwl&TE9-#R$6+lQbh4MveiYZ5W#toSO?+wV>-{6_yEO($6|DK(s#|gq<60 z!a|t81Nj*}3CDk#_+ert+*u2Eu8N;LNp{`)VsT(8adI_z;NFeJ$Wmf(EgXtT^>8E- z`TIRSe4@S!xHZPDi71lTqWfXr{qU=~uR=zb7rU1d$Je3)%OeVTwDRG;`flLrjC1D5 zrpJozT}te4EZvWtdS;x<0$eRJM7u?b7FxjBGEk+qRv{y*=i}%IM_Rv zq>g4L`^IGk*2pgR`X!*^X=fXpAww_*yPcct)4vwtIPNh*KcOF!f1pE;QSLvXhwJ+X I0kJ3dKWjU?WB>pF literal 0 HcmV?d00001 diff --git a/tests/bun_test.py b/tests/bun_test.py new file mode 100644 index 000000000..43feeaf1f --- /dev/null +++ b/tests/bun_test.py @@ -0,0 +1,34 @@ +import pytest +from praktikum.bun import Bun + + +class TestBun: + + @pytest.mark.parametrize( + "name, price", + [ + ("Краторная булка", 300), + ("Флюоресцентная булка", 999.99), + ("", 150), # Граничное значение: пустое имя + ("Булка с кунжутом", 150) + ] + ) + # 1. Атомарный тест метода получения названия булочки + def test_bun_get_name_returns_correct_value(self, name, price): + bun = Bun(name, price) + assert bun.get_name() == name + + @pytest.mark.parametrize( + "name, price", + [ + ("Краторная булка", 300), + ("Флюоресцентная булка", 999.99), + ("Обычная булка", 0), # Граничное значение: нулевая цена + ("Булка с кунжутом", 150) + ] + ) + # 2. Атомарный тест метода получения цены булочки + def test_bun_get_price_returns_correct_value(self, name, price): + bun = Bun(name, price) + assert bun.get_price() == price + diff --git a/tests/burger_test.py b/tests/burger_test.py new file mode 100644 index 000000000..47eef40ef --- /dev/null +++ b/tests/burger_test.py @@ -0,0 +1,84 @@ +from unittest.mock import Mock +from praktikum.burger import Burger + + +class TestBurger: + + # 1. Тест установки булочки + def test_set_buns_sets_correct_bun(self): + burger = Burger() + mock_bun = Mock() + + burger.set_buns(mock_bun) + assert burger.bun == mock_bun + + # 2. Тест добавления ингредиента + def test_add_ingredient_adds_to_list(self): + burger = Burger() + mock_ingredient = Mock() + + burger.add_ingredient(mock_ingredient) + assert mock_ingredient in burger.ingredients + assert len(burger.ingredients) == 1 + + # 3. Тест удаления ингредиента по индексу + def test_remove_ingredient_removes_from_list(self): + burger = Burger() + mock_ingredient = Mock() + + burger.add_ingredient(mock_ingredient) + burger.remove_ingredient(0) + assert mock_ingredient not in burger.ingredients + assert len(burger.ingredients) == 0 + + # 4. Тест перемещения ингредиентов местами в списке + def test_move_ingredient_changes_position(self): + burger = Burger() + mock_ing_1 = Mock() + mock_ing_2 = Mock() + + burger.add_ingredient(mock_ing_1) + burger.add_ingredient(mock_ing_2) + + # Перемещаем первый ингредиент на позицию второго + burger.move_ingredient(0, 1) + assert burger.ingredients[0] == mock_ing_2 + assert burger.ingredients[1] == mock_ing_1 + + # 5. Тест расчета стоимости (Используем моки с возвращаемыми значениями) + def test_get_price_calculates_total_cost(self): + burger = Burger() + + mock_bun = Mock() + mock_bun.get_price.return_value = 100.0 # Цена булки 100 + + mock_ingredient = Mock() + mock_ingredient.get_price.return_value = 50.0 # Цена ингредиента 50 + + burger.set_buns(mock_bun) + burger.add_ingredient(mock_ingredient) + + # Расчет: (100 * 2) + 50 = 250 + assert burger.get_price() == 250.0 + + # 6. Тест печати чека (Мокаем методы булки и ингредиента для генерации текста) + def test_get_receipt_returns_formatted_string(self): + burger = Burger() + + mock_bun = Mock() + mock_bun.get_name.return_value = "Марсианская булка" + mock_bun.get_price.return_value = 100.0 + + mock_ingredient = Mock() + mock_ingredient.get_type.return_value = "SAUCE" + mock_ingredient.get_name.return_value = "Chili" + mock_ingredient.get_price.return_value = 50.0 + + burger.set_buns(mock_bun) + burger.add_ingredient(mock_ingredient) + + receipt = burger.get_receipt() + + assert "(==== Марсианская булка ====)" in receipt + assert "= sauce Chili =" in receipt + assert "Price: 250.0" in receipt diff --git a/tests/database_test.py b/tests/database_test.py new file mode 100644 index 000000000..e3c22c548 --- /dev/null +++ b/tests/database_test.py @@ -0,0 +1,30 @@ +from praktikum.database import Database + +class TestDatabase: + + # 1. тест: проверка точного количества булочек в базе данных + def test_available_buns_returns_correct_count(self): + database = Database() + buns = database.available_buns() + assert len(buns) == 3 + + # 2. тест: проверка содержимого списка булочек (названия) + def test_available_buns_contains_correct_names(self): + database = Database() + buns = database.available_buns() + assert buns[0].get_name() == "black bun" + assert buns[1].get_name() == "white bun" + assert buns[2].get_name() == "red bun" + + # 3. тест: проверка точного количества ингредиентов в базе данных + def test_available_ingredients_returns_correct_count(self): + database = Database() + ingredients = database.available_ingredients() + assert len(ingredients) == 6 + + # 4. тест: проверка точечного содержимого списка ингредиентов + def test_available_ingredients_contains_correct_names(self): + database = Database() + ingredients = database.available_ingredients() + assert ingredients[0].get_name() == "hot sauce" + assert ingredients[-1].get_name() == "sausage" diff --git a/tests/ingredient_test.py b/tests/ingredient_test.py new file mode 100644 index 000000000..da1d56b60 --- /dev/null +++ b/tests/ingredient_test.py @@ -0,0 +1,43 @@ +import pytest +from praktikum.ingredient import Ingredient +from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + +class TestIngredient: + + @pytest.mark.parametrize( + "ingredient_type, name, price", + [ + (INGREDIENT_TYPE_SAUCE, "Chili Sauce", 100.0), + (INGREDIENT_TYPE_FILLING, "Cutlet", 250.50) + ] + ) + # 1. Проверяем только тип ингредиента + def test_ingredient_get_type_returns_correct_value(self, ingredient_type, name, price): + ingredient = Ingredient(ingredient_type, name, price) + assert ingredient.get_type() == ingredient_type + + @pytest.mark.parametrize( + "ingredient_type, name, price", + [ + (INGREDIENT_TYPE_SAUCE, "Chili Sauce", 100.0), + (INGREDIENT_TYPE_FILLING, "Cutlet", 250.50) + ] + ) + # 2. Проверяем только имя ингредиента + def test_ingredient_get_name_returns_correct_value(self, ingredient_type, name, price): + ingredient = Ingredient(ingredient_type, name, price) + assert ingredient.get_name() == name + + @pytest.mark.parametrize( + "ingredient_type, name, price", + [ + (INGREDIENT_TYPE_SAUCE, "Chili Sauce", 100.0), + (INGREDIENT_TYPE_FILLING, "Cutlet", 250.50), + (INGREDIENT_TYPE_SAUCE, "Sour cream", 0.0) # Граничное значение + ] + ) + # 3. Проверяем только цену ингредиента + def test_ingredient_get_price_returns_correct_value(self, ingredient_type, name, price): + ingredient = Ingredient(ingredient_type, name, price) + assert ingredient.get_price() == price +