From cd4d755e7c10285b4a9d2270d32bf225f9999438 Mon Sep 17 00:00:00 2001 From: peyanshin Date: Sat, 20 Dec 2025 23:31:53 +0300 Subject: [PATCH 1/7] Update tests.py Added new tests --- tests.py | 74 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 56 insertions(+), 18 deletions(-) diff --git a/tests.py b/tests.py index 383385e..a398ed7 100644 --- a/tests.py +++ b/tests.py @@ -1,24 +1,62 @@ +import pytest + from main import BooksCollector -# класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector -# обязательно указывать префикс Test -class TestBooksCollector: +def test_add_new_book(): + books_collector = BooksCollector() + books_collector.add_new_book("Книга1") + assert "Книга1" in books_collector.books_genre + +@pytest.mark.parametrize("book_name, expected_result", [ + ("Книга1", True), + ("ДлинноеНазваниеКнигиПревышающееМаксимальнуюДопустимуюДлину40Символов", False), + ("СуществующаяКнига", True) +]) +def test_parametrized_add_new_book(book_name, expected_result): + books_collector = BooksCollector() + books_collector.add_new_book(book_name) + assert (book_name in books_collector.books_genre) == expected_result + +def test_set_book_genre(): + books_collector = BooksCollector() + books_collector.add_new_book("Детектив1") + books_collector.set_book_genre("Детектив1", "Детективы") + assert books_collector.get_book_genre("Детектив1") == "Детективы" + +def test_set_non_existent_genre(): + books_collector = BooksCollector() + books_collector.add_new_book("ЖанрНеНайдено") + books_collector.set_book_genre("ЖанрНеНайдено", "НеизвестныйЖанр") + assert books_collector.get_book_genre("ЖанрНеНайдено") == "" # Жанр не установлен - # пример теста: - # обязательно указывать префикс test_ - # дальше идет название метода, который тестируем add_new_book_ - # затем, что тестируем add_two_books - добавление двух книг - def test_add_new_book_add_two_books(self): - # создаем экземпляр (объект) класса BooksCollector - collector = BooksCollector() +@pytest.mark.parametrize("genre, expected_books", [ + ("Фантастика", ["КнигаФантастика"]), + ("Комедии", []) +]) +def test_get_books_with_specific_genre(genre, expected_books): + books_collector = BooksCollector() + if expected_books: + books_collector.add_new_book(expected_books[0]) + books_collector.set_book_genre(expected_books[0], genre) + assert books_collector.get_books_with_specific_genre(genre) == expected_books - # добавляем две книги - collector.add_new_book('Гордость и предубеждение и зомби') - collector.add_new_book('Что делать, если ваш кот хочет вас убить') +def test_add_book_in_favorites(): + books_collector = BooksCollector() + books_collector.add_new_book("ЛюбимаяКнига") + books_collector.add_book_in_favorites("ЛюбимаяКнига") + assert "ЛюбимаяКнига" in books_collector.favorites - # проверяем, что добавилось именно две - # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 +@pytest.mark.parametrize("book_name", ["ПовторяющаясяКнига"]) +def test_add_duplicate_book_in_favorites(book_name): + books_collector = BooksCollector() + books_collector.add_new_book(book_name) + books_collector.add_book_in_favorites(book_name) + books_collector.add_book_in_favorites(book_name) # Попытка добавить повторно + assert len(books_collector.favorites) == 1 # Проверяем, что книга добавлена только один раз - # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file +def test_delete_book_from_favorites(): + books_collector = BooksCollector() + books_collector.add_new_book("КнигаДляУдаления") + books_collector.add_book_in_favorites("КнигаДляУдаления") + books_collector.delete_book_from_favorites("КнигаДляУдаления") + assert "КнигаДляУдаления" not in books_collector.favorites From 8877932b5093d85a8eb295c335297d9a0a42b2af Mon Sep 17 00:00:00 2001 From: peyanshin Date: Sat, 20 Dec 2025 23:49:15 +0300 Subject: [PATCH 2/7] Update README.md Tests description --- README.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1cc701d..1c3c88f 100644 --- a/README.md +++ b/README.md @@ -1 +1,13 @@ -# qa_python \ No newline at end of file +Описание тестов: +test_add_new_book: проверяет, что метод add_new_book успешно добавляет новую книгу в словарь books_genre. +test_parametrized_add_new_book: параметризованный тест, проверяющий различные сценарии добавления книги, включая проверку на длину названия и уникальность. +test_set_book_genre: проверяет, что метод set_book_genre корректно установливает жанр для книги. +test_set_non_existent_genre: проверяет попытку установить несуществующий жанр (жанр книги остаётся пустым). +test_get_books_with_specific_genre: параметризованный тест, проверяющий получение списка книг с определённым жанром. +test_add_book_in_favorites: проверяет, что метод add_book_in_favorites добавляет книги в избранное. +test_add_duplicate_book_in_favorites: проверяет, что попытка добавить одну и ту же книгу в избранное повторно не изменяет список избранного. +test_delete_book_from_favorites: проверяет, что метод delete_book_from_favorites удаляет книги из избранного. +test_get_books_with_specific_genre: проверяет, что метод get_books_with_specific_genre корректно возвращает список книг для заданного жанра. +test_get_list_of_favorites_books: проверяет, что метод get_list_of_favorites_books корректно возвращает список избранных книг. +test_get_book_genre: проверяет, что метод get_book_genre корректно возвращает жанр для заданной книги. +test_get_books_for_children: проверяет, что метод get_books_for_children корректно возвращает книги, которые подходят детям (у жанра книги нет возрастного рейтинга), и не включает книги с жанрами, имеющими возрастной рейтинг. From 8063470909d67f5a87cc5de5e022f56759f445d6 Mon Sep 17 00:00:00 2001 From: peyanshin Date: Sun, 21 Dec 2025 00:00:58 +0300 Subject: [PATCH 3/7] Update tests.py Added tests --- tests.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests.py b/tests.py index a398ed7..f8932c2 100644 --- a/tests.py +++ b/tests.py @@ -60,3 +60,33 @@ def test_delete_book_from_favorites(): books_collector.add_book_in_favorites("КнигаДляУдаления") books_collector.delete_book_from_favorites("КнигаДляУдаления") assert "КнигаДляУдаления" not in books_collector.favorites + +def test_get_books_with_specific_genre(): + books_collector = BooksCollector() + books_collector.add_new_book("КнигаФантастика") + books_collector.set_book_genre("КнигаФантастика", "Фантастика") + books_collector.add_new_book("Детектив1") + books_collector.set_book_genre("Детектив1", "Детективы") + assert books_collector.get_books_with_specific_genre("Фантастика") == ["КнигаФантастика"] + assert books_collector.get_books_with_specific_genre("Детективы") == ["Детектив1"] + +def test_get_list_of_favorites_books(): + books_collector = BooksCollector() + books_collector.add_new_book("ЛюбимаяКнига") + books_collector.add_book_in_favorites("ЛюбимаяКнига") + assert books_collector.get_list_of_favorites_books() == ["ЛюбимаяКнига"] + +def test_get_book_genre(): + books_collector = BooksCollector() + books_collector.add_new_book("Детектив1") + books_collector.set_book_genre("Детектив1", "Детективы") + assert books_collector.get_book_genre("Детектив1") == "Детективы" + +def test_get_books_for_children(): + books_collector = BooksCollector() + books_collector.add_new_book("Мультфильм") + books_collector.set_book_genre("Мультфильм", "Мультфильмы") + books_collector.add_new_book("Детектив") + books_collector.set_book_genre("Детектив", "Детективы") + assert "Мультфильм" in books_collector.get_books_for_children() + assert "Детектив" not in books_collector.get_books_for_children() From 6dd2337625ad2a4e1a6c47eea729a9051e3f009b Mon Sep 17 00:00:00 2001 From: peyanshin Date: Wed, 24 Dec 2025 23:20:17 +0300 Subject: [PATCH 4/7] Update tests.py I added tests (test_add_new_two_books(), test_get_books_name_by_genre()) and renamed test test_get_book_genre() into test_get_book_genre_by_name() --- tests.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/tests.py b/tests.py index f8932c2..929d44c 100644 --- a/tests.py +++ b/tests.py @@ -1,6 +1,6 @@ import pytest -from main import BooksCollector +from main import TestBooksCollector def test_add_new_book(): books_collector = BooksCollector() @@ -76,11 +76,11 @@ def test_get_list_of_favorites_books(): books_collector.add_book_in_favorites("ЛюбимаяКнига") assert books_collector.get_list_of_favorites_books() == ["ЛюбимаяКнига"] -def test_get_book_genre(): +def test_get_book_genre_by_name(): books_collector = BooksCollector() books_collector.add_new_book("Детектив1") books_collector.set_book_genre("Детектив1", "Детективы") - assert books_collector.get_book_genre("Детектив1") == "Детективы" + assert books_collector.get_book_genre_by_name("Детектив1") == "Детективы" def test_get_books_for_children(): books_collector = BooksCollector() @@ -90,3 +90,18 @@ def test_get_books_for_children(): books_collector.set_book_genre("Детектив", "Детективы") assert "Мультфильм" in books_collector.get_books_for_children() assert "Детектив" not in books_collector.get_books_for_children() + +def test_add_new_two_books(): + books_collector = BooksCollector() + books_collector.add_new_book('Книга1') + books_collector.add_new_book('Книга2') + assert len(books_collector.books_genre) == 2 + +def test_get_books_name_by_genre(): + books_collector = BooksCollector() + books_collector.add_new_book("Комедия1") + books_collector.set_book_genre("Комедия1", "Комедии") + books_collector.add_new_book("Ужасы1") + books_collector.set_book_genre("Ужасы1", "Ужасы") + expected_genre_dict = {"Комедия1": "Комедии", "Ужасы1": "Ужасы"} + assert books_collector.get_books_name_by_genre() == expected_genre_dict From 23fd634787760c5cb1e626b75d1385fad9432f1a Mon Sep 17 00:00:00 2001 From: peyanshin Date: Wed, 24 Dec 2025 23:25:48 +0300 Subject: [PATCH 5/7] Update README.md Added description for tests: def test_add_new_two_books and def test_get_books_name_by_genre and also renamed test test_get_book_genre into test_get_book_genre_by_name() --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1c3c88f..9cc94eb 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +# qa_python Описание тестов: test_add_new_book: проверяет, что метод add_new_book успешно добавляет новую книгу в словарь books_genre. test_parametrized_add_new_book: параметризованный тест, проверяющий различные сценарии добавления книги, включая проверку на длину названия и уникальность. @@ -9,5 +10,7 @@ test_add_duplicate_book_in_favorites: проверяет, что попытка test_delete_book_from_favorites: проверяет, что метод delete_book_from_favorites удаляет книги из избранного. test_get_books_with_specific_genre: проверяет, что метод get_books_with_specific_genre корректно возвращает список книг для заданного жанра. test_get_list_of_favorites_books: проверяет, что метод get_list_of_favorites_books корректно возвращает список избранных книг. -test_get_book_genre: проверяет, что метод get_book_genre корректно возвращает жанр для заданной книги. +test_get_book_genre_by_name: проверяет, что метод get_book_genre корректно возвращает жанр для заданной книги. test_get_books_for_children: проверяет, что метод get_books_for_children корректно возвращает книги, которые подходят детям (у жанра книги нет возрастного рейтинга), и не включает книги с жанрами, имеющими возрастной рейтинг. +test_add_new_two_books: проверяет, что метод add_new_book добавляет две книги +test_get_books_name_by_genre: проверяет, что метод get_book_genre корректно возвращает название для заданного жанра. From 24191f6837cd073e2c36383f6cc5e7aee411267a Mon Sep 17 00:00:00 2001 From: peyanshin Date: Wed, 24 Dec 2025 23:31:08 +0300 Subject: [PATCH 6/7] Update tests.py renamed test_get_books_name_by_genre into test_get_books_name_and_genre --- tests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests.py b/tests.py index 929d44c..6926748 100644 --- a/tests.py +++ b/tests.py @@ -97,11 +97,11 @@ def test_add_new_two_books(): books_collector.add_new_book('Книга2') assert len(books_collector.books_genre) == 2 -def test_get_books_name_by_genre(): +def test_get_books_name_and_genre(): books_collector = BooksCollector() books_collector.add_new_book("Комедия1") books_collector.set_book_genre("Комедия1", "Комедии") books_collector.add_new_book("Ужасы1") books_collector.set_book_genre("Ужасы1", "Ужасы") expected_genre_dict = {"Комедия1": "Комедии", "Ужасы1": "Ужасы"} - assert books_collector.get_books_name_by_genre() == expected_genre_dict + assert books_collector.get_books_name_and_genre() == expected_genre_dict From c9cef7f341aff4b17709e2de36e29dc26a4cc8a4 Mon Sep 17 00:00:00 2001 From: peyanshin Date: Wed, 24 Dec 2025 23:33:28 +0300 Subject: [PATCH 7/7] Update README.md Updated description for test_get_books_name_and_genre --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9cc94eb..12e61c1 100644 --- a/README.md +++ b/README.md @@ -13,4 +13,4 @@ test_get_list_of_favorites_books: проверяет, что метод get test_get_book_genre_by_name: проверяет, что метод get_book_genre корректно возвращает жанр для заданной книги. test_get_books_for_children: проверяет, что метод get_books_for_children корректно возвращает книги, которые подходят детям (у жанра книги нет возрастного рейтинга), и не включает книги с жанрами, имеющими возрастной рейтинг. test_add_new_two_books: проверяет, что метод add_new_book добавляет две книги -test_get_books_name_by_genre: проверяет, что метод get_book_genre корректно возвращает название для заданного жанра. +test_get_books_name_and_genre: проверяет, возможность возвратить словарь с жанрами книг, которые были добавлены