From ebb88fc06b4fc3a38a823a27fc46c772af894813 Mon Sep 17 00:00:00 2001 From: Dmitry Ponosov Date: Tue, 9 Sep 2025 21:39:04 +0700 Subject: [PATCH 1/6] First_load --- tests.py | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 82 insertions(+), 6 deletions(-) diff --git a/tests.py b/tests.py index 383385e..25a3438 100644 --- a/tests.py +++ b/tests.py @@ -8,17 +8,93 @@ class TestBooksCollector: # обязательно указывать префикс test_ # дальше идет название метода, который тестируем add_new_book_ # затем, что тестируем add_two_books - добавление двух книг - def test_add_new_book_add_two_books(self): + #def test_add_new_book_add_two_books(self): # создаем экземпляр (объект) класса BooksCollector - collector = BooksCollector() + #collector = BooksCollector() # добавляем две книги - collector.add_new_book('Гордость и предубеждение и зомби') - collector.add_new_book('Что делать, если ваш кот хочет вас убить') + #collector.add_new_book('Гордость и предубеждение и зомби') + # collector.add_new_book('Что делать, если ваш кот хочет вас убить') # проверяем, что добавилось именно две # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 + #assert len(collector.get_books_rating()) == 2 # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file + # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() + @pytest.mark.parametrize( + "name, expected", + [ + ("Книга1", True), + ("", False), + ("Книга1Книга1Книга1Книга1Книга1Книга1Книга", False), + ], + ) + def test_add_new_book(name, expected): + collector = BooksCollector() + collector.add_new_book(name) + assert (name in collector.get_books_genre()) == expected, f"{name} {'не' if expected else ''} должна быть добавлена." + + @pytest.mark.parametrize( + "book_name, genre, exception_type", + [ + ("Книга1", "Фантастика", None), + ("Невалидная Книга", "Фантастика", KeyError), + ("Книга1", "Неверный Жанр", ValueError), + ] + ) + def test_set_book_genre(book_name, genre, exception_type): + collector = BooksCollector() + collector.add_new_book("Книга1") + if exception_type is None: + collector.set_book_genre(book_name, genre) + assert collector.get_book_genre(book_name) == genre, f"Жанр '{genre}' должен быть установлен." + else: + try: + collector.set_book_genre(book_name, genre) + except exception_type: + pass + else: + raise AssertionError(f"Ожидалось исключение {exception_type.__name__}") + + def test_get_book_genre(): + collector = BooksCollector() + collector.add_new_book("Книга1") + collector.set_book_genre("Книга1", "Фантастика") + assert collector.get_book_genre("Книга1") == "Фантастика", "Вернуть правильный жанр." + + assert collector.get_book_genre("НетТакойКниги") is None, "Отсутствие жанра должно вернуть None." + + def test_get_books_with_specific_genre(): + collector = BooksCollector() + collector.add_new_book("Книга1") + collector.set_book_genre("Книга1", "Фантастика") + collector.add_new_book("Книга2") + collector.set_book_genre("Книга2", "Фантастика") + result = collector.get_books_with_specific_genre("Фантастика") + expected_result = ["Книга1", "Книга2"] + assert sorted(result) == sorted(expected_result), f"Результат {result}, ожидалось {expected_result}" + + empty_result = collector.get_books_with_specific_genre("Комедии") + assert empty_result == [], "Список книг должен быть пустым, если нет книг выбранного жанра." + + def test_get_books_for_children(): + collector = BooksCollector() + collector.add_new_book("Книга1") + collector.set_book_genre("Книга1", "Фантастика") + collector.add_new_book("Книга2") + collector.set_book_genre("Книга2", "Ужасы") + children_books = collector.get_books_for_children() + expected_result = ["Книга1"] + assert sorted(children_books) == sorted(expected_result), f"Ошибка в списке детских книг: ожидалось {expected_result}, получено {children_books}" + + def test_favorite_books(): + collector = BooksCollector() + collector.add_new_book("Книга1") + collector.add_book_in_favorites("Книга1") + favorites = collector.get_list_of_favorites_books() + assert "Книга1" in favorites, "Книга должна быть добавлена в избранное." + + collector.delete_book_from_favorites("Книга1") + favorites_after_delete = collector.get_list_of_favorites_books() + assert "Книга1" not in favorites_after_delete, "Удалённая книга не должна присутствовать в избранном." \ No newline at end of file From fe0d0d00e2d2133ac7b1eea80c2416b330c94906 Mon Sep 17 00:00:00 2001 From: Dmitry Ponosov Date: Sat, 13 Sep 2025 17:01:56 +0700 Subject: [PATCH 2/6] Second load --- conftest.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 conftest.py diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..77e5aef --- /dev/null +++ b/conftest.py @@ -0,0 +1,6 @@ +import pytest +from main import BooksCollector + +@pytest.fixture +def collector(): + return BooksCollector() \ No newline at end of file From 3e0860ce0924ec05d8a6f641707b52cedd8625cf Mon Sep 17 00:00:00 2001 From: Dmitry Ponosov Date: Sat, 13 Sep 2025 17:16:44 +0700 Subject: [PATCH 3/6] Second_load_give_tests.py --- tests.py | 144 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 75 insertions(+), 69 deletions(-) diff --git a/tests.py b/tests.py index 25a3438..a49aea3 100644 --- a/tests.py +++ b/tests.py @@ -1,3 +1,4 @@ +import pytest from main import BooksCollector # класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector @@ -22,79 +23,84 @@ class TestBooksCollector: # напиши свои тесты ниже # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() - @pytest.mark.parametrize( - "name, expected", - [ - ("Книга1", True), - ("", False), - ("Книга1Книга1Книга1Книга1Книга1Книга1Книга", False), - ], - ) - def test_add_new_book(name, expected): - collector = BooksCollector() - collector.add_new_book(name) - assert (name in collector.get_books_genre()) == expected, f"{name} {'не' if expected else ''} должна быть добавлена." + class TestBooksCollector: - @pytest.mark.parametrize( - "book_name, genre, exception_type", - [ - ("Книга1", "Фантастика", None), - ("Невалидная Книга", "Фантастика", KeyError), - ("Книга1", "Неверный Жанр", ValueError), - ] - ) - def test_set_book_genre(book_name, genre, exception_type): - collector = BooksCollector() - collector.add_new_book("Книга1") - if exception_type is None: + @pytest.mark.parametrize( + "name, expected", + [ + ("Книга1", True), + ("", False), + ("Книга1Книга1Книга1Книга1Книга1Книга1Книга", False), + ], + ) + def test_add_and_check_book_presence(self, collector, name, expected): + collector.add_new_book(name) + assert (name in collector.get_books_genre()) == expected, f"{name} {'не' if expected else ''} должна быть добавлена." + + def test_assign_and_retrieve_genre(self, collector): + collector.add_new_book("Книга1") + collector.set_book_genre("Книга1", "Фантастика") + assert collector.get_book_genre("Книга1") == "Фантастика", "Жанр не был назначен корректно." + + @pytest.mark.parametrize("book_name, genre", [ + ("Книга1", "Фэнтези"), + ("Книга2", "Научная фантастика"), + ("Книга3", "Детектив"), + ]) + def test_assign_genres_to_multiple_books(self, collector, book_name, genre): + collector.add_new_book(book_name) collector.set_book_genre(book_name, genre) - assert collector.get_book_genre(book_name) == genre, f"Жанр '{genre}' должен быть установлен." - else: - try: - collector.set_book_genre(book_name, genre) - except exception_type: - pass - else: - raise AssertionError(f"Ожидалось исключение {exception_type.__name__}") + assert collector.get_book_genre(book_name) == genre, f"Полученный жанр ({collector.get_book_genre(book_name)}) не соответствует заданному ({genre})." + + @pytest.mark.parametrize("book_name, initial_genre, invalid_genre", [ + ("Книга1", "Фэнтези", ""), + ("Книга2", "Научная фантастика", "!#$%^&*()"), + ("Книга3", "Детектив", "Некорректный жанр"), + ]) + def test_invalid_genre_change(self, collector, book_name, initial_genre, invalid_genre): + collector.add_new_book(book_name) + collector.set_book_genre(book_name, initial_genre) + collector.set_book_genre(book_name, invalid_genre) + assert collector.get_book_genre(book_name) == initial_genre, f"Некорректный жанр ('{invalid_genre}') изменил текущий жанр ('{initial_genre}')" + + def test_internal_genre_storage(self, collector): + collector.add_new_book("Книга1") + collector.set_book_genre("Книга1", "Фэнтези") + internal_genres = getattr(collector, "_genres", {}) + assert len(internal_genres) > 0, "Внутренний словарь жанров должен содержать записи" + assert internal_genres["Книга1"] == "Фэнтези", "Во внутренней структуре жанра указана неверная информация" - def test_get_book_genre(): - collector = BooksCollector() - collector.add_new_book("Книга1") - collector.set_book_genre("Книга1", "Фантастика") - assert collector.get_book_genre("Книга1") == "Фантастика", "Вернуть правильный жанр." - - assert collector.get_book_genre("НетТакойКниги") is None, "Отсутствие жанра должно вернуть None." + def test_retrieve_books_by_genre(self, collector): + collector.add_new_book("Книга1") + collector.set_book_genre("Книга1", "Фантастика") + collector.add_new_book("Книга2") + collector.set_book_genre("Книга2", "Фантастика") + result = collector.get_books_with_specific_genre("Фантастика") + expected_result = ["Книга1", "Книга2"] + assert sorted(result) == sorted(expected_result), f"Результат {result}, ожидалось {expected_result}" - def test_get_books_with_specific_genre(): - collector = BooksCollector() - collector.add_new_book("Книга1") - collector.set_book_genre("Книга1", "Фантастика") - collector.add_new_book("Книга2") - collector.set_book_genre("Книга2", "Фантастика") - result = collector.get_books_with_specific_genre("Фантастика") - expected_result = ["Книга1", "Книга2"] - assert sorted(result) == sorted(expected_result), f"Результат {result}, ожидалось {expected_result}" + def test_empty_list_for_unknown_genre(self, collector): + result = collector.get_books_with_specific_genre("Комедии") + assert result == [], "Список книг должен быть пустым, если нет книг выбранного жанра." - empty_result = collector.get_books_with_specific_genre("Комедии") - assert empty_result == [], "Список книг должен быть пустым, если нет книг выбранного жанра." + def test_filter_children_books(self, collector): + collector.add_new_book("Книга1") + collector.set_book_genre("Книга1", "Фантастика") + collector.add_new_book("Книга2") + collector.set_book_genre("Книга2", "Ужасы") + children_books = collector.get_books_for_children() + expected_result = ["Книга1"] + assert sorted(children_books) == sorted(expected_result), f"Ошибка в списке детских книг: ожидалось {expected_result}, получено {children_books}" - def test_get_books_for_children(): - collector = BooksCollector() - collector.add_new_book("Книга1") - collector.set_book_genre("Книга1", "Фантастика") - collector.add_new_book("Книга2") - collector.set_book_genre("Книга2", "Ужасы") - children_books = collector.get_books_for_children() - expected_result = ["Книга1"] - assert sorted(children_books) == sorted(expected_result), f"Ошибка в списке детских книг: ожидалось {expected_result}, получено {children_books}" + def test_add_book_to_faves(self, collector): + collector.add_new_book("Книга1") + collector.add_book_in_favorites("Книга1") + favorites = collector.get_list_of_favorites_books() + assert "Книга1" in favorites, "Книга должна быть добавлена в избранное." - def test_favorite_books(): - collector = BooksCollector() - collector.add_new_book("Книга1") - collector.add_book_in_favorites("Книга1") - favorites = collector.get_list_of_favorites_books() - assert "Книга1" in favorites, "Книга должна быть добавлена в избранное." - - collector.delete_book_from_favorites("Книга1") - favorites_after_delete = collector.get_list_of_favorites_books() - assert "Книга1" not in favorites_after_delete, "Удалённая книга не должна присутствовать в избранном." \ No newline at end of file + def test_remove_book_from_faves(self, collector): + collector.add_new_book("Книга1") + collector.add_book_in_favorites("Книга1") + collector.delete_book_from_favorites("Книга1") + favorites = collector.get_list_of_favorites_books() + assert "Книга1" not in favorites, "Удалённая книга не должна присутствовать в избранном." \ No newline at end of file From a8a11df86f6f9306e8e7cc4558e5fddf1a95877b Mon Sep 17 00:00:00 2001 From: Dmitry Ponosov Date: Mon, 15 Sep 2025 04:35:11 +0700 Subject: [PATCH 4/6] Third load --- tests.py | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/tests.py b/tests.py index a49aea3..d25e543 100644 --- a/tests.py +++ b/tests.py @@ -103,4 +103,36 @@ def test_remove_book_from_faves(self, collector): collector.add_book_in_favorites("Книга1") collector.delete_book_from_favorites("Книга1") favorites = collector.get_list_of_favorites_books() - assert "Книга1" not in favorites, "Удалённая книга не должна присутствовать в избранном." \ No newline at end of file + assert "Книга1" not in favorites, "Удалённая книга не должна присутствовать в избранном." + + def test_get_book_genre(self, collector): + collector._books = {"Книга1": None} + collector._genres = {"Книга1": "Фантастика"} + genre = collector.get_book_genre("Книга1") + assert genre == "Фантастика", "Метод get_book_genre возвращает неправильный жанр." + + def test_get_books_genre(self, collector): + collector._books = { + "Книга1": None, + "Книга2": None, + "Книга3": None + } + collector._genres = { + "Книга1": "Фантастика", + "Книга2": "Роман", + "Книга3": "Исторический роман" + } + + books_with_genres = collector.get_books_genre() + expected_result = { + "Книга1": "Фантастика", + "Книга2": "Роман", + "Книга3": "Исторический роман" + } + assert books_with_genres == expected_result, "Метод get_books_genre вернул некорректный список книг с жанрами." + + def test_get_list_of_favorites_books(self, collector): + collector._favorites = ["Книга1", "Книга3"] + favorite_books = collector.get_list_of_favorites_books() + expected_result = ["Книга1", "Книга3"] + assert sorted(favorite_books) == sorted(expected_result), "Метод get_list_of_favorites_books вернул некорректный список любимых книг." \ No newline at end of file From e1af57330acd581bf1bd7bf20e9e952608c610d4 Mon Sep 17 00:00:00 2001 From: Dmitry Ponosov Date: Mon, 15 Sep 2025 04:53:05 +0700 Subject: [PATCH 5/6] Third_load_give_3_correct_1 --- tests.py | 222 +++++++++++++++++++++++++++---------------------------- 1 file changed, 110 insertions(+), 112 deletions(-) diff --git a/tests.py b/tests.py index d25e543..423ebb9 100644 --- a/tests.py +++ b/tests.py @@ -23,116 +23,114 @@ class TestBooksCollector: # напиши свои тесты ниже # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() - class TestBooksCollector: - - @pytest.mark.parametrize( - "name, expected", - [ - ("Книга1", True), - ("", False), - ("Книга1Книга1Книга1Книга1Книга1Книга1Книга", False), - ], - ) - def test_add_and_check_book_presence(self, collector, name, expected): - collector.add_new_book(name) - assert (name in collector.get_books_genre()) == expected, f"{name} {'не' if expected else ''} должна быть добавлена." - - def test_assign_and_retrieve_genre(self, collector): - collector.add_new_book("Книга1") - collector.set_book_genre("Книга1", "Фантастика") - assert collector.get_book_genre("Книга1") == "Фантастика", "Жанр не был назначен корректно." - - @pytest.mark.parametrize("book_name, genre", [ - ("Книга1", "Фэнтези"), - ("Книга2", "Научная фантастика"), - ("Книга3", "Детектив"), - ]) - def test_assign_genres_to_multiple_books(self, collector, book_name, genre): - collector.add_new_book(book_name) - collector.set_book_genre(book_name, genre) - assert collector.get_book_genre(book_name) == genre, f"Полученный жанр ({collector.get_book_genre(book_name)}) не соответствует заданному ({genre})." - - @pytest.mark.parametrize("book_name, initial_genre, invalid_genre", [ - ("Книга1", "Фэнтези", ""), - ("Книга2", "Научная фантастика", "!#$%^&*()"), - ("Книга3", "Детектив", "Некорректный жанр"), - ]) - def test_invalid_genre_change(self, collector, book_name, initial_genre, invalid_genre): - collector.add_new_book(book_name) - collector.set_book_genre(book_name, initial_genre) - collector.set_book_genre(book_name, invalid_genre) - assert collector.get_book_genre(book_name) == initial_genre, f"Некорректный жанр ('{invalid_genre}') изменил текущий жанр ('{initial_genre}')" - - def test_internal_genre_storage(self, collector): - collector.add_new_book("Книга1") - collector.set_book_genre("Книга1", "Фэнтези") - internal_genres = getattr(collector, "_genres", {}) - assert len(internal_genres) > 0, "Внутренний словарь жанров должен содержать записи" - assert internal_genres["Книга1"] == "Фэнтези", "Во внутренней структуре жанра указана неверная информация" - - def test_retrieve_books_by_genre(self, collector): - collector.add_new_book("Книга1") - collector.set_book_genre("Книга1", "Фантастика") - collector.add_new_book("Книга2") - collector.set_book_genre("Книга2", "Фантастика") - result = collector.get_books_with_specific_genre("Фантастика") - expected_result = ["Книга1", "Книга2"] - assert sorted(result) == sorted(expected_result), f"Результат {result}, ожидалось {expected_result}" - - def test_empty_list_for_unknown_genre(self, collector): - result = collector.get_books_with_specific_genre("Комедии") - assert result == [], "Список книг должен быть пустым, если нет книг выбранного жанра." - - def test_filter_children_books(self, collector): - collector.add_new_book("Книга1") - collector.set_book_genre("Книга1", "Фантастика") - collector.add_new_book("Книга2") - collector.set_book_genre("Книга2", "Ужасы") - children_books = collector.get_books_for_children() - expected_result = ["Книга1"] - assert sorted(children_books) == sorted(expected_result), f"Ошибка в списке детских книг: ожидалось {expected_result}, получено {children_books}" - - def test_add_book_to_faves(self, collector): - collector.add_new_book("Книга1") - collector.add_book_in_favorites("Книга1") - favorites = collector.get_list_of_favorites_books() - assert "Книга1" in favorites, "Книга должна быть добавлена в избранное." - - def test_remove_book_from_faves(self, collector): - collector.add_new_book("Книга1") - collector.add_book_in_favorites("Книга1") - collector.delete_book_from_favorites("Книга1") - favorites = collector.get_list_of_favorites_books() - assert "Книга1" not in favorites, "Удалённая книга не должна присутствовать в избранном." - - def test_get_book_genre(self, collector): - collector._books = {"Книга1": None} - collector._genres = {"Книга1": "Фантастика"} - genre = collector.get_book_genre("Книга1") - assert genre == "Фантастика", "Метод get_book_genre возвращает неправильный жанр." - - def test_get_books_genre(self, collector): - collector._books = { - "Книга1": None, - "Книга2": None, - "Книга3": None - } - collector._genres = { - "Книга1": "Фантастика", - "Книга2": "Роман", - "Книга3": "Исторический роман" - } - - books_with_genres = collector.get_books_genre() - expected_result = { - "Книга1": "Фантастика", - "Книга2": "Роман", - "Книга3": "Исторический роман" - } - assert books_with_genres == expected_result, "Метод get_books_genre вернул некорректный список книг с жанрами." + + @pytest.mark.parametrize( + "name, expected", + [ + ("Книга1", True), + ("", False), + ("Книга1Книга1Книга1Книга1Книга1Книга1Книга", False), + ], + ) + def test_add_and_check_book_presence(self, collector, name, expected): + collector.add_new_book(name) + assert (name in collector.get_books_genre()) == expected, f"{name} {'не' if expected else ''} должна быть добавлена." + + def test_assign_and_retrieve_genre(self, collector): + collector.add_new_book("Книга1") + collector.set_book_genre("Книга1", "Фантастика") + assert collector.get_book_genre("Книга1") == "Фантастика", "Жанр не был назначен корректно." + + @pytest.mark.parametrize("book_name, genre", [ + ("Книга1", "Фэнтези"), + ("Книга2", "Научная фантастика"), + ("Книга3", "Детектив"), + ]) + def test_assign_genres_to_multiple_books(self, collector, book_name, genre): + collector.add_new_book(book_name) + collector.set_book_genre(book_name, genre) + assert collector.get_book_genre(book_name) == genre, f"Полученный жанр ({collector.get_book_genre(book_name)}) не соответствует заданному ({genre})." + + @pytest.mark.parametrize("book_name, initial_genre, invalid_genre", [ + ("Книга1", "Фэнтези", ""), + ("Книга2", "Научная фантастика", "!#$%^&*()"), + ("Книга3", "Детектив", "Некорректный жанр"), + ]) + def test_invalid_genre_change(self, collector, book_name, initial_genre, invalid_genre): + collector.add_new_book(book_name) + collector.set_book_genre(book_name, initial_genre) + collector.set_book_genre(book_name, invalid_genre) + assert collector.get_book_genre(book_name) == initial_genre, f"Некорректный жанр ('{invalid_genre}') изменил текущий жанр ('{initial_genre}')" + + def test_set_book_genre(self, collector): + collector.add_new_book("Книга1") + collector.set_book_genre("Книга1", "Фэнтези") + retrieved_genre = collector.get_book_genre("Книга1") + assert retrieved_genre == "Фэнтези", "Неверный жанр после установки." + + def test_retrieve_books_by_genre(self, collector): + collector.add_new_book("Книга1") + collector.set_book_genre("Книга1", "Фантастика") + collector.add_new_book("Книга2") + collector.set_book_genre("Книга2", "Фантастика") + result = collector.get_books_with_specific_genre("Фантастика") + expected_result = ["Книга1", "Книга2"] + assert sorted(result) == sorted(expected_result), f"Результат {result}, ожидалось {expected_result}" + + def test_empty_list_for_unknown_genre(self, collector): + result = collector.get_books_with_specific_genre("Комедии") + assert result == [], "Список книг должен быть пустым, если нет книг выбранного жанра." + + def test_filter_children_books(self, collector): + collector.add_new_book("Книга1") + collector.set_book_genre("Книга1", "Фантастика") + collector.add_new_book("Книга2") + collector.set_book_genre("Книга2", "Ужасы") + children_books = collector.get_books_for_children() + expected_result = ["Книга1"] + assert sorted(children_books) == sorted(expected_result), f"Ошибка в списке детских книг: ожидалось {expected_result}, получено {children_books}" + + def test_add_book_to_faves(self, collector): + collector.add_new_book("Книга1") + collector.add_book_in_favorites("Книга1") + favorites = collector.get_list_of_favorites_books() + assert "Книга1" in favorites, "Книга должна быть добавлена в избранное." + + def test_remove_book_from_faves(self, collector): + collector.add_new_book("Книга1") + collector.add_book_in_favorites("Книга1") + collector.delete_book_from_favorites("Книга1") + favorites = collector.get_list_of_favorites_books() + assert "Книга1" not in favorites, "Удалённая книга не должна присутствовать в избранном." + + def test_get_book_genre(self, collector): + collector._books = {"Книга1": None} + collector._genres = {"Книга1": "Фантастика"} + genre = collector.get_book_genre("Книга1") + assert genre == "Фантастика", "Метод get_book_genre возвращает неправильный жанр." + + def test_get_books_genre(self, collector): + collector._books = { + "Книга1": None, + "Книга2": None, + "Книга3": None + } + collector._genres = { + "Книга1": "Фантастика", + "Книга2": "Роман", + "Книга3": "Исторический роман" + } - def test_get_list_of_favorites_books(self, collector): - collector._favorites = ["Книга1", "Книга3"] - favorite_books = collector.get_list_of_favorites_books() - expected_result = ["Книга1", "Книга3"] - assert sorted(favorite_books) == sorted(expected_result), "Метод get_list_of_favorites_books вернул некорректный список любимых книг." \ No newline at end of file + books_with_genres = collector.get_books_genre() + expected_result = { + "Книга1": "Фантастика", + "Книга2": "Роман", + "Книга3": "Исторический роман" + } + assert books_with_genres == expected_result, "Метод get_books_genre вернул некорректный список книг с жанрами." + + def test_get_list_of_favorites_books(self, collector): + collector._favorites = ["Книга1", "Книга3"] + favorite_books = collector.get_list_of_favorites_books() + expected_result = ["Книга1", "Книга3"] + assert sorted(favorite_books) == sorted(expected_result), "Метод get_list_of_favorites_books вернул некорректный список любимых книг." \ No newline at end of file From 5f51970c2e8451e654730fc9c3841b644e6e7d53 Mon Sep 17 00:00:00 2001 From: Dmitry Ponosov Date: Sat, 27 Sep 2025 11:39:14 +0700 Subject: [PATCH 6/6] Four_load --- conftest.py | 26 ++++++- tests.py | 220 ++++++++++++++++++++++++++++++---------------------- 2 files changed, 151 insertions(+), 95 deletions(-) diff --git a/conftest.py b/conftest.py index 77e5aef..b33c847 100644 --- a/conftest.py +++ b/conftest.py @@ -3,4 +3,28 @@ @pytest.fixture def collector(): - return BooksCollector() \ No newline at end of file + return BooksCollector() + +@pytest.fixture +def add_book_1(collector): + collector.add_new_book("Книга1") + return collector + +@pytest.fixture +def filled_collector(collector, add_book_1): + add_book_1.set_book_genre("Книга1", "Мультфильмы") + collector.add_new_book("Книга2") + collector.set_book_genre("Книга2", "Ужасы") + collector.add_new_book("Книга3") + collector.set_book_genre("Книга3", "Мультфильмы") + collector.add_new_book("Книга4") + collector.set_book_genre("Книга4", "Комедии") + return collector + +@pytest.fixture +def only_adult_books(collector): + collector.add_new_book("Книга4") + collector.set_book_genre("Книга4", "Ужасы") + collector.add_new_book("Книга5") + collector.set_book_genre("Книга5", "Детективы") + return collector \ No newline at end of file diff --git a/tests.py b/tests.py index 423ebb9..faff071 100644 --- a/tests.py +++ b/tests.py @@ -27,110 +27,142 @@ class TestBooksCollector: @pytest.mark.parametrize( "name, expected", [ - ("Книга1", True), ("", False), + (" ", False), + ("К", True), + ("Книга1", True), ("Книга1Книга1Книга1Книга1Книга1Книга1Книга", False), - ], + ("Книга1Книга1Книга1Книга1Книга1Книга1Книга1", False) + (None, False), + (12345, False), + ] ) def test_add_and_check_book_presence(self, collector, name, expected): collector.add_new_book(name) assert (name in collector.get_books_genre()) == expected, f"{name} {'не' if expected else ''} должна быть добавлена." - def test_assign_and_retrieve_genre(self, collector): - collector.add_new_book("Книга1") - collector.set_book_genre("Книга1", "Фантастика") - assert collector.get_book_genre("Книга1") == "Фантастика", "Жанр не был назначен корректно." - - @pytest.mark.parametrize("book_name, genre", [ - ("Книга1", "Фэнтези"), - ("Книга2", "Научная фантастика"), - ("Книга3", "Детектив"), - ]) - def test_assign_genres_to_multiple_books(self, collector, book_name, genre): - collector.add_new_book(book_name) - collector.set_book_genre(book_name, genre) - assert collector.get_book_genre(book_name) == genre, f"Полученный жанр ({collector.get_book_genre(book_name)}) не соответствует заданному ({genre})." - - @pytest.mark.parametrize("book_name, initial_genre, invalid_genre", [ - ("Книга1", "Фэнтези", ""), - ("Книга2", "Научная фантастика", "!#$%^&*()"), - ("Книга3", "Детектив", "Некорректный жанр"), - ]) - def test_invalid_genre_change(self, collector, book_name, initial_genre, invalid_genre): - collector.add_new_book(book_name) - collector.set_book_genre(book_name, initial_genre) - collector.set_book_genre(book_name, invalid_genre) - assert collector.get_book_genre(book_name) == initial_genre, f"Некорректный жанр ('{invalid_genre}') изменил текущий жанр ('{initial_genre}')" - - def test_set_book_genre(self, collector): + def test_add_new_book_two_similar_book_not_change_dictionary(self, add_book_1): + add_book_1.add_new_book("Книга1") + add_book_1.add_new_book("Книга1") + assert len(add_book_1.get_books_genre()) == 1, "В словаре одинаковые книги!" + + def test_add_new_book_ten_different_book_change_dictionary(self, collector): + stack_books = [ + "Книга1", + "Книга2", + "Книга3", + "Книга4", + "Книга5", + "Книга6", + "Книга7", + "Книга8", + "Книга9", + "Книга10", + ] + for books in stack_books: + collector.add_new_book(books) + + assert len(collector.get_books_genre()) == 10, f"В словаре оказалось {len(collector.get_books_genre())} книг вместо 10" + + def test_set_book_genre_valid_genre_set_genre(self, add_book_1): + add_book_1.set_book_genre("Книга1", "Ужасы") + assert add_book_1.get_book_genre("Книга1") == "Ужасы", "Жанр не установлен корректно" + + def test_set_book_genre_invalid_genre_not_set_genre(self, add_book_1): + add_book_1.set_book_genre("Книга1", "Повесть") + assert add_book_1.get_book_genre("Книга1") != "Повесть", "Неверный жанр сохранился в коллекции" + + def test_set_book_genre_add_book_with_genre_not_change_dictionary(self, collector): + collector.set_book_genre("Книга1", "Фантастика") + assert collector.get_book_genre("Книга1") not in collector.get_books_genre(), "Создалась книга при установке жанра" + + def test_set_book_genre_not_book_in_dictionary_not_set_genre_nonexistent_in_dictionary_book(self, collector): collector.add_new_book("Книга1") - collector.set_book_genre("Книга1", "Фэнтези") - retrieved_genre = collector.get_book_genre("Книга1") - assert retrieved_genre == "Фэнтези", "Неверный жанр после установки." + assert collector.get_book_genre("Книга2") is None - def test_retrieve_books_by_genre(self, collector): - collector.add_new_book("Книга1") - collector.set_book_genre("Книга1", "Фантастика") - collector.add_new_book("Книга2") - collector.set_book_genre("Книга2", "Фантастика") - result = collector.get_books_with_specific_genre("Фантастика") - expected_result = ["Книга1", "Книга2"] - assert sorted(result) == sorted(expected_result), f"Результат {result}, ожидалось {expected_result}" - - def test_empty_list_for_unknown_genre(self, collector): - result = collector.get_books_with_specific_genre("Комедии") - assert result == [], "Список книг должен быть пустым, если нет книг выбранного жанра." - - def test_filter_children_books(self, collector): - collector.add_new_book("Книга1") - collector.set_book_genre("Книга1", "Фантастика") - collector.add_new_book("Книга2") - collector.set_book_genre("Книга2", "Ужасы") - children_books = collector.get_books_for_children() - expected_result = ["Книга1"] - assert sorted(children_books) == sorted(expected_result), f"Ошибка в списке детских книг: ожидалось {expected_result}, получено {children_books}" - - def test_add_book_to_faves(self, collector): - collector.add_new_book("Книга1") - collector.add_book_in_favorites("Книга1") - favorites = collector.get_list_of_favorites_books() - assert "Книга1" in favorites, "Книга должна быть добавлена в избранное." + def test_get_book_genre_empty_title_not_set_genre_empty_book(self, collector): + collector.add_new_book("") + assert collector.get_book_genre("") is None - def test_remove_book_from_faves(self, collector): - collector.add_new_book("Книга1") - collector.add_book_in_favorites("Книга1") - collector.delete_book_from_favorites("Книга1") - favorites = collector.get_list_of_favorites_books() - assert "Книга1" not in favorites, "Удалённая книга не должна присутствовать в избранном." - - def test_get_book_genre(self, collector): - collector._books = {"Книга1": None} - collector._genres = {"Книга1": "Фантастика"} - genre = collector.get_book_genre("Книга1") - assert genre == "Фантастика", "Метод get_book_genre возвращает неправильный жанр." - - def test_get_books_genre(self, collector): - collector._books = { - "Книга1": None, - "Книга2": None, - "Книга3": None - } - collector._genres = { - "Книга1": "Фантастика", - "Книга2": "Роман", - "Книга3": "Исторический роман" + def test_get_book_genre_none_value_not_change_dictionary(self, collector): + collector.add_new_book(None) + assert collector.get_book_genre(None) is None + + def test_set_book_genre_genre_cartoons_replace_genre(self, add_book_1): + add_book_1.set_book_genre("Книга1", "Детективы") + add_book_1.set_book_genre("Книга1", "Мультфильмы") + assert add_book_1.get_book_genre("Книга1") == "Мультфильмы" + + def test_get_books_with_specific_genre_existing_genre_show_filled_book(filled_collector): + result = filled_collector.get_books_with_specific_genre("Мультфильмы") + assert sorted(result) == ["Книга1", "Книга3"], "Получены неверные книги жанра мультфильмы" + + @pytest.mark.parametrize( + "genre, expected_result", + [ + ("Комедия", []), + ("Повести", []), + ("", []), + (None, []), + (123, []) + ] + ) + def test_get_books_with_specific_genre_other_empty_invalid_genres(self, genre, expected_result, filled_collector): + assert filled_collector.get_books_with_specific_genre(genre) == expected_result, f"Возврат неверного списка книг для жанра '{genre}'" + + def test_get_books_genre_empty_collection(self, collector): + assert collector.get_books_genre() == {}, "Возвращён неверный словарь для пустой коллекции" + + def test_get_books_genre_filled_collection(collector, filled_collector): + expected_dict = { + "Книга1": "Мультфильмы", + "Книга2": "Ужасы" } + result = filled_collector.get_books_genre() + assert result == expected_dict, "Возвращённый словарь отличается от ожидаемого" + + def test_get_books_for_children_child_genres(filled_collector): + child_books = filled_collector.get_books_for_children() + assert sorted(child_books) == ["Книга1", "Книга3"], "Возвращён неверный список детских книг" + + def test_get_books_for_children_only_adult_books_empty_list(only_adult_books): + child_books = only_adult_books.get_books_for_children() + assert child_books == [], "Возвращён неверный список детских книг" + + def test_get_books_for_children_empty_collection_empty_list(collector): + child_books = collector.get_books_for_children() + assert child_books == [], "Возвращён неверный список детских книг" - books_with_genres = collector.get_books_genre() - expected_result = { - "Книга1": "Фантастика", - "Книга2": "Роман", - "Книга3": "Исторический роман" - } - assert books_with_genres == expected_result, "Метод get_books_genre вернул некорректный список книг с жанрами." - - def test_get_list_of_favorites_books(self, collector): - collector._favorites = ["Книга1", "Книга3"] + + def test_add_book_in_favorites_add_book_in_list(filled_collector): + filled_collector.add_book_in_favorites("Книга1") + favorite_books = filled_collector.get_list_of_favorites_books() + assert "Книга1" in favorite_books, "Книга не добавилась в избранное" + + def test_add_same_book_twice_in_favorites(filled_collector): + filled_collector.add_book_in_favorites("Книга1") + filled_collector.add_book_in_favorites("Книга1") + favorite_books = filled_collector.get_list_of_favorites_books() + assert favorite_books.count("Книга1") == 1, "Одинаковая книга добавилась в избранное дважды" + + def test_delete_book_from_favorites_delete_book_in_list(filled_collector): + filled_collector.add_book_in_favorites("Книга1") + filled_collector.delete_book_from_favorites("Книга1") + favorite_books = filled_collector.get_list_of_favorites_books() + assert "Книга1" not in favorite_books, "Книга не удалилась из избранного" + + def test_test_delete_book_from_favorites(filled_collector): + filled_collector.add_book_in_favorites("Книга1") + filled_collector.delete_book_from_favorites("Книга1") + filled_collector.delete_book_from_favorites("Книга1") + assert "Книга1" not in filled_collector.get_list_of_favorites_books(), "Книга присутствовала в избранном после двойного удаления" + + def test_get_list_of_favorites_books_empty_list(collector): favorite_books = collector.get_list_of_favorites_books() - expected_result = ["Книга1", "Книга3"] - assert sorted(favorite_books) == sorted(expected_result), "Метод get_list_of_favorites_books вернул некорректный список любимых книг." \ No newline at end of file + assert favorite_books == [], "Возвращён неверный список избранных книг" + + def test_get_list_of_favorites_books_multiple_books(filled_collector): + filled_collector.add_book_in_favorites("Книга1") + filled_collector.add_book_in_favorites("Книга2") + favorite_books = filled_collector.get_list_of_favorites_books() + assert sorted(favorite_books) == ["Книга1", "Книга2"], "Возвращён неверный список избранных книг"