From 632133b95995348fbdb56d88e071a43f366e262f Mon Sep 17 00:00:00 2001 From: Evelina Asay <новый_e.asai@yandex.ru> Date: Thu, 21 May 2026 14:20:33 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D1=91?= =?UTF-8?q?=D0=BD=20README=20=D1=81=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=D0=BC=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 16 +++++++++- tests.py | 90 ++++++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 91 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 1cc701d..79d869a 100644 --- a/README.md +++ b/README.md @@ -1 +1,15 @@ -# qa_python \ No newline at end of file +# Тесты для BooksCollector + +## Реализованные тесты + +1. **test_add_new_book_add_two_books** — проверка добавления двух книг +2. **test_add_new_book_valid_name** — добавление книги с валидным названием +3. **test_add_new_book_invalid_name** — проверка невалидных названий (параметризация: строка >40 символов, пустая строка) +4. **test_add_new_book_duplicate** — дубликат книги не добавляется +5. **test_set_book_genre** — установка жанра книге +6. **test_set_book_genre_invalid_genre** — нельзя установить несуществующий жанр +7. **test_get_book_genre** — получение жанра по названию книги +8. **test_get_books_with_specific_genre** — получение списка книг определённого жанра +9. **test_get_books_for_children** — получение книг для детей (без возрастного рейтинга) +10. **test_add_book_in_favorites** — добавление книги в избранное +11. **test_delete_book_from_favorites** — удаление книги из избранного \ No newline at end of file diff --git a/tests.py b/tests.py index 383385e..c7861d2 100644 --- a/tests.py +++ b/tests.py @@ -1,24 +1,86 @@ from main import BooksCollector +import pytest -# класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector -# обязательно указывать префикс Test class TestBooksCollector: - # пример теста: - # обязательно указывать префикс test_ - # дальше идет название метода, который тестируем add_new_book_ - # затем, что тестируем add_two_books - добавление двух книг + # пример теста def test_add_new_book_add_two_books(self): - # создаем экземпляр (объект) класса BooksCollector collector = BooksCollector() - - # добавляем две книги collector.add_new_book('Гордость и предубеждение и зомби') collector.add_new_book('Что делать, если ваш кот хочет вас убить') + assert len(collector.get_books_genre()) == 2 + + # 1. Добавление книги с валидным названием + def test_add_new_book_valid_name(self): + collector = BooksCollector() + collector.add_new_book("Война и мир") + assert "Война и мир" in collector.get_books_genre() + + # 2. Невалидные названия (параметризация) + @pytest.mark.parametrize("name", ["A"*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() - # проверяем, что добавилось именно две - # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 + # 3. Дубликат не добавляется + def test_add_new_book_duplicate(self): + collector = BooksCollector() + collector.add_new_book("Дубликат") + collector.add_new_book("Дубликат") + assert len(collector.get_books_genre()) == 1 + + # 4. Установка жанра + def test_set_book_genre(self): + collector = BooksCollector() + collector.add_new_book("Гарри Поттер") + collector.set_book_genre("Гарри Поттер", "Фантастика") + assert collector.get_book_genre("Гарри Поттер") == "Фантастика" + + # 5. Нельзя установить несуществующий жанр + def test_set_book_genre_invalid_genre(self): + collector = BooksCollector() + collector.add_new_book("Тест") + collector.set_book_genre("Тест", "Роман") + assert collector.get_book_genre("Тест") == "" - # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file + # 6. Получение жанра + def test_get_book_genre(self): + collector = BooksCollector() + collector.add_new_book("Книга") + collector.set_book_genre("Книга", "Детективы") + assert collector.get_book_genre("Книга") == "Детективы" + + # 7. Список книг по жанру + def test_get_books_with_specific_genre(self): + collector = BooksCollector() + collector.add_new_book("Ужасная книга") + collector.set_book_genre("Ужасная книга", "Ужасы") + result = collector.get_books_with_specific_genre("Ужасы") + assert "Ужасная книга" in result + + # 8. Книги для детей (исправленный тест) + def test_get_books_for_children(self): + collector = BooksCollector() + collector.add_new_book("Детская книга") + collector.set_book_genre("Детская книга", "Мультфильмы") + collector.add_new_book("Страшная книга") + collector.set_book_genre("Страшная книга", "Ужасы") + children_books = collector.get_books_for_children() + assert "Детская книга" in children_books + assert "Страшная книга" not in children_books + + # 9. Добавление в избранное + def test_add_book_in_favorites(self): + collector = BooksCollector() + collector.add_new_book("Любимая книга") + collector.add_book_in_favorites("Любимая книга") + assert "Любимая книга" in collector.get_list_of_favorites_books() + + # 10. Удаление из избранного + def test_delete_book_from_favorites(self): + collector = BooksCollector() + collector.add_new_book("Книга") + collector.add_book_in_favorites("Книга") + collector.delete_book_from_favorites("Книга") + assert "Книга" not in collector.get_list_of_favorites_books() \ No newline at end of file From 89a23a1cf71dfc0d9d3c1fe56d5c915a43a280fc Mon Sep 17 00:00:00 2001 From: Evelina Asay <новый_e.asai@yandex.ru> Date: Thu, 21 May 2026 16:59:30 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=A0=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20get=5Fbooks=5Ffor=5Fchildren=20=D1=81=D0=BE=D0=B3?= =?UTF-8?q?=D0=BB=D0=B0=D1=81=D0=BD=D0=BE=20=D0=BF=D1=80=D0=B8=D0=BD=D1=86?= =?UTF-8?q?=D0=B8=D0=BF=D1=83=20=D0=B0=D1=82=D0=BE=D0=BC=D0=B0=D1=80=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tests.py b/tests.py index c7861d2..3d67656 100644 --- a/tests.py +++ b/tests.py @@ -59,15 +59,20 @@ def test_get_books_with_specific_genre(self): result = collector.get_books_with_specific_genre("Ужасы") assert "Ужасная книга" in result - # 8. Книги для детей (исправленный тест) - def test_get_books_for_children(self): + # 8а. Книги для детей: детские книги попадают в список + def test_get_books_for_children_includes_children_books(self): collector = BooksCollector() collector.add_new_book("Детская книга") collector.set_book_genre("Детская книга", "Мультфильмы") + children_books = collector.get_books_for_children() + assert "Детская книга" in children_books + + # 8б. Книги для детей: книги с возрастным рейтингом не попадают в список + def test_get_books_for_children_excludes_age_restricted_books(self): + collector = BooksCollector() collector.add_new_book("Страшная книга") collector.set_book_genre("Страшная книга", "Ужасы") children_books = collector.get_books_for_children() - assert "Детская книга" in children_books assert "Страшная книга" not in children_books # 9. Добавление в избранное From e63bc5730e5021f64a4511033f9447810342c1c5 Mon Sep 17 00:00:00 2001 From: Evelina Asay <новый_e.asai@yandex.ru> Date: Thu, 21 May 2026 17:04:42 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D1=91?= =?UTF-8?q?=D0=BD=20README:=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20get=5Fbooks=5Ffor=5Fchildren?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 79d869a..bea2eb1 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,12 @@ 6. **test_set_book_genre_invalid_genre** — нельзя установить несуществующий жанр 7. **test_get_book_genre** — получение жанра по названию книги 8. **test_get_books_with_specific_genre** — получение списка книг определённого жанра -9. **test_get_books_for_children** — получение книг для детей (без возрастного рейтинга) -10. **test_add_book_in_favorites** — добавление книги в избранное -11. **test_delete_book_from_favorites** — удаление книги из избранного \ No newline at end of file +9. **test_get_books_for_children_includes_children_books** — детские книги попадают в список для детей +10. **test_get_books_for_children_excludes_age_restricted_books** — книги с возрастным рейтингом не попадают в список для детей +11. **test_add_book_in_favorites** — добавление книги в избранное +12. **test_delete_book_from_favorites** — удаление книги из избранного + +## Запуск тестов + +```bash +pytest -v tests.py \ No newline at end of file