From 53da778e19b43b32dd8c5f4469bfb2c3cd4d7243 Mon Sep 17 00:00:00 2001 From: Maria Ershova Date: Sat, 2 Aug 2025 22:14:36 +0300 Subject: [PATCH 1/6] add tests --- .vscode/.gitignore | 2 + __pycache__/.gitignore | 2 + tests.py | 221 ++++++++++++++++++++++++++++++++++++++--- 3 files changed, 211 insertions(+), 14 deletions(-) create mode 100644 .vscode/.gitignore create mode 100644 __pycache__/.gitignore diff --git a/.vscode/.gitignore b/.vscode/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/.vscode/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/__pycache__/.gitignore b/__pycache__/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/__pycache__/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tests.py b/tests.py index 383385e..731333d 100644 --- a/tests.py +++ b/tests.py @@ -1,24 +1,217 @@ +import pytest from main import BooksCollector # класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector # обязательно указывать префикс Test class TestBooksCollector: - # пример теста: - # обязательно указывать префикс test_ - # дальше идет название метода, который тестируем add_new_book_ - # затем, что тестируем add_two_books - добавление двух книг - def test_add_new_book_add_two_books(self): - # создаем экземпляр (объект) класса BooksCollector + @pytest.mark.parametrize("name", ['Чебурашка', 'Гордость и предубеждение и зомби', 'Гордость и предубеждение и зомби .......']) + def test_add_new_book_title_less_than40_successfull(self, name): collector = BooksCollector() + collector.add_new_book(name) - # добавляем две книги - collector.add_new_book('Гордость и предубеждение и зомби') - collector.add_new_book('Что делать, если ваш кот хочет вас убить') + assert len(collector.get_books_genre()) == 1 - # проверяем, что добавилось именно две - # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 + @pytest.mark.parametrize("name", ['Гордость и предубеждение и зомби и пираты карибского моря', + 'Ехала машина полный бак бензина ехала ехала и в гараж заехала', + 'По поля по полям синий трактор едет к нам']) + def test_add_new_book_title_greater_than40_unsuccessfull(self, name): + collector = BooksCollector() + collector.add_new_book(name) + + assert len(collector.get_books_genre()) == 0 + + def test_add_new_book_twice_unsuccessfull(self): + collector = BooksCollector() + collector.add_new_book('Гордость и предубеждение') + collector.add_new_book('Гордость и предубеждение') + + assert len(collector.get_books_genre()) == 1 + + @pytest.mark.parametrize('name,genre', [['Гордость и предубеждение', 'Детективы'], ['Преступление и наказание', 'Ужасы']]) + def test_set_book_genre_from_list_successfull(self, name, genre): + collector = BooksCollector() + collector.add_new_book(name) + collector.set_book_genre(name, genre) + + assert len(collector.get_books_genre()) == 1 + assert collector.get_book_genre(name) == genre + + @pytest.mark.parametrize('name,genre', [['Гордость и предубеждение', 'Драма'], ['Игра в кальмара', 'Дорама']]) + def test_set_book_genre_not_from_list_unsuccessfull(self, name, genre): + collector = BooksCollector() + collector.add_new_book(name) + collector.set_book_genre(name, genre) + + assert len(collector.get_books_genre()) == 1 + assert collector.get_book_genre(name) == '' + + def test_get_book_genre_not_from_list_empty_string(self): + collector = BooksCollector() + name = 'Гордость и предубеждение' + genre = 'Детективы' + collector.add_new_book(name) + collector.set_book_genre(name, genre) + wrong_name = "Преступление и наказание" + + assert len(collector.get_books_genre()) == 1 + assert collector.get_book_genre(wrong_name) is None + + def test_get_books_with_specific_genre_from_list_successfull(self): + collector = BooksCollector() + name1 = 'Гордость и предубеждение' + genre1 = 'Детективы' + + collector.add_new_book(name1) + collector.set_book_genre(name1, genre1) + + name2 = 'Преступление и наказание' + genre2 = 'Детективы' + + collector.add_new_book(name2) + collector.set_book_genre(name2, genre2) + + name3 = 'Один дома' + genre3 = 'Комедии' + + collector.add_new_book(name3) + collector.set_book_genre(name3, genre3) + + assert len(collector.get_books_genre()) == 3 + assert len(collector.get_books_with_specific_genre(genre2)) == 2 + assert len(collector.get_books_with_specific_genre(genre3)) == 1 + + + def test_get_books_with_specific_genre_not_from_list_empty_list(self): + collector = BooksCollector() + name1 = 'Гордость и предубеждение' + genre1 = 'Детективы' + + collector.add_new_book(name1) + collector.set_book_genre(name1, genre1) + + name2 = 'Преступление и наказание' + genre2 = 'Детективы' + + collector.add_new_book(name2) + collector.set_book_genre(name2, genre2) + + name3 = 'Один дома' + genre3 = 'Комедии' + + collector.add_new_book(name3) + collector.set_book_genre(name3, genre3) + + assert len(collector.get_books_genre()) == 3 + assert len(collector.get_books_with_specific_genre('Мультфильмы')) == 0 + + def test_get_books_for_children_not_from_age_genre_rating_successfull(self): + collector = BooksCollector() + name1 = 'Алёша Попович' + genre1 = 'Комедии' + + collector.add_new_book(name1) + collector.set_book_genre(name1, genre1) + + name2 = 'Преступление и наказание' + genre2 = 'Детективы' + + collector.add_new_book(name2) + collector.set_book_genre(name2, genre2) + + name3 = 'Простоквашино' + genre3 = 'Мультфильмы' + + collector.add_new_book(name3) + collector.set_book_genre(name3, genre3) + + assert len(collector.get_books_genre()) == 3 + assert len(collector.get_books_for_children()) == 2 + assert 'Преступление и наказание' not in collector.get_books_for_children() + + def test_get_books_for_children_from_age_genre_rating_empty_list(self): + collector = BooksCollector() + name1 = 'Гордость и предубеждение' + genre1 = 'Детективы' + + collector.add_new_book(name1) + collector.set_book_genre(name1, genre1) + + name2 = 'Преступление и наказание' + genre2 = 'Детективы' + + collector.add_new_book(name2) + collector.set_book_genre(name2, genre2) + + assert len(collector.get_books_genre()) == 2 + assert len(collector.get_books_for_children()) == 0 + + def test_add_book_in_favorites_from_books_genre_list_successfull(self): + collector = BooksCollector() + name = 'Гордость и предубеждение' + genre = 'Детективы' + collector.add_new_book(name) + collector.set_book_genre(name, genre) + collector.add_book_in_favorites(name) + + assert len(collector.get_list_of_favorites_books()) == 1 + + def test_add_book_in_favorites_not_from_books_genre_list_empty_list(self): + collector = BooksCollector() + name = 'Гордость и предубеждение' + genre = 'Детективы' + collector.add_new_book(name) + collector.set_book_genre(name, genre) + + name2 = 'Преступление и наказание' + collector.add_book_in_favorites(name2) + + assert len(collector.get_list_of_favorites_books()) == 0 + + def test_add_book_in_favorites_from_books_genre_list_twice_len_favorites_1(self): + collector = BooksCollector() + name = 'Гордость и предубеждение' + genre = 'Детективы' + collector.add_new_book(name) + collector.set_book_genre(name, genre) + collector.add_book_in_favorites(name) + collector.add_book_in_favorites(name) + + assert len(collector.get_list_of_favorites_books()) == 1 + + def test_delete_book_from_favorites_book_in_favorites_list_successfull(self): + collector = BooksCollector() + name = 'Гордость и предубеждение' + genre = 'Детективы' + collector.add_new_book(name) + collector.set_book_genre(name, genre) + collector.add_book_in_favorites(name) + + name2 = 'Простоквашино' + genre2 = 'Мультфильмы' + + collector.add_new_book(name2) + collector.set_book_genre(name2, genre2) + collector.add_book_in_favorites(name2) + + assert len(collector.get_list_of_favorites_books()) == 2 + collector.delete_book_from_favorites(name) + assert len(collector.get_list_of_favorites_books()) == 1 + + def test_delete_book_from_favorites_book_not_in_favorites_list_unsuccessfull(self): + collector = BooksCollector() + name = 'Гордость и предубеждение' + genre = 'Детективы' + collector.add_new_book(name) + collector.set_book_genre(name, genre) + collector.add_book_in_favorites(name) + + name2 = 'Простоквашино' + genre2 = 'Мультфильмы' + + collector.add_new_book(name2) + collector.set_book_genre(name2, genre2) - # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file + assert len(collector.get_list_of_favorites_books()) == 1 + collector.delete_book_from_favorites(name2) + assert len(collector.get_list_of_favorites_books()) == 1 From e1fa0f0576e8d972b7d17ec0caf22fcdd59be64b Mon Sep 17 00:00:00 2001 From: Maria Ershova Date: Sat, 2 Aug 2025 22:18:53 +0300 Subject: [PATCH 2/6] rm cache files --- __pycache__/main.cpython-38.pyc | Bin 2030 -> 0 bytes __pycache__/test.cpython-38-pytest-7.1.2.pyc | Bin 8183 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 __pycache__/main.cpython-38.pyc delete mode 100644 __pycache__/test.cpython-38-pytest-7.1.2.pyc diff --git a/__pycache__/main.cpython-38.pyc b/__pycache__/main.cpython-38.pyc deleted file mode 100644 index 5786eeb8eea4dc1762353e0d9309eb8d1407edbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2030 zcmb7FO>Y}F5GA=Qc`dI$>NrlLq-jwYMHQgYy$FmT3DBD^PA)W9_a&t`k^T zpOPOEAN7~^nq1OrZ#{J$SBj*y9H1099CC-`n>RDm%kAw3qxSjlt5^3o82g0Da`R~N zgu2})@dr~(@ekDBi!M{*gtfdrt*&*HfPIY4lZ1)oHA$ z4HeK>SDUIq7jh68o5}G-cA6$~Y|_^Rs2%sB;-B@R_4r zWG>|I#aSJ*WwcYTV~}%Swn(%*2ib(A7d6vMhMJau-0WbfUdE^Dz^>Jq13!!3HrdX6 zX!6N}iVqdzn`s7$g&QZ#AP5FH4Q{xGf_Pp=ffBJUhSxDvOjj_}Xx~>VpVDN=E*)j& zIOiEh?KmQj9X4^rp0mH2e~L@*($D>zp9%AGEcf~n-LpmWx;b>z;C#qE|Nxns&x=o~kmG7eLRNArbM}w$8Bi2Qsy9I;!3aVl$mmbVLTYtbISzGYR zxX%yxJ`Z>(Ccjl8^zAdQl{b>zL3v#T{i%{X|CdX#IF2p3-(D zTq~9N%M3wTnG^_Ara0RmjYbLz)hl;Z>XK<55-?&Ab8`n`U3T3@={e$~M1Fmqj>z1? zZN@|1;FF^Y^0k|8hVLF0_n1(j9=iN;Ps}o8;eb*p>NtI?*J5odJ<^#j;SNk1F91IT zV0g*^w^f0A^S=KRbVua6px;B#M-jcy>0klL!L)4vn^o(>3aoEz>$F0=>v&eBEE-bA zsX8A)52bu_-W!!)%qAUgb|DTRZbN(zaTfx-oBI$yKrCv?X?T(ik{sRr^9CZQxt||2 c0zaq+HTS(k84sIv2Nc2M6525={-MtP1Ay7ZO8@`> diff --git a/__pycache__/test.cpython-38-pytest-7.1.2.pyc b/__pycache__/test.cpython-38-pytest-7.1.2.pyc deleted file mode 100644 index b2898a8a207c1ae4014c5ac436acbbfebcdd6cd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8183 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 Date: Sat, 2 Aug 2025 22:37:48 +0300 Subject: [PATCH 3/6] add readme --- README.md | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1cc701d..d569760 100644 --- a/README.md +++ b/README.md @@ -1 +1,48 @@ -# qa_python \ No newline at end of file +# qa_python + +Реализованные тесты: + +1. test_add_new_book_title_less_than40_successfull (параметризованный) + Проверка правильности добавления книги при длине названия не больше 40 символов + +2. test_add_new_book_title_greater_than40_unsuccessfull (параметризованный) + Проверка корректности работы (книга не добавляется) при добавлении книги с названием длинее 40 символов + +3. test_add_new_book_twice_unsuccessfull + Проверка корректности работы при добавлении одной и той же книги дважды (должна добавиться только один раз) + +4. test_set_book_genre_from_list_successfull (параметризованный) + Проверка правильности назначения жанра книге (жанр из списка) + +5. test_set_book_genre_not_from_list_unsuccessfull (параметризованный) + Проверка корректности работы при назначении жанра не из списка (в поле жанр ожидается пустая строка) + +6. test_get_book_genre_not_from_list_empty_string + Проверка корректности работы при получении жанра у книги, не добавленной в список (ожидается что результат None) + +7. test_get_books_with_specific_genre_from_list_successfull + Проверка правильности работы при запросе списка книг конкретных жанров из списка + +8. test_get_books_with_specific_genre_not_from_list_empty_list + Проверка корректности работы при запросе списка книг конкретного жанра, если в списке нет книг с таким жанром (ожидаетсяя пустой список) + +9. test_get_books_for_children_not_from_age_genre_rating_successfull + Проверка правильности запроса книг для детей (ожидается что в списке не будет книг с возрастным ограничением) + +10. test_get_books_for_children_from_age_genre_rating_empty_list + Проверка корректности работы при запросе книг для детей, при этом в списке нет таких книг (ожидается пустой список) + +11. test_add_book_in_favorites_from_books_genre_list_successfull + Проверка правильности добавления книги в избранное + +12. test_add_book_in_favorites_not_from_books_genre_list_empty_list + Проверка корректности работы при добавлении книги в избранное, которой нет в списке книг (ожидается, что список избранных книг пустой) + +13. test_add_book_in_favorites_from_books_genre_list_twice_len_favorites_1 + Проверка корректности добавления одной и той же книги дважды в список избранных (ожидается, что в список книга будет добавлена один раз) + +14. test_delete_book_from_favorites_book_in_favorites_list_successfull + Проверка правильности удаления книги из списка избранных + +15. test_delete_book_from_favorites_book_not_in_favorites_list_unsuccessfull + Проверка корректности работы при удалении книги из списка избранных, которой нет в этом списке \ No newline at end of file From 2dbb8b9b2224d5b0ba036479dbb37ebb997cbe4c Mon Sep 17 00:00:00 2001 From: Maria Ershova Date: Sun, 3 Aug 2025 14:08:30 +0300 Subject: [PATCH 4/6] fix review comments --- README.md | 25 +++++++++-------- conftest.py | 8 ++++++ tests.py | 77 ++++++++++++++++------------------------------------- 3 files changed, 45 insertions(+), 65 deletions(-) create mode 100644 conftest.py diff --git a/README.md b/README.md index d569760..1d7349e 100644 --- a/README.md +++ b/README.md @@ -14,35 +14,38 @@ 4. test_set_book_genre_from_list_successfull (параметризованный) Проверка правильности назначения жанра книге (жанр из списка) -5. test_set_book_genre_not_from_list_unsuccessfull (параметризованный) +5. test_get_book_genre_from_list_successfull (параметризованный) + Проверка правильности получения жанра книни (жанр из списка) + +6. test_set_book_genre_not_from_list_unsuccessfull (параметризованный) Проверка корректности работы при назначении жанра не из списка (в поле жанр ожидается пустая строка) -6. test_get_book_genre_not_from_list_empty_string +7. test_get_book_genre_not_from_list_empty_string Проверка корректности работы при получении жанра у книги, не добавленной в список (ожидается что результат None) -7. test_get_books_with_specific_genre_from_list_successfull +8. test_get_books_with_specific_genre_from_list_successfull Проверка правильности работы при запросе списка книг конкретных жанров из списка -8. test_get_books_with_specific_genre_not_from_list_empty_list +9. test_get_books_with_specific_genre_not_from_list_empty_list Проверка корректности работы при запросе списка книг конкретного жанра, если в списке нет книг с таким жанром (ожидаетсяя пустой список) -9. test_get_books_for_children_not_from_age_genre_rating_successfull +10. test_get_books_for_children_not_from_age_genre_rating_successfull Проверка правильности запроса книг для детей (ожидается что в списке не будет книг с возрастным ограничением) -10. test_get_books_for_children_from_age_genre_rating_empty_list +11. test_get_books_for_children_from_age_genre_rating_empty_list Проверка корректности работы при запросе книг для детей, при этом в списке нет таких книг (ожидается пустой список) -11. test_add_book_in_favorites_from_books_genre_list_successfull +12. test_add_book_in_favorites_from_books_genre_list_successfull (параметризованный) Проверка правильности добавления книги в избранное -12. test_add_book_in_favorites_not_from_books_genre_list_empty_list +13. test_add_book_in_favorites_not_from_books_genre_list_empty_list Проверка корректности работы при добавлении книги в избранное, которой нет в списке книг (ожидается, что список избранных книг пустой) -13. test_add_book_in_favorites_from_books_genre_list_twice_len_favorites_1 +14. test_add_book_in_favorites_from_books_genre_list_twice_len_favorites_1 Проверка корректности добавления одной и той же книги дважды в список избранных (ожидается, что в список книга будет добавлена один раз) -14. test_delete_book_from_favorites_book_in_favorites_list_successfull +15. test_delete_book_from_favorites_book_in_favorites_list_successfull Проверка правильности удаления книги из списка избранных -15. test_delete_book_from_favorites_book_not_in_favorites_list_unsuccessfull +16. test_delete_book_from_favorites_book_not_in_favorites_list_unsuccessfull Проверка корректности работы при удалении книги из списка избранных, которой нет в этом списке \ No newline at end of file diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..d863cda --- /dev/null +++ b/conftest.py @@ -0,0 +1,8 @@ +import pytest +from main import BooksCollector + +@pytest.fixture +def collector(): + collector = BooksCollector() + + return collector \ No newline at end of file diff --git a/tests.py b/tests.py index 731333d..23d7ff6 100644 --- a/tests.py +++ b/tests.py @@ -1,13 +1,11 @@ import pytest -from main import BooksCollector # класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector # обязательно указывать префикс Test class TestBooksCollector: @pytest.mark.parametrize("name", ['Чебурашка', 'Гордость и предубеждение и зомби', 'Гордость и предубеждение и зомби .......']) - def test_add_new_book_title_less_than40_successfull(self, name): - collector = BooksCollector() + def test_add_new_book_title_less_than40_successfull(self, collector, name): collector.add_new_book(name) assert len(collector.get_books_genre()) == 1 @@ -15,50 +13,48 @@ def test_add_new_book_title_less_than40_successfull(self, name): @pytest.mark.parametrize("name", ['Гордость и предубеждение и зомби и пираты карибского моря', 'Ехала машина полный бак бензина ехала ехала и в гараж заехала', 'По поля по полям синий трактор едет к нам']) - def test_add_new_book_title_greater_than40_unsuccessfull(self, name): - collector = BooksCollector() + def test_add_new_book_title_greater_than40_unsuccessfull(self, collector, name): collector.add_new_book(name) assert len(collector.get_books_genre()) == 0 - def test_add_new_book_twice_unsuccessfull(self): - collector = BooksCollector() + def test_add_new_book_twice_unsuccessfull(self, collector): collector.add_new_book('Гордость и предубеждение') collector.add_new_book('Гордость и предубеждение') assert len(collector.get_books_genre()) == 1 @pytest.mark.parametrize('name,genre', [['Гордость и предубеждение', 'Детективы'], ['Преступление и наказание', 'Ужасы']]) - def test_set_book_genre_from_list_successfull(self, name, genre): - collector = BooksCollector() + def test_set_book_genre_from_list_successfull(self, collector, name, genre): + collector.add_new_book(name) + collector.set_book_genre(name, genre) + + assert collector.books_genre[name] == genre + + @pytest.mark.parametrize('name,genre', [['Гордость и предубеждение', 'Детективы'], ['Преступление и наказание', 'Ужасы']]) + def test_get_book_genre_from_list_successfull(self, collector, name, genre): collector.add_new_book(name) collector.set_book_genre(name, genre) - assert len(collector.get_books_genre()) == 1 assert collector.get_book_genre(name) == genre @pytest.mark.parametrize('name,genre', [['Гордость и предубеждение', 'Драма'], ['Игра в кальмара', 'Дорама']]) - def test_set_book_genre_not_from_list_unsuccessfull(self, name, genre): - collector = BooksCollector() + def test_set_book_genre_not_from_list_unsuccessfull(self, collector, name, genre): collector.add_new_book(name) collector.set_book_genre(name, genre) - assert len(collector.get_books_genre()) == 1 assert collector.get_book_genre(name) == '' - def test_get_book_genre_not_from_list_empty_string(self): - collector = BooksCollector() + def test_get_book_genre_not_from_list_empty_string(self, collector): name = 'Гордость и предубеждение' genre = 'Детективы' collector.add_new_book(name) collector.set_book_genre(name, genre) wrong_name = "Преступление и наказание" - assert len(collector.get_books_genre()) == 1 assert collector.get_book_genre(wrong_name) is None - def test_get_books_with_specific_genre_from_list_successfull(self): - collector = BooksCollector() + def test_get_books_with_specific_genre_from_list_successfull(self, collector): name1 = 'Гордость и предубеждение' genre1 = 'Детективы' @@ -77,13 +73,11 @@ def test_get_books_with_specific_genre_from_list_successfull(self): collector.add_new_book(name3) collector.set_book_genre(name3, genre3) - assert len(collector.get_books_genre()) == 3 assert len(collector.get_books_with_specific_genre(genre2)) == 2 assert len(collector.get_books_with_specific_genre(genre3)) == 1 - def test_get_books_with_specific_genre_not_from_list_empty_list(self): - collector = BooksCollector() + def test_get_books_with_specific_genre_not_from_list_empty_list(self, collector): name1 = 'Гордость и предубеждение' genre1 = 'Детективы' @@ -102,11 +96,9 @@ def test_get_books_with_specific_genre_not_from_list_empty_list(self): collector.add_new_book(name3) collector.set_book_genre(name3, genre3) - assert len(collector.get_books_genre()) == 3 assert len(collector.get_books_with_specific_genre('Мультфильмы')) == 0 - def test_get_books_for_children_not_from_age_genre_rating_successfull(self): - collector = BooksCollector() + def test_get_books_for_children_not_from_age_genre_rating_successfull(self, collector): name1 = 'Алёша Попович' genre1 = 'Комедии' @@ -125,12 +117,10 @@ def test_get_books_for_children_not_from_age_genre_rating_successfull(self): collector.add_new_book(name3) collector.set_book_genre(name3, genre3) - assert len(collector.get_books_genre()) == 3 assert len(collector.get_books_for_children()) == 2 assert 'Преступление и наказание' not in collector.get_books_for_children() - def test_get_books_for_children_from_age_genre_rating_empty_list(self): - collector = BooksCollector() + def test_get_books_for_children_from_age_genre_rating_empty_list(self, collector): name1 = 'Гордость и предубеждение' genre1 = 'Детективы' @@ -143,74 +133,53 @@ def test_get_books_for_children_from_age_genre_rating_empty_list(self): collector.add_new_book(name2) collector.set_book_genre(name2, genre2) - assert len(collector.get_books_genre()) == 2 assert len(collector.get_books_for_children()) == 0 - def test_add_book_in_favorites_from_books_genre_list_successfull(self): - collector = BooksCollector() - name = 'Гордость и предубеждение' - genre = 'Детективы' + @pytest.mark.parametrize('name', ['Гордость и предубеждение', 'Преступление и наказание']) + def test_add_book_in_favorites_from_books_genre_list_successfull(self, collector, name): collector.add_new_book(name) - collector.set_book_genre(name, genre) collector.add_book_in_favorites(name) assert len(collector.get_list_of_favorites_books()) == 1 - def test_add_book_in_favorites_not_from_books_genre_list_empty_list(self): - collector = BooksCollector() + def test_add_book_in_favorites_not_from_books_genre_list_empty_list(self, collector): name = 'Гордость и предубеждение' - genre = 'Детективы' collector.add_new_book(name) - collector.set_book_genre(name, genre) name2 = 'Преступление и наказание' collector.add_book_in_favorites(name2) assert len(collector.get_list_of_favorites_books()) == 0 - def test_add_book_in_favorites_from_books_genre_list_twice_len_favorites_1(self): - collector = BooksCollector() + def test_add_book_in_favorites_from_books_genre_list_twice_len_favorites_1(self, collector): name = 'Гордость и предубеждение' - genre = 'Детективы' collector.add_new_book(name) - collector.set_book_genre(name, genre) collector.add_book_in_favorites(name) collector.add_book_in_favorites(name) assert len(collector.get_list_of_favorites_books()) == 1 - def test_delete_book_from_favorites_book_in_favorites_list_successfull(self): - collector = BooksCollector() + def test_delete_book_from_favorites_book_in_favorites_list_successfull(self, collector): name = 'Гордость и предубеждение' - genre = 'Детективы' collector.add_new_book(name) - collector.set_book_genre(name, genre) collector.add_book_in_favorites(name) name2 = 'Простоквашино' - genre2 = 'Мультфильмы' collector.add_new_book(name2) - collector.set_book_genre(name2, genre2) collector.add_book_in_favorites(name2) assert len(collector.get_list_of_favorites_books()) == 2 collector.delete_book_from_favorites(name) assert len(collector.get_list_of_favorites_books()) == 1 - def test_delete_book_from_favorites_book_not_in_favorites_list_unsuccessfull(self): - collector = BooksCollector() + def test_delete_book_from_favorites_book_not_in_favorites_list_unsuccessfull(self, collector): name = 'Гордость и предубеждение' - genre = 'Детективы' collector.add_new_book(name) - collector.set_book_genre(name, genre) collector.add_book_in_favorites(name) name2 = 'Простоквашино' - genre2 = 'Мультфильмы' - collector.add_new_book(name2) - collector.set_book_genre(name2, genre2) assert len(collector.get_list_of_favorites_books()) == 1 collector.delete_book_from_favorites(name2) From d9bdecbe8cd304b2d7d9f1af7b4b0bb660d8032c Mon Sep 17 00:00:00 2001 From: Maria Ershova Date: Sun, 3 Aug 2025 14:15:15 +0300 Subject: [PATCH 5/6] added some tests --- tests.py | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/tests.py b/tests.py index 23d7ff6..0e88e6f 100644 --- a/tests.py +++ b/tests.py @@ -8,7 +8,7 @@ class TestBooksCollector: def test_add_new_book_title_less_than40_successfull(self, collector, name): collector.add_new_book(name) - assert len(collector.get_books_genre()) == 1 + assert len(collector.books_genre) == 1 @pytest.mark.parametrize("name", ['Гордость и предубеждение и зомби и пираты карибского моря', 'Ехала машина полный бак бензина ехала ехала и в гараж заехала', @@ -16,14 +16,20 @@ def test_add_new_book_title_less_than40_successfull(self, collector, name): def test_add_new_book_title_greater_than40_unsuccessfull(self, collector, name): collector.add_new_book(name) - assert len(collector.get_books_genre()) == 0 + assert len(collector.books_genre) == 0 def test_add_new_book_twice_unsuccessfull(self, collector): collector.add_new_book('Гордость и предубеждение') collector.add_new_book('Гордость и предубеждение') - assert len(collector.get_books_genre()) == 1 + assert len(collector.books_genre) == 1 + @pytest.mark.parametrize("name", ['Чебурашка', 'Гордость и предубеждение и зомби', 'Гордость и предубеждение и зомби .......']) + def test_get_books_genre_from_list_successfull(self, collector, name): + collector.add_new_book(name) + + assert len(collector.get_books_genre()) == 1 + @pytest.mark.parametrize('name,genre', [['Гордость и предубеждение', 'Детективы'], ['Преступление и наказание', 'Ужасы']]) def test_set_book_genre_from_list_successfull(self, collector, name, genre): collector.add_new_book(name) @@ -43,7 +49,7 @@ def test_set_book_genre_not_from_list_unsuccessfull(self, collector, name, genre collector.add_new_book(name) collector.set_book_genre(name, genre) - assert collector.get_book_genre(name) == '' + assert collector.books_genre[name] == '' def test_get_book_genre_not_from_list_empty_string(self, collector): name = 'Гордость и предубеждение' @@ -140,6 +146,13 @@ def test_add_book_in_favorites_from_books_genre_list_successfull(self, collector collector.add_new_book(name) collector.add_book_in_favorites(name) + assert len(collector.favorites) == 1 + + @pytest.mark.parametrize('name', ['Гордость и предубеждение', 'Преступление и наказание']) + def test_get_list_of_favorites_books_from_books_genre_list_successfull(self, collector, name): + collector.add_new_book(name) + collector.add_book_in_favorites(name) + assert len(collector.get_list_of_favorites_books()) == 1 def test_add_book_in_favorites_not_from_books_genre_list_empty_list(self, collector): @@ -149,7 +162,7 @@ def test_add_book_in_favorites_not_from_books_genre_list_empty_list(self, collec name2 = 'Преступление и наказание' collector.add_book_in_favorites(name2) - assert len(collector.get_list_of_favorites_books()) == 0 + assert len(collector.favorites) == 0 def test_add_book_in_favorites_from_books_genre_list_twice_len_favorites_1(self, collector): name = 'Гордость и предубеждение' @@ -157,7 +170,7 @@ def test_add_book_in_favorites_from_books_genre_list_twice_len_favorites_1(self, collector.add_book_in_favorites(name) collector.add_book_in_favorites(name) - assert len(collector.get_list_of_favorites_books()) == 1 + assert len(collector.favorites) == 1 def test_delete_book_from_favorites_book_in_favorites_list_successfull(self, collector): name = 'Гордость и предубеждение' @@ -169,9 +182,9 @@ def test_delete_book_from_favorites_book_in_favorites_list_successfull(self, col collector.add_new_book(name2) collector.add_book_in_favorites(name2) - assert len(collector.get_list_of_favorites_books()) == 2 + assert len(collector.favorites) == 2 collector.delete_book_from_favorites(name) - assert len(collector.get_list_of_favorites_books()) == 1 + assert len(collector.favorites) == 1 def test_delete_book_from_favorites_book_not_in_favorites_list_unsuccessfull(self, collector): name = 'Гордость и предубеждение' @@ -181,6 +194,6 @@ def test_delete_book_from_favorites_book_not_in_favorites_list_unsuccessfull(sel name2 = 'Простоквашино' collector.add_new_book(name2) - assert len(collector.get_list_of_favorites_books()) == 1 + assert len(collector.favorites) == 1 collector.delete_book_from_favorites(name2) - assert len(collector.get_list_of_favorites_books()) == 1 + assert len(collector.favorites) == 1 From c2f00751da3feda94446773f62adf7ef789ee43e Mon Sep 17 00:00:00 2001 From: Maria Ershova Date: Sun, 3 Aug 2025 14:24:55 +0300 Subject: [PATCH 6/6] fix readme --- README.md | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 1d7349e..af14176 100644 --- a/README.md +++ b/README.md @@ -7,45 +7,51 @@ 2. test_add_new_book_title_greater_than40_unsuccessfull (параметризованный) Проверка корректности работы (книга не добавляется) при добавлении книги с названием длинее 40 символов - + 3. test_add_new_book_twice_unsuccessfull Проверка корректности работы при добавлении одной и той же книги дважды (должна добавиться только один раз) -4. test_set_book_genre_from_list_successfull (параметризованный) +4. test_get_books_genre_from_list_successfull (параметризованный) + Проверка правильности получения словаря книг + +5. test_set_book_genre_from_list_successfull (параметризованный) Проверка правильности назначения жанра книге (жанр из списка) -5. test_get_book_genre_from_list_successfull (параметризованный) +6. test_get_book_genre_from_list_successfull (параметризованный) Проверка правильности получения жанра книни (жанр из списка) -6. test_set_book_genre_not_from_list_unsuccessfull (параметризованный) +7. test_set_book_genre_not_from_list_unsuccessfull (параметризованный) Проверка корректности работы при назначении жанра не из списка (в поле жанр ожидается пустая строка) -7. test_get_book_genre_not_from_list_empty_string +8. test_get_book_genre_not_from_list_empty_string Проверка корректности работы при получении жанра у книги, не добавленной в список (ожидается что результат None) -8. test_get_books_with_specific_genre_from_list_successfull +9. test_get_books_with_specific_genre_from_list_successfull Проверка правильности работы при запросе списка книг конкретных жанров из списка -9. test_get_books_with_specific_genre_not_from_list_empty_list +10. test_get_books_with_specific_genre_not_from_list_empty_list Проверка корректности работы при запросе списка книг конкретного жанра, если в списке нет книг с таким жанром (ожидаетсяя пустой список) -10. test_get_books_for_children_not_from_age_genre_rating_successfull +11. test_get_books_for_children_not_from_age_genre_rating_successfull Проверка правильности запроса книг для детей (ожидается что в списке не будет книг с возрастным ограничением) -11. test_get_books_for_children_from_age_genre_rating_empty_list +12. test_get_books_for_children_from_age_genre_rating_empty_list Проверка корректности работы при запросе книг для детей, при этом в списке нет таких книг (ожидается пустой список) -12. test_add_book_in_favorites_from_books_genre_list_successfull (параметризованный) +13. test_add_book_in_favorites_from_books_genre_list_successfull (параметризованный) Проверка правильности добавления книги в избранное -13. test_add_book_in_favorites_not_from_books_genre_list_empty_list +14. test_get_list_of_favorites_books_from_books_genre_list_successfull (параметризованный) + Проверка правильности получения списка избранных книг + +15. test_add_book_in_favorites_not_from_books_genre_list_empty_list Проверка корректности работы при добавлении книги в избранное, которой нет в списке книг (ожидается, что список избранных книг пустой) -14. test_add_book_in_favorites_from_books_genre_list_twice_len_favorites_1 +16. test_add_book_in_favorites_from_books_genre_list_twice_len_favorites_1 Проверка корректности добавления одной и той же книги дважды в список избранных (ожидается, что в список книга будет добавлена один раз) -15. test_delete_book_from_favorites_book_in_favorites_list_successfull +17. test_delete_book_from_favorites_book_in_favorites_list_successfull Проверка правильности удаления книги из списка избранных -16. test_delete_book_from_favorites_book_not_in_favorites_list_unsuccessfull +18. test_delete_book_from_favorites_book_not_in_favorites_list_unsuccessfull Проверка корректности работы при удалении книги из списка избранных, которой нет в этом списке \ No newline at end of file