From 630a6c8f28850a43791737520a26567c72e7447f Mon Sep 17 00:00:00 2001 From: karasiqu Date: Mon, 24 Aug 2026 23:47:14 +0400 Subject: [PATCH 1/2] first commit --- __pycache__/main.cpython-314.pyc | Bin 0 -> 3743 bytes .../tests.cpython-314-pytest-9.1.1.pyc | Bin 0 -> 14032 bytes tests.py | 89 +++++++++++++++++- 3 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 __pycache__/main.cpython-314.pyc create mode 100644 __pycache__/tests.cpython-314-pytest-9.1.1.pyc diff --git a/__pycache__/main.cpython-314.pyc b/__pycache__/main.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..96377239dc186a91a5c9e4cb3e2535f63339d009 GIT binary patch literal 3743 zcmb7HO>7%Q6rQzrQzv%3+a_&k>?BU?xY?$48fu}EmZ*?`R8euUIYAk>@)&_XE%Zk%@^vaP*x;#M3gIP%`?I(A$q5~KLrnR##i zzW3(6$xyJpjX*iJbp1lOm5@KMQ7yb%S?_|%64_1qh(h)fg-d!Ii9r-kl*rz6bp(Dn zx3NA0l@yG7i5Q$h4A0A);oUCy2s7&q0rSE&_X0JP8lr~ne$g0KT%aStkfX1!znXkE81TUTH@sG0Yz zYl}e?eQN$}-iJAEgW&E8Z~M>Tk<~dZPc^%BHuYM8W(`fZ1*b=1A2l_nsWfF|^K&bl z&FfljR>#xE|2_#gK05P)u2Fqv5pZTg(=Qr@g&FgPwFGOi-CEZo<}c7(b+>*G_IH2g z)s(vMx^cdcpP5f(^NEGmZJ(-U^I1bx?Y)~Vk*ErgKRphxM9QJ=Wq!@~Sb1M)nZF*i zcfSdrwsPMgb9mg0Of2(7U-vp_lJtfdpuxkBnej`gEP>gk;M-WHHq2C$Omj)s!28|K zxx<8n$;)I0O~6V`XVG)aa}hsVQw&0=I&KLh}j`NdL4)ar8~M29k2=)UA8v!1qin9`4zay6MhWeP!PTSU^{0;kY;uMm z_{(;u+bqVIq$5vF9O8FTHhr#<>rcXiIy3UGY+QmYK(uRS=<4OkoMy(9wlwxrC~rQ; z)W(H_#oUr~zY=+_hmcFKH<~>A^wAdynS*_W$*Fcirae;_BOA)Jw|cRA$*Bk-t)vGu ztGx0x7qSJ2jPttPl3G~M@)?M|%%jkm?0tC6boEl!IIrppS~@$MO*^i{JkD-IxznNJ z?&I-DB;wrE?kf9Dhua4mJaJoXX89LjelT4uZuh zBIGu^VRimA>iSdk?BOY#v!Of*B)C4dmk`itX;6SBhA&q~20!GcFpM{pX-}OW9(Vna ztCA-;~?8YI&k8c9y~;R(PZ+j;w0Gyz#>u#V1ad zrT&s6TatV$R+NUpy~0U!uYT~=ZQ|nwfVwp z+N11rWwe}TXbwTMv@l;sk=#Jh)~ZKf4Lu6Lc=~AUgRwP#UpXMXH+glk6zH=8eK%vp zz<#8q|Iy&^KO+~jbz|fT;VsH#bwe%8){elArP~J@4zi6dW`7+oHH&EPy><01)7QNLCMtB_I2?PvL_HI?x4S46L)s$h-?72nwR{+-8sjBH*O4l>lw2{_wIaQT8 zyS=Uxh9RLRSVX6g5eNh9(;<_l>n&x1Ja%c1i)beC!LfzHtz~?`q)d?ciiD)jE;i}TN3*pcsY*y$8(hH JStkH&z<=lUl`VGyOPd%^mi5?dvh1$! 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 NDn8%fO#vzG{7?TpNvi+= literal 0 HcmV?d00001 diff --git a/tests.py b/tests.py index 383385e..5b1cafc 100644 --- a/tests.py +++ b/tests.py @@ -1,3 +1,4 @@ +import pytest from main import BooksCollector # класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector @@ -18,7 +19,93 @@ def test_add_new_book_add_two_books(self): # проверяем, что добавилось именно две # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 + assert len(collector.get_books_genre()) == 2 + + # 1. Проверка, что книги с возрастным рейтингом отсутствуют в списке книг для детей + def test_get_books_for_children_without_age_rating(self): + collector = BooksCollector() + + collector.add_new_book('Алиса в стране чудес') + collector.add_new_book('Кладбище домашних животных') + collector.set_book_genre('Алиса в стране чудес', 'Мультфильмы') + collector.set_book_genre('Кладбище домашних животных', 'Ужасы') + + assert collector.get_books_for_children() == ['Алиса в стране чудес'] + + # 2. Проверка, что у добавленной книги нет жанра, если его не указывать при добавлении + def test_add_new_book_without_genre(self): + collector = BooksCollector() + + collector.add_new_book('Дюна') + + assert collector.get_book_genre('Дюна') == '' + + # 3. Проверка, что добавленной книге можно установить жанр + def test_set_book_genre(self): + collector = BooksCollector() + + collector.add_new_book('Дюна') + collector.set_book_genre('Дюна', 'Фантастика') + assert collector.get_book_genre('Дюна') == 'Фантастика' + + # 4. Проверка, что книгу с одним и тем же названием нельзя добавить повторно + def test_add_new_book_duplicate(self): + collector = BooksCollector() + + collector.add_new_book('Дюна') + collector.add_new_book('Дюна') + + assert len(collector.get_books_genre()) == 1 + + # 5. Проверка, что можно получить список книг определенного жанра + def test_get_books_with_specific_genre(self): + collector = BooksCollector() + + collector.add_new_book('Дюна') + collector.add_new_book('Кладбище домашних животных') + collector.set_book_genre('Дюна', 'Фантастика') + collector.set_book_genre('Кладбище домашних животных', 'Ужасы') + + assert collector.get_books_with_specific_genre('Фантастика') == ['Дюна'] + + # 6. Проверка, что книгу можно добавить в избранное + def test_add_book_in_favorites(self): + collector = BooksCollector() + + collector.add_new_book('Дюна') + collector.add_book_in_favorites('Дюна') + + assert collector.get_list_of_favorites_books() == ['Дюна'] + + # 7. Проверка, что одну и ту же книгу нельзя добавить в избранное повторно + def test_add_book_in_favorites_duplicate(self): + collector = BooksCollector() + + collector.add_new_book('Дюна') + collector.add_book_in_favorites('Дюна') + collector.add_book_in_favorites('Дюна') + + assert collector.get_list_of_favorites_books() == ['Дюна'] + + # 8. Проверка, что книгу можно удалить из избранного + def test_delete_book_from_favorites(self): + collector = BooksCollector() + + collector.add_new_book('Дюна') + collector.add_book_in_favorites('Дюна') + collector.delete_book_from_favorites('Дюна') + + assert collector.get_list_of_favorites_books() == [] + + # 9. Проверка, что нельзя добавить книгу с пустым названием или названием больше 40 символов + @pytest.mark.parametrize('name', ['', 'А' * 41]) + def test_add_new_book_invalid_name(self, name): + collector = BooksCollector() + + collector.add_new_book(name) + + assert name not in collector.get_books_genre() + # напиши свои тесты ниже # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file From cbe8574bf5c402776cb073afca2a7468302e659f Mon Sep 17 00:00:00 2001 From: karasiqu Date: Wed, 26 Aug 2026 18:35:59 +0400 Subject: [PATCH 2/2] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tests.py b/tests.py index 5b1cafc..916bea4 100644 --- a/tests.py +++ b/tests.py @@ -106,6 +106,33 @@ def test_add_new_book_invalid_name(self, name): assert name not in collector.get_books_genre() + # 10. Проверка получения словаря с книгами и их жанрами + def test_get_books_genre(self): + collector = BooksCollector() + + collector.add_new_book('Дюна') + collector.set_book_genre('Дюна', 'Фантастика') + + assert collector.get_books_genre() == {'Дюна': 'Фантастика'} + + # 11. Проверка получения жанра книги по ее названию + def test_get_book_genre(self): + collector = BooksCollector() + + collector.add_new_book('Дюна') + collector.set_book_genre('Дюна', 'Фантастика') + + assert collector.get_book_genre('Дюна') == 'Фантастика' + + # 12. Проверка получения списка избранных книг + def test_get_list_of_favorites_books(self): + collector = BooksCollector() + + collector.add_new_book('Дюна') + collector.add_book_in_favorites('Дюна') + + assert collector.get_list_of_favorites_books() == ['Дюна'] + # напиши свои тесты ниже # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file