From 3c3bd747abb7d2faaa58bfc883b0bece11e9fd05 Mon Sep 17 00:00:00 2001 From: Anton Date: Sat, 9 May 2026 21:36:49 +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=D0=B0=D0=B2=D1=82=D0=BE=D1=82=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D1=8B=20=D0=B4=D0=BB=D1=8F=20Stellar=20Burgers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .coverage | Bin 0 -> 53248 bytes __pycache__/bun.cpython-310.pyc | Bin 0 -> 921 bytes __pycache__/burger.cpython-310.pyc | Bin 0 -> 2197 bytes __pycache__/ingredient.cpython-310.pyc | Bin 0 -> 1185 bytes __pycache__/praktikum.cpython-310.pyc | Bin 0 -> 899 bytes burger.py | 4 +- praktikum.py | 8 +- requirements.txt | 2 + .../bun_test.cpython-310-pytest-7.4.3.pyc | Bin 0 -> 2622 bytes .../burger_test.cpython-310-pytest-7.4.3.pyc | Bin 0 -> 10674 bytes ...gredient_test.cpython-310-pytest-7.4.3.pyc | Bin 0 -> 3462 bytes tests/bun_test.py | 22 +++ tests/burger_test.py | 153 ++++++++++++++++++ tests/ingredient_test.py | 27 ++++ 14 files changed, 210 insertions(+), 6 deletions(-) create mode 100644 .coverage create mode 100644 __pycache__/bun.cpython-310.pyc create mode 100644 __pycache__/burger.cpython-310.pyc create mode 100644 __pycache__/ingredient.cpython-310.pyc create mode 100644 __pycache__/praktikum.cpython-310.pyc create mode 100644 requirements.txt create mode 100644 tests/__pycache__/bun_test.cpython-310-pytest-7.4.3.pyc create mode 100644 tests/__pycache__/burger_test.cpython-310-pytest-7.4.3.pyc create mode 100644 tests/__pycache__/ingredient_test.cpython-310-pytest-7.4.3.pyc create mode 100644 tests/bun_test.py create mode 100644 tests/burger_test.py create mode 100644 tests/ingredient_test.py diff --git a/.coverage b/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..5f1b65921ccaaafe2de72b9447ac50cbe3831029 GIT binary patch literal 53248 zcmeI4?Qh#e9LMe0N$M=A3uB5(g?7A{x{5Xs!89ITjKYc-8(SYnc?uXOxwfW>o!QRT zA^|cW;BP?u0U($JZ+L_FHxLri;1vQ1At8i{fE9k{hdgWxLKvy)^tBSlcfR}j_xs%M z?s9gUm8CP5&)J&ewoRYiD@{nUEIrJaBuN^*OY}~*JRPV>f2H3x#D{9=L7E-@7JC>VC84E3Z1|P0w4eaAaK(V2$qWZ^5mra#;d+rZ*ku> z8{CcdrAL<+=Fcy%^Yf3KSzu8fJ6d40&CRiS<~o;Hhr4XeYH?=SO{-!0mc7pW4W5+l zdb}y-EXt!>UJ?$y z6xEEcH9)6d`35!P;&J6QGR}4qto@4O(o{LL+3vRMg#6`hyCWKhYD5?Iol!MM)%Bg& z*?-+OH)zYgzeCNLAQvqf)#}>Tg)Z+k{w(X)oDJQuomnQFpa?i}AXk3ipe#{T@-6Q| zi@rJ;X4iMZv_Xw;RB2ay>z1*6`S4-+oeN>02s}pJ^1a@HHWW0y>=B_O&X0~8(MyJd zMD(Ioi#cmyml3sD)HoE)gMH@i1cvE~j>eq0AX&Pn(I$)~8(6*N)Q4j&j2Mqo2cfYb zDYn+N8=|Xt!iR=)k-O$Puf%7gVPUTWi9)BU<;n|(M}~n8T zWI~hQRYLl08uZ0m88TVq^i4j^x92XJEgDTarsYzXr7<{~0hlP*G^wyzce;KUzakli zru04CeGPA0XslnH4sA*%7ctDAr%spjFFI(qO}iP-S7I8DRB7xNol{&V8bqif zo2E|bQ5U^NGZBr?iV-W(uXKosP;HydsJn|s8Bn~m!LO5xW}}m)&wZ=SnJ5w(69(2L z(_;;n)5&-)4Gkk=8`oMD$vjSHk})*$W@cLXr`QoqY*fWwtdhsXSGnM@oG;&XmmGBC z9vlr$hDYB7+GgTwoXiYG)-@;lL3WNtY5IyZ7+eDQ07H?Ct{_IlsM+fgx};S61*tG2 z7WlIMheR)IAOHd&00JNY0w4eaAOHd&00JNY0yiH4Mb5~1vHs8K-%9#Vw8I7hAOHd& z00JNY0w4eaAOHd&00JPeF9{Sg${l+0XCe1Y$ja1Y{5Jr{E7f}|#|q?CM*m*Yzt?}= zmkz>c5C8!X009sH0T2KI5C8!X009sHfgXXPa)+GU2FMhYDJ{MWAfEphiXTh*2m156 zH2%qWt#q~YQE92TOPSa}00ck)1V8`;KmY_l00cl_j|eOlR4F)8t3A1Lx;nS=_~P5J2t;)uGda-Z_{@=wUbt-<+P1z%`hz6 z@(qLj#e7L4#p%?F9oO9St<7$mB%c{0$z!P{=_h08w;C*N`-Z>W;T|b3=KmM>#s9L` zO^=h}3pr9ek=jGpXhK!lZdtCCxiiYu39i{XP)sJ*$x3@zi<| zf=Ja636egYA?c~q()F%QVyiNVRa1*4cG`)N;`x7}cv&i5)@$RRmOdVTp|o85OaD-p zOS^m2&2d=}009sH0T2KI5C8!X009t?q$M>tBBx#h4XpnQ%W5#4UU6{!uRW^<$I?so z7rnjp|JeWI{=oV_|Dqb4NN?+?^?z_04FYA9w^uh)LAOHd&00JNY0w4eaAOHd&00JOz6B1CAk|v)2=k!k`eMkR6 z|3?2(|C|!oKmY_l00ck)1V8`;KmY_l00ck)1oo7GmQ!Wzw%qD(KaEdj>F_?~wX3_k zyH|F0u6(g`;GT$A1Q$i1V8`;KmY_l00ck)1V8`;KmY_lU|$drw+ZB2F8olk zS-Kq{t6?Imgdb`~+&$1T;`zTcu`gVLksts9AOHd&00JNY0w4eaAOHd&00RG!fO!6o z_5Xi_hiV`I0w4eaAOHd&00JNY0w4eaAh1se;Q9YPX(*Tp0w4eaAOHd&00JNY0w4ea KAOHd>2>cC4R;I83 literal 0 HcmV?d00001 diff --git a/__pycache__/bun.cpython-310.pyc b/__pycache__/bun.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2d354588ab53d9ecffea6e28d24a2530100d4a07 GIT binary patch literal 921 zcmZ`%J8u&~5Z=9)&yF1-{{puz?2-bZC?ZI7E{JF>ORM8{ojBNc&h8y3mJ5WV&>$fs zO8$U5^DtN#yQJQ0ugyg}`Kk2pprssN@ysPQY$wV*pI(e&q>O~Fw z%jA9LO;fSXbEIn4G{c z5-I95Yko?l4OZ5C4p=00k3__9TRUJ~;oQ!3!A;=KLK1)IrUWiaBFF6lMdZmIVi%(o zfKdepy79N_MVuU)U@R>$HVAp#$8(vn)7a}@M+%Jb&#i o4&-Jz3j1}5MXUC%RW&nz3$}yttveY-zMF@6CwrKoa5q)*7pPeJP5=M^ literal 0 HcmV?d00001 diff --git a/__pycache__/burger.cpython-310.pyc b/__pycache__/burger.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6307969fdc2da922ef545ecb0188e3defe509e62 GIT binary patch literal 2197 zcmZuz&2Jk;6rb5IuQ#^y(KIR*f|WQ>=MaetNT@+oiG+|)s8mjt(aQBqtWE6oW_F#@ zm5Z7WQ6Z2JHzbH;AA1WFLuhCa|H1BcublcXv=`o+UAxZ5NHaU{&3kWt?>BG8?v~3I zfi}PV%KcX-gLinn;dmenOPra7l%;jF#M2qRBfp80Y;KRU4jWSYG7_F&H zVd?>?X-wn#hQf4a9B8mlffqnBSrH_YS-c3+3@d?Tp~T9d(O8Aef@X%z@e-`hvjvdK zAXPxR!WKcAWmf_5Qfl1pi53^Vo0JgCh8F)4pT@t(qxdBG-j07w_LE2P(|82q(Mo3U z<7=Ir?8c|bZn6hH$H|@@AIE=6r}zZ)k0Hu4(4qQy{1ifrAo4Mc&!xw2_6^V_vE>*_zzOkaa_+09cLEdV8I#G zqS0)2@+;$2QGk^u!X7uAPtrg@eTr#d0>S{XN~KR#5k-*XT;k4#8PKI>z(WVp46c9_ zV6ds3$7`wenu7}f@M2DQ?2}D0pnW=&7jq0l5hm_sG<=_XYz(IYy7O=<4aR_s@oiiJ z6A5aLMptt>&RV3p>oNY-1ymDSN)Q53_37#vVi3_7$^0cq<^}I`clZ>TH^yK}G`g09 zxnPtQJ$@gY5EC*pZaBvykxX5ONzRlazX~!oRPX^CbEf8;xgJzjn5ur)ud3NOO1OAl z=h>S*hxkpfk@Q`s(Nd21oJnd39`=NH=6WDlEJF!)873LnA-uYa)& zzA~Ug@&RbKtv-bpOId$`+yhoD*R&2K{w@PsPVQYuta zqPZOYB-{nSXf6SN4HJeSp%RDWXZU$IR9kccdkJ9=RHlX+fY*m)pAHOZhjQkjAL>}a z+hu7v9m_aWaYgD2eKIJZ=b<9&-5i*BjzB_jJu+^rLbD^o#&0!JR_&M6jud+}Dr71v zD%?S0KD1M6Rf`#4CMM`LIvHI8UxZW*LXpaa@PW@$z1_Xfh2$yKHoLAjCbb}Vle>N> zE}=D@!N9q}yAUKwjKh{thK%W*ng)@$Ru3)oG$zFsY)25^H92NqxU(n%PS3JC)PO$C>GWl!MEEUS<3S3y=? LiIkKQT~PlAIW$$j literal 0 HcmV?d00001 diff --git a/__pycache__/ingredient.cpython-310.pyc b/__pycache__/ingredient.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fce0771e6c5092abb187e9ce38101241d429e782 GIT binary patch literal 1185 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 literal 0 HcmV?d00001 diff --git a/tests/__pycache__/ingredient_test.cpython-310-pytest-7.4.3.pyc b/tests/__pycache__/ingredient_test.cpython-310-pytest-7.4.3.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a3103422f37edc8c5eb335b672bb4a8eef7be17d GIT binary patch literal 3462 zcmd5<&5smC6tC*<>789c1VKSZ{D3y>gzp7)$r?m7F&h&xCX-D%%~bC)OV0;YJ>ZT# z1{e|!9MpI)F(fkFHZg=4Hh#p#f1&5%p*?z7UY)O33fn8NNVArr;JR7-2LZ1uCCPSyc!nWv!sobi^naFroxz z*(z9+94Aa=+9krYmQu(t`T=qDF04YP9h%thR_3_RN`56QqHg%op)&=yI0C|#{tAk( z&TH3nM(4o8b=p?awObT?>dd%A3MMm|1y74*m<`Vi8v&2mWbA}5!n@uY8%vcrH(aRs zyK)t;46?>cMc+{!HPMAvFZ%T@;5NP<-;RHdZ+0%m%bhFnkGal;_;#n&xzK$MM#0u7 zp7MR+*EgVXyK|*;KG(S%FU7aux70b`-J6(J;+Sn<2gXE6Rlyd2-`z7NWx z2BLrANtkdSgYEz4}dD_$?y+xWvWJL6|(ljGed=x6zR7N9nmNEtP zvr1cIY6yGPCTEG*0pmubwJF~PEfZT63gg(;+f+V{Hf7pi#*~~vVa72z3N4tSG5xBx zi8L){Ff+1B6xx~40*g$PY10b1Dp2vyayXyy|^;f0f=5?{CukYIsKm zc>k0$RG9I%oB=JsJMw6F8NtY&UZi)F$w`Mcj=#LKwy@t3_9wkYZZe0hy?qrldaB)y z$j|wqOaQyN)3KYm$<+9uBN7#IBeD7k;%JFlTiA_aFN*yr4mQR-A$%T64~KA4ZQ;<` zKw$no2tq?OEcni&zm-ho2Upb76wh+VDUw+I_fPDp+Cm8I;Ceh+?-sovaJgUO#cH|c zaX-nzuzRvz3c^xFBt}pL3z2Mg#i?pNVA9l`3#uo*z(vSO#ueVIk1Hf&Z^}I?RV&9h zukvJrJ6q*tFLeEnYk^nsLKsPbq%#px3erwA;RmyP6rge>7ycBAEFvF4KYs-CL^Rga08Gu}At%c*K* zyvD2ZelZ*`d!@>1YTQ6E12NO1a~Bo)+Cs8fZtc)OkpmaPiyMGJSRk^-4SIv#qKzFV z?&0YCYBP%zX7w*zVL+GPLMMds#Go($UDAjGT`G|RbO{Lz^r=P~q%{zzcn=Z}3R9#5 zW$LJxNo@>L)R8HQ1elj8ni3#Vff)h4$S0(&d_uxAQxc=WpzuV7Bu2AGjOGwADnN`X z5@b`8>1$7OM1oX&^SbUy6ZGFA9SG~I;aX%w4LV0Glrpm-L=RutPnELuE=ZG0jA0*dV*h9mPJ ze{rBm!}Cy@V`*p4ZW*1a*nyU#G7kFbx*k-2;htsbHQLy^Qpog8*BB?t;~6KIFX<=5 zH}FAn9zIK!;_u^|@pAWV7~yM=l?VB^A1nM-TzMCYaS;7@z;B<2jR&4bW8|9^PZWL2 z@Y)9!tDh#Ct?@MRqv}|_oa0aMQMlYK;4byf@&74%|8bDdqr-=h4k zY>=9=Y)Mj(C%J94yp(p+j-6PpESIjE*sfcyvU=b{JL|e<>Ry274Lu_*%!yX^_~~Q> z$}#9eUTXM!Cql=sYkmO51d6*+CR<1z9RIl>TL>g1i>y;@-7+jKtH}|>(J$?i*OD!6 z>NB4fSg2EZ?w{kO5DNQ1m6$zUx_Pg|(usYy#HFl>o>zjDSZ}1Sdj!jvFhFbvGJ8__ E7a0(xCIA2c literal 0 HcmV?d00001 diff --git a/tests/bun_test.py b/tests/bun_test.py new file mode 100644 index 000000000..6a5355785 --- /dev/null +++ b/tests/bun_test.py @@ -0,0 +1,22 @@ +import pytest +from bun import Bun # предполагаемый импорт, уточните по факту + +class TestBun: + + @pytest.mark.parametrize("name, price", [ + ("Черная булочка", 100), + ("Белая булочка", 80), + ("Сладкая булочка", 120) + ]) + def test_bun_creation(self, name, price): + bun = Bun(name, price) + assert bun.get_name() == name + assert bun.get_price() == price + + def test_get_name(self): + bun = Bun("Обычная", 50) + assert bun.get_name() == "Обычная" + + def test_get_price(self): + bun = Bun("Особая", 200) + assert bun.get_price() == 200 \ No newline at end of file diff --git a/tests/burger_test.py b/tests/burger_test.py new file mode 100644 index 000000000..7fb23351c --- /dev/null +++ b/tests/burger_test.py @@ -0,0 +1,153 @@ +import pytest +from unittest.mock import Mock +import sys +import os +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) +from burger import Burger + +class TestBurger: + + @pytest.fixture + def mock_bun(self): + bun = Mock() + bun.get_name.return_value = "Черная булочка" + bun.get_price.return_value = 100.0 + return bun + + @pytest.fixture + def mock_ingredient(self): + ingredient = Mock() + ingredient.get_name.return_value = "Сыр чеддер" + ingredient.get_price.return_value = 50.0 + ingredient.get_type.return_value = "cheese" + return ingredient + + @pytest.fixture + def mock_sauce(self): + sauce = Mock() + sauce.get_name.return_value = "Томатный соус" + sauce.get_price.return_value = 30.0 + sauce.get_type.return_value = "sauce" + return sauce + + @pytest.fixture + def burger_with_ingredients(self, mock_bun, mock_ingredient, mock_sauce): + burger = Burger() + burger.set_buns(mock_bun) + burger.add_ingredient(mock_ingredient) + burger.add_ingredient(mock_sauce) + return burger + + def test_set_buns(self, mock_bun): + burger = Burger() + burger.set_buns(mock_bun) + assert burger.bun == mock_bun + + def test_add_ingredient(self, mock_ingredient): + burger = Burger() + burger.add_ingredient(mock_ingredient) + assert len(burger.ingredients) == 1 + assert burger.ingredients[0] == mock_ingredient + + def test_add_multiple_ingredients(self, mock_ingredient, mock_sauce): + burger = Burger() + burger.add_ingredient(mock_ingredient) + burger.add_ingredient(mock_sauce) + assert len(burger.ingredients) == 2 + assert burger.ingredients[0] == mock_ingredient + assert burger.ingredients[1] == mock_sauce + + def test_remove_ingredient_valid_index(self, burger_with_ingredients): + burger_with_ingredients.remove_ingredient(0) + assert len(burger_with_ingredients.ingredients) == 1 + assert burger_with_ingredients.ingredients[0].get_name() == "Томатный соус" + + def test_remove_ingredient_last(self, burger_with_ingredients): + burger_with_ingredients.remove_ingredient(1) + assert len(burger_with_ingredients.ingredients) == 1 + assert burger_with_ingredients.ingredients[0].get_name() == "Сыр чеддер" + + def test_remove_ingredient_out_of_range(self, burger_with_ingredients): + with pytest.raises(IndexError): + burger_with_ingredients.remove_ingredient(10) + + def test_remove_ingredient_from_empty_burger(self): + burger = Burger() + with pytest.raises(IndexError): + burger.remove_ingredient(0) + + def test_move_ingredient_forward(self, burger_with_ingredients): + burger_with_ingredients.move_ingredient(0, 1) + assert burger_with_ingredients.ingredients[0].get_name() == "Томатный соус" + assert burger_with_ingredients.ingredients[1].get_name() == "Сыр чеддер" + + def test_move_ingredient_backward(self, burger_with_ingredients): + burger_with_ingredients.move_ingredient(1, 0) + assert burger_with_ingredients.ingredients[0].get_name() == "Томатный соус" + assert burger_with_ingredients.ingredients[1].get_name() == "Сыр чеддер" + + def test_move_ingredient_same_index(self, burger_with_ingredients): + burger_with_ingredients.move_ingredient(0, 0) + assert burger_with_ingredients.ingredients[0].get_name() == "Сыр чеддер" + assert burger_with_ingredients.ingredients[1].get_name() == "Томатный соус" + + def test_move_ingredient_out_of_range(self, burger_with_ingredients): + with pytest.raises(IndexError): + burger_with_ingredients.move_ingredient(5, 0) + + @pytest.mark.parametrize("bun_price, ing_prices, expected", [ + (100, [50, 30], 280), + (80, [40], 200), + (0, [20, 20, 20], 60), + (150, [], 300), + (75, [10, 20, 30, 40], 250) + ]) + def test_get_price_parametrized(self, bun_price, ing_prices, expected): + mock_bun = Mock() + mock_bun.get_price.return_value = bun_price + burger = Burger() + burger.set_buns(mock_bun) + for price in ing_prices: + ing = Mock() + ing.get_price.return_value = price + burger.add_ingredient(ing) + assert burger.get_price() == expected + + def test_get_price_no_ingredients(self, mock_bun): + burger = Burger() + burger.set_buns(mock_bun) + assert burger.get_price() == 200.0 + + def test_get_receipt_full(self, mock_bun, mock_ingredient, mock_sauce): + burger = Burger() + burger.set_buns(mock_bun) + burger.add_ingredient(mock_ingredient) + burger.add_ingredient(mock_sauce) + receipt = burger.get_receipt() + expected = ( + "(==== Черная булочка ====)\n" + "= cheese Сыр чеддер =\n" + "= sauce Томатный соус =\n" + "(==== Черная булочка ====)\n" + "\nPrice: 280.0" + ) + assert receipt == expected + + def test_get_receipt_only_bun(self, mock_bun): + burger = Burger() + burger.set_buns(mock_bun) + receipt = burger.get_receipt() + expected = ( + "(==== Черная булочка ====)\n" + "(==== Черная булочка ====)\n" + "\nPrice: 200.0" + ) + assert receipt == expected + + def test_bun_methods_called(self, mock_bun): + burger = Burger() + burger.set_buns(mock_bun) + burger.get_price() + mock_bun.get_price.assert_called() + burger.get_receipt() + mock_bun.get_name.assert_called() \ No newline at end of file diff --git a/tests/ingredient_test.py b/tests/ingredient_test.py new file mode 100644 index 000000000..46e92e298 --- /dev/null +++ b/tests/ingredient_test.py @@ -0,0 +1,27 @@ +import pytest +from ingredient import Ingredient # уточните импорт + +class TestIngredient: + + @pytest.mark.parametrize("ing_type, name, price", [ + ("sauce", "Томатный соус", 30), + ("cheese", "Сыр чеддер", 50), + ("meat", "Говядина", 80) + ]) + def test_ingredient_creation(self, ing_type, name, price): + ing = Ingredient(ing_type, name, price) + assert ing.get_type() == ing_type + assert ing.get_name() == name + assert ing.get_price() == price + + def test_get_type(self): + ing = Ingredient("sauce", "Кетчуп", 20) + assert ing.get_type() == "sauce" + + def test_get_name(self): + ing = Ingredient("cheese", "Пармезан", 70) + assert ing.get_name() == "Пармезан" + + def test_get_price(self): + ing = Ingredient("meat", "Бекон", 90) + assert ing.get_price() == 90 \ No newline at end of file