From 40ceb7e0e1787b4edfdbae8b8dd2a4c74a9c0381 Mon Sep 17 00:00:00 2001 From: tim Date: Tue, 11 Aug 2026 21:01:01 +0500 Subject: [PATCH 1/2] firstcommitAkanovTimur --- .coverage | Bin 0 -> 53248 bytes README.md | 8 +- __pycache__/__init__.cpython-314.pyc | Bin 0 -> 146 bytes __pycache__/bun.cpython-314.pyc | Bin 0 -> 1561 bytes __pycache__/burger.cpython-314.pyc | Bin 0 -> 4125 bytes __pycache__/database.cpython-314.pyc | Bin 0 -> 2769 bytes __pycache__/ingredient.cpython-314.pyc | Bin 0 -> 2010 bytes __pycache__/ingredient_types.cpython-314.pyc | Bin 0 -> 374 bytes __pycache__/praktikum.cpython-314.pyc | Bin 0 -> 1331 bytes burger.py | 4 +- coverage.xml | 133 ++++++++++++++++++ database.py | 6 +- praktikum.py | 8 +- pytest.ini | 3 + requirements.txt | 2 + .../test_burger.cpython-314-pytest-9.0.3.pyc | Bin 0 -> 6378 bytes ...test_database.cpython-314-pytest-9.0.3.pyc | Bin 0 -> 5593 bytes .../test_models.cpython-314-pytest-9.0.3.pyc | Bin 0 -> 6164 bytes ...est_praktikum.cpython-314-pytest-9.0.3.pyc | Bin 0 -> 4169 bytes tests/test_burger.py | 67 +++++++++ tests/test_database.py | 19 +++ tests/test_models.py | 36 +++++ tests/test_praktikum.py | 34 +++++ 23 files changed, 307 insertions(+), 13 deletions(-) create mode 100644 .coverage create mode 100644 __pycache__/__init__.cpython-314.pyc create mode 100644 __pycache__/bun.cpython-314.pyc create mode 100644 __pycache__/burger.cpython-314.pyc create mode 100644 __pycache__/database.cpython-314.pyc create mode 100644 __pycache__/ingredient.cpython-314.pyc create mode 100644 __pycache__/ingredient_types.cpython-314.pyc create mode 100644 __pycache__/praktikum.cpython-314.pyc create mode 100644 coverage.xml create mode 100644 pytest.ini create mode 100644 requirements.txt create mode 100644 tests/__pycache__/test_burger.cpython-314-pytest-9.0.3.pyc create mode 100644 tests/__pycache__/test_database.cpython-314-pytest-9.0.3.pyc create mode 100644 tests/__pycache__/test_models.cpython-314-pytest-9.0.3.pyc create mode 100644 tests/__pycache__/test_praktikum.cpython-314-pytest-9.0.3.pyc create mode 100644 tests/test_burger.py create mode 100644 tests/test_database.py create mode 100644 tests/test_models.py create mode 100644 tests/test_praktikum.py diff --git a/.coverage b/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..65a74b9a0878c0c1646a5b3b3f1b121a42ef5c40 GIT binary patch literal 53248 zcmeI)%WoS+90%}SkG+l^Cle^eq*0YQfYPY3)6kYjdw@VA@u&oa7IDH|+Y@IS@2<1E zZWAhmQYwl#azqID2e@)YLU2QH;eb>LkdRP?L?t8;qHy3h`|u-;E2|(islF>e_A$TN zna|G5dhKLiK6TOxq*!)6+YH2EZ9>y^?MWdtP0P`9jGoDqrI~cHK<|3b{Gi#KR(|)s zG5(5HFkaR8Yh(L(sn96=Hu^!~vD}$aD?67f(*{fsfB*y_aMuWIo+@OElaulJ|*Q=}2 zS3T3Itw?`Pn4KEdTq@^!5Y^Um?fJkJP0IG)P)xsH(Qveph{ecKAoDYRrFyx!VS zUT0N>&PI{(zIt@J!P`W}$>ZQ1xBHD4_4vHKU z8@O?0hdwsj9LsKf`wnM9u8wFF)po44w(K1IInj-r3#;L{b3#>uTEIi2M)C1Ix<;*1 zuKR0E`sh?K+kqP{SLonZ7U-pL`JRz%ae7+6vKBTJ#Z#$Tf!~?Q^);H#>H$qhZ6Dlj zR4?goB&ruRo5EcVyNrq!(ZQkC+}mg76AaT+9Zk4#LMrJUZEdQsR0dIPy4C)+7Pc5) zQU{^2AW62|c514t_^J*y_q_DXhAhWhqhaArHzaC03pt~>G(D*4beceAp);G`oHVk< zsVV(ZE^J2e(Td-)eN8AilG_ZU$tGKxe%nh1l3NXuNkn&)O!`Q?g{o7^8pXw_LDh-V zRTkozk-;8>M8kf{F(^m<#rrQO!oCt<5e#;D2#LZ<_tEu2K8KZc7@1TOK zB2*UCt8sZE6&Cp&7V6tH=&L8|E3#VCE%NhnqjcVE(rD5$Eswe^jlt0wK&XUulMT&P=V!t)B_|g(%%7%Cm-H{1v2D|-$LA|`8jf*th&J0`QI8nFhKwU5P$##AOHafKmY;|fB*y_aQ6u?J*8*W^?!>0 zsPXIcf(Zf;fB*y_009U<00Izz00bZafn6z3NU{Aq`LmEi6FQrkjQ(h5!U0009U<00Izz00bZa0SG{#BT!)b_2g@SRGv-c;%@=e@Bha5 z7aISXf5a_*bo?(`zytvZKmY;|fB*y_009U<00I!$fdYpOrrGmne7eWLJpJSU{0Xbo zq?_rinWff7u;MzUmgk<6wP3#GnX7@d+P3NL0>?5;yEse`-MokHnqf&Ns014==~L{( zX{N0X6RYkUP&Iu?F-I8F++kw6`=h8*ifQIBQPs9X$q(sFYYdm%qx&OKg!=v882?h^ zAM4O+ki0SG_<0uX=z1Rwwb2tWV=5ZH+VN0_Y-bJg2>{cjv+7l#V!UXORK z|1*c#>QJ#g*Z=9G%pEGGyFa=-XJuv%6%}3orw*}3ZWxJbJHGzM{r`4igGQMk009U< z00Izz00bZa0SG_<0{@!;qdyiHQ@{V~{2z@Tm>>WF2tWV=5P$##AOHafKmY;|xC;ds z8_R|N|Ia_u_@De2{yqPee?<$JAOHafKmY;|fB*y_009U<00I!$NdlurTF*UTy#CyK zA3mrX8Cn?6d_Iz<_j{S)PURWR-Jd@8({+c9rqa3GzV|n;e)@^6XLZ^zk$U@T`2YX> zJB|O&Z}6Y_ulxsEzytvZKmY;|fB*y_009U<00Izzz^)Kb-wWu55x!+I;TubbZ)ujH zF9P(G`m!LGQosLe6T6~HC?o_R009U<00Izz00bZa0SG_<0=Frke*eey|83$S3<3~< y00bZa0SG_<0uX=z1R$_W1n~R+E;&#rCIlb=0SG_<0uX=z1Rwwb2teRJ2>c5Tw=x|7 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 272081708..4f63b4e21 100644 --- a/README.md +++ b/README.md @@ -10,15 +10,15 @@ ### Структура проекта -- `praktikum` - пакет, содержащий код программы -- `tests` - пакет, содержащий тесты, разделенные по классам. Например, `bun_test.py`, `burger_test.py` и т.д. +`praktikum` - пакет, содержащий код программы +`tests` - пакет, содержащий тесты, разделенные по классам. Например, `bun_test.py`, `burger_test.py` и т.д. ### Запуск автотестов **Установка зависимостей** -> `$ pip install -r requirements.txt` +`$ pip install -r requirements.txt` **Запуск автотестов и создание HTML-отчета о покрытии** -> `$ pytest --cov=praktikum --cov-report=html` +`$ pytest --cov=praktikum --cov-report=html` diff --git a/__pycache__/__init__.cpython-314.pyc b/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..64ebc3567faf0a7a775483e588ab20fcfe2f045c GIT binary patch literal 146 zcmdPqo}SSs?l`h=2h`DC095kkP;p#GuTe$>_I|p@<2{{|u76rLP}aoLW?@ zUy_-t?~+-Nlb@?!n5bJ&S(1^Tr&~~zpOu9H=fPcy8uS{>#DdMIHGjIiLm<5~NG*XWQ+n9&4>Gn^M?)jke0~!vV`w1ko zK^pg%G(Uz2&&$jz++emb3xQ>uC?{oBBN>fkHImavP9q~48L=&Ct%A(kdHiZ2F>lwy z`Y-sEf_kn_)F0|V9krj9)XVm^I#MU?$Leo&SVH`$y{pl7Q~jUOZ|rOSRE=1!fYvq64M{*u=Wmq__)2jSa6X+pdT$_&%|G6 z0mTw)!YbS|zIp_(j_4=w9lOtLw!(fy4pFj-X7WE`FUf>X)l0H9;k#bhNX%G@B)btr zjzlZB5s9iJlQGWSz=`8^-<6!lbnt33`J(cD?1{J{{c7coUkjpY<$-g(){yt3@On)| zo1QBxYxQuk)<{MVPpg|#&am%G@%PdcJ7SC-pVPd){M3~=mwXr z*-BQ>m2ODV~T5P#xh#dL_eXDFHnb-?921rba7Zw)8DC)%G z+z)-cYciUanp(O{3TVQs=}S-ZuV#wR3St6*cb=nH7j#PKdEawX7*=M8EQTdH;mNuP z%S>2kmJLC}A}*ll@vSQpV}y>Q(4J}BXv$dj@)@Amo7ZYk69(u-Y-q010b7M{dyZi> z58@))SOYQDVqywaOh@~?{On1tJ4W-;w{$H%UM8k?8&4X_x-_Vv{}SioMa-s^2*#v=-mYoH_SzzZm;Ji8KWk7YwB7CY-~N*Qr2Z%gZKz@ zEaTq^_7|~;{Z-(+8m-p@+T)Nss5?Q=Gr{?WFJc+^p%+Hz9^rgFayb`tPeIcnK0}er z;7H)6#iOWdNGDy92#2J3j)sZUG+=R?Y~ajiMn2pAT0hI#hb_2-DifGwYmiy zK0Se53tQ`y`m38mT3-{l>4oU%GUg@Sf)q<9XeqtcEm207&Q5c3YBI*U#yBf>0EIsA EKaxOhg8%>k literal 0 HcmV?d00001 diff --git a/__pycache__/burger.cpython-314.pyc b/__pycache__/burger.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66bc125d22fa913a4970c78d6a3932cbdf2dff6e GIT binary patch literal 4125 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 literal 0 HcmV?d00001 diff --git a/__pycache__/ingredient.cpython-314.pyc b/__pycache__/ingredient.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce084de71c91b0ae228ec0c0fd1ccdbe4e5774f4 GIT binary patch literal 2010 zcmbVMO>7%Q6rS0&owbuRDM?72R>H&xFtjnHAR$yCgy6s>f<+_;L`Tbd({8oib!W#1 z_v92rRjGn2mAG*VrvQxzR4q5ov$txmJ#kB9sqV4wJ=5+ z?sKNN&6IJTEAv?v!FiQiXJ@%>EV96|P0+I{Pe_iCJRt=_3WQ7$GC_z%NRbfBE~(-= zQzd&6{Fq8hABGpC*YLeiwf}_cOZt0#SKrdR`gU@oqWAP2{Y%n?=`9%V>O09*y|Y@< z-~AJRy8_rwa*fXXu6OY8ZM|1Xw)EZP%VY~q{qP?KD|$ECO0L3%V17^kQF-~vrfR3? zF8!Fg64G-=*j(sPm|90ha3sjX?bZbbedk8Z%Nv1Cuph60de~)sX68>EpxQR~vHR&Pb-%Rb(MkF58$55hdBEgd-x^#%m$&B(YhQZS%F7ndXoaIRU6dCu+Gg7kj~`MBXzv#`|6b zk<&0pEg}5S2V&B>#{wFF6wGnh*JbzSt2c`G=9fS%EPqpyvw%MKyhGnvuL3Jidfqw* zj}4iJZD~Pzsx8ABmzc~oLry{`r$7xKioBG^5S;;qKF9N*h+UpvK4743zDZr?6Ko(s z#)!{B9av`{4Hw3{DwEH^9DKlVx4A_7F&-UqRJ`CRL7yz0A0z1yC8yA5U}p%+H5JRw9Qa)po!X!|6p z6;v;QN*AEEL22?`;V32jFWSnB;mq-|>gRevAO!q#$}i;M-9dU`RhFm_i(d!z@EUyP z10$EW`cqK1sA}~~kZSvwZ~X%NE*zC<^Z-W`D;ZgX8_?MHApT*UIX8&%9eHMS59af} P$vN*EbG+PRpvcH0hv49e literal 0 HcmV?d00001 diff --git a/__pycache__/ingredient_types.cpython-314.pyc b/__pycache__/ingredient_types.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e67fc3a46f7baa1f8240ae2165b9536e27334df GIT binary patch literal 374 zcmdPqo}SS$l!>V-N=h7@>^MLO@0XLl8p=Ll9#LV-QmbQxLNu=T>;3p*}sRk+xwaIp!<+J9lgg*_K`C;*vzFKh-Wy|4wO z;KE*@^u7z5^tgf@L!Dg}9yLq`>bbD*V)MmDE;mmfA5TAbupm&|29W7Mde?;wT(?-k z>Tj__)%a;L-(ruCPsvY?kG~}f)D-0E;_2!a5+4#7;2IB6D~>J<)w`16Gsu^>%=JTy zQ;UlAOEPoyT`~)D@^keI6LkwJOEU8FbPI~|vr>~w^fU9)i&9fEQ}asVODYRei}eaB zZ*kb<=BJeAq}mmM0umHt#S%c`12ZEd<3}bIMwSm;43Y{L7({PKDPLj`FX8}70st6a Bi+cb7 literal 0 HcmV?d00001 diff --git a/__pycache__/praktikum.cpython-314.pyc b/__pycache__/praktikum.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..269ef23cf8195e459dc8ef148cdb383d8a5710d3 GIT binary patch literal 1331 zcmbVLPiqrF6n~qY-E21fLoH26SeuqsA=ESqJ$R5JA=Ct=tpP(1ZNjEm+HI4~Iy)&; zFY%&1Dk20#@ao6#BZP)V2Lgh6@E}y{2XJPa&5GcmKG=D`_j_;Oym|9xVQf?dCf{#A z-g|)nK6As9zyO@>GSGq&6ofqF1R^9j4&(zlk%%r9^C%|~$;Buy=Yk~YVkxiWLL`)c zf*b{+ZiNfMn;QUCwxMSe`wqOy;ockq1-#C{PD7t4lglRF;w3w1JO}t}ZhLo&M z^os5n46Au-2OCw>u*mixm#f%WKxE(9iNI^$Wb3(jJKC_x{jLl-p$O}e$NGBc4={hw z=RGv^i$!5Q_O(FJ3TS`e*#8SGBK8fs(K^ zm>&0xhboRi&I88uYPIaU=y<(xVEjo;VB>E}vax9q8s1?^u(55JHc29?R0m^8 z<%&D16uBjY{p^mz=W>P#y`FyH7}!Y@v!2eHcCArQKh#t9A=zzMDH}KTjBS#(vA$2t z{bqg9KBTCwn--3+1boDt_iSmwm)PvLp0Hgq&kt*aU|W!GW$xZ zH=pUuXO8Eyt-H*Y!q3*8tUb@RCtls@BJC4WdnndHvG&4S{mo(*B|rQZ<7V!mcn8JX zH`;m^%?uc=gS7VjE=sT>CH3fPPt`iAcC1dHpu`zF1W=`1=4UIHSCb=DCWkif7=N8q zWF5r3XZR9d_!VP5Ebfg{)$c6k&(duU&t~a$qg;LmILg^6wov6(y-{t}jAcB{O#T3! u6kAS3K@j>7{R)$Pi1p!eA7+2bnlN*^3~1!&QCEz8M9R~ZA0nW*o9;J0vIiRg literal 0 HcmV?d00001 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/coverage.xml b/coverage.xml new file mode 100644 index 000000000..d8e12c649 --- /dev/null +++ b/coverage.xml @@ -0,0 +1,133 @@ + + + + + + /Users/tim/Diplom/qa-python-project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/pytest.ini b/pytest.ini new file mode 100644 index 000000000..a3a8dabe0 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,3 @@ +[pytest] +addopts = --cov=bun --cov=burger --cov=database --cov=ingredient --cov=ingredient_types --cov=praktikum --cov-report=term-missing --cov-report=xml +python_files = tests/test_*.py diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..772247572 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pytest>=8.0 +pytest-cov>=4.0 diff --git a/tests/__pycache__/test_burger.cpython-314-pytest-9.0.3.pyc b/tests/__pycache__/test_burger.cpython-314-pytest-9.0.3.pyc new file mode 100644 index 0000000000000000000000000000000000000000..95bcfd71a693797cf28cc18d5434192d4081bd2d GIT binary patch literal 6378 zcmeHLOK=m(8SWXiq|uBlKQN1pu`Pok2ph@9;*DAJ@GG#!8G?+7gG$JQ5i4uPJ)>pq zt*!DFNv)GyI675(@F54tiQIDBO6?&>*%p>-icP4bQmNcbnM*k3?|Iu%6`^XATy{$8 z`TxKFeopuI{oP%W8Xm!O=h9~nf6gJ4rHcK8EMa>;gU}+ni$rD=X^in^M|?%L9gSek z-)`mvv;gF=qrnkQ;|!Z`G&I6%ydmRJVI-`D+tE)0L1B zH5wMyX(!@or%tThhqQW;IfP<+|3ONX~u?@4)3EnUM%c{Agi@NYgo~pe;mm zj+|CVE-R_s(x-}))uidPCTp4e-_21>4$K(B*JQx5bXpdaw6pS-uu>SvTJvC(5g_%! zfBQP5i)aeIocXwt2;cFvW%pQF*DCr>TXibz6s^s8>^W9^Dc`u?wz}^Wo3v_eM=4Z? zhK?bmV7CQVN?}i1*zSwshkAogM~oN{gPsvp_Yc_Zh}=7UgN|=VN_sb3%8x&Z*F27@Mj`GSky( z7plze^8?DfCaGFFL-hJ|Hj~e%iKLLMJga1gq=z9JO6T%g4r&PGW$;k-rnLG%F6O5V z*Yr$YzL&{c^OIIH_a$0`9=T);HYXPb36Y7uCw*Tgvl%T7lakLAG8*K>1ijwvkp-TF z?kU{|eI|5g>V9Lsb>4N<1==lhGJCyBpI13)DrT#vy~%h`Tp{v9K=TBhCvc&&Wq$9tGOwREbmwEh1ZVTbX-TDXp4J`# z8>BOZ=`@{KcL4TC0Z9?XJM|4Di|9=g5^BG~Pmh(GPJYu^x_P^NX|l}US-kSHX3wu~ zFAi;D{>vL*+<0=OjGO*ie{jkFa&Pl*u0EH_ofpb``huISGm^ZhZ|h%wI4Mc z+Tu{Sp(3=b3N0m^CZL30}f~{Yf=CnGhBP^YA#5J6-wGE>lGpA}va9C;c zmh@>g(O`!w z(3Za%!PTK#!6Jk=MRo`_(A=Z(+FezEYE%6fdkqMM60X82!HLHPq5j$i?wQ{iWaW_I zcvX_4zzlR+Gx69%r-3QARCUVY>=BDWAgvGVK8{y~Z@a%9>UHa{5^j1a)E7Yc z{c041YkcuPx_$7&9um1kfdfUYf?!(tURNuB0Kz^Zu_pjpp%V*0t zzL`8%Ne-S-eWjy)MHDOq#;nyFSrok4R1<85nS~OsG8DgUE0A{P7U_9ps_f!EfdbM*+ zz_p6O(-xd6OcnTMQ*2fEM)qa|NM);mcFKuO4G#yxomp`JRq=`3+|`ti0@d6t8+t4t zeb>39KII1>ZJ4;?0n(5svUScUZo2>}4*7_@D0l#|M*Pav}Y<^0!uKmY&N`H#R^ zcFzJwiOq=~tWaTez>FaLH!t0~GWa(1K-QvarkIroMf;e~Jm6~cie%C`<;;b~qy6wi z?fM{CfKw`oLl#Luq6dK-rJSOXUTQi4$=Jf4ezV@F(?Ya=Av{j+#Lh)~dwb$NaCOG! z3f>?Df*l%<&>+NfZgqnYU7&|6yRrW?(%{Spf`$!77(p&miNZ5EN0ak3xd4eunQdoq z(CZxOtX9)$i@(OG1aKzVOJ7!v-zkXlpw(#|#4GYzom5?plGE zqpO0g-#YFp2~ksh;gKDO4O+s{)^=!)83f4L6q-x8a~b;IS;5wC9d|B4$U?OjuIOZM zP=7~T+o3sT5X!idbip@?`K)cwXy3NRZQ<-d%tr>mM-OC+T3*uhAnXe@Gb4e080kTD}>49s1am8Xk&=_0uaPV|ab{VgP0K89ibjL^@})Z_}Zm?PY##3rcFNb1TP(UQY>+;dT9UhV2L}p6~z9) zwm-D=>G literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_database.cpython-314-pytest-9.0.3.pyc b/tests/__pycache__/test_database.cpython-314-pytest-9.0.3.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2a09488269ee9a365956e488c040f522e24c7166 GIT binary patch literal 5593 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 J&q;6h@CPW}##I0S literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_praktikum.cpython-314-pytest-9.0.3.pyc b/tests/__pycache__/test_praktikum.cpython-314-pytest-9.0.3.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b42e32053d5c940dce2228a043f57ca3a7684558 GIT binary patch literal 4169 zcmeGfO>YxNbk<(mYa81kB$&@61Om8CoRox845o1j5LyzVg<4cfaX0qHEb+%Oy9NwG zwc1MM&>ui0q~=hmLG(b?Q`HNH{(yjuQ%0%Uie9)Og-V4}-|UCS0V<>_QhQ*vo_X`$ zypMSw^VY8i13m=L!NldW5gws5UD%Jq0+!wdpn^^#kvocX&X^se&XS`OjqJ3!|K%^8X+a zylYAHCwa!rG))Nh4mNK=L)M}biL1isgwWE!sIE!By))?=vZ8ZtdWVI~-b82<5(8pT z3{9@GcTNOth|NsPUO;BIP`=3)n?BKMLu}rHCXFnn7+bTgH?#2>{x-&ELoebVX+_y+qU&PdmH|TO!7>IZA+SDtg~@!-hz@ITZTQK;l$Q`98QXBUd03a z)5yI4JRWVY;_<(VM=Nxm_NU%VDW5NQO_d7JepX>wFX2M!yp$`+S+mZz4M!YA$jW-E zAmwG^rI3o1v`jpQj~+XAbo|KEfGJ~I$>o$n*5Yd$jyO#|y{yWZ);IRR0Mdfec}dAh zQ#m;WdNtC{*1(VDj3O6wjR+%>E=@_AoMsh|5Eax3zojG$`?(4_;h1Q&M7B|UVdD_F zFiIkJN!yo(J;OEb0Jk^^*R`w*(|$8ZmA(Z-H|VdRljtzq!Oh(?$=PBqq6&NkyazY4 z7j+;JZAH7C3K!vMi+5@|1|K-01B6#}Ij_;ayuFL;>wjO9vDU9E`Th|_%@y+27;m;P80=Siza8@JknG41oF!alr z6r_!;X|!d()?2}}u@E1#fsC!_k=BEFtqX>~D(GjSeL>iCN7!`j#8;=jJavbjrrMLJ zZcfyNca~reA}+(oW!XRtHL{@>fJQbz$5lBIB{|xqtqg#^Ze##_oSZwv%FZMYM?T3UR9C0pgSjWeV-0!_fGOd5M1Yj$`=J zLAaY*|Ez=XHo#JH)43Ag#pi~uemuLa9@_qW{0Z&>@=6(W$vr`@yx2=^GOT63j@=lW z9l3h(+E6{zd2`IPDH6c+IK-pLx}@uvcpIfm1X{AX0(T-$D;U#{HnM71EgQ9L5Zq>w z5+7iVERir-m(tD@OSueGvWipLTyaXuS=V(+lcr^gCc%UeUZq$#gmDp*HL2+$&P#d< z?v0#OkaVC#yu_a`7G~tKD(UGnL@=rlE@=`nAa*^IfPt{D6TFF9>Zg{PS@cHpV$fWe z`gUXZ0!11P@%AqB88&Nv@4wD^d;p|TiCPtU0TlLPXwCJLbC+wI_x+^LfAC@L$mv=r zRT*7eyJ2y4`|RG@>OMNZU0Xf4*t&N1V6AoMV-Fv8SB^jSq4xEQ;f-@U=Qh;BLyH~V zw>sws61Nlg1`gFa4nKA|+ufD1M?U0gS>VHW`0#b_Z0uY8_U2mu@fttzTie>o*q=P- zI>j=5NkfAbGM@cH;B<2AnRcUp(lV0@mBe=#^8j92{>to!2&{Ia)7=?&an zwyN`SU^6K-fS=>M$H(snp(v`s#5|v%N)lB+1?&FA0>A97QhEb-m#yl20@zGS4dCZE z@9~NILCErIFgDM}sFGOKPr080cv^dUeE0_Z2cRcgD{=| literal 0 HcmV?d00001 diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..1a453ff3f --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,67 @@ +import pytest +from unittest.mock import Mock + +from burger import Burger +from ingredient import Ingredient + + +@pytest.mark.parametrize( + "ingredient_prices,expected_total", + [ + ([100.0], 300.0), + ([10.0, 20.0], 230.0), + ([5.0, 15.0, 25.0], 245.0), + ], +) +def test_get_price_includes_bun_twice_and_all_ingredient_prices( + ingredient_prices, expected_total +): + # Мокаем булочку и ингредиенты, чтобы тест был независим от реализации Ingredient. + bun = Mock(get_name=Mock(return_value="mock bun"), get_price=Mock(return_value=100.0)) + burger = Burger() + burger.set_buns(bun) + + for price in ingredient_prices: + ingredient = Mock(get_price=Mock(return_value=price)) + burger.add_ingredient(ingredient) + + assert burger.get_price() == expected_total + + +@pytest.mark.parametrize( + "initial_names,move_from,move_to,expected_names", + [ + (["hot sauce", "cutlet", "sausage"], 2, 0, ["sausage", "hot sauce", "cutlet"]), + (["sour cream", "dinosaur", "cutlet"], 0, 2, ["dinosaur", "cutlet", "sour cream"]), + ], +) +def test_move_ingredient_reorders_list_correctly( + initial_names, move_from, move_to, expected_names +): + bun = Mock(get_name=Mock(return_value="plain bun"), get_price=Mock(return_value=100.0)) + burger = Burger() + burger.set_buns(bun) + + for name in initial_names: + burger.add_ingredient(Ingredient("FILLING", name, 1.0)) + + burger.move_ingredient(move_from, move_to) + assert [ingredient.get_name() for ingredient in burger.ingredients] == expected_names + + +def test_get_receipt_outputs_bun_and_ingredient_lines(): + bun = Mock(get_name=Mock(return_value="test bun"), get_price=Mock(return_value=50.0)) + ingredient = Mock( + get_type=Mock(return_value="SAUCE"), + get_name=Mock(return_value="hot sauce"), + get_price=Mock(return_value=10.0), + ) + burger = Burger() + burger.set_buns(bun) + burger.add_ingredient(ingredient) + + receipt = burger.get_receipt() + + assert "(==== test bun ====)" in receipt + assert "= sauce hot sauce =" in receipt + assert "Price: 110.0" in receipt diff --git a/tests/test_database.py b/tests/test_database.py new file mode 100644 index 000000000..b909e5d9f --- /dev/null +++ b/tests/test_database.py @@ -0,0 +1,19 @@ +from database import Database + + +def test_available_buns_returns_three_buns(): + database = Database() + buns = database.available_buns() + + assert len(buns) == 3 + assert buns[0].get_name() == "black bun" + assert buns[1].get_price() == 200 + + +def test_available_ingredients_returns_sauce_and_filling(): + database = Database() + ingredients = database.available_ingredients() + + assert len(ingredients) == 6 + assert {ingredient.get_type() for ingredient in ingredients} == {"SAUCE", "FILLING"} + assert any(ingredient.get_name() == "cutlet" for ingredient in ingredients) diff --git a/tests/test_models.py b/tests/test_models.py new file mode 100644 index 000000000..077de1556 --- /dev/null +++ b/tests/test_models.py @@ -0,0 +1,36 @@ +import pytest + +from bun import Bun +from ingredient import Ingredient +from ingredient_types import INGREDIENT_TYPE_FILLING, INGREDIENT_TYPE_SAUCE + + +@pytest.mark.parametrize( + "name,price", + [ + ("sesame bun", 45.0), + ("plain bun", 80.5), + ], +) +def test_bun_exposes_name_and_price(name: str, price: float): + bun = Bun(name, price) + + assert bun.get_name() == name + assert bun.get_price() == price + + +@pytest.mark.parametrize( + "ingredient_type,name,price", + [ + (INGREDIENT_TYPE_SAUCE, "hot sauce", 10.0), + (INGREDIENT_TYPE_FILLING, "cutlet", 35.5), + ], +) +def test_ingredient_exposes_type_name_and_price( + ingredient_type: str, name: str, price: float +): + ingredient = Ingredient(ingredient_type, name, price) + + assert ingredient.get_type() == ingredient_type + assert ingredient.get_name() == name + assert ingredient.get_price() == price diff --git a/tests/test_praktikum.py b/tests/test_praktikum.py new file mode 100644 index 000000000..cda2deb67 --- /dev/null +++ b/tests/test_praktikum.py @@ -0,0 +1,34 @@ +import builtins +from unittest.mock import Mock + +import pytest + +import praktikum + + +def test_main_builds_burger_using_database_and_prints_receipt(monkeypatch): + fake_bun = Mock(get_name=Mock(return_value="dummy bun"), get_price=Mock(return_value=10.0)) + fake_ingredient = Mock( + get_type=Mock(return_value="FILLING"), + get_name=Mock(return_value="dummy filling"), + get_price=Mock(return_value=5.0), + ) + fake_database = Mock( + available_buns=Mock(return_value=[fake_bun]), + available_ingredients=Mock(return_value=[fake_ingredient] * 6), + ) + + monkeypatch.setattr(praktikum, "Database", Mock(return_value=fake_database)) + + printed_lines = [] + + def fake_print(*args, **kwargs): + printed_lines.append(" ".join(str(item) for item in args)) + + monkeypatch.setattr(builtins, "print", fake_print) + + praktikum.main() + + assert any("dummy bun" in line for line in printed_lines) + assert any("dummy filling" in line for line in printed_lines) + assert any("Price:" in line for line in printed_lines) From 793eaa7734e4b771e8dc13bbc4193989ac0c3f34 Mon Sep 17 00:00:00 2001 From: tim Date: Wed, 19 Aug 2026 23:53:16 +0500 Subject: [PATCH 2/2] Unit test --- __pycache__/burger.cpython-314.pyc | Bin 4125 -> 4125 bytes __pycache__/database.cpython-314.pyc | Bin 2769 -> 2769 bytes __pycache__/praktikum.cpython-314.pyc | Bin 1331 -> 1331 bytes coverage.xml | 2 +- .../test_burger.cpython-314-pytest-8.3.2.pyc | Bin 0 -> 11324 bytes .../test_burger.cpython-314-pytest-9.0.3.pyc | Bin 6378 -> 0 bytes .../test_burger.cpython-314-pytest-9.1.1.pyc | Bin 0 -> 11095 bytes ...test_database.cpython-314-pytest-9.0.3.pyc | Bin 5593 -> 0 bytes ...test_database.cpython-314-pytest-9.1.1.pyc | Bin 0 -> 7857 bytes .../test_models.cpython-314-pytest-9.0.3.pyc | Bin 6164 -> 0 bytes .../test_models.cpython-314-pytest-9.1.1.pyc | Bin 0 -> 7844 bytes ...est_praktikum.cpython-314-pytest-9.0.3.pyc | Bin 4169 -> 0 bytes ...est_praktikum.cpython-314-pytest-9.1.1.pyc | Bin 0 -> 3996 bytes tests/test_burger.py | 39 +++++++- tests/test_database.py | 30 +++++- tests/test_models.py | 44 ++++++++- tests/test_praktikum.py | 90 ++++++++++++++---- 17 files changed, 178 insertions(+), 27 deletions(-) create mode 100644 tests/__pycache__/test_burger.cpython-314-pytest-8.3.2.pyc delete mode 100644 tests/__pycache__/test_burger.cpython-314-pytest-9.0.3.pyc create mode 100644 tests/__pycache__/test_burger.cpython-314-pytest-9.1.1.pyc delete mode 100644 tests/__pycache__/test_database.cpython-314-pytest-9.0.3.pyc create mode 100644 tests/__pycache__/test_database.cpython-314-pytest-9.1.1.pyc delete mode 100644 tests/__pycache__/test_models.cpython-314-pytest-9.0.3.pyc create mode 100644 tests/__pycache__/test_models.cpython-314-pytest-9.1.1.pyc delete mode 100644 tests/__pycache__/test_praktikum.cpython-314-pytest-9.0.3.pyc create mode 100644 tests/__pycache__/test_praktikum.cpython-314-pytest-9.1.1.pyc diff --git a/__pycache__/burger.cpython-314.pyc b/__pycache__/burger.cpython-314.pyc index 66bc125d22fa913a4970c78d6a3932cbdf2dff6e..028e000a115e84f06fc5c86a62103cfeb66bf64f 100644 GIT binary patch delta 19 ZcmbQMFjs*~n~#@^0SNwhZ{!jd001eD1Nr~} delta 19 ZcmbQMFjs*~n~#@^0SMkYY~&Ia001cc1K - + diff --git a/tests/__pycache__/test_burger.cpython-314-pytest-8.3.2.pyc b/tests/__pycache__/test_burger.cpython-314-pytest-8.3.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..410c16e80f008706edd577800b319292ad83ff7c GIT binary patch literal 11324 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 aHsXgyB4Oc-@VE|=i!Ax1wNBW==J$U<+w+kC literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_burger.cpython-314-pytest-9.0.3.pyc b/tests/__pycache__/test_burger.cpython-314-pytest-9.0.3.pyc deleted file mode 100644 index 95bcfd71a693797cf28cc18d5434192d4081bd2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6378 zcmeHLOK=m(8SWXiq|uBlKQN1pu`Pok2ph@9;*DAJ@GG#!8G?+7gG$JQ5i4uPJ)>pq zt*!DFNv)GyI675(@F54tiQIDBO6?&>*%p>-icP4bQmNcbnM*k3?|Iu%6`^XATy{$8 z`TxKFeopuI{oP%W8Xm!O=h9~nf6gJ4rHcK8EMa>;gU}+ni$rD=X^in^M|?%L9gSek z-)`mvv;gF=qrnkQ;|!Z`G&I6%ydmRJVI-`D+tE)0L1B zH5wMyX(!@or%tThhqQW;IfP<+|3ONX~u?@4)3EnUM%c{Agi@NYgo~pe;mm zj+|CVE-R_s(x-}))uidPCTp4e-_21>4$K(B*JQx5bXpdaw6pS-uu>SvTJvC(5g_%! zfBQP5i)aeIocXwt2;cFvW%pQF*DCr>TXibz6s^s8>^W9^Dc`u?wz}^Wo3v_eM=4Z? zhK?bmV7CQVN?}i1*zSwshkAogM~oN{gPsvp_Yc_Zh}=7UgN|=VN_sb3%8x&Z*F27@Mj`GSky( z7plze^8?DfCaGFFL-hJ|Hj~e%iKLLMJga1gq=z9JO6T%g4r&PGW$;k-rnLG%F6O5V z*Yr$YzL&{c^OIIH_a$0`9=T);HYXPb36Y7uCw*Tgvl%T7lakLAG8*K>1ijwvkp-TF z?kU{|eI|5g>V9Lsb>4N<1==lhGJCyBpI13)DrT#vy~%h`Tp{v9K=TBhCvc&&Wq$9tGOwREbmwEh1ZVTbX-TDXp4J`# z8>BOZ=`@{KcL4TC0Z9?XJM|4Di|9=g5^BG~Pmh(GPJYu^x_P^NX|l}US-kSHX3wu~ zFAi;D{>vL*+<0=OjGO*ie{jkFa&Pl*u0EH_ofpb``huISGm^ZhZ|h%wI4Mc z+Tu{Sp(3=b3N0m^CZL30}f~{Yf=CnGhBP^YA#5J6-wGE>lGpA}va9C;c zmh@>g(O`!w z(3Za%!PTK#!6Jk=MRo`_(A=Z(+FezEYE%6fdkqMM60X82!HLHPq5j$i?wQ{iWaW_I zcvX_4zzlR+Gx69%r-3QARCUVY>=BDWAgvGVK8{y~Z@a%9>UHa{5^j1a)E7Yc z{c041YkcuPx_$7&9um1kfdfUYf?!(tURNuB0Kz^Zu_pjpp%V*0t zzL`8%Ne-S-eWjy)MHDOq#;nyFSrok4R1<85nS~OsG8DgUE0A{P7U_9ps_f!EfdbM*+ zz_p6O(-xd6OcnTMQ*2fEM)qa|NM);mcFKuO4G#yxomp`JRq=`3+|`ti0@d6t8+t4t zeb>39KII1>ZJ4;?0n(5svUScUZo2>}4*7_@D0l#|M*Pav}Y<^0!uKmY&N`H#R^ zcFzJwiOq=~tWaTez>FaLH!t0~GWa(1K-QvarkIroMf;e~Jm6~cie%C`<;;b~qy6wi z?fM{CfKw`oLl#Luq6dK-rJSOXUTQi4$=Jf4ezV@F(?Ya=Av{j+#Lh)~dwb$NaCOG! z3f>?Df*l%<&>+NfZgqnYU7&|6yRrW?(%{Spf`$!77(p&miNZ5EN0ak3xd4eunQdoq z(CZxOtX9)$i@(OG1aKzVOJ7!v-zkXlpw(#|#4GYzom5?plGE zqpO0g-#YFp2~ksh;gKDO4O+s{)^=!)83f4L6q-x8a~b;IS;5wC9d|B4$U?OjuIOZM zP=7~T+o3sT5X!idbip@?`K)cwXy3NRZQ<-d%tr>mM-OC+T3*uhAnXe@Gb4e080kTD}>49s1am8Xk&=_0uaPV|ab{VgP0K89ibjL^@})Z_}Zm?PY##3rcFNb1TP(UQY>+;dT9UhV2L}p6~z9) zwm-D=>G diff --git a/tests/__pycache__/test_burger.cpython-314-pytest-9.1.1.pyc b/tests/__pycache__/test_burger.cpython-314-pytest-9.1.1.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7567ca4ad28aa2452c2869c1acacc3f3d468a83e GIT binary patch literal 11095 zcmeHNTWl298J^iad!6sJs#Z$XKCbP>i$+96jjF0|=JHbd(Ek6KnKR>MgP|fy zA96H%=0E@W&uwPT_g~I-g{y)Bq!a)C$<@y!K^Vt^l>#R5xJML(S>d7}i$j7Yvb*b) zJMU@}P7%%1X4H5!FVwh(e5d@HpYhy7fm1;($Y?SooeF88HbM4m60|DW3wc=fL0&EU zA+Pz!JG|8z*uD>MvuTTx19C7X%2KaO4#`z9mmKbO#RR$GtSDClu>#}6K z-MbvmCr4zD?2VIdaShiqR%^}B(Q}=}v+uB4kJYnvzXI>*h?oQ&cUHq)Jef`>sFI`O*{NKTDtZX26PNO- zw3f=Kx;LE#2~}@Qs8_Q2^aK-4Os2D!lIcVyIi=`j&gmg@D1 z%UL>=)Dp_|TsoOaYEYv~j!8zn)Q9tua7^P#?R6IVoP}PaV05|PSvaWT#*MI~AM8F4 zPh9QRQd8Z>Q@M0@s(U)Q8s1k^l+ML%mIFm?57P)Sa8Wh*Wj%!UId>^rzFn=88ymaNh@r9iq4= z4A}Mq4gpSOR5l33mrUz1Lkoi96QTGBC>T=$ZN#hzG5}YclQGXNNP&@NVyyw9`FCmQ5ZV;=6pLz!}fWu(;3v#Qg*tq}8&ceCT;#(Jr z!4GGTStv<@pP&8F*_+3Tq>&?L^L%|lYAzA;S|-g1mNvtn5vfex5=fY(l?uYZo3D2Y zJ4&1lM3FSptuX0v`0<1e4@0xoGBiUBlU;o#Hoan$ip0d}p17Nte8(*$Fim%R2URq| zafg8EE{$|Ju*wZa@Bb%OA&S~7S`Vw%$2GTQSeIdk2XQX$DKp)@V=s;!UaM#84yJnm zOm`RH$1yno_z}{5gG2AUGj!&p?j6r-X+<+oWA^Ak89Y$@tSG)e3Lds_hNAkQs1ab3 zqrYWr@^Eru0;~?pE2NvT=0&%vtNKYxmEdwl{l;G%b>*`JF|w z4Ys>wuIyfDE)d8TrQIcBUdv=RGgoYmQH2}bc@tS2SEIm^$`I>uhUlhNkClw?kc4mOzPf z(*;ZfG+x$|=a3)=)|DmJ<}QN|uN;)6xVH>Gd}F9yS#tD@`=BhrtbJC`)*av@1n}Vo z_&6tr06wa9&-+KuA3O0ha3!ln)MS3#vN}2k=w9fN_F&eF*;;GkIdD>C!wJQAq}Nhq zD*K7z*u*afD}LQ`IYm`X_o~WxHZ$R{B`P5cex4?>n9#C|LCZ6lT3^-quiu!J_=ytW|SI=39^nLTm8YSVmR;UJW%dS(Yrn7K!SCd_Or zl89Z}UL@@gu&#L#41)KHq|E_A(S^nWfoxHVmWX*RlPH5An`2ZV=$O1E617Sz4(TFx z#f6*%)G!E|iP+d|7?A2N@QA^HQYHXYwPc!ZhXqff&3MCV6F-P=Z?E80vz9*08T=UFt`)Kki_=!Y${G1-X5{M!JG&B^;rwC z?{?s)pf+e!hQV;$4=`9gGVOpt z^s8Py403p~=J1O#T*KYDf9N+l*G( zJ|l&FBQPakO!Y+#NlCAL2CV1+_Qick-D5bx`;c4aR~j+AeKZDjPUrHFia51>yQLjW z^>Bo#2fiXu1LNuZ1n33yF|}*pYA2GJi3ElypPkhp^tc;->J!Ljg(r=IR1NOu&SK-f zFB=N)e^5L+S`1#`?k6Y*?tXqCqmW~o<0|9b|a*1K2GG#_%)m=>AU#8h9gVM6Ls=;urI!@qeSqUMPDUY!- zdl;<;OgX}U9sC9WYcgy)z($>skMYo)3@0A4Xj#hEwgLzTmChiXR08{vI_n$_lnAK= z@-@PFZywIw@~%Pnil;9R;sROPADhKkwbwqU# z7*QSSz~ykME84`i&4(Vt7`K8eo$}a9%MmQJXH_|z#Z^EVjN0ug&x^MM7$x1VG8n}( zu4iEs!$&MRR*n8>SprM95{&v7g!($*jkUoq=S>OGATw$wjSg1d#E{uu%z7PI$-d7u zCnj)o!OUHbm34@fdl4dyvyEOry)g5i4XneDTd%HY^X`Buhd<3?W$>*y<7am0Owy~? zY%4v$_m%Erq?VrBn-|IE`9nn#yVrNP)Hk@)H@GaFT(Ae}UdcO5hrSRtc-d4rdh)|5CKh$0#N*OGLS1t0%d-FQ4o#$hEqafF%& zoOuQ2t>Z-9Hc!FBuXIEKXl9wJ4q30wm3;?HM9lr~aRK~*%94FBz`TBpAC)Bw?{aS0 zKYcvzMjV;8y?+DeY$K6lgxw8z|Fz8fuNyh$z&WSa%*|hCt2pYn>OS**qh&7n)H$C5A@EiUS^NA4A=?G@;VJ2htK4ut$S5c!` zZjhnz_i``D95s>6Yq>o9^#I)_?c(Xj8k>b%0iosFv zd}=qqwQ!(V+lBWd#oF%sbsHCs7we)=e5B4hd-_Sxv=^M-ksU^3vHNgCDI8f0N0!4| zXHPzm+6!dY!pNeut3=Fend~Y^?MCsggXRJ&*n*dq)|5CK2&lOyMGB;A0c?$~5;3o3 z(p8WmM)9tL<^n6&f|r)olsFp*sJSOK6-ehi%)hfl%xjr+&Vi|drMouCt5;B-mzLI) zI2(u}>0};R)NOwL4Q9wrh*`v;fvDTq2tDxfbRWch)#RiC%nzY#*F@b^z9YZgn!1q#x@N{ErCi zVU4C{6pCItvr^eNds|?S$oTI4uTNzs@@eG_iVqAvWI_EsWUFpb6#ps+p9w#%`bud1 zyU_HN(Ei9v#Lh=yuh{aa&MU?q)dj?ztBr!o|M`|5Z7GS3i(=zFvi(7@dT!IrZ3Tbh zy`Ja+Q%!8mq-^Y<>R)X7LW< literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_database.cpython-314-pytest-9.0.3.pyc b/tests/__pycache__/test_database.cpython-314-pytest-9.0.3.pyc deleted file mode 100644 index 2a09488269ee9a365956e488c040f522e24c7166..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5593 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 qAP9dYp0pO;kAcJWhpnBtI1X4RlK2-TfDevKRaS literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_models.cpython-314-pytest-9.0.3.pyc b/tests/__pycache__/test_models.cpython-314-pytest-9.0.3.pyc deleted file mode 100644 index 47254415035a1bdb4b918672e518e6a7b4fc70ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6164 zcmd^D+fN)-7(a8_*~{!M&{~Uag+*#*T4dWUDpjbUpx}k#2un<;lkGBv)n#`%Gep6d zV7$@z;46oKT z=aPvSfkW(j@2yWHLh>khN7!X{e*^OM7g~wd@DrYCSQD7^+*}EU*idPT znv(^yWNRWjJ~aHIKF~ijFg$9EzA-XjyfF02E1+Y?Y7MXVjXgiG5G&YEn7B`GssZ_RewrLo&4zl6jIss&n{7Piu^c^H$w(j8Y zwaKMju#&uAGzcpE`33(5m%d0Qyon&=f_JwoVpbdp#$XaSW-~3syZ^KOS<*EKy0OO` zBN-5;j^U(DKwjqB=EoGx72t@S6QN zxMn3Sw+HTBMbX20B&(!_J=*X@gExDDt3KlCsw3Qquve8g!h;okMyN>72y_6t?SZPd z$JKP3@Q=DJG2VCIcU$Zbx=rxz=K;ITkArTD{kPqwN8!bt{9WwnVNzxOJd>`?m5{rL zq!Y=L6kkQZCvz6Os_oRHZI$^h%|c7pFpYxgra-aHZwd=9qOnu6V(+<3s)zeu^i;sO zs`HxFF=g5Yt`)KO+qBsGsUFAqNzH;(g9lH=7o0!k(p1V7Q$=QB7AE3BvO3lnTqFjCi+59$OMHa z9KlKbR8Y8N;jKDzCdChmuV>cGFBR@87E!iLi&qVc=cH2vZ3iz5vz~_KVUhe&Pt@en zNnd-QNc2FZ+_uEM$4?%_|&;$$)HsjsHffXkJ zF^F{<2%@X7aPAJ0Z;v(ZNI0fiow5DG9hCW8|tarEN$wBxjMF17hJ;<;-4ee2!z|>csdE87r#A z$r*^pIkSFraPkA>$f@NkUp;ZF;nLzux7A}?YSWt9v?^y-)uvl&3Ye8EYbxMO_qTzT zlrQ?s($hY>E@wPxljm_P`$mGp%9UVbK=ReVK=5|8xHhl2ww3-hwQWmwe;YDbpt!2W z;jtW7w=TDN(k6O0IhK7R!C|F87#Wa!H82p&i)&s}n^)ztt7`KtwFQ`!u{HJVmhApE z&;omos>b2599Oq4pY^0op2xB58wn08W5LLPh|BEdUVq zgiBcO6eoml z3i{3LqRkIgvm2G`ZiNx9}Csmw6I|E?H$G5y-E1hIJ?3~H+)K+ zE1H*S518<~p!G439Z3*`?+N*ce3bQTza2TX z9XYuZl0wREND;+flJJdnw+^@+=}6Y J&q;6h@CPW}##I0S diff --git a/tests/__pycache__/test_models.cpython-314-pytest-9.1.1.pyc b/tests/__pycache__/test_models.cpython-314-pytest-9.1.1.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66ff380e401b534ea8dc1389dd6654ee2d45d872 GIT binary patch literal 7844 zcmeHM-A^3X6~FVbpR=sNm_Te77K0te5Z3nM1SjC&24YB4Or}6o31_rk#(2|ZcYSBJ zEmV=HnyRF!)K?yP=tGcFsSo)B`X>NJV2x76FMY@x4v{MPsps4~GdsIo7qFpeB#(CQ zJ?GqW&b@bb?r(ngZg;#cO5pnCliz>zZIF-*D()3>guN#MAxq>#q6uTf5?C#cN+q$4 zjLKG^jkg4?Ahd{Mq0z7vW;SUoG8(m_OqR!#(U=t*t+VRd$nD_7S+|pNJ<(Q{T}caQ zP1;MnVxPz@TCkaDp=Oe+?{i$N`sc_NhHR0FYz>FV7QJ1kDOxNg-HvH>T0ABB#(4rV z*H>gdc|@5TAoIzJ%#BBsxe+p-s>pmw6FP|6{0-jgaaFLTAD8k_MaS}U)R@g0c}o@T z=CSdc+Q{(O$oQl_`SXbp{hhJ*-UFN6RNe5i8&hwOEJpL`d84ODvl$};4;H~MUNU?o z`0ibTVu?(X55@jZ2$==jS@OPcPtb%JXyKP8&Nz<*AxW`=tV!RXZp)b54zTQNqAi&g zwF7r^g|r3Z4&E)$`LtzXkLT?EZ_e-(dj@+(3B5`QevOus|j#x!>;cHLkCymb-CwjV3_++RZp=> zZ`9h!wAkm&&K=`yb5&gYzsLO)#-&NV8P)ce+t@g~~)R5SV; zM@S4Z*DJ0G1jlqqHGAg_OUH#9{kThwew-NO&abJa8l`Mmhg}alIs_{emt&gR4SFV> z%jwi8(oA8#n5KpugJ%6sDVwvhdD9N&3gBVdExLKHP|D3RSA8y5xRcJY4(*6;rtcb< z!H(ZxQ_2?dBa{}X-KcZ8(2ZXgbLo8Af|j)~n?A*5L1B#%Tfq+b&A9AWQhwzsS9reH z{mL~H*V=^(33gG$5xbSm5AM9~&KkyTm1y2%W2Qaegi+>SpjaZ`)e|MYJo_Medg<*) zO8n0QpAM|c?aKq7U59FAazkm~k)6*L*sptu_HU5EwI1kX`X<<=6Gy^hofy{65dcN4w_dCf1FSA%piat zgOkP6S&tm+)$i0G=sF$WWat8>T>W=dAhu(;vxH-;*35?}p{A`XCX z08WfK*#%U|!?mOY{8*;=%CJvVjn4Nv+YeAxh&S^jO9Xg&xXckjB3_z-+I$oTHWv4g9}L)|eR zknehN2jshD4!b|!4Y=S3yXqeb-wiRo8>-^F;Y0Ah^(enDJ z#@MUyB-1L4RiBCKA}rK`SX=})qq^vEP=sBJP&PE=<@`nPI!gH9(Jm}-;nIs(bVFgH z--SxXd7goBdFqUK;ut(gW&?TyA`#-vzd`}T^AtIGcIDRJu0CkEw)E~JrD;cL-B4QB z<;`ans5uzG7l0i1O{TiBBDR8Lrb!xJ~y<2%p%}8)q9rj21G|vnI_vjOF+X1ld;{`C0ZLOajz_b?tb_@V^6eqmZr=9-~09I>jO_Q)1TmZwrE1ny`Ua7^v zYVC@Lpf~(J9m3i+l(u#G;=0oIKxqeIb!tPoxFb8CEo_0~z_NwQ2wIM9Q@-eG+bj=n zsTm0lt5g0+pXQlC06zu_s<;?64HLjP0SBCOFcDyq?+k%C0*9>GeA$|q98#O?uzQxv zP8sZ%b$oup^$y4mmdVtJpyv!p}``Q_SB}jBMBYI4@FMlgj82 zfWnsN)ASd%0>{cQT8m~E4R-QM@dZMW3bWS<9Rg{Mu*vb`+wcJVQ&h?s*Xg^^gnZM) zt;en;2*THdd_sO#_fOLJ57PcM`N?jOh~Yn+`R$nH;0>QmN zP!zw5!(T{yCqUXoX*YI|fKD%<^FIO-k0PzB%IA~o;VTa#iPf&phu6cG{r$o2-3bS2 ax4x>s1B9zyxcV&N-7NguIJ{rjUHvzTo5xK6 literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_praktikum.cpython-314-pytest-9.0.3.pyc b/tests/__pycache__/test_praktikum.cpython-314-pytest-9.0.3.pyc deleted file mode 100644 index b42e32053d5c940dce2228a043f57ca3a7684558..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4169 zcmeGfO>YxNbk<(mYa81kB$&@61Om8CoRox845o1j5LyzVg<4cfaX0qHEb+%Oy9NwG zwc1MM&>ui0q~=hmLG(b?Q`HNH{(yjuQ%0%Uie9)Og-V4}-|UCS0V<>_QhQ*vo_X`$ zypMSw^VY8i13m=L!NldW5gws5UD%Jq0+!wdpn^^#kvocX&X^se&XS`OjqJ3!|K%^8X+a zylYAHCwa!rG))Nh4mNK=L)M}biL1isgwWE!sIE!By))?=vZ8ZtdWVI~-b82<5(8pT z3{9@GcTNOth|NsPUO;BIP`=3)n?BKMLu}rHCXFnn7+bTgH?#2>{x-&ELoebVX+_y+qU&PdmH|TO!7>IZA+SDtg~@!-hz@ITZTQK;l$Q`98QXBUd03a z)5yI4JRWVY;_<(VM=Nxm_NU%VDW5NQO_d7JepX>wFX2M!yp$`+S+mZz4M!YA$jW-E zAmwG^rI3o1v`jpQj~+XAbo|KEfGJ~I$>o$n*5Yd$jyO#|y{yWZ);IRR0Mdfec}dAh zQ#m;WdNtC{*1(VDj3O6wjR+%>E=@_AoMsh|5Eax3zojG$`?(4_;h1Q&M7B|UVdD_F zFiIkJN!yo(J;OEb0Jk^^*R`w*(|$8ZmA(Z-H|VdRljtzq!Oh(?$=PBqq6&NkyazY4 z7j+;JZAH7C3K!vMi+5@|1|K-01B6#}Ij_;ayuFL;>wjO9vDU9E`Th|_%@y+27;m;P80=Siza8@JknG41oF!alr z6r_!;X|!d()?2}}u@E1#fsC!_k=BEFtqX>~D(GjSeL>iCN7!`j#8;=jJavbjrrMLJ zZcfyNca~reA}+(oW!XRtHL{@>fJQbz$5lBIB{|xqtqg#^Ze##_oSZwv%FZMYM?T3UR9C0pgSjWeV-0!_fGOd5M1Yj$`=J zLAaY*|Ez=XHo#JH)43Ag#pi~uemuLa9@_qW{0Z&>@=6(W$vr`@yx2=^GOT63j@=lW z9l3h(+E6{zd2`IPDH6c+IK-pLx}@uvcpIfm1X{AX0(T-$D;U#{HnM71EgQ9L5Zq>w z5+7iVERir-m(tD@OSueGvWipLTyaXuS=V(+lcr^gCc%UeUZq$#gmDp*HL2+$&P#d< z?v0#OkaVC#yu_a`7G~tKD(UGnL@=rlE@=`nAa*^IfPt{D6TFF9>Zg{PS@cHpV$fWe z`gUXZ0!11P@%AqB88&Nv@4wD^d;p|TiCPtU0TlLPXwCJLbC+wI_x+^LfAC@L$mv=r zRT*7eyJ2y4`|RG@>OMNZU0Xf4*t&N1V6AoMV-Fv8SB^jSq4xEQ;f-@U=Qh;BLyH~V zw>sws61Nlg1`gFa4nKA|+ufD1M?U0gS>VHW`0#b_Z0uY8_U2mu@fttzTie>o*q=P- zI>j=5NkfAbGM@cH;B<2AnRcUp(lV0@mBe=#^8j92{>to!2&{Ia)7=?&an zwyN`SU^6K-fS=>M$H(snp(v`s#5|v%N)lB+1?&FA0>A97QhEb-m#yl20@zGS4dCZE z@9~NILCErIFgDM}sFGOKPr080cv^dUeE0_Z2cRcgD{=| diff --git a/tests/__pycache__/test_praktikum.cpython-314-pytest-9.1.1.pyc b/tests/__pycache__/test_praktikum.cpython-314-pytest-9.1.1.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5338ca522d9b6d964da40cad7bee3779bc4da3cb GIT binary patch literal 3996 zcmc&%Piz}S7oT0vuGg`X*uja@29h>O)6eCr(=?$eX`!VAloFbj)mLA>DyxmXZMKQm z%j~+PLLiGjf@35u9602FP`LGilp{zSIA&F+jz*C{q8DyaTcPjc^t~DX*>#it`4AE# z&0Ei#_h#O__j_-~FLt!IA!yY4eP8cnSKc#wx5Wi*de;XHB${uO6JC2;`F zU{@Mw%&@O`UY-fN;TgqM>imcsQ9~)@wy79sRF#0nR2gWy8V1^-DnL6`VF;xozp*Xn z(jvtdin%3_#J{{0Q&>!pow~Ved=Txw6vOWrMMW34yZQ%;j^=wF(=L@5sILGWQT&1zD`z9@oqb^A)l*ClXcJ9*w>q= z+ht2WPnCVGtYkIf5jb@g`x3V7Yi6YYKkW0HyC_+7DO}$&@VTNi25LAfPt?6NfSxL? zWW!ID=161ftC6hYORH^JS&e4HY79=(4wiR-4?DqQ@vJf$9)h?GK(|E`r4v+IC|TOE zv_P??7mV6)j7ClC8Zq*wVYwR2#fagSh^5`omrDkKsYAb^o6GvbvY~;xL%aR4uju>{ za}CEmK#ZJW+AdY5byr`|9fQi}O5~bBsALn0O4twu&7dr=+-rZMz0yJ)-WLK7_RQRghp(lFS+JYsXlDX`fmXnUq zXrX8=8MkcR%`MW%Reh;`I?1&1#(Ol*If3)hcFt*97_F|HHXk`v_%+g&}Yvz4x6Adu+(qNn`UFSxUc zQyxxz6fyDi3O=zTqe$%!&^#n<@!#i5|ek3BFX=~e-QOv5*!K6{Y~%dOfz6bo7-V@MiwhoL){fdE{ihgO&FM30xJ@8R~(=02LM z;N&k@`Fvm#@2lc5506#w_!cnsZ{lPX4|#Z~icfj?6bDsIv;=3w4-QB=+EtT4O<{GvH5x}jF~gKk0C{{gdOw}3;yw@eRq?oo$8S%s z_k8#E_lfT=g1gBPP;GHHJ34pwTaUai{-V@-Mt5If_~mVv<6FYeaQqYGaWI*mK|b_< z%1e96XK-VuR!DTinOc&$28j+mAIv)%ujlrn?(qC}2#d*Xs0{f~ffXFhc+ZBb2&zFK zhshYIGKe_u19=Kg4tn@t6(9HT@q4lON^+&JnHXMuXESm5PV67se~Pmcks@ushr*J) z8*I(o-r$z~UAa9k&I=Ru+hmX1Vz27GM}?RV1wt-B6%Yxl0((TevrxQY1VY5?08J3% zQT~%k1Cw=ly{_pw!3AG}jo*Oo%y7p(u2A#RFzDgIDxUK2)cV-EUcqNs#pW}^9v-gZ z(;hy({?1)|W_SD;D0#71=iB^U@q5DEy+@o>F%YK^#0m2_@pm7I!9jMHY|;zt$5iV9 zKLz=-mR+RmMcH`9l1a8Cbmt6^r=(xMhx@DegojU5@JSYj=QnXr6=yu0S^MxVewBwH z9VdOT6pfv=Z^34@_b}b3!Fv=g@=UFCm_;i?jGM%C4H{{(Xt=>^17&WxPH20{GF`6A zp5**NUaL3kwNbmh((D(zaCkK#3}5_U-y&{O?Ny`UBI^#fgLV_Ut sjL;|O literal 0 HcmV?d00001 diff --git a/tests/test_burger.py b/tests/test_burger.py index 1a453ff3f..03fe0f8a6 100644 --- a/tests/test_burger.py +++ b/tests/test_burger.py @@ -5,6 +5,43 @@ from ingredient import Ingredient +def test_burger_init_sets_empty_state(): + burger = Burger() + + assert burger.bun is None + assert burger.ingredients == [] + + +def test_set_buns_assigns_bun_object(): + bun = Mock(get_name=Mock(return_value="plain bun"), get_price=Mock(return_value=100.0)) + burger = Burger() + + burger.set_buns(bun) + + assert burger.bun is bun + + +def test_add_ingredient_appends_ingredient_to_list(): + ingredient = Ingredient("FILLING", "cutlet", 35.0) + burger = Burger() + + burger.add_ingredient(ingredient) + + assert burger.ingredients == [ingredient] + + +def test_remove_ingredient_deletes_item_by_index(): + first = Ingredient("SAUCE", "hot sauce", 10.0) + second = Ingredient("FILLING", "cutlet", 35.0) + burger = Burger() + burger.add_ingredient(first) + burger.add_ingredient(second) + + burger.remove_ingredient(0) + + assert burger.ingredients == [second] + + @pytest.mark.parametrize( "ingredient_prices,expected_total", [ @@ -38,9 +75,7 @@ def test_get_price_includes_bun_twice_and_all_ingredient_prices( def test_move_ingredient_reorders_list_correctly( initial_names, move_from, move_to, expected_names ): - bun = Mock(get_name=Mock(return_value="plain bun"), get_price=Mock(return_value=100.0)) burger = Burger() - burger.set_buns(bun) for name in initial_names: burger.add_ingredient(Ingredient("FILLING", name, 1.0)) diff --git a/tests/test_database.py b/tests/test_database.py index b909e5d9f..afab86de7 100644 --- a/tests/test_database.py +++ b/tests/test_database.py @@ -1,19 +1,45 @@ from database import Database -def test_available_buns_returns_three_buns(): +def test_available_buns_returns_three_items(): database = Database() buns = database.available_buns() assert len(buns) == 3 + + +def test_available_buns_returns_expected_bun_names(): + 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" + + +def test_available_buns_contains_expected_bun_price(): + database = Database() + buns = database.available_buns() + assert buns[1].get_price() == 200 -def test_available_ingredients_returns_sauce_and_filling(): +def test_available_ingredients_returns_six_items(): database = Database() ingredients = database.available_ingredients() assert len(ingredients) == 6 + + +def test_available_ingredients_returns_sauce_and_filling_types(): + database = Database() + ingredients = database.available_ingredients() + assert {ingredient.get_type() for ingredient in ingredients} == {"SAUCE", "FILLING"} + + +def test_available_ingredients_contains_cutlet(): + database = Database() + ingredients = database.available_ingredients() + assert any(ingredient.get_name() == "cutlet" for ingredient in ingredients) diff --git a/tests/test_models.py b/tests/test_models.py index 077de1556..b1d35229c 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -12,10 +12,22 @@ ("plain bun", 80.5), ], ) -def test_bun_exposes_name_and_price(name: str, price: float): +def test_bun_get_name_returns_name(name: str, price: float): bun = Bun(name, price) assert bun.get_name() == name + + +@pytest.mark.parametrize( + "name,price", + [ + ("sesame bun", 45.0), + ("plain bun", 80.5), + ], +) +def test_bun_get_price_returns_price(name: str, price: float): + bun = Bun(name, price) + assert bun.get_price() == price @@ -26,11 +38,39 @@ def test_bun_exposes_name_and_price(name: str, price: float): (INGREDIENT_TYPE_FILLING, "cutlet", 35.5), ], ) -def test_ingredient_exposes_type_name_and_price( +def test_ingredient_get_type_returns_type( ingredient_type: str, name: str, price: float ): ingredient = Ingredient(ingredient_type, name, price) assert ingredient.get_type() == ingredient_type + + +@pytest.mark.parametrize( + "ingredient_type,name,price", + [ + (INGREDIENT_TYPE_SAUCE, "hot sauce", 10.0), + (INGREDIENT_TYPE_FILLING, "cutlet", 35.5), + ], +) +def test_ingredient_get_name_returns_name( + ingredient_type: str, name: str, price: float +): + ingredient = Ingredient(ingredient_type, name, price) + assert ingredient.get_name() == name + + +@pytest.mark.parametrize( + "ingredient_type,name,price", + [ + (INGREDIENT_TYPE_SAUCE, "hot sauce", 10.0), + (INGREDIENT_TYPE_FILLING, "cutlet", 35.5), + ], +) +def test_ingredient_get_price_returns_price( + ingredient_type: str, name: str, price: float +): + ingredient = Ingredient(ingredient_type, name, price) + assert ingredient.get_price() == price diff --git a/tests/test_praktikum.py b/tests/test_praktikum.py index cda2deb67..4a513bbaf 100644 --- a/tests/test_praktikum.py +++ b/tests/test_praktikum.py @@ -1,34 +1,84 @@ import builtins -from unittest.mock import Mock - -import pytest +from unittest.mock import Mock, call import praktikum -def test_main_builds_burger_using_database_and_prints_receipt(monkeypatch): - fake_bun = Mock(get_name=Mock(return_value="dummy bun"), get_price=Mock(return_value=10.0)) - fake_ingredient = Mock( - get_type=Mock(return_value="FILLING"), - get_name=Mock(return_value="dummy filling"), - get_price=Mock(return_value=5.0), - ) +def _prepare_main_dependencies(monkeypatch): + fake_buns = [Mock(name="bun_0"), Mock(name="bun_1")] + fake_ingredients = [Mock(name=f"ingredient_{index}") for index in range(6)] fake_database = Mock( - available_buns=Mock(return_value=[fake_bun]), - available_ingredients=Mock(return_value=[fake_ingredient] * 6), + available_buns=Mock(return_value=fake_buns), + available_ingredients=Mock(return_value=fake_ingredients), + ) + fake_burger = Mock() + fake_burger.get_receipt = Mock(return_value="test receipt") + + database_ctor = Mock(return_value=fake_database) + burger_ctor = Mock(return_value=fake_burger) + print_mock = Mock() + + monkeypatch.setattr(praktikum, "Database", database_ctor) + monkeypatch.setattr(praktikum, "Burger", burger_ctor) + monkeypatch.setattr(builtins, "print", print_mock) + + return { + "database_ctor": database_ctor, + "burger_ctor": burger_ctor, + "database": fake_database, + "burger": fake_burger, + "buns": fake_buns, + "ingredients": fake_ingredients, + "print_mock": print_mock, + } + + +def test_main_requests_buns_and_ingredients_from_database(monkeypatch): + deps = _prepare_main_dependencies(monkeypatch) + + praktikum.main() + + deps["database_ctor"].assert_called_once_with() + deps["database"].available_buns.assert_called_once_with() + deps["database"].available_ingredients.assert_called_once_with() + + +def test_main_sets_first_bun_from_database(monkeypatch): + deps = _prepare_main_dependencies(monkeypatch) + + praktikum.main() + + deps["burger"].set_buns.assert_called_once_with(deps["buns"][0]) + + +def test_main_adds_expected_ingredients(monkeypatch): + deps = _prepare_main_dependencies(monkeypatch) + + praktikum.main() + + deps["burger"].add_ingredient.assert_has_calls( + [ + call(deps["ingredients"][1]), + call(deps["ingredients"][4]), + call(deps["ingredients"][3]), + call(deps["ingredients"][5]), + ] ) - monkeypatch.setattr(praktikum, "Database", Mock(return_value=fake_database)) - printed_lines = [] +def test_main_moves_and_removes_ingredient(monkeypatch): + deps = _prepare_main_dependencies(monkeypatch) + + praktikum.main() + + deps["burger"].move_ingredient.assert_called_once_with(2, 1) + deps["burger"].remove_ingredient.assert_called_once_with(3) - def fake_print(*args, **kwargs): - printed_lines.append(" ".join(str(item) for item in args)) - monkeypatch.setattr(builtins, "print", fake_print) +def test_main_prints_burger_receipt(monkeypatch): + deps = _prepare_main_dependencies(monkeypatch) praktikum.main() - assert any("dummy bun" in line for line in printed_lines) - assert any("dummy filling" in line for line in printed_lines) - assert any("Price:" in line for line in printed_lines) + deps["burger"].get_receipt.assert_called_once_with() + deps["print_mock"].assert_called_once_with("test receipt")