From 5bb6aef9aff1ae9473207d091fe058cc685e250b Mon Sep 17 00:00:00 2001 From: Julia-koroleva Date: Fri, 12 Dec 2025 00:06:33 +0300 Subject: [PATCH 1/4] Tests --- .gitignore | 4 + README.md | 34 +++---- burger.py | 4 +- conftest.py | 12 +++ data.py | 56 +++++++++++ database.py | 6 +- praktikum.py | 8 +- requirements.txt | Bin 0 -> 1692 bytes tests/.coverage | Bin 0 -> 53248 bytes tests/__init__.py | 0 tests/__pycache__/__init__.cpython-313.pyc | Bin 0 -> 163 bytes .../test_burger.cpython-313-pytest-8.4.2.pyc | Bin 0 -> 17667 bytes tests/test_burger.py | 89 ++++++++++++++++++ 13 files changed, 181 insertions(+), 32 deletions(-) create mode 100644 .gitignore create mode 100644 conftest.py create mode 100644 data.py create mode 100644 requirements.txt create mode 100644 tests/.coverage create mode 100644 tests/__init__.py create mode 100644 tests/__pycache__/__init__.cpython-313.pyc create mode 100644 tests/__pycache__/test_burger.cpython-313-pytest-8.4.2.pyc create mode 100644 tests/test_burger.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..17421b6e2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +__pycache__/ +tests/__pycache__/ +tests/.pytest_cache +.pytest_cache \ No newline at end of file diff --git a/README.md b/README.md index 272081708..e2a977b9f 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,12 @@ -## Задание 1: Юнит-тесты +Тесты для покрытия функциональности Burger: +1) test_set_bun - проверяет добавление булочек +2) test_move_bun_success - проверяет замену одного вида булочки на другой +3) test_add_ingredient_success - проверяет добавление ингредиентов +4) test_remove_ingredients_success - проверяет удаление ингредиентов +5) test_move_ingredients_success - проверяет перемещение ингредиентов +6) test_addtwo_move_one_ingredients_success - проверяет добавление двух и удаление одного из добавленных ингредиентов +7) test_burger_get_price_success - проверяет получения цены +8) test_get_receipt - проверяет получение чека + +с 1 по 6 тест выполнены с помощью парамертизации, 7-8 - с использованием моков -### Автотесты для проверки программы, которая помогает заказать бургер в Stellar Burgers - -### Реализованные сценарии - -Созданы юнит-тесты, покрывающие классы `Bun`, `Burger`, `Ingredient`, `Database` - -Процент покрытия 100% (отчет: `htmlcov/index.html`) - -### Структура проекта - -- `praktikum` - пакет, содержащий код программы -- `tests` - пакет, содержащий тесты, разделенные по классам. Например, `bun_test.py`, `burger_test.py` и т.д. - -### Запуск автотестов - -**Установка зависимостей** - -> `$ pip install -r requirements.txt` - -**Запуск автотестов и создание HTML-отчета о покрытии** - -> `$ pytest --cov=praktikum --cov-report=html` 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/conftest.py b/conftest.py new file mode 100644 index 000000000..e22687639 --- /dev/null +++ b/conftest.py @@ -0,0 +1,12 @@ +import sys +import os +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +import pytest +from data import * + +@pytest.fixture() +def bunsandOtherIngredients(): + buns = BunsandOtherIngredients.mock_buns + ingredients = BunsandOtherIngredients.mock_ingredients + return[buns, ingredients] diff --git a/data.py b/data.py new file mode 100644 index 000000000..6daac1c96 --- /dev/null +++ b/data.py @@ -0,0 +1,56 @@ +from burger import Burger +from ingredient import Ingredient +from database import Database +from bun import Bun +from unittest.mock import Mock + + +class BunsandOtherIngredients: + """Добавление моков булочек""" + mock_buns=[] + mock_bun1=Mock() + mock_bun1.get_name.return_value ="red bun" + mock_bun1.get_price.return_value =300.0 + mock_bun2=Mock() + mock_bun2.get_name.return_value ="black bun" + mock_bun2.get_price.return_value =100.0 + mock_bun3=Mock() + mock_bun3.get_name.return_value ="white bun" + mock_bun3.get_price.return_value =200.0 + mock_buns.append(mock_bun1) + mock_buns.append(mock_bun2) + mock_buns.append(mock_bun3) + + """Добавление моков ингредиентов""" + mock_ingredients=[] + mock_ingredient1=Mock() + mock_ingredient1.get_name.return_value ="sour cream" + mock_ingredient1.get_price.return_value =200.0 + mock_ingredient1.get_type.return_value ='SAUCE' + mock_ingredient2=Mock() + mock_ingredient2.get_name.return_value ="sausage" + mock_ingredient2.get_price.return_value =300.0 + mock_ingredient2.get_type.return_value ='FILLING' + mock_ingredient3=Mock() + mock_ingredient3.get_name.return_value ="dinosaur" + mock_ingredient3.get_price.return_value =200.0 + mock_ingredient3.get_type.return_value ='FILLING' + mock_ingredients.append(mock_ingredient1) + mock_ingredients.append(mock_ingredient2) + mock_ingredients.append(mock_ingredient3) + + """Вывод сформированного рецепта для 1 булки и 1 ингредиента""" + @staticmethod + def get_receipt(bun, ingredient): + receipt = f'(==== {bun.get_name()} ====)\n' + receipt += f'= {str(ingredient.get_type()).lower()} {ingredient.get_name()} =\n' + receipt += f'(==== {bun.get_name()} ====)\n\n' + receipt += f'Price: {bun.get_price() *2+ingredient.get_price()}' + return receipt + + +class TestData: + buns_available=[["black bun", 100], ["white bun", 200], ["red bun", 300]] + ingredients_available=[["SAUCE", "hot sauce", 100], ["SAUCE", "sour cream", 200], ["SAUCE", "chili sauce", 300], + ["FILLING", "cutlet", 100], ["FILLING", "dinosaur", 200], ["FILLING", "sausage", 300]] + 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/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..6238571c57f24fc8b294c2d3e9efa1505624426b GIT binary patch literal 1692 zcmds%-EPxB5QXO&iFZKa66MEDXaZ6tuDL?$14ORvI;Ke+5;rA0Jn)?vZ(LD$0c2$z z@BE#ab9R6I%x%N-Xa}ooWP3YX$G;=%4bPR0EwlHmQ+sW%>~G#{Yi&nt!F$W2uj4mBi_f(DoYqBeQW(!}# zwx$>5ugEh3am&}%`)lln=T~0U6soy*uMRivnY*t%roG4Y#pC4Bxz)Vo5mg8DYmj7a zQEX<{tTEljN|5AklYe&E-_fV4@4TbhJ%XDQ+rnYja}agab5tF}YwMgwojo-Qdtj}} zyJL+R4m|H&6E&8z+mvg-DU~Q9rm8jNJ(E}2W3q=n?-*{bd_G@@teIU!)$YQsI{iSF z!RHpdLKr$yg@L<2H7dr%QA9tth9*yrLh+jSfHdhmsXlZp^qs9eM*fNm_H{zOG37WN zgTiN29-}?!N_yIOcMYCf&mwHIXJ_b0?^3R`*}8}N3%()K%W- zW`yq>=d!bRVAt8%wNTtD@hM_kw>*Yz5zUL@i)(>6$IUHD`B@wWPBp>{j%hqYgo7r0|(%H?6 znwmx27n=(kIuVI!-4AJk+MT&ACX#F;?wJa7$6il5?djBJ&ReLaLzjE+x2E69zT+p2 z9=$@k&ouGOwU#;Cx;1rsHdL5--cUl~f&a7zc1EX|32v;1pS41UZD4%`xh@GkPet9ky)Cp;&>gTd>Q3xwK3tS}n$m1@;YweW!hq-geq$&m&5foy0|N1=PO~J9;50^2djyUA6u3*%MDIF$^PL zYVpw8ux#7v;pprPVPNF^)W6MwjA+x@@Njvb$+@q0I>@M0v*nrx1Ht_Lhj$P(>RfB+MA4MTLn_D(qXE~xAIZQyQE^+yX$#$u>Up6}YopMA zphGe8g0z`I>}f9ygt|~}qSfHm2DTY3-w1EEHB{DfZqRd+GrQM}PLcVRoLTZL^N=bR zggI-Gk#9|z(>e!<-zV~46MxK|LpjWib+{Kd5~ks zhzFVovxHRB_Zn?nS*nBRkHY?ZtfdhXD;gj)7v#x?N#OEOiMb7Kc%~wGtUB3MGcCOD zK%&s;Rx6Fe-9@1@4S`;Fx?7uUSDePqj{UNlhEdjA*)L}*Z!=PLBN{9bwW^HN&ntL;?Zr%9h*%X3xcGewoZQFW4fmoi?j|mSEVnDGU7`vO&sTzzq?Jhn>s-ddjTBv^wY1e-ep?uDZ}qzT&fk*x+p{&< zwVlTO`}QQs2BVp0dND2PzRatg9WKoU$+e3`yga1|mp<*x#tGZaaPXnI15a+I2m3}L zPnCVvskQhEzFq&%q91G!fB*y_009U<00Izz00bZa0SJ^&VA)=>9rOMFja7eBz6PR2 z5P$##AOHafKmY;|fB*y_0D%uvV8dSC+0OnBz@tw0Vdv8tLD=Ty z|MZ{!VS@k!AOHafKmY;|fB*y_009UZ7hK1K^6009U<00Izz00bZa0SG_<0(kz9 z7=Qo-AOHafKmY;|fB*y_009V;UjWbl%iqUnAp{@*0SG_<0uX=z1Rwwb2teR}QL+?3 literal 0 HcmV?d00001 diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/__pycache__/__init__.cpython-313.pyc b/tests/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf3fce1e24cd4a73c89c83864575535238c711ac GIT binary patch literal 163 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 RJ--g02n6!K(lDjN_&*t->DK@N literal 0 HcmV?d00001 diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..accb89736 --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,89 @@ +import sys +import os +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) +from conftest import bunsandOtherIngredients +import pytest +from data import * +from burger import Burger +from bun import Bun + +class TestBurger: + """Создание пустого бургера""" + def test_create_burger(self): + burger = Burger() + assert burger.bun == None and burger.ingredients==[] + + """Добавление булочек""" + @pytest.mark.parametrize("buns", TestData.buns_available) + def test_set_bun_success(self, buns): + burger = Burger() + burger.set_buns(buns) + assert burger.bun ==buns + + + """Замена булочек""" + @pytest.mark.parametrize("buns", TestData.buns_available) + def test_move_bun_success(self, buns): + burger = Burger() + burger.set_buns(buns[0]) + burger.set_buns(buns[1]) + assert burger.bun ==buns[1] + + """Добавление ингредиентов""" + @pytest.mark.parametrize("ingredient", TestData.ingredients_available) + def test_add_ingredient_success(self, ingredient): + burger = Burger() + burger.add_ingredient(ingredient) + assert len(burger.ingredients) == 1 + + """Удаление ингредиентов""" + @pytest.mark.parametrize("ingredient", TestData.ingredients_available) + def test_remove_ingredients_success(self, ingredient): + burger = Burger() + burger.add_ingredient(ingredient) + burger.remove_ingredient(0) + assert burger.ingredients ==[] and ingredient not in burger.ingredients + + """Перемещение ингредиентов""" + @pytest.mark.parametrize("ingredient_indices", [(0, 5)]) + def test_move_ingredients_success(self, ingredient_indices): + burger = Burger() + ingredient1=TestData.ingredients_available[ingredient_indices[0]] + ingredient2=TestData.ingredients_available[ingredient_indices[1]] + burger.add_ingredient(ingredient1) + burger.add_ingredient(ingredient2) + burger.move_ingredient(0, 1) + assert burger.ingredients[0] == ingredient2 and burger.ingredients[1] ==ingredient1 + + """Добавление нескольких ингредиентов и удаление одного из них""" + @pytest.mark.parametrize("ingredient_indices", [(0, 5)]) + def test_addtwo_move_one_ingredients_success(self, ingredient_indices): + burger = Burger() + ingredient1=TestData.ingredients_available[ingredient_indices[0]] + ingredient2=TestData.ingredients_available[ingredient_indices[1]] + burger.add_ingredient(ingredient1) + burger.add_ingredient(ingredient2) + burger.remove_ingredient(0) + assert burger.ingredients[0] == ingredient2 and len(burger.ingredients) ==1 + + """Получение цены бургера""" + @pytest.mark.parametrize('id_item', [0, 1]) + def test_burger_get_price_success(self, id_item, bunsandOtherIngredients): + burger = Burger() + burger.set_buns(bunsandOtherIngredients[0][id_item]) + burger.add_ingredient(bunsandOtherIngredients[1][id_item]) + assert burger.get_price() ==(bunsandOtherIngredients[0][id_item].get_price()*2+bunsandOtherIngredients[1][id_item].get_price()) + + """Получение чека""" + @pytest.mark.parametrize('id_item', [0, 1]) + def test_get_receipt(self, id_item, bunsandOtherIngredients): + burger = Burger() + burger.set_buns(bunsandOtherIngredients[0][id_item]) + burger.add_ingredient(bunsandOtherIngredients[1][id_item]) + + expected_receipt = BunsandOtherIngredients.get_receipt( + bunsandOtherIngredients[0][id_item], + bunsandOtherIngredients[1][id_item] + ) + + assert burger.get_receipt() == expected_receipt From c5a50f57e32528dcd512cdf970ade0b274d764d0 Mon Sep 17 00:00:00 2001 From: Julia-koroleva Date: Mon, 5 Jan 2026 17:59:25 +0300 Subject: [PATCH 2/4] Deal with imports --- data.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/data.py b/data.py index 6daac1c96..27728cf81 100644 --- a/data.py +++ b/data.py @@ -1,7 +1,3 @@ -from burger import Burger -from ingredient import Ingredient -from database import Database -from bun import Bun from unittest.mock import Mock From ecd61c5b7260dbe9104160320842ddb84bd4b801 Mon Sep 17 00:00:00 2001 From: Julia-koroleva Date: Tue, 6 Jan 2026 14:01:00 +0300 Subject: [PATCH 3/4] Deal with .gitignore --- .gitignore | 5 +++-- tests/__pycache__/__init__.cpython-313.pyc | Bin 163 -> 0 bytes .../test_burger.cpython-313-pytest-8.4.2.pyc | Bin 17667 -> 0 bytes 3 files changed, 3 insertions(+), 2 deletions(-) delete mode 100644 tests/__pycache__/__init__.cpython-313.pyc delete mode 100644 tests/__pycache__/test_burger.cpython-313-pytest-8.4.2.pyc diff --git a/.gitignore b/.gitignore index 17421b6e2..080556996 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ __pycache__/ -tests/__pycache__/ +tests/__pycache__ tests/.pytest_cache -.pytest_cache \ No newline at end of file +.pytest_cache +*.py[cod] diff --git a/tests/__pycache__/__init__.cpython-313.pyc b/tests/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index cf3fce1e24cd4a73c89c83864575535238c711ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 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 RJ--g02n6!K(lDjN_&*t->DK@N From 42e8f4a3f1dc44ccfaa5f1fbabfd1f4f7ceede36 Mon Sep 17 00:00:00 2001 From: Julia-koroleva Date: Tue, 6 Jan 2026 14:27:51 +0300 Subject: [PATCH 4/4] Commit after first review --- .coverage | Bin 0 -> 53248 bytes tests/test_burger.py | 6 +----- 2 files changed, 1 insertion(+), 5 deletions(-) create mode 100644 .coverage diff --git a/.coverage b/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..738a18d31fa7a0742cb092bada64156e8991c5a9 GIT binary patch literal 53248 zcmeI4&u<$=6vubHw%1NJ-d%Th z-6kppxkXf}#6N%#S1$C5#0A6^PQ8IR6mdX3P=tW0prDpF`y;m7q>6KBmGWKL`(t+A zoA*BRX2!GY-PeyFF@3@7j%yh{-=hpEs;W$Lt|&^DzIpn_i%vVq_<*)**Zx|&S!L?- z<9YU`l1qQ2u($I^*<|jM{4;}Bb5{29;HSEgt^6?97Q-eq!dpky#$5@f`!4mdQyz!(HbrZwi;!&4%EnT{EkOZ`$+R zUl4KbmM3a*prbSz>SV^LKwj>Z%^FGhVxCkqUDGn$CH{_Bng}vPrTJpf4--gLn5QWVluO4EA_K2_07s*GW;;ack20 zifh=_1>sF_W5vU&Lv}9up|`GM?eZPoFzvui+cSOBvAI|j)s`=6t2#I#p~VZq>-L6p zos|}d_W+i!z(2?iYjvLuZ zdV@r^qDF%|^`OZ}X&zP%MRRwX*%iYuT-ngL6J;bzA8NEoW61_yX*iYMSPLS?6VyPc zFNm|%TXt186;Jw5bn@YAf34Js}j=)flQ#`oHZvF%{y10GOj%68kEgG-nFdS;7zF#&@Sx(rA zkRTtUM(I%#y-R1TG&(DLtXTh4lbA@YmQf3vyR4Khjb|6cJ?g^I=#b$H-?RjmSps8% zz&dMqyy^-%Nn`2wn0CJ~khN7V$+es%XXH=0_Nb~CckWc%t*9}E{Y=@TLESQ9v!laA zPmtVovJ)>ysl%mTJKb?2*>&NNhhYh_a|>&*5>kkBMZa|h#^nTGWy=bEuz&yvfB*=9 z00@8p2!H?xfB*=900=yK1T;0F>T>>{U_UABH(Fr<0T2KI5C8!X009sH0T2KI5C8!X z*pviv32i%z|KYKFNYzG$qyGRrJ5|~!xik&RI*xmgrR_P1iXks=haO z$ZR$oE83JxbMzt_dIN+hY@eR5->YlNxxQ6YS~khPkf!q04G6pRS{{-=oFe&R-}1ij z$Sb)nS6Y#(7n7uF%LY}I%f!tum&v4knx>rZTTSqugXYq7f{aM@Elsb-s7r6C_-S=R z8oC^i_y05b8w&fnP%2pLJe$tnDEwWxvT1`HhJyeIfB*=900@8p2!H?xfB*<6%E4qi z+yDH#Xa1krr=9CxML7T0_b1!xMuekDd-|1RyV$?{YV-fpOUd?@jjHOJJ|~~o&iAh- zn*VDv$#$xL>8|;IVwyDce?_Ou0lfbY9Rmn}00@8p2!H?xfB*=900@8p2t3jRG*wgb z^8UZd{#EFM1q46<1V8`;KmY_l00ck)1V8`;K;RK1plSJR@ccjfOkw}9-`UUX2lgHN zhJ8s1SU>;-KmY_l00ck)1V8`;KmY_l00bU1fuT%N%|4a7ee=&-%gfj9+=$;8U1i_08|*Lk{eyN8<$(YQfB*=900@8p2!H?xfB*=900^vyfV>W% zrh>}>YElo5GU;HWrGiZ&8En#8u%Qb9bO9i^|E~