From 40ceb7e0e1787b4edfdbae8b8dd2a4c74a9c0381 Mon Sep 17 00:00:00 2001 From: tim Date: Tue, 11 Aug 2026 21:01:01 +0500 Subject: [PATCH] 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)