From 665efdfcfb576635b9eff084c59cbc4cedab3ffb Mon Sep 17 00:00:00 2001 From: Abylkair Date: Sun, 24 May 2026 14:21:33 +0500 Subject: [PATCH 1/2] Done 1st Diploma Task --- .coverage | Bin 0 -> 53248 bytes __pycache__/__init__.cpython-314.pyc | Bin 0 -> 140 bytes __pycache__/bun.cpython-314.pyc | Bin 0 -> 1555 bytes __pycache__/burger.cpython-314.pyc | Bin 0 -> 4119 bytes __pycache__/database.cpython-314.pyc | Bin 0 -> 2763 bytes __pycache__/ingredient.cpython-314.pyc | Bin 0 -> 2004 bytes __pycache__/ingredient_types.cpython-314.pyc | Bin 0 -> 368 bytes burger.py | 4 +- database.py | 6 +- praktikum.py | 8 +-- .../conftest.cpython-314-pytest-9.0.2.pyc | Bin 0 -> 597 bytes .../test_bun.cpython-314-pytest-9.0.2.pyc | Bin 0 -> 6704 bytes ...st_ingredient.cpython-314-pytest-9.0.2.pyc | Bin 0 -> 8585 bytes tests/burger_tests/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 153 bytes ...ts_management.cpython-314-pytest-9.0.2.pyc | Bin 0 -> 13059 bytes ...nitialization.cpython-314-pytest-9.0.2.pyc | Bin 0 -> 4451 bytes .../test_price.cpython-314-pytest-9.0.2.pyc | Bin 0 -> 6456 bytes .../test_receipt.cpython-314-pytest-9.0.2.pyc | Bin 0 -> 5381 bytes .../test_ingredients_management.py | 65 ++++++++++++++++++ tests/burger_tests/test_initialization.py | 20 ++++++ tests/burger_tests/test_price.py | 48 +++++++++++++ tests/burger_tests/test_receipt.py | 51 ++++++++++++++ tests/conftest.py | 4 ++ tests/database_tests/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 155 bytes ...vailable_buns.cpython-314-pytest-9.0.2.pyc | Bin 0 -> 8465 bytes ...e_ingredients.cpython-314-pytest-9.0.2.pyc | Bin 0 -> 6279 bytes .../test_content.cpython-314-pytest-9.0.2.pyc | Bin 0 -> 7528 bytes ...nitialization.cpython-314-pytest-9.0.2.pyc | Bin 0 -> 6223 bytes tests/database_tests/test_available_buns.py | 39 +++++++++++ .../test_available_ingredients.py | 26 +++++++ tests/database_tests/test_content.py | 42 +++++++++++ tests/database_tests/test_initialization.py | 20 ++++++ tests/test_bun.py | 39 +++++++++++ tests/test_ingredient.py | 47 +++++++++++++ 36 files changed, 410 insertions(+), 9 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 tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc create mode 100644 tests/__pycache__/test_bun.cpython-314-pytest-9.0.2.pyc create mode 100644 tests/__pycache__/test_ingredient.cpython-314-pytest-9.0.2.pyc create mode 100644 tests/burger_tests/__init__.py create mode 100644 tests/burger_tests/__pycache__/__init__.cpython-314.pyc create mode 100644 tests/burger_tests/__pycache__/test_ingredients_management.cpython-314-pytest-9.0.2.pyc create mode 100644 tests/burger_tests/__pycache__/test_initialization.cpython-314-pytest-9.0.2.pyc create mode 100644 tests/burger_tests/__pycache__/test_price.cpython-314-pytest-9.0.2.pyc create mode 100644 tests/burger_tests/__pycache__/test_receipt.cpython-314-pytest-9.0.2.pyc create mode 100644 tests/burger_tests/test_ingredients_management.py create mode 100644 tests/burger_tests/test_initialization.py create mode 100644 tests/burger_tests/test_price.py create mode 100644 tests/burger_tests/test_receipt.py create mode 100644 tests/conftest.py create mode 100644 tests/database_tests/__init__.py create mode 100644 tests/database_tests/__pycache__/__init__.cpython-314.pyc create mode 100644 tests/database_tests/__pycache__/test_available_buns.cpython-314-pytest-9.0.2.pyc create mode 100644 tests/database_tests/__pycache__/test_available_ingredients.cpython-314-pytest-9.0.2.pyc create mode 100644 tests/database_tests/__pycache__/test_content.cpython-314-pytest-9.0.2.pyc create mode 100644 tests/database_tests/__pycache__/test_initialization.cpython-314-pytest-9.0.2.pyc create mode 100644 tests/database_tests/test_available_buns.py create mode 100644 tests/database_tests/test_available_ingredients.py create mode 100644 tests/database_tests/test_content.py create mode 100644 tests/database_tests/test_initialization.py create mode 100644 tests/test_bun.py create mode 100644 tests/test_ingredient.py diff --git a/.coverage b/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..901ad9d3c9e0224cdad5a9cd686e7307c929fec0 GIT binary patch literal 53248 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 SfB*=900@8p2!OynN8tYmc=s~^ literal 0 HcmV?d00001 diff --git a/__pycache__/__init__.cpython-314.pyc b/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c1a77683434f2b41bd2d2186f0a5dbf5dab928d GIT binary patch literal 140 zcmdPq_I|p@<2{{|u76rRic7Q<<2T zl3Gz*P?VWhQXCVKSey+Z;|*it<1_OzOXB183My}L*yQG?l;)(`6|n+!g3K-kF+MRf KGBOr116cqd6CM`; literal 0 HcmV?d00001 diff --git a/__pycache__/bun.cpython-314.pyc b/__pycache__/bun.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4f41a9e4e072f3a033606578833fab4b3623833b GIT binary patch literal 1555 zcmb7E&2Jk;6o0d8J8P4#exzw#1csmp3n^9AB2}nD2yu>Ji&6`OXs6-Eb7adg!D6ColrUeMVaN zq@5c=yJx6{cwJbdOTu>+DfWC9a$XlLQm{zTA|;EIEHY)0Dc{rH8tJlM##bwu`+hrV ze~YhF%#Y^K{Aza1e(zDu{M5T^_RV4Mf%(Ji)qwB!9$U26F~68y$eopn`F`TmZq59O z48NHJbI1WZy>B?tf!Q&?o1Y;M%$~s^WXmx~q~Ej0diU|+gWlbhN(cstf4rDI7r*{8 z#8uIuHM-$kxkuCh`Z9eaz7W2+CO!p+km7=6@^5A@Db8h_O&Bc-34p);iix;I9gl*Y_I5y!HUiga5gb)h_%bw}}- zsFxsyOxw!T45PCU)^i#gOPMI1J0^(jC9B3Y;ecJthUF?Btu^{^=$KSXq)xy_4a`(m zs8diWhmLspJkrwkisfZw*;E90XU8>+UgCv#QHyycWmeB+gBeLD*r+lM z)$O;f8dri-cD*1Q{O*d0o8+R*x3?3M&2W?aXWClEY}|Qx$9UeBIvtm2OZ{lzSz zzbaC0wi@l2_ZX6|+d(|^%t^V?RH=@eNtCqUo|3ZB3Z+zhPsP)sUWLdOFpLAbEieoA9uJ)z)_V4BG#9gmgFqXav@$><@``B@d-k^fvvlBS*&{{{_ vUxN~8{fD{DFT|m%$jiD*IhIe*)%;rTsybXYJI~3HD})$0v!dE32pjM(2nlQ~ literal 0 HcmV?d00001 diff --git a/__pycache__/burger.cpython-314.pyc b/__pycache__/burger.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f6fe9e986e3282d0c70f1f7b66b97bab39069745 GIT binary patch literal 4119 zcmb_e&2JmW6`$SZl1qw`D9aR8+Z9(bBZ;9ZSF)P8@<&`dPUR#ORJxUe*ztlU*Dh0< zWM)^5r4wxjwVVbua%ttF2MH)(=%zGPqr{2pKVdg?Oksfl0g4`Svr3@KvG2|9k~F2- zanL!unR)Z(&70r*m`Sv?1_-pz*LJ+QArkUWoVd;745~+9P$K6@k~>KzIGu~)m_Nx+ z2)e+=!b#7BsEbh&CcPx-iIAi?#@oAfZ_>M$#C>1mG|pL`SF@VF%vr**nLKoXllhBO z&1BWQp0+pG)Y(m{e}H)kPJe^wT$1SgIiD_ckpkGFdy;&F=;Acl&n1Nj$w_!}E~I-I zM`Ro?NQ~oWoB-qa8K;GDf{YVjoL0tZW1N;`yB?e-dTTNScj~ab$7bk7 zmCg)uganK~8+VPr8LP$}^F7)4z`SObj1P@fpew@x+p!+|tlRcq*Gfe@+M2ZItxl4+8!Ee_+XCY>aE$uc*& z%v-|wnY`7Ktp$#TVWp|L3mOXdTLUkSpPfzRGwNlnNV9oeJNt{2_G_CeBWKSupA8ph zElE+b`K+!eR=e%UVVBVkinI=9(|TuQ-t(Tc{)2t1?BgJ4_^(l(wj%KWiSw5CLV;dN=~k?h9p{*tah@U^Y|M=6@3)PTG*wr?7g`NIm%)tjG0p3pUB8#?^AWJ` z2pSE;UMo=dIrRbqEbD@fMu0TJMZ1yvJs`N;h{_PcF|@pkbz4yZhuPtH2nOiLDd?Nq z6iPLQE9SrmfU#gC_LAZK|~#iE+exH$Fz?-3l^Qke_{qFV>8u;boG+3YGvN@QIM zR-|rI>aIvpQ;IGI9!QD*6U1T`^9JiPB+irZMT{HqjUlkHC5?4k@vTLj%nID~M5TRQcS^&gzF z=eDVh5r~NZbE%3M{4_CpTHZFg;TO={>e21K>Wxt@I8mO>Ybw<(p;#ya7OZ3-7Bm4w zLyP-er?oe`tjlp(6Q6-H06VvayuXq-XeJI;5-*sE7w(DW#7hsPpKkS|6L8Vpv+}|g2B_cY|P#d@5@kw zn~EGH66$PfA@UN0e33uBW4n^&>KekQ$Z19HmEDB+Ne`LkAfh>j2RIW&EdNC)_wb;m zRXZhZA6uf$VpWZKS(e%JK%c`+A;+_|y$q_Kz!La0wDXVB`%)#;XNLO9q1fVEUxWtd z#jketRCYakf7i3~FRuqXD&e>pj+euUFM^48PizQecjBR!gu?T|I1>5X@&9=#gfHgJOFG2X?jtaxvW4t?w z-ks*A@TF~PN&c+gWli%__?$O2_Z;`(nresxSJagOTLjSZcxyeQqN^)PUV-b{akQ;< zPw})i*dUGy^%MTbz2Wmeg|(-t)wPWBbsb6H6n^rWTD{ys4oGv}!NbtxIj@X;e2zaX zTbw+{%ZKNDHY+gao5H*phlN1gZ>NidA)ilOva^NCa0nd-VzC8%wy0WSuJE=>?L_gs zS;*#{x@q~SnpU$#oo>l0s|D3M%hryD>~eT4Q18MykY95DqJI1G(&fs)0dwF$d0^b= zKe+as(R0lB{_%O=BYD<&bMnUILh>)d;>(rT^JeV%a_q-tdAuSYHRYpa`Ir$sesAR7 z>y;C)nI~Q=pLpGP@r-fi4P*DY2SLS6N`L5P+l{t`u0_vnX-TTcBc?o3miHUcv6TrU za`?VKBKvJ($vJA*Im|PP1k+Ia z8IW(T1Ns}hC`$isYIu3gytQW&Z_)Q+T!j literal 0 HcmV?d00001 diff --git a/__pycache__/database.cpython-314.pyc b/__pycache__/database.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb8f637e7b11be30ea09d0c425350fae5fa7e114 GIT binary patch literal 2763 zcmb_dO>7%Q6rT0ZdhGl)gwzR?dPDe;l|N7`fl!4?NWd}|Dqt+A1_n_S-{Z%qxD~&OA7os-#fPoA3B@PP3JoBw-x6HXHzNU;dH~<1j#L-bpy`dfY!H) zP`u;ZDSTS^cr>I-4SocG_acPL``}O>jiOm(9f-y0KzkNVA4uxVw7<^RxH*n0mWt-n zwbY!fB1PaE{{cyw-)<3-NA)&Es-?7MJnT)q3)U3oL~-+z>H|L^j(i>R^Z#J_!Q)nA z%HVrzFxxBMg71Nr`CiAwE%UvO8Eode8iIyvTMI5^H2tEokh9i;?=P9m5NrTu1!v4* zsNJ>TQkE&UmeY;3ke$s@MW=?gyw;{KnHjSpaAiHmG6r*T+O)EuOWgoaTf1N+q5;=>!%9;=4Jq#>Ds#d+XamNVZDba0-Z;;>(TP{)Ry8Yad|U{xP$u&xbMrJ&(B{QEcTC<@YwF73eH{g7W;=wcm$v-FgrL>z>%*)rJ>VXL)&&y zNtSR5@E(>9JJZRck}Bburs5IjY^tctl<;g5?D4JGwq8`!5>7UGJic}2->}EG;=-_B zaH2FWpWR$7u&DJh*t@GlKN!QWTbm^6qs zJokA2yD~Lcj#^O<V2l!!{S z6Le@dkV+X=4C~b1)69&vkTHlT>F|MRhXuko-hohTT|HM(ObP0mqv}uR+ccZJq`Z#GS54p)2Cxh%ga+6$#>>OGHDw^DS+eS4)VHfH?m zs~edNA>gkFHjmM1Q6ZH7ND6|1v7Z65{|Pwoz~k}bKXIpjM%q)LPVe(#-IF2ufAJIu zpTslnjLcS7cpP}wxLznU(K>FZ9vd++-6Qo20#6LPK0^i82CCqSp2DXpVR@CF09bCZ g&8y|USCXW=DEtTNxr+vVMQ`oN{gP5fK*Zy}0dHS00RR91 literal 0 HcmV?d00001 diff --git a/__pycache__/ingredient.cpython-314.pyc b/__pycache__/ingredient.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2eca0918722e6acd0d20f7bbd1ce67f609e82bd7 GIT binary patch literal 2004 zcmbVMO>7%Q6rR~#JL^r-q)kHNv=SypfN7Od3KFU+#DNQ!2o~fVNIP2Ao3gN3huN`& zdvXe*s#L+1O58Z*7N8MK=LTtsT4kvr=hIyG*H|}#xd(Qa znBp!|#$~R|XIK;Ll~rfwxoga`$aYQ8)2cv-MM!~=A|XXW#t0cB#3rOfi0wM6RA9PjAw^gVrB@9I10&5GXBclA$c2d1}SysPh~*YwV^qrd$p zexU-`PI{eee$_i@d`It9(k*>2{UY50tMC8AVMXtzTj@185Zv$S-zqOX*;VZfouz-) zKk6OW3Xy^5O8ON>i1GOxQo)8&gl0nPo&j}{cUYZWHs1J>u?C>0*n9kA?(+Bfhj2Bd zP0;+T3G`Th;?-nR;UPytwKs#zioJ~>D{RWp4{AncCQ4?7^{DA7m=)KXa>G;Eq!51O zB}pUnl@JMfTIyt{-@dTc_TonHc>?CKO4dH`l23Cj&aDkkTHb7D6GC`#+*FoK!%@&MJgxsTls=c)UpMPL_pF@Nw%ae`q14R-fs70y7fAB!ojHJ)IW3jP3|6W#prLt4iH464*s@L|W)codnBKQfy40e%|QA8GsbfkdpR|wze0B zf&70;tL#hymR_r$irLt_riKCQ6ZMR3hL2yc+3ZeRj_*#P`9XR z^&I$W`}p5_MR;8}D%0p8jwn}hvH~Zdv+X?pex13PXZfZ)H#i6X^S;SB?-?_^+-0E1 F$zMU7-xL4< 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..818212d59ecd1ae97d154b61e361d58c8c5b69b7 GIT binary patch literal 368 zcmdPq^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^>3|*{Z zDiiZkQY(rJiZb&`ieo|&i?bnQykSgcUV2e#N@i+aNqk9VL29vHLFFwDo80`A(wtPg qB2W;50;^a8NPJ*sWMurv#KOq(fr~*>;R1u`4JqYI4B|x`KuG}q9*G

7AIWj7CTIg3#b{SJU+4L7ISfB@hztO;#({Qi6t4g*noxuO}NFLl3A3On45Zw zJu#^mEW;5WpO%@E8Xv!s;WNlRxAa}CVk#5!Qc^353yL!HN{VAb5{t7TWV~Sv$b#aS zDW<`d1Q+fTG#V6@zPq4{$Ah4veawwrG>-)_Ir{(!}0W1q{)zL$mlt}*x* Hf#MwifX;%L literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_bun.cpython-314-pytest-9.0.2.pyc b/tests/__pycache__/test_bun.cpython-314-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a4cbc912f38275096ce5eb6630014469d3909089 GIT binary patch literal 6704 zcmeHMO>h*)74DgxnVsF0Rz`ra1Azr0v1-qsj0Z^ROLeXf-UE#xFqj&&-9L#m8C7C z%1?P}_4>W;*Z$$nzQb`e7vmU%N?!jO7MPQ8!fxt!$3Ua42sbf|Jg zvZ_dgSkUD~=*}RXd`a1XnQ;nukoDD%V4)Yt1gstZ#=FDW*JAnD`CuEuQcPz~?-#R~c_S~4z)sIh9ST&= zNX4Cm>>(53K_KU~Xl>5JHYfAiG08}czkW;}4s;F4kSFv|yVb5WdOiti#qT%u)DhNg zr29!eHXO_@9AjZuQ@wOUKjfnIehA|-Vv!lO)>p!Q3}r)IRp_dQwgq#R!uH#ov#1Ai z)&`aS$llfBM%>Wz@j+=#u0F9XT(iimyTiOj3M;CIqYBf@l96~`swvM)G|$iOL;2Jx zKUSL^@?(?r3UWu03?n)2D|ntCrY+ZXsF&%@)@Da?E*6cPTb3veHYd%U#r)x%n|vo= zGN+j8(J%{`AZsY+4ip{F#AcK8*<5lybBZe;&$-JANSM!4Uh%$^%JD4`;&t!>Aj1w zKXr9qyZYhPn|kl!)sNqWWNF8(uHJik@Vf)~?+QsUi>_dAgGM0T#YT8Rt9nqpv?E$C zB8hBZKyMYsNw&zw%HPt)8sFL2EwHh2XvNyJv7+98%EmH7N#k%{nfai2`zc~1im-t0 zL4xpzqMtiQyMQiBb7SqBRc4~rwW|rVtK5pAyP(^V>_7qtg3u?CfTt$(DI`xL`5ut9 z#)=+*EdS8P28DIx4{qK9u?pzh)-gfzAI{&@4=v7r{2nAry|=m!-P42L9ms!ANPqL=xG+fFA9I(b@vafgoVsfhL$|kV^#t^rXDh66hUh zz^z)$ATzJ#6=sOu2oHSm(WO-rgnHr% zZvyHG_-UvSfV2UGY=T~zp&9YK) Z9uPhXsp5%pqCENONPG~z^@C24o`>F!^C9S zvae*om$xzy2(?bE!Cxmi{yNFc#N$F=Cvq-*0*=qJPIp7X%@m-0LiYlRqMGA$pUC0R zW`yG~E*u$h5g`T0Cev&!LS**{T=|(*t~)KP#Wz<#%jy0a$O8FudfO+@UUyg0JrTgt z&jCyS((ao&kXv2-_w?YmqW2?eX=HF7jYN=l8#DsxF0g=Fu;5Ok9QM$B9qd*!z-C7yHNx%x>Jhh}7tyVnoR?d={bLQcKXW>W?+BOQMtldI zero*XEqD6j!nNu2MZHZr{e~moIKI<}1^w^DcK~8QeCKh442J99c-)OBsh zx(^VFo69UfF2DrrnS#!p3Shvn0LA-C_XFW(BJlmquAjks)3R-+=DB8}G=-6vif1y< z@3wIL-(2A!_Qzute+Ae7%ynlaeUQ8U|I&xTGQ`u>oJ#i@&!ya&W0$Nl78bAl;cwZAfBkqgr?TSWJ3D@R_AhhqzjXg7C>P<6 zkjzg;i^lKw{_=~Lu8ro>zHYMUmudP*)10mr>SYJ`4%3{eTV)Kyfz)N1QzhzprVO^k`|$p*_$AeFn*MNH8!=UjX9oG)>ooXq0VQ9;i;%;p9P6 z+f36gL$It+vOU{@5S|JDR_KgmLN%P}C_6D!!S;~gpSuX;pC6C~^0}J&;LV@Ec~9MQ zOWkw*;#WjFtgRAFi+`Dx)xOm(;2t3NKqp$q`kGmxnf*$a)x$_0sWX1N@0Atx)h}gP z&926Xc3S#7vfTLNuyRRX595yP1?@j=@&y~?_y>yU@5m( E15OsB@&Et; literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_ingredient.cpython-314-pytest-9.0.2.pyc b/tests/__pycache__/test_ingredient.cpython-314-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..43c8c12b880112af73be4ed3267153da2b6c386d GIT binary patch literal 8585 zcmeHMO>7&-6`tkqkd#E*DlNNJB1*DTG10FjOLA?xNp00qn+n24rdveTf~Hn78;Yc6 zmrbO=fQuGL4n618gO5~!0yzXoj=mJ=QGbw(MT7L(n_3k};Zxt6*&VJZ+7e|84GJ&F zw{PCOH?upl`|bB;-fC(L6FC0z<(Xgqi4u~*f^+z6W$%}uJS4M3RVIk3@Uv&!Tk^D# zai8gL6Ey)d05zV8;5aoYw|OT*<6$#A9x)?rBu3ha>T4mYf5;=+H5*i=lOzKFz~W>= zvBDGi1*Xqs^}LzzSh0!8Tk6=&iLuFPZTeSJW7>P~+`chpwN#sbI`QtiVB2@)A<+Zb zn^g!&!?oXq>sE>Bnf06Av!p=o`lk4O+kW23p9F-GmuBp+17HKEfx|2X*xkQ9~^R<|+)bQH_9XQX9-@ikPR=Mwq`Q zt7%#{%*x!Yv}WZzYUXlL?~dowiy(_Eo6(w9w(<4X1*GiW<3-9`p>^zN(^nX5h6EN3BPy z((@H?T6nFhrv@jsa&9Ln-;jNO&Na@pRK+z_{2k35_Y1f#)$6*W+Wvm0AJuoLZ$SF` z)xZhdv*NU0=RM0fxaUBhuiG_uMXCl>nxcKmK5J;^v@>R|yFTOCDrXqckaJbe`M#ot zt|~?URfR36A$a^7o_dl=%UfLTx5Aa@9u1dJ451jdqLnKCN<3{!8-~uz_{FZ`@@T?9 zuhGd>h2ev~s;t~X`%uCNe{3u9BzL{!m_V^j{RyLYK{t7`;Rjub@Pl|#I1eX`M3~_V zVNu7!3cp=kHsO8M(#$%oWzxBv#`Ge~6c&qVrdthAt=%hSb7nSgSbieUF*Xa?McL3iP@D2Uca+=VL!qWT+f#Q9+j-~7?caymb! ze`G)}dDEDgP8%NxsSV8FKp0$Vl?m!CE?Yf(h$=P>K?-jGM!+nwyrE?ZjOiIM?AEpY z2-sU!bPz7t_%n!yKQ(UBc$ z|F*E^f-Fkq(-o<1&=IG!&D#+*H6y{H9Cb&!O41Ap`0c?3lM};e&kJJoy;m500vPRa zP_RynmT~_pjOMV)@MFtihT-RsMNynW(T)N?0IV6rB>Nu7#IZma0qyx9j2;X==Y*X@ zaUR9@QTzZ!D+(Y9guRZU4MY{Bu`aOHflnM_kBv_ljZl3UK6N|z)Lr(iN4s~Z{oA5Y z1Nc<22ptj0wr$XEr?idU9ipaYBsi3P?nqZjnn3|S_7+_BiQ$v?1@S5K3ZG5@pS;J! zCmHu0#itHN@iQ>|wLR0vt3U}GxbQJw42&NbS* z7VX@OUIe8aTaWhcQ2V!qH5X-3Du_z9%LeUrO5400QByM#9Lh0wq^l&&pn#viD4EN` zJ;*$_yDHC}k$J63Wms|vL-otz)E~x%PePzyGm4gP``7g~lI2JS2aMwQa>OfBx~~8=J9lJC_qU1RO`;PCjkz4hyQ<32Vc5csKYK}#W0Ey5E5#Rv9fhA zsd6C=e*IVviX$Qo8wKYYSaE=`;Jc1pKLaWbBP`DkPvAwkkYePkbB_l%W4HFL`t&DnwMlJWsdX-Ii1ExGs#u7rO#`HJ@l9HfFA zhjWk$Ujfch*FD1u$i8u|$o5^#rsjZu?~AX=)ego3XA4&GCBI6Mbyo4EKplKZ z?o>Ee34AFm_!1jZ!@!jqS0b7F*<4m^LuI?+TUZmq_~H=fT<0um zM?|1RuolVViIv3!eZ_JI|F zoe}sBm@K=Zi`nKM9fWY!i{cWBYbbt<;wK=in5G#fY#C&-NdWrQ%KW^eO3XNY`U_(3sFLCt?Yff@O`Kk~`@zkPql-@5K^U3=~7 zlhEsrBIWni=m2UB<;)tr^duC2)K$I#-wo8>N$tL^$MLqr=6a(LaxV}q3@TulQlxVc5vvbAQRju=yn8#kRqXgSG zy-fd*Wlh+(k|rx?+r;ZTfg{ed5PZ3%Aqj*W_HSvsHXVYNA knKW=sch{>Z$~T1kp8T%yYtsG=`T4iLH_I|p@<2{{|u76W#(cPQ<<2T zl3Gz*P?VWhQXCVKSey+Z;|*gUsYNmI@tJv5M{X;8AmNnvs-~-Z#yuX7aW=qG zwqMuBtJklqyMFK0t8#x^BuF6r>Cc;gF%u#rjRh!!sBZg1$0QDGu}O)5 zj%{Y=IZZdXUbas9*;FAlqvcUOOC{6{2hdB1ynF>R*GW>ejbbaL1SyERq@ULjk_=cm zg&e8011CyjsUfG3#0J)bL#mgw^i(WBK^QK^vVbYWQKCIvnuB&-5UIV48W?0vZ za!Ji=#%wWT?r$){15R!kbkX+!xlSH!-SNBG&wMvSkGgjMv2U^K&}Y6yd8b`?An#lT zMpE^LqENx!kOK5NypK4t)TB5LT1^5@@jmRP(aPKEtRrczJucp@-K*qDwpyix$C6R< zPD^vA627Aogv@=gx598*nwcbI2T8JNipR0~`KhVvm_#LC~&M#T_Q34Hl#T!>z8uEIDT)82y&*D88*zfr2 zN&%%+2_^yurK;MNB#Z=44#{s>b@sKJBw8%V)^%1=LSs@%fa&sU~Y&;Ds>}RJcQ(k>4S#B=h2j|Yt-o4vk!{HF`ZQpPt8luJtt1gOP>_5 z;YdsmUaMrfPB7lVn7$8d4p~i*sWgpPRgkGv4aM{U4o$&N2W-&OgP+ENpLU(#B8Na` zEJAT+nr*2}#sOdyC!ZN|^rTy`CiqV2DgvLHqGr3APUUhc)k-v7%$HJBGsDoVUMy#G zMz)}vfm{(dbn`7$pDmVi8OEy4*o|s$D7N089;NnV0#%hVV9g9EVLuVbobT>?|B}7LIZ~x%{D_s?vy#lfAc#CyH2N z?&eQiH9#;{X{x1kO;_Qi<1jyNytNEmH8i(fj`0SR-qC00tvf;eojK9BCIfP!&t~=pj7Hh<^0yBSM2rH~aTv#qk5?>fk-@<6?3RvC3v6>DmEj?sDND-qccBg0q7>ZCt{^xBDI0n?E+o5ubf~h4j z>64=jq!Cm(V7g=PK&@v9ARA_=O1nS~gHj5P2BEu<^dP}chwes#t{v?~vJXiN$b4W0 z%nj20*xC<-BN+#;3dZrmQ5|g{hb|6W{cey0K(DLmBBff|a3H>UWy_Z@k`@IW5F zb54}**(GQIS)#?6S(L|Df{<{RzxYPn6twyf0**JVd3maG zygjQp-eSVXg)42zU_e&S@fPlO+!bnE9B=zhu1==yrddyKL2kwIw)?w6!^-}`@oq*} z?s(hxa@ExaM4=;hyzPFjI@-i{m&T@Hbxum$;PE9Du8@bRnnK48d!XhmWBD2goWY{B3hG1-{>V#qd3j z?r}|;7K{B=tb&U(3RVH<2}@O0VYP6Kum$d6mAc^=VGH7}xH($U!x4_L@8pV@Hip!( z3U+_j#r?|u!YVYQE4K>vy` zsE1%xv<}l?nT$OP@}AqNMS0)rACdU`HxrQnlT@1^3crrU!1|1ZTijwrM8rj#x)BlE zjTF#fKVRL5h}}y#>CRp?5s~I0+m_!PWZV7R^%BMyAR8khjrau&uQ4LBb|?BpA|muK z4E9EZL53j=;_hFM;~km_h|nX@V?}g>d)F(mj@Q^R4lT#_EzPxg*K3y7g*yEe$c8}Z z%NY%6fyV<-l9zqVRBYVlp}hedcZpiSmYMKcEgx@8Ql+w|>{Z1EUOk^TE__?izLKWJ zl<0&VbNm^tfGw7LNEhiRmWMV2V84T8Vefw@>1031G3MP#vQo_R1h<~2Vl6d3f*If& zBW8f6valjN@KGw4#myM#uX1Us#`Z+sU#Io2 zFR~Yv`Z19DAMv9|$E^#WU-;tqQl$5Or1xQX)2%Z%&Mbvv3*p$E?#1x_XI|2_7aHOB zUZnTAjt}~!yyN76|I2~U$+uhGgZ%$^ElldPWS#M-`!$L$8HS~j-WXLvGPTjMSKg@7 zAHnOLcQtut)OG2w3p%V}KfvAm?P2&)BUeq&rV2B#DOoD&S==%;Pp=6x8i~P;hvmNk zsgDzN_baXSLeGNSbNl4&xkWkl@Z~gj7-C`O?pqB`(hKZ?+CJ|aj~_lJXM!-s|Iy>8 zhd>wlJ`z`Fde9Y3;N(Rbz@*|qt8f~lpnc3e6EnUpU|B`t5GwZplKMvjUXzJQHpFZ2 z!C2L#H%oEcp{$CYzT`{sMicXx>%=sQaB?cI2{W%=*0hqYUdmE9n`JF{f3~g}x)#w0 zA#bKCpL?!RvsxSaCTd39w~bz@sfrH%DmL_ZGgDR9(#1kX%+(J!a;{d(K2bGUV_qJ) zz-1}L?e3{qyD6*eJf^CeK~>EcGiBJRR?V=g&XrR+JgEt#sLJ6bmn~?8qN-BdN~Oa{ z#*n;?h`B{obpwubroo*sX!c?mMh(Qbt7{MQ6)nD@a%!#_jF)?rq5Sj*h5@+i*$KQ#vHs{yKgOtS_YWffIs zOQnt4vX=BOTg6z|8Iq$ea@EsvjV&OJokfmut@#^e=9$vdFX}X npmziL+AB%YKMDC2`DNrW`Tk?F{W0l&<{OhvNy`K&dzk+MnOG6u literal 0 HcmV?d00001 diff --git a/tests/burger_tests/__pycache__/test_initialization.cpython-314-pytest-9.0.2.pyc b/tests/burger_tests/__pycache__/test_initialization.cpython-314-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..da76ec97d6458acc65db71d1bd2a05fe6b7d089b GIT binary patch literal 4451 zcmeHK%~KRd6z|!cot^!F4Wgn65%6Pmk)R0SBWg;GCXg!0*2KabHg<+(fQifQ(mh)d zDNCx7N-&3bNDevVK;@+8T=PeWQesVo$~iYn4yHWiy`GO9mIb0o<&>`7H}AcEZ@S-1 z_pg6*ys;rpp#A*ouFube2+5=2HQ80xKLcffTqBw^LM%yKL&M=psErKER;118Q7i>| zLL<>()l!8oJQ5p@TXCVwBZ=Xpm24w>NC(j(EkslLU_5MAgC-p!ndl#AjAkTTzFf** zhpTd-!ln!cTKGbxxM6A%#zI>k1fj#^K81;C#0p(gtngk^f~mF;OV&alBU%`wqRAkm zTEtSvh!xWm9Max*#o(4R%t+C+Oub;<)Gf1A%zGo?C^*qDA?o^JP!>qe@9V=}Xk(=4 z`!oV~mPRun1}Vf=#=RnBZWJat#-;7^7vIUv>BR}-1}`(SXz|CmGqa4!6?5VNvhh+BRQMY4ijgVH7lfAgC;%U_@tO<2Y?v=FI z)kD3ZJ~vjAv``M`ELv8qRL^p*9mIPDL*STtvu32^#%Q!Upq@VWWqC84XsO9-+&=Fz z%u5RgDyknZdE;pEjHnL-E*o!?OcLknhIie|AbS!d0+Tc}kOtu#^JL^Aw3zTB~R=deX@IZ!V;tW@X9fl4& zey%)+`-SSvZlZa;P@v2xvwUf$tTV$-LN^_+m<7u$a$6~sAcEWbD4#A>3KJrfP8CYy zdVv=88N-fIu1^|x2fOjSs0GmA5@RK1H`B=yo6#+5+$b0HqQHs!QRguva2Tid9y?(4 z295rp@wQ_)w;Xil=@>mHc@)Y^w~NMb+1m$1i7pC2JqV0+TIaM_0;^~bY`OopPsF{> zzXq{Do}`-Z&fl4Tpr-HMzH=KcONSkiO0TN!?~$5byzN`QvS|70Lx^y#$DqzT9V^v5 zP?rw-;XwuBSp!U^J{awO1u*IsU^F;PULKBO0*>PU!%+Y<>ciZB3rFe(I8x!PO}q%5 zJ-@ zaHtTr55;~IucLSaMJoz8st7xPq7B664WHR+-x@PzYYzB;KNI`HOYi+n_rN#HzXcJ1 zfv(k5dO4MTpmyCmD8zEAYgKiBkJPRQhznJZqvPIpeGk+_Im@@(&z zv=Lk`NmF|Sm+-ktwk`+J;sRb0S9@yMj=#mSxQuIBUA9vlss5S172B!i;pV7mL6+pQ zot@&V3`WlF6zfBV2An1L@7L_V&l-le)4cpVs9D*>uA;zEH?u3;=As3v#$8|2wqRE= zms#~`F@Ulpe*N&Wk*^15$ff#ibp}3;@W{Uzq*{Xx)fyaSoiOe{rdlqt^#j#vV7R#$ z?g@uG7e8-J($yuq65Vt5J4U^5HyB1qhh;2MQ;Wa6pnMD`4VGB z-YU%5L)(MlHmP`I@Lxc{$5C_3PapsA?xOlcP2Nr1Nvx`^%WCV7p8$99SyHFNk~)`; zEvGtHRrj}|b|OKlIvgE=(Dglp2-kWHD!?Lk)XRhJrDMUofaSYEfj9w{8A-gM(M;S{ zsbI5|+Hp!}N)wfW0eX_s*@|93o(oor(n*tXt6&xlV3Cv|7i4J^T`2lN*n24D7BJmB z)h&ye;}v)TklRFQz5sN0!pvKF11L9zmD><-LK*_`Il*2Tex(S33dd9L&u`!{Ka-_M z+cQOq97XZgb0r)({*-_a<%on#qpf=EU7Vx#e(Lc3Zij6HJMU)37tFMPyZbIX>iWd` zv=t}CZm7U#G%lfT+(pjHMqC%4>dtx=3mvC~cy$>c<#_`yG8kQvK dcS61*UpB0f18Zde8fktmH%iCX2?%k6zW}MeU48%n literal 0 HcmV?d00001 diff --git a/tests/burger_tests/__pycache__/test_price.cpython-314-pytest-9.0.2.pyc b/tests/burger_tests/__pycache__/test_price.cpython-314-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c194af07c0d19706514092b8c0cd4f4aff0d2e6 GIT binary patch literal 6456 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 X3EB9B?EaEW|AXJpjjs{_x|n|fYs}HS literal 0 HcmV?d00001 diff --git a/tests/burger_tests/__pycache__/test_receipt.cpython-314-pytest-9.0.2.pyc b/tests/burger_tests/__pycache__/test_receipt.cpython-314-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68cdb7a6f5bc40bb37baf3216677ddce44f9f6f4 GIT binary patch literal 5381 zcmeGgO>Y~=b(WvQZ;PrdJC;pKwCK<(BvGQ`#;yY?wGgpJ1YxVHC_rVfqSn&Z)RLYZ z){&5dfEK7+6flY&ngRhDAU#+?F1_^>p#MO$Xvc~7D$ zEV>sl-=ZH(^Ar>*t$KS=p*4^N4)J^)yx<|8zk`R>0B8=WK^9&>ETUq*P`hhhx0qa& zs+V=6#>%Zp#eDpofXR4&0D3o3$>llbEFjbEEBRYCqEf)YRCKAu2T86?JgTyQ=CDJx z+d1JKZJJ}ItE)qQ+>tq;-_@vkK>rCxrro|mf6|dWX7u+Qe!Fd3r+Q&Sec%N?tEQJX zLQ55`d^5dNH#b77RhG82dRd>%MJV3{JFp}iiE_WAeA{fi2A)Ph+{P<9Bc`^d+fk~s zIyK2JwMt#5d>`zD5Hnn_qYyQR39^$cmm;i0`O0$Qh?+)_~fF+joax0X%5aOF7+_wb1aHPCg zP)xz#0A6yZY^#6Hbz)bLOS(?j?scLwb)2S9Th_rq(-AKIN=-3me7ki5u;x*fTjL9! zw}Ex*+J%JY7ac1sVb)VDMZo#U6vudYZRn*`Wg%;Ex1b+DI7a+aS^X64}(r)ahIhnJ) zwe>s)<94tWTQB08W$Bcq2j8r%Pvk7lotTC2^%&;1vXSK7`J9zDOd&Czv$hj70aMT@ z02@Qt@x#KR+%@dDw!BO_4h4Sn*%2NSt?BIWWNlrnPuZik4a z-OzcD9R*2HZB&?HT6UmP1!2oRMXc3oy|OGuk(EkyNvp_1Dn2C^VpPp(N~_fFCO4{d zO=Cp=uvXDbjR9vnNV|od;`DN3mGYgoBYZ-+8>5}Xm?WgOLMQQ-#REH=P4kCx2eb#o z;yPAL%2ktTumrwM($d1qr`M}Tal5V00c@hD+1ysVi8GII^ls!%L>^Ti&;NPxPm6Gt zxxE7oJn(5@FLSApxzxlzc$z%<$D!X3?Im-KWNtS(v=w}s$nN0$y$g**eh;_)yEwm- z$V&1-2kr_y|^i}!> za40`;Mch;P7$ABMz${I1w4Z|k4u%1|9OCDX57ze4XTSArg1kMB8}prq`S~3@axd6O zjO^joe;1GJB+g6nK?m*%Jme!>>iz-B?FOWYM_z~d>vRXa7NP$~x+B9pJjYY+%jvO+ z(f>BOQ^!ZQ$m{L=w+U=9gr|?zJpkY3r~Awf&VGEm!N1k5|1QpMeI%&|ZPaBy=)1=?qGvA>^d!D^N=HAp`Dc&Z3m~afvJ5v&c|#%52VW2V??j z2dHLPx@E_w7^B8go#`TP6nQNj1ZybI?qvZhbGzJ2u5sIda~4hjL!I7@nF_o{G=rqBbTX2_?i16S7uau2*!xqlDb5YZYGY1C=1; zhCwY>F-+a85<+{p2EON%zX^JYgUcLD0@$uX;*7eS(L|~%k96)2gd5A!MLvs^D;x;t%%LzC6l~&@j@{m?_0v{Z@;`*InnMAS1Fdb zS`jvGBWbUwH1H4Q+k1zqpq6i>#l7~KS5cI&5c)OxRqQJ?_ynDPg1Voe{wHYcxo=3x K?jry~&A$PL<@^!= literal 0 HcmV?d00001 diff --git a/tests/burger_tests/test_ingredients_management.py b/tests/burger_tests/test_ingredients_management.py new file mode 100644 index 000000000..be2ab81b7 --- /dev/null +++ b/tests/burger_tests/test_ingredients_management.py @@ -0,0 +1,65 @@ +import pytest +from unittest.mock import Mock +from burger import Burger +from ingredient import Ingredient + +class TestBurgerIngredientsManagement: + + def setup_method(self): + self.burger = Burger() + self.mock_ingredient1 = Mock(spec=Ingredient) + self.mock_ingredient2 = Mock(spec=Ingredient) + + def test_add_ingredient_increases_length(self): + self.burger.add_ingredient(self.mock_ingredient1) + assert len(self.burger.ingredients) == 1 + + def test_add_ingredient_adds_correct_ingredient(self): + self.burger.add_ingredient(self.mock_ingredient1) + assert self.burger.ingredients[0] == self.mock_ingredient1 + + def test_add_multiple_ingredients_increases_length(self): + self.burger.add_ingredient(self.mock_ingredient1) + self.burger.add_ingredient(self.mock_ingredient2) + assert len(self.burger.ingredients) == 2 + + def test_remove_ingredient_decreases_length(self): + self.burger.add_ingredient(self.mock_ingredient1) + self.burger.add_ingredient(self.mock_ingredient2) + self.burger.remove_ingredient(0) + assert len(self.burger.ingredients) == 1 + + def test_remove_ingredient_removes_correct_element(self): + self.burger.add_ingredient(self.mock_ingredient1) + self.burger.add_ingredient(self.mock_ingredient2) + self.burger.remove_ingredient(0) + assert self.burger.ingredients[0] == self.mock_ingredient2 + + def test_remove_ingredient_invalid_index_raises_error(self): + self.burger.add_ingredient(self.mock_ingredient1) + with pytest.raises(IndexError): + self.burger.remove_ingredient(5) + + def test_move_ingredient_changes_position(self): + self.burger.add_ingredient(self.mock_ingredient1) + self.burger.add_ingredient(self.mock_ingredient2) + self.burger.move_ingredient(0, 1) + assert self.burger.ingredients[0] == self.mock_ingredient2 + + def test_move_ingredient_places_element_at_new_index(self): + self.burger.add_ingredient(self.mock_ingredient1) + self.burger.add_ingredient(self.mock_ingredient2) + self.burger.move_ingredient(0, 1) + assert self.burger.ingredients[1] == self.mock_ingredient1 + + def test_move_ingredient_to_same_position_keeps_first_element(self): + self.burger.add_ingredient(self.mock_ingredient1) + self.burger.add_ingredient(self.mock_ingredient2) + self.burger.move_ingredient(0, 0) + assert self.burger.ingredients[0] == self.mock_ingredient1 + + def test_move_ingredient_to_same_position_keeps_second_element(self): + self.burger.add_ingredient(self.mock_ingredient1) + self.burger.add_ingredient(self.mock_ingredient2) + self.burger.move_ingredient(0, 0) + assert self.burger.ingredients[1] == self.mock_ingredient2 \ No newline at end of file diff --git a/tests/burger_tests/test_initialization.py b/tests/burger_tests/test_initialization.py new file mode 100644 index 000000000..cbb703f89 --- /dev/null +++ b/tests/burger_tests/test_initialization.py @@ -0,0 +1,20 @@ +import pytest +from unittest.mock import Mock +from burger import Burger +from bun import Bun + +class TestBurgerInitialization: + + def setup_method(self): + self.burger = Burger() + + def test_initial_burger_has_no_bun(self): + assert self.burger.bun is None + + def test_initial_burger_has_empty_ingredients(self): + assert self.burger.ingredients == [] + + def test_set_buns_sets_bun_correctly(self): + mock_bun = Mock(spec=Bun) + self.burger.set_buns(mock_bun) + assert self.burger.bun == mock_bun \ No newline at end of file diff --git a/tests/burger_tests/test_price.py b/tests/burger_tests/test_price.py new file mode 100644 index 000000000..213fa0ad0 --- /dev/null +++ b/tests/burger_tests/test_price.py @@ -0,0 +1,48 @@ +import pytest +from unittest.mock import Mock +from burger import Burger +from bun import Bun +from ingredient import Ingredient +from ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + +class TestBurgerPrice: + + def setup_method(self): + self.burger = Burger() + self.mock_bun = Mock(spec=Bun) + self.mock_bun.get_price.return_value = 100 + + self.mock_ingredient1 = Mock(spec=Ingredient) + self.mock_ingredient1.get_price.return_value = 50 + + self.mock_ingredient2 = Mock(spec=Ingredient) + self.mock_ingredient2.get_price.return_value = 150 + + def test_get_price_with_bun_only_returns_double_bun_price(self): + self.burger.set_buns(self.mock_bun) + assert self.burger.get_price() == 200 + + def test_get_price_with_bun_and_ingredients_sums_correctly(self): + self.burger.set_buns(self.mock_bun) + self.burger.add_ingredient(self.mock_ingredient1) + self.burger.add_ingredient(self.mock_ingredient2) + assert self.burger.get_price() == 400 + + @pytest.mark.parametrize("bun_price, ingredient_prices, expected_total", [ + (100, [50, 75], 325), + (200, [100], 500), + (50, [25, 25, 25], 175), + (0, [0, 0], 0), + ]) + def test_get_price_parametrized_returns_correct_total(self, bun_price, ingredient_prices, expected_total): + mock_bun = Mock(spec=Bun) + mock_bun.get_price.return_value = bun_price + + self.burger.set_buns(mock_bun) + + for price in ingredient_prices: + mock_ingredient = Mock(spec=Ingredient) + mock_ingredient.get_price.return_value = price + self.burger.add_ingredient(mock_ingredient) + + assert self.burger.get_price() == expected_total \ No newline at end of file diff --git a/tests/burger_tests/test_receipt.py b/tests/burger_tests/test_receipt.py new file mode 100644 index 000000000..872356653 --- /dev/null +++ b/tests/burger_tests/test_receipt.py @@ -0,0 +1,51 @@ +import pytest +from unittest.mock import Mock, patch +from burger import Burger +from bun import Bun +from ingredient import Ingredient +from ingredient_types import INGREDIENT_TYPE_SAUCE + +class TestBurgerReceipt: + + def setup_method(self): + self.burger = Burger() + self.mock_bun = Mock(spec=Bun) + self.mock_bun.get_name.return_value = "black bun" + + self.mock_ingredient = Mock(spec=Ingredient) + self.mock_ingredient.get_name.return_value = "hot sauce" + self.mock_ingredient.get_type.return_value = INGREDIENT_TYPE_SAUCE + + @patch('burger.Burger.get_price') + def test_get_receipt_contains_bun_name(self, mock_get_price): + mock_get_price.return_value = 250 + self.burger.set_buns(self.mock_bun) + self.burger.add_ingredient(self.mock_ingredient) + + receipt = self.burger.get_receipt() + + assert "(==== black bun ====)" in receipt + + @patch('burger.Burger.get_price') + def test_get_receipt_contains_ingredient(self, mock_get_price): + mock_get_price.return_value = 250 + self.burger.set_buns(self.mock_bun) + self.burger.add_ingredient(self.mock_ingredient) + + receipt = self.burger.get_receipt() + + assert "= sauce hot sauce =" in receipt + + @patch('burger.Burger.get_price') + def test_get_receipt_contains_price(self, mock_get_price): + mock_get_price.return_value = 250 + self.burger.set_buns(self.mock_bun) + self.burger.add_ingredient(self.mock_ingredient) + + receipt = self.burger.get_receipt() + + assert "Price: 250" in receipt + + def test_get_receipt_without_bun_raises_error(self): + with pytest.raises(AttributeError): + self.burger.get_receipt() \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 000000000..102295e96 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,4 @@ +import sys +import os + +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) \ No newline at end of file diff --git a/tests/database_tests/__init__.py b/tests/database_tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/database_tests/__pycache__/__init__.cpython-314.pyc b/tests/database_tests/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2cb088520f3c363880bff10eeba9e942974cc6ba GIT binary patch literal 155 zcmdPq_I|p@<2{{|u76W#M8KQ<<2T zl3Gz*P?VWhQXCVKSey+Z;|*gWHa^HWN5 YQtgUZfd+xBDh4q=F*7nU7BK@^0N>;!&;S4c literal 0 HcmV?d00001 diff --git a/tests/database_tests/__pycache__/test_available_buns.cpython-314-pytest-9.0.2.pyc b/tests/database_tests/__pycache__/test_available_buns.cpython-314-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..094a1359a379f451132364f4e3485f1af5b4b841 GIT binary patch literal 8465 zcmeHM&2JmW6`x)1l1u7iW!bLnB(f;makQ37lM>}PA5JXCYUQF))rCPL2Y@KZ?>$P99TkfJ1$y%>unsA5%6qfi57Mj96zre@ zJRlz5ym|ZP&Fsu?cHSH5?MVuiwDtDSF;sdPCD4Z=_)h&HaH;ty=I7gf8 z<$%$lzu!S$DzW&R5i9aDQia}+5lc{cpd$8QMO6W4OcjAjY7}T(jR8%l63{L+4zycM zSUovn^{QRqL$`h6x?x&w|C1l+rLsO(Hm=kwX2Ep;{Xo|vgh+d5fLSAXuPuwMP;#W= z$y5TSxfzA0_?Rsf8^eR43Z_w>H&OGf{npi2^DBC#XnbhaXsKeE`Rls*zC*Q4-U7$W zy!$MxYP##7HU}Q2YAbfPX;}4|wq#g~)uMfN-_fLkdhlY2*#%^ce0@Cmd177oq-PJR zq-o5kz{dO!7{(fma28cs$}DKK7I#i+TpoL3CC6nO^HYNtxIC7NT%0Ck`RYrJ_9<>* zfRGnRKH3nFS;^)6e^^S1oG{L*T{ljT^I5@ZQ8|^*vt^6**=}Fo<%Wps(<>la7;5RM z*VXg?he*C*oeDj_vdjj2*jJkK>rqxr+`+yyKjab^Dh5XnVd%kKXo zr^a97YW!;)eM^nw#(se7(vH+t(srb5RFKQq0`3}Q$B|rE?bS`wpjPt5;o8bYg|%Fq z+2p?CFI`f&)ijF76*KYs29vzRG}DSXjFOCEDv8_4OOEsc)Ve5+)9!8Frc_2@;&N>T zx3s2H`;b=9%VmukHCm`H)pTmu-Ovo1x>UAG;9|5~1r5_au9=I~db!9{wS{tZPA_W} zeaW!nnyJqlXu47{L+(3LLi%NhDu zurd*>WSxp*>g8bN6%$RJO|n99m)d8Yku{+c_-xf_#nh}tY8VW#?92P()8kpd-ps!P zStI|J4}W_5quaak$hJJPBmaC|_*(A2ll}9`mNam8l97-8uqzEXzkAZa`ifWcn7^1F z`=vAxsCi;AbSLZ8K*_CrfcPBlaAOkHFaWouQ{|k_KFksEWsXO`{7;cp1Q?nji zxiWy)aUb|m&oC?0*Q@wu{Ics~gkL=jwRKM=&B35qE9og4t83}B2c0K}wc=uv3gE zihZ>+1PQl-UkH1D1rmlLfGc+d_x7~8}B;eM=2Qpzd?(e#RH>-#Lyz%gce+2KZWm9A1&G=i;ouV zk;O-g_QXshuL@m24J?m&7|DhOv=5@q&D8!l7MW>sa>h@+mWCd zt}0l)FQxDU2-$lm9t`je6_9Vdjn~#5+X@5iUZ!^JQZTO99|J%%u z8T*)mzA1G9i4*wr5?W%3VjhF-tOVW-2K`zJ zL`uD#8i*yvY7v#i18lxzQk*ec#Qa4DV}@f6Kh~7O$T}&EEaX(_uR$Mj82uO@fM8;> zWU}1F80IYe0AS#HkHKULi7i6$JZXsnDp4m2_%=5E21qdGmkA~Z#)Fj!6PKbB?fZdH zpPMK!A+Z5j159gF3Pz{Vfp9Blzyb3v5D4}49r;_&XFa=pquYI>JAJ8jF+?ICS@)9$ zI}qZp2gCUeACN&lAW-vEG5a8THBbuFJTWlP0Xrh$h2c!iD6%bSEN-i5c0$vZs>OQQ z0KQw(mg{;MQ$J9XHH`%}%cY7@scIU2{dP;+Qbx%MDkKtwZGJBI0H!~xcXfyFM|9^ji zNq#7B;^~J`UOf3w;>8S-bIsg&Ci_;3h$p`xK-dH@OG@09+!Pqa^=O~aoTORG2`ED% zD@Bc46z35CCc<&te+c;_ RxlabZ70z%c_XrT?*!Sb2v8@0A literal 0 HcmV?d00001 diff --git a/tests/database_tests/__pycache__/test_available_ingredients.cpython-314-pytest-9.0.2.pyc b/tests/database_tests/__pycache__/test_available_ingredients.cpython-314-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c26971cb3427f63eb120cce8d45c9898e3ae7ce GIT binary patch literal 6279 zcmeHL%~Kr574Mmy-JM+)5XgWcWbdv(infFiUs8~;Tv7l9EQf5yc#+F%O%2O{Hd%I; zp4mi5p~4|mp~|ilK8aKgk&e2!%H@Mk$=?8ih-AuDKI`U!gA#u&Vz#AD}fM;bt4X;&ln`qJ`u_gAFCju2YP9_vP z7{?xYGBgpk!>k^dR3{>KWFl%ug)zh>LRJoGi0YylB13pwlQm1 zW=eM2CZ~R;jgL)^PfhF7AEd|i_pZM`I_`ATHs6?h_g!c^V6WurC;M+h#Q=*x0&6v5 z%eNIf&`wHVe+RJ@O$Hj&0zgA(nH|=GKvgYdM>52YYGJTWbrRF2Wpm4}|HjA{jM;)Y zSzMszT;43&R*uhy)8g6!gsA)7P+28e(Km#>P%@+_+B5<)NK+}9;xI>@*RXZWva&GHfXU+Iy-Z);X zH~!~frxwtZBiUNJD|K!4c30Tg@k4C%#(`~$7WD0Y-8E%oz86~PP}u;Ny`c1nuS!Tc zsD(8(6TBcDXbokL^S$$FevP+z?!j?fKm%eK@}7@^H$+#^I^Q(s%OJtB<97eb_vhvZD8^mBdvh z*_X1;VM~9?N<~)^SKZc2z%@`jx=vf&yGvWJFM6%KjMrT^sMDh7j6y-DW|`(ni)DkF zP7J#B*-E}(=ZlsTDwIINa!%;hol>PR$3*poLTT10=tX1EbRxQC%$umeX}Zo9lP?v= zDJ@awxISN^i-xV6cgqE%XxPw`3eyN!L2<{O2As>?fdM~r(a#LIjH~J=e&(_j1}$e3 ztWdm#&VakJddLN)+Z9^0bSr)KCwjgiQ4VsL^G&b9}ye~aqg*4 zC8&ScFNFLR=%I~Za(yIj0e}k8@+K=d_PQH;d=r2ewb{K%hup~nBjZ42H({zSnL*`<`cZldjr0!Tr+=H@m&FY zHxb{_Q?1BlIgdz>9tg!l!Jw7m209_jsN_tG;;zs(B<)Dhgei)X(vv_^jSQ(N{LjH@ zTQF_iUM`!IDMXm2r;xxGBJ>R;aBm1rAb~qT=xHQfKvEGOo(AwI^Cot6BRPZQEE4>5 z^c)ZiZ%q|36A2eH`VnPV{HSehnN3K_H4J@ zdephm^=0hy*cVMZKb_g?n|aW+-u0++EwtHk3jy`g$M-kY_=dsA76NGX*-_(b_XQ^^ z2%uGoCu-csiDuBWeo1g3#JQ)QMo_+C2pN9`dj7K)Agv!r`*@oFdh&*>{5=HZ6}-NJ zS2z%?0N{w9*DH9fg;&}Gn^X(0>U_RX0GvAtz|vk+q#$`wY^4`)H2&(3gsso>M{9tP zuj}Rf(eF`;f2Qxp*RI~}3(LeBSd#@6OnVTLT|H7+oKIG_s~{9?v4a4u8C| zsU{yvjBGV0ch%~%qbAo@1Scwps8xw4YSPDvX3(@gEI1J2+*3~@D1Rsk8Gi+O5MN*W zNTLIR3tp0#V)uNd+|%0H-rD z(^`Xy!bMCAXNZp?kOsq(h=nD@iIoFZ%#tG-q)r}MoN~BMOlllL* zO$7Hxv`vgdC-Z`QAgqU^f)>gsHO^o#ix9wymu5-VcYTGM>2n6drEX zzSzDWL->IMO#}D*QT~t{a;X>ZZ@CaRjbdodVcM9f)f>A+mredo9g)uZy*Ty zIH3kAFae8};WOfOm`XJ`s?Jg(y6!}EeX%rGDVR`?>H1Q|C}6S#xMp3S&r{2WUzk}e z={m(!Cru&gLvj(xH6Tu#u3I+bOmezm+cZC0fv*AzT68^EfSk!(K4<4lNZ#m>^=|Yv z!Z1vCUSr>q;FHzMRbc^-g`v|o0ZEd+Cgcy~ALR9~$<1$-cByBd0AXYQ3%hWFy8r+H literal 0 HcmV?d00001 diff --git a/tests/database_tests/__pycache__/test_content.cpython-314-pytest-9.0.2.pyc b/tests/database_tests/__pycache__/test_content.cpython-314-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..37a3f21953dbc79e2609d3aba105c5190c3ef324 GIT binary patch literal 7528 zcmeHM%~Ko674MNo(&z&Q?Db-A>>w6Qm<=o2;nR4rjR70%4Phrj{b4mVyT%4mXIqxNRA0=a~)Ks?i%#E0;B(2B9 zuV26Z`l+Y+X=_W2z(fCb>{q{u5RyT~eMATB-vO{i?h#d(C6>Ux12e&Lpp(pqR;ZJg zgsm`?1ZE>Mk|i-)a5g#C!J~2CYL!F+Qou0d`-M%|Nt^IQ1)5&SO<3;oJ*^fU4TSMNgM-X%WuL2=DWWESl ztHcW23t7Q;NfG+dK`e1GG@sy^_~pFp*Em)KDWbOiLU1!zgB@hhakHc*;)oDO_QeVL z;zXN>10%f{8wlJJm<%u(T#SQ7WHN*@754It_}WP{(T)W9w)ygn`r@=S5hn(5+I?~2 zzBsLF!jjX(YExTaH5{{#-!@FkT?v!Lf@Kt}3{0f=;PMF)BJKA8*dhyFnL8zEQt)gl zfuO>i5};Vkma^^=6Kv5m^2;WA_Szp!jV)~Gg{<+VS)#duWiH&-&HG$x7Zxl?$y{*j zGF8j))KaAlJ7F4DxumTb)@m_pClBdB%I^XDjF@qj{69`6{~Y^T{A0^LsATixQn{ez zFpd7C@ny-#SVmSW=xas>I_y1Il?}jU=+hQSlX+1vaVqJ65 z`c#*{blOk_UoCfs z)++%!q=SRbw5fsD`ih=!@U^}n&sS7K3*MfeZ}m0rz=f@S5*3%zYStVTNE#&<_4 z+wnrZ!~5&i`?;Wo&WZirs1j0&s9`mdj+_%3tkS}9Hv?a<-*IjAZx~I<&C2~=6;$bx zPzu7IcuAmXRq7^>;@=0x$L(Ng;{u8S6hkOR?3RWF_dfs+sz-ffhRfp4w75m$z~dA)GIQvuU5y z%++E!pJlbQm3(nY&$A5d)(O_JT(K}sX_4B;wdEpR(=849pVtez1tm(9Mlq|Xw?F9# z)Z^F|ADHug<9+IEPXo1)lha zhw;oy-7%W^5X2VQlStb;e|qqT2Q|5?DtA3pcI5twG*gp@s`3zkiafL}j{x{)yeiMs zpoD$4v1Ekf9mM?{KV>z1*zw^Okk2rZr#)%VJTnK-C~bixH&1yZ?PEfq=FAZl!tm4| z*yu-8=n?1q528ZGWwadzmmWibTuU*c-Rf~6TY~gmECG@ybMz!g;J=yX`HzKq83EE$ z*lra0k2m=vZ1OY;_)#MC$0#~cBvEvscprqrRJ0onDHJ^@&Z6i=fxl6-4}}8aFv@xF zP!3^P*s1@SbC^H=IJ}Z{Zr0@CsytkgZdT;sZFv;HH*;0_W=(QF+gLKn)g8n@I#~3S z)$n1*hg(2C!$_X?q(Sq{96+O-bUJf|6>4O2aN<003bQugICgXjg9&w?BkCdklkg9q z9ys*iPC1l%>c=o#frl{98=Sl_(#wd)j@LJVa{yxvH^)DATRjTjN^}5w*fbd>85#M4 z`Hw-Em_7JXN_s^tByjUDAmB8V@J>U0Rk^RCT-=ezDpI;8Pgdng02O(1Tb>5+_)Jw! z*Pw)bwy|WI;~m6f96x0>eAw~f7Ld;{lBYds&^$8-(CF)#>FE6s=CR>9Vy3snOcZa! zoOd!h2$HkPgSHl6?tk~ zz7F7Vsw&^9NzP{*ORjTu2QeH0u;?kP;lqv(w}5!~6o#7T0uo-;TqzA$VIfw`tH1uz~X^ zun!b7rz0rFP>h4HPiUHH!ChcR(=Dj9REA{s|4<;(T*Y+afga8eQkWEYoeJ1S30q!w)uz}|!$h?E#EivyXz&!>JcwYhUYZ%+{ zzANmb_rJjVuD}*Q8#ATFmfU+?cK>0Y()gUF_!TT%)TXHM1%*9eM?I4bdw|(EX?=oI zfLF}?A42~36nvd9eMk;7zu*+EKBfjD;(?ux4c{TAMu@@8s;X6WpPkz_(EjjZY Qx%F@HtN^_rC|Ujg0xrLO>Hq)$ literal 0 HcmV?d00001 diff --git a/tests/database_tests/__pycache__/test_initialization.cpython-314-pytest-9.0.2.pyc b/tests/database_tests/__pycache__/test_initialization.cpython-314-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8823bbbb4b0473721b461f5b7579f4a9a8cd641c GIT binary patch literal 6223 zcmeHLO>7&-6`tiT$rUM?kyuAg8b^|4$zdhY7D>mBY&t)-7^y`CV?{G5zxK(9Sm=*2y?J+wXdR7!NjWYHjJ--76n#HYMB%l#omMK%xv zIe0<7eQ)N?n>RDN-+Vh$#|9z0}En3 zFhUk2GdO}ZfyK~5*bH-BT$C63%s#G5i;;z>866?V$rw?B!$b*XpdY-6!+#-vWb*ir#dd2KWO~5vA?Oy?*L2^HZ#1vu%ZU#;9c~XT` zhlwdE0gypO1Q}8!kYP;0l$DU#S0H9Y2}1(1^CDr0CXVuokWYskmhd87JGqQX)XHnI*4!gOiwEUSsGvXMsP-f->+gkx{=iSFhu^pWdCvzv))$ez;f6i;?XuaD181hs^MS7xKPj>ay zGuOhw9EZEw^~}+02f0Z~&^P&vqDE{xEOcV#25K{PMLQfBZaUN*}2~ml;|a)Ccr-cfANw)^GXyza2P-0XlPmQKi`-2_?v7^dXtNM55v6^Y zri8V02-V0NwL1tjsz$9rwWO8HD%ESWRNbg)RJZz}T3x9dWz(oID^#w62eVG7>{hj2 zUgfUpdbzrymDP&2p<8__)7Es1U>$pt4;z4Vp3*9{;_6zJZfK^e->#Ll3WwNj*`Bv3 zc4JRd%JLZ*zwxTyc+GEIwDYv%&(3yOX@*!bIci@NG0&RhBksgfwM2Cd%2o3g)pZy% zjQ7oNK-0$yflmedFNiJjQGEDM**|0(@>DB6u@j#F<$czOPc&nbpxztfVkb7$0tfzk zAWt=7ldkD1?=x53#Tc&TDiG@T8P@_Q$JzrmYgb_O_=KlBJwf@sF}H1(0)Z)lP{%HT zj}+e}{tYOjIo}(bk7^A;7jF zC4`KuV`Xs%Ps4xzEfA;32&`_NWH$GHzme@VCEXBzP{&Gh_N`w}?(>g0&< zXxfM683%+x>4I!Pd4OJut73_Oskj}aP-K=85stwW`=l39jG!1r0sB3nKu`!hg<>4V zX%O4e0hpZi<6qh~Z2UXVFk1vXdlrAt3#od~k2U|TO!ENr&o)79k&lOR_cMRb{w>=| z&+n$^n?t#VoCDY!$~9xC?!|H~x#QQwdbe!Xv-ad1G_z|SfPSDQR2>ATr$J#u&nPS` zE?kd6x1Uj1d#c(J0QkE>VUav@eBv~aB2VTRLy;X*fOtZmM*$E{=m``rfLNk0f&|W5 zdm5b8a6kADr>;?-lbt#T&6hDl4@i4pD4hV89$av$7d$##kQujO_i&COn3a1%d^{u$ zeqVL7!c;3hy%V2q$SGun)6LinsP_lC*omcDa{Ko{PBmgPuIVZWnr)X|jNw|Y0-=xx zdQOhD2Nl2yu>zyVr#;>23Ciyex^24@2z(HDpRqzX^?Jq%;YlZt#R};xcv7S;aBP-> zn38;a1_YyZk>+ z|7Yf(Gp)Jh-MQuFP`)AOk=^B+F;w?r`Ig-AYht}yw(D7Yavqx5H4i{P&=RUR$Rq^L zpO+F*OIG=zgQ{8)Ro$qr*2_BR{i?cI*UESt0ai>^*9^+cvQg11RaK>ULP%#&ypG}; ziXVcoj;ktsCYVM^)l8EbD|MK42r#Isr82PoRik80Yo)jp$1 z+8-ZqqLQTgFQ{R{d5c?Qh1+HJR|LW@KYgb70mnbH;JeG+%J_@MyW1vq*Zg2azHCq9 p75Wosg~MX_$bKdYg77IJza}4&lb?|ICuHmkDJI+y_6bTJ;A>Y^y&M1l literal 0 HcmV?d00001 diff --git a/tests/database_tests/test_available_buns.py b/tests/database_tests/test_available_buns.py new file mode 100644 index 000000000..c54a9883b --- /dev/null +++ b/tests/database_tests/test_available_buns.py @@ -0,0 +1,39 @@ +from database import Database + +class TestDatabaseAvailableBuns: + + def setup_method(self): + self.database = Database() + + def test_available_buns_returns_three_buns(self): + buns = self.database.available_buns() + assert len(buns) == 3 + + def test_available_buns_first_bun_is_black_bun(self): + buns = self.database.available_buns() + assert buns[0].get_name() == "black bun" + + def test_available_buns_first_bun_price_is_100(self): + buns = self.database.available_buns() + assert buns[0].get_price() == 100 + + def test_available_buns_second_bun_is_white_bun(self): + buns = self.database.available_buns() + assert buns[1].get_name() == "white bun" + + def test_available_buns_second_bun_price_is_200(self): + buns = self.database.available_buns() + assert buns[1].get_price() == 200 + + def test_available_buns_third_bun_is_red_bun(self): + buns = self.database.available_buns() + assert buns[2].get_name() == "red bun" + + def test_available_buns_third_bun_price_is_300(self): + buns = self.database.available_buns() + assert buns[2].get_price() == 300 + + def test_available_buns_returns_same_reference(self): + buns1 = self.database.available_buns() + buns2 = self.database.available_buns() + assert buns1 is buns2 \ No newline at end of file diff --git a/tests/database_tests/test_available_ingredients.py b/tests/database_tests/test_available_ingredients.py new file mode 100644 index 000000000..dbd121c3f --- /dev/null +++ b/tests/database_tests/test_available_ingredients.py @@ -0,0 +1,26 @@ +from database import Database +from ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + +class TestDatabaseAvailableIngredients: + + def setup_method(self): + self.database = Database() + + def test_available_ingredients_returns_six_ingredients(self): + ingredients = self.database.available_ingredients() + assert len(ingredients) == 6 + + def test_available_ingredients_contains_three_sauces(self): + ingredients = self.database.available_ingredients() + sauces = [ing for ing in ingredients if ing.get_type() == INGREDIENT_TYPE_SAUCE] + assert len(sauces) == 3 + + def test_available_ingredients_contains_three_fillings(self): + ingredients = self.database.available_ingredients() + fillings = [ing for ing in ingredients if ing.get_type() == INGREDIENT_TYPE_FILLING] + assert len(fillings) == 3 + + def test_available_ingredients_returns_same_reference(self): + ingredients1 = self.database.available_ingredients() + ingredients2 = self.database.available_ingredients() + assert ingredients1 is ingredients2 \ No newline at end of file diff --git a/tests/database_tests/test_content.py b/tests/database_tests/test_content.py new file mode 100644 index 000000000..7400f0642 --- /dev/null +++ b/tests/database_tests/test_content.py @@ -0,0 +1,42 @@ +import pytest +from database import Database +from ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + +class TestDatabaseContent: + + def setup_method(self): + self.database = Database() + + @pytest.mark.parametrize("bun_index, expected_name", [ + (0, "black bun"), (1, "white bun"), (2, "red bun"), + ]) + def test_bun_has_correct_name(self, bun_index, expected_name): + assert self.database.buns[bun_index].get_name() == expected_name + + @pytest.mark.parametrize("bun_index, expected_price", [ + (0, 100), (1, 200), (2, 300), + ]) + def test_bun_has_correct_price(self, bun_index, expected_price): + assert self.database.buns[bun_index].get_price() == expected_price + + @pytest.mark.parametrize("ingredient_index, expected_type", [ + (0, INGREDIENT_TYPE_SAUCE), (1, INGREDIENT_TYPE_SAUCE), + (2, INGREDIENT_TYPE_SAUCE), (3, INGREDIENT_TYPE_FILLING), + (4, INGREDIENT_TYPE_FILLING), (5, INGREDIENT_TYPE_FILLING), + ]) + def test_ingredient_has_correct_type(self, ingredient_index, expected_type): + assert self.database.ingredients[ingredient_index].get_type() == expected_type + + @pytest.mark.parametrize("ingredient_index, expected_name", [ + (0, "hot sauce"), (1, "sour cream"), (2, "chili sauce"), + (3, "cutlet"), (4, "dinosaur"), (5, "sausage"), + ]) + def test_ingredient_has_correct_name(self, ingredient_index, expected_name): + assert self.database.ingredients[ingredient_index].get_name() == expected_name + + @pytest.mark.parametrize("ingredient_index, expected_price", [ + (0, 100), (1, 200), (2, 300), + (3, 100), (4, 200), (5, 300), + ]) + def test_ingredient_has_correct_price(self, ingredient_index, expected_price): + assert self.database.ingredients[ingredient_index].get_price() == expected_price \ No newline at end of file diff --git a/tests/database_tests/test_initialization.py b/tests/database_tests/test_initialization.py new file mode 100644 index 000000000..7c70d4740 --- /dev/null +++ b/tests/database_tests/test_initialization.py @@ -0,0 +1,20 @@ +from database import Database +from bun import Bun +from ingredient import Ingredient + +class TestDatabaseInitialization: + + def setup_method(self): + self.database = Database() + + def test_initialization_creates_three_buns(self): + assert len(self.database.buns) == 3 + + def test_initialization_buns_are_bun_instances(self): + assert all(isinstance(bun, Bun) for bun in self.database.buns) + + def test_initialization_creates_six_ingredients(self): + assert len(self.database.ingredients) == 6 + + def test_initialization_ingredients_are_ingredient_instances(self): + assert all(isinstance(ing, Ingredient) for ing in self.database.ingredients) \ No newline at end of file diff --git a/tests/test_bun.py b/tests/test_bun.py new file mode 100644 index 000000000..8476ffa32 --- /dev/null +++ b/tests/test_bun.py @@ -0,0 +1,39 @@ +import pytest +from bun import Bun + +class TestBun: + + @pytest.mark.parametrize("name, price", [ + ("black bun", 100), + ("white bun", 200), + ("red bun", 300), + ("", 0), + ("special bun", 99.99), + ]) + def test_bun_creation_returns_correct_name(self, name, price): + bun = Bun(name, price) + assert bun.get_name() == name + + @pytest.mark.parametrize("name, price", [ + ("black bun", 100), + ("white bun", 200), + ("red bun", 300), + ("", 0), + ("special bun", 99.99), + ]) + def test_bun_creation_returns_correct_price(self, name, price): + bun = Bun(name, price) + assert bun.get_price() == price + + def test_bun_get_name_returns_correct_value(self): + bun = Bun("black bun", 100) + assert bun.get_name() == "black bun" + + def test_bun_get_price_returns_correct_value(self): + bun = Bun("white bun", 200) + assert bun.get_price() == 200 + + @pytest.mark.parametrize("price", [0, 0.01, 50, 100.5, 999.99]) + def test_bun_price_accepts_different_values(self, price): + bun = Bun("test bun", price) + assert bun.get_price() == price \ No newline at end of file diff --git a/tests/test_ingredient.py b/tests/test_ingredient.py new file mode 100644 index 000000000..94d45db5f --- /dev/null +++ b/tests/test_ingredient.py @@ -0,0 +1,47 @@ +import pytest +from ingredient import Ingredient +from ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + +class TestIngredient: + + @pytest.mark.parametrize("ingredient_type, name, price", [ + (INGREDIENT_TYPE_SAUCE, "hot sauce", 100), + (INGREDIENT_TYPE_SAUCE, "sour cream", 200), + (INGREDIENT_TYPE_FILLING, "cutlet", 100), + (INGREDIENT_TYPE_FILLING, "dinosaur", 200), + ]) + def test_ingredient_creation_returns_correct_type(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, "hot sauce", 100), + (INGREDIENT_TYPE_SAUCE, "sour cream", 200), + (INGREDIENT_TYPE_FILLING, "cutlet", 100), + (INGREDIENT_TYPE_FILLING, "dinosaur", 200), + ]) + def test_ingredient_creation_returns_correct_name(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, "hot sauce", 100), + (INGREDIENT_TYPE_SAUCE, "sour cream", 200), + (INGREDIENT_TYPE_FILLING, "cutlet", 100), + (INGREDIENT_TYPE_FILLING, "dinosaur", 200), + ]) + def test_ingredient_creation_returns_correct_price(self, ingredient_type, name, price): + ingredient = Ingredient(ingredient_type, name, price) + assert ingredient.get_price() == price + + def test_ingredient_get_price_returns_correct_value(self): + ingredient = Ingredient(INGREDIENT_TYPE_SAUCE, "hot sauce", 150) + assert ingredient.get_price() == 150 + + def test_ingredient_get_name_returns_correct_value(self): + ingredient = Ingredient(INGREDIENT_TYPE_FILLING, "cutlet", 100) + assert ingredient.get_name() == "cutlet" + + def test_ingredient_get_type_returns_correct_value(self): + ingredient = Ingredient(INGREDIENT_TYPE_SAUCE, "chili sauce", 300) + assert ingredient.get_type() == INGREDIENT_TYPE_SAUCE \ No newline at end of file From aefb44937cdf12024795ebae41ef5cf00775f4c2 Mon Sep 17 00:00:00 2001 From: Abylkair Date: Sun, 24 May 2026 14:33:45 +0500 Subject: [PATCH 2/2] Add gitignore --- .coverage | Bin 53248 -> 0 bytes .gitignore | 6 ++++++ __pycache__/__init__.cpython-314.pyc | Bin 140 -> 0 bytes __pycache__/bun.cpython-314.pyc | Bin 1555 -> 0 bytes __pycache__/burger.cpython-314.pyc | Bin 4119 -> 0 bytes __pycache__/database.cpython-314.pyc | Bin 2763 -> 0 bytes __pycache__/ingredient.cpython-314.pyc | Bin 2004 -> 0 bytes __pycache__/ingredient_types.cpython-314.pyc | Bin 368 -> 0 bytes 8 files changed, 6 insertions(+) delete mode 100644 .coverage create mode 100644 .gitignore delete mode 100644 __pycache__/__init__.cpython-314.pyc delete mode 100644 __pycache__/bun.cpython-314.pyc delete mode 100644 __pycache__/burger.cpython-314.pyc delete mode 100644 __pycache__/database.cpython-314.pyc delete mode 100644 __pycache__/ingredient.cpython-314.pyc delete mode 100644 __pycache__/ingredient_types.cpython-314.pyc diff --git a/.coverage b/.coverage deleted file mode 100644 index 901ad9d3c9e0224cdad5a9cd686e7307c929fec0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53248 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 SfB*=900@8p2!OynN8tYmc=s~^ diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..320d4aa86 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +__pycache__/ +*.py[cod] +.coverage +.pytest_cache/ +venv/ +.env \ No newline at end of file diff --git a/__pycache__/__init__.cpython-314.pyc b/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 3c1a77683434f2b41bd2d2186f0a5dbf5dab928d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140 zcmdPq_I|p@<2{{|u76rRic7Q<<2T zl3Gz*P?VWhQXCVKSey+Z;|*it<1_OzOXB183My}L*yQG?l;)(`6|n+!g3K-kF+MRf KGBOr116cqd6CM`; diff --git a/__pycache__/bun.cpython-314.pyc b/__pycache__/bun.cpython-314.pyc deleted file mode 100644 index 4f41a9e4e072f3a033606578833fab4b3623833b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1555 zcmb7E&2Jk;6o0d8J8P4#exzw#1csmp3n^9AB2}nD2yu>Ji&6`OXs6-Eb7adg!D6ColrUeMVaN zq@5c=yJx6{cwJbdOTu>+DfWC9a$XlLQm{zTA|;EIEHY)0Dc{rH8tJlM##bwu`+hrV ze~YhF%#Y^K{Aza1e(zDu{M5T^_RV4Mf%(Ji)qwB!9$U26F~68y$eopn`F`TmZq59O z48NHJbI1WZy>B?tf!Q&?o1Y;M%$~s^WXmx~q~Ej0diU|+gWlbhN(cstf4rDI7r*{8 z#8uIuHM-$kxkuCh`Z9eaz7W2+CO!p+km7=6@^5A@Db8h_O&Bc-34p);iix;I9gl*Y_I5y!HUiga5gb)h_%bw}}- zsFxsyOxw!T45PCU)^i#gOPMI1J0^(jC9B3Y;ecJthUF?Btu^{^=$KSXq)xy_4a`(m zs8diWhmLspJkrwkisfZw*;E90XU8>+UgCv#QHyycWmeB+gBeLD*r+lM z)$O;f8dri-cD*1Q{O*d0o8+R*x3?3M&2W?aXWClEY}|Qx$9UeBIvtm2OZ{lzSz zzbaC0wi@l2_ZX6|+d(|^%t^V?RH=@eNtCqUo|3ZB3Z+zhPsP)sUWLdOFpLAbEieoA9uJ)z)_V4BG#9gmgFqXav@$><@``B@d-k^fvvlBS*&{{{_ vUxN~8{fD{DFT|m%$jiD*IhIe*)%;rTsybXYJI~3HD})$0v!dE32pjM(2nlQ~ diff --git a/__pycache__/burger.cpython-314.pyc b/__pycache__/burger.cpython-314.pyc deleted file mode 100644 index f6fe9e986e3282d0c70f1f7b66b97bab39069745..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4119 zcmb_e&2JmW6`$SZl1qw`D9aR8+Z9(bBZ;9ZSF)P8@<&`dPUR#ORJxUe*ztlU*Dh0< zWM)^5r4wxjwVVbua%ttF2MH)(=%zGPqr{2pKVdg?Oksfl0g4`Svr3@KvG2|9k~F2- zanL!unR)Z(&70r*m`Sv?1_-pz*LJ+QArkUWoVd;745~+9P$K6@k~>KzIGu~)m_Nx+ z2)e+=!b#7BsEbh&CcPx-iIAi?#@oAfZ_>M$#C>1mG|pL`SF@VF%vr**nLKoXllhBO z&1BWQp0+pG)Y(m{e}H)kPJe^wT$1SgIiD_ckpkGFdy;&F=;Acl&n1Nj$w_!}E~I-I zM`Ro?NQ~oWoB-qa8K;GDf{YVjoL0tZW1N;`yB?e-dTTNScj~ab$7bk7 zmCg)uganK~8+VPr8LP$}^F7)4z`SObj1P@fpew@x+p!+|tlRcq*Gfe@+M2ZItxl4+8!Ee_+XCY>aE$uc*& z%v-|wnY`7Ktp$#TVWp|L3mOXdTLUkSpPfzRGwNlnNV9oeJNt{2_G_CeBWKSupA8ph zElE+b`K+!eR=e%UVVBVkinI=9(|TuQ-t(Tc{)2t1?BgJ4_^(l(wj%KWiSw5CLV;dN=~k?h9p{*tah@U^Y|M=6@3)PTG*wr?7g`NIm%)tjG0p3pUB8#?^AWJ` z2pSE;UMo=dIrRbqEbD@fMu0TJMZ1yvJs`N;h{_PcF|@pkbz4yZhuPtH2nOiLDd?Nq z6iPLQE9SrmfU#gC_LAZK|~#iE+exH$Fz?-3l^Qke_{qFV>8u;boG+3YGvN@QIM zR-|rI>aIvpQ;IGI9!QD*6U1T`^9JiPB+irZMT{HqjUlkHC5?4k@vTLj%nID~M5TRQcS^&gzF z=eDVh5r~NZbE%3M{4_CpTHZFg;TO={>e21K>Wxt@I8mO>Ybw<(p;#ya7OZ3-7Bm4w zLyP-er?oe`tjlp(6Q6-H06VvayuXq-XeJI;5-*sE7w(DW#7hsPpKkS|6L8Vpv+}|g2B_cY|P#d@5@kw zn~EGH66$PfA@UN0e33uBW4n^&>KekQ$Z19HmEDB+Ne`LkAfh>j2RIW&EdNC)_wb;m zRXZhZA6uf$VpWZKS(e%JK%c`+A;+_|y$q_Kz!La0wDXVB`%)#;XNLO9q1fVEUxWtd z#jketRCYakf7i3~FRuqXD&e>pj+euUFM^48PizQecjBR!gu?T|I1>5X@&9=#gfHgJOFG2X?jtaxvW4t?w z-ks*A@TF~PN&c+gWli%__?$O2_Z;`(nresxSJagOTLjSZcxyeQqN^)PUV-b{akQ;< zPw})i*dUGy^%MTbz2Wmeg|(-t)wPWBbsb6H6n^rWTD{ys4oGv}!NbtxIj@X;e2zaX zTbw+{%ZKNDHY+gao5H*phlN1gZ>NidA)ilOva^NCa0nd-VzC8%wy0WSuJE=>?L_gs zS;*#{x@q~SnpU$#oo>l0s|D3M%hryD>~eT4Q18MykY95DqJI1G(&fs)0dwF$d0^b= zKe+as(R0lB{_%O=BYD<&bMnUILh>)d;>(rT^JeV%a_q-tdAuSYHRYpa`Ir$sesAR7 z>y;C)nI~Q=pLpGP@r-fi4P*DY2SLS6N`L5P+l{t`u0_vnX-TTcBc?o3miHUcv6TrU za`?VKBKvJ($vJA*Im|PP1k+Ia z8IW(T1Ns}hC`$isYIu3gytQW&Z_)Q+T!j diff --git a/__pycache__/database.cpython-314.pyc b/__pycache__/database.cpython-314.pyc deleted file mode 100644 index fb8f637e7b11be30ea09d0c425350fae5fa7e114..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2763 zcmb_dO>7%Q6rT0ZdhGl)gwzR?dPDe;l|N7`fl!4?NWd}|Dqt+A1_n_S-{Z%qxD~&OA7os-#fPoA3B@PP3JoBw-x6HXHzNU;dH~<1j#L-bpy`dfY!H) zP`u;ZDSTS^cr>I-4SocG_acPL``}O>jiOm(9f-y0KzkNVA4uxVw7<^RxH*n0mWt-n zwbY!fB1PaE{{cyw-)<3-NA)&Es-?7MJnT)q3)U3oL~-+z>H|L^j(i>R^Z#J_!Q)nA z%HVrzFxxBMg71Nr`CiAwE%UvO8Eode8iIyvTMI5^H2tEokh9i;?=P9m5NrTu1!v4* zsNJ>TQkE&UmeY;3ke$s@MW=?gyw;{KnHjSpaAiHmG6r*T+O)EuOWgoaTf1N+q5;=>!%9;=4Jq#>Ds#d+XamNVZDba0-Z;;>(TP{)Ry8Yad|U{xP$u&xbMrJ&(B{QEcTC<@YwF73eH{g7W;=wcm$v-FgrL>z>%*)rJ>VXL)&&y zNtSR5@E(>9JJZRck}Bburs5IjY^tctl<;g5?D4JGwq8`!5>7UGJic}2->}EG;=-_B zaH2FWpWR$7u&DJh*t@GlKN!QWTbm^6qs zJokA2yD~Lcj#^O<V2l!!{S z6Le@dkV+X=4C~b1)69&vkTHlT>F|MRhXuko-hohTT|HM(ObP0mqv}uR+ccZJq`Z#GS54p)2Cxh%ga+6$#>>OGHDw^DS+eS4)VHfH?m zs~edNA>gkFHjmM1Q6ZH7ND6|1v7Z65{|Pwoz~k}bKXIpjM%q)LPVe(#-IF2ufAJIu zpTslnjLcS7cpP}wxLznU(K>FZ9vd++-6Qo20#6LPK0^i82CCqSp2DXpVR@CF09bCZ g&8y|USCXW=DEtTNxr+vVMQ`oN{gP5fK*Zy}0dHS00RR91 diff --git a/__pycache__/ingredient.cpython-314.pyc b/__pycache__/ingredient.cpython-314.pyc deleted file mode 100644 index 2eca0918722e6acd0d20f7bbd1ce67f609e82bd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2004 zcmbVMO>7%Q6rR~#JL^r-q)kHNv=SypfN7Od3KFU+#DNQ!2o~fVNIP2Ao3gN3huN`& zdvXe*s#L+1O58Z*7N8MK=LTtsT4kvr=hIyG*H|}#xd(Qa znBp!|#$~R|XIK;Ll~rfwxoga`$aYQ8)2cv-MM!~=A|XXW#t0cB#3rOfi0wM6RA9PjAw^gVrB@9I10&5GXBclA$c2d1}SysPh~*YwV^qrd$p zexU-`PI{eee$_i@d`It9(k*>2{UY50tMC8AVMXtzTj@185Zv$S-zqOX*;VZfouz-) zKk6OW3Xy^5O8ON>i1GOxQo)8&gl0nPo&j}{cUYZWHs1J>u?C>0*n9kA?(+Bfhj2Bd zP0;+T3G`Th;?-nR;UPytwKs#zioJ~>D{RWp4{AncCQ4?7^{DA7m=)KXa>G;Eq!51O zB}pUnl@JMfTIyt{-@dTc_TonHc>?CKO4dH`l23Cj&aDkkTHb7D6GC`#+*FoK!%@&MJgxsTls=c)UpMPL_pF@Nw%ae`q14R-fs70y7fAB!ojHJ)IW3jP3|6W#prLt4iH464*s@L|W)codnBKQfy40e%|QA8GsbfkdpR|wze0B zf&70;tL#hymR_r$irLt_riKCQ6ZMR3hL2yc+3ZeRj_*#P`9XR z^&I$W`}p5_MR;8}D%0p8jwn}hvH~Zdv+X?pex13PXZfZ)H#i6X^S;SB?-?_^+-0E1 F$zMU7-xL4< diff --git a/__pycache__/ingredient_types.cpython-314.pyc b/__pycache__/ingredient_types.cpython-314.pyc deleted file mode 100644 index 818212d59ecd1ae97d154b61e361d58c8c5b69b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmdPq^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^>3|*{Z zDiiZkQY(rJiZb&`ieo|&i?bnQykSgcUV2e#N@i+aNqk9VL29vHLFFwDo80`A(wtPg qB2W;50;^a8NPJ*sWMurv#KOq(fr~*>;R1u`4JqYI4B|x`KuG}q9*G