From 37009d037a691e8494006a4b33879f1bec63dca9 Mon Sep 17 00:00:00 2001 From: "svyatoslavskij.v" Date: Sat, 26 Jul 2025 15:49:02 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE?= =?UTF-8?q?=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20BooksCollector?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 22 +++++++++- tests.py | 127 ++++++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 135 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 1cc701d..4e8f945 100644 --- a/README.md +++ b/README.md @@ -1 +1,21 @@ -# qa_python \ No newline at end of file +1. test_add_new_book_add_two_books - Проверяет, что можно добавить две разные книги + +2. test_add_new_book_duplicate_not_added - Проверяет, что дубликат книги не добавляется + +3. test_add_new_book_empty_name - Проверяет, что книга с пустым названием не добавляется + +4. test_add_new_book_41_symbol_name - Проверяет, что название длиннее 41 символа не добавляется + +5. test_set_book_genre_set_six_genre - Проверяет, что жанр устанавливается корректно для разных книг + +6. test_get_books_with_specific_genre_six_genre - Проверяет, что возвращается правильный список книг по жанру + +7. test_get_books_genre_return_dict - Проверяет, что возвращается корректный словарь books_genre + +8. test_get_books_for_children_get_list - Проверяет, что возвращаются только книги без возрастного рейтинга + +9. test_add_book_in_favorites_add_two_books - Проверяет добавление книг в избранное + +10. test_delete_book_from_favorites_add_two_books_delete_one - Проверяет удаление одной из двух избранных книг + +11. test_delete_book_from_favorites_deleted_book_not_in_list - Проверяет, что попытка удалить несуществующую книгу не влияет на список \ No newline at end of file diff --git a/tests.py b/tests.py index 383385e..65a9b97 100644 --- a/tests.py +++ b/tests.py @@ -1,24 +1,125 @@ +import pytest from main import BooksCollector -# класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector -# обязательно указывать префикс Test +name_n_genre = [["Тень за стеной", "Ужасы"], + ["Лабиринт будущего", "Фантастика"], ["Улика в тумане", "Детективы"], + ["Смех в мультивселенной", "Комедии"], ["Приключения плюшевого мишки", "Мультфильмы"]] + + class TestBooksCollector: - # пример теста: - # обязательно указывать префикс test_ - # дальше идет название метода, который тестируем add_new_book_ - # затем, что тестируем add_two_books - добавление двух книг + @pytest.fixture + def collector_with_books(self): + collector = BooksCollector() + for name, genre in name_n_genre: + collector.add_new_book(name) + collector.set_book_genre(name, genre) + return collector + def test_add_new_book_add_two_books(self): - # создаем экземпляр (объект) класса BooksCollector collector = BooksCollector() - # добавляем две книги 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_genre()) == 2 + + def test_add_new_book_duplicate_not_added(self): + collector = BooksCollector() + + collector.add_new_book('Гордость и предубеждение и зомби') + collector.add_new_book('Гордость и предубеждение и зомби') + + assert len(collector.get_books_genre()) == 1 + + def test_add_new_book_empty_name(self): + collector = BooksCollector() + + collector.add_new_book('') + + assert len(collector.get_books_genre()) == 0 + + def test_add_new_book_41_symbol_name(self): + collector = BooksCollector() + name = 'B' * 41 + + collector.add_new_book(name) + + assert len(collector.get_books_genre()) == 0 + + @pytest.mark.parametrize('name, genre', name_n_genre) + def test_set_book_genre_set_six_genre(self, name, genre): + collector = BooksCollector() + + collector.add_new_book(name) + + collector.set_book_genre(name, genre) + + assert collector.get_book_genre(name) == genre + + @pytest.mark.parametrize('name, genre', name_n_genre) + def test_get_books_with_specific_genre_six_genre(self, name, genre, collector_with_books): + collector = collector_with_books + + books = collector.get_books_with_specific_genre(genre) + + assert len(books) == 1 and books[0] == name + + def test_get_books_genre_return_dict(self, collector_with_books): + collector = collector_with_books + data_dict = { + "Тень за стеной": "Ужасы", + "Лабиринт будущего": "Фантастика", + "Улика в тумане": "Детективы", + "Смех в мультивселенной": "Комедии", + "Приключения плюшевого мишки": "Мультфильмы" + } + + assert collector.get_books_genre() == data_dict + + def test_get_books_for_children_get_list(self, collector_with_books): + collector = collector_with_books + + list_books = collector.get_books_for_children() + + assert set(list_books) == {'Лабиринт будущего', 'Смех в мультивселенной', 'Приключения плюшевого мишки'} + + def test_add_book_in_favorites_add_two_books(self, collector_with_books): + first_book = 'Тень за стеной' + second_book = 'Приключения плюшевого мишки' + collector = collector_with_books + + collector.add_book_in_favorites(first_book) + collector.add_book_in_favorites(second_book) + + list_favorite_books = collector.get_list_of_favorites_books() + + assert set(list_favorite_books) == {first_book, second_book} + + def test_delete_book_from_favorites_add_two_books_delete_one(self, collector_with_books): + first_book = 'Тень за стеной' + second_book = 'Приключения плюшевого мишки' + collector = collector_with_books + + collector.add_book_in_favorites(first_book) + collector.add_book_in_favorites(second_book) + + collector.delete_book_from_favorites(first_book) + + favorite_book = collector.get_list_of_favorites_books() + + assert favorite_book == [second_book] + + def test_delete_book_from_favorites_deleted_book_not_in_list(self, collector_with_books): + first_book = 'Тень за стеной' + second_book = 'Приключения плюшевого мишки' + collector = collector_with_books + + collector.add_book_in_favorites(first_book) + collector.add_book_in_favorites(second_book) + + collector.delete_book_from_favorites('Смех в мультивселенной') + + list_favorite_books = collector.get_list_of_favorites_books() - # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file + assert set(list_favorite_books) == {first_book, second_book} From d90e82cb8d3e7a5e49f05ae0fe46156806e0fe96 Mon Sep 17 00:00:00 2001 From: "svyatoslavskij.v" Date: Mon, 28 Jul 2025 11:35:50 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE?= =?UTF-8?q?=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20BooksCollector?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 18 ++++++++++++------ conftest.py | 12 ++++++++++++ data.py | 3 +++ tests.py | 39 +++++++++++++++++++++++++-------------- 4 files changed, 52 insertions(+), 20 deletions(-) create mode 100644 conftest.py create mode 100644 data.py diff --git a/README.md b/README.md index 4e8f945..db0454a 100644 --- a/README.md +++ b/README.md @@ -8,14 +8,20 @@ 5. test_set_book_genre_set_six_genre - Проверяет, что жанр устанавливается корректно для разных книг -6. test_get_books_with_specific_genre_six_genre - Проверяет, что возвращается правильный список книг по жанру +6. test_get_book_genre_return_added_genre - Проверяет, что возвращается корректный жанр книги -7. test_get_books_genre_return_dict - Проверяет, что возвращается корректный словарь books_genre +7. test_get_books_with_specific_genre_six_genre - Проверяет, что возвращается правильный список книг по жанру -8. test_get_books_for_children_get_list - Проверяет, что возвращаются только книги без возрастного рейтинга +8. test_get_books_genre_return_dict - Проверяет, что возвращается корректный словарь books_genre -9. test_add_book_in_favorites_add_two_books - Проверяет добавление книг в избранное +9. test_get_books_for_children_get_list - Проверяет, что возвращаются только книги без возрастного рейтинга -10. test_delete_book_from_favorites_add_two_books_delete_one - Проверяет удаление одной из двух избранных книг +10. test_add_book_in_favorites_add_two_books - Проверяет добавление книг в избранное -11. test_delete_book_from_favorites_deleted_book_not_in_list - Проверяет, что попытка удалить несуществующую книгу не влияет на список \ No newline at end of file +11. test_delete_book_from_favorites_add_two_books_delete_one - Проверяет удаление одной из двух избранных книг + +12. test_delete_book_from_favorites_deleted_book_not_in_list - Проверяет, что попытка удалить несуществующую книгу не влияет на список + +13. test_get_list_of_favorites_books_return_added_books - Проверяет, что возвращаются ранее добавленные в список книги + +14. test_get_list_of_favorites_books_returns_empty_list - Проверяет, что возвращается пустой список, если нет избранных книг \ No newline at end of file diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..df718f1 --- /dev/null +++ b/conftest.py @@ -0,0 +1,12 @@ +import pytest +from main import BooksCollector +from data import BOOKS_DATA + + +@pytest.fixture +def collector_with_books(): + collector = BooksCollector() + for name, genre in BOOKS_DATA: + collector.add_new_book(name) + collector.set_book_genre(name, genre) + return collector diff --git a/data.py b/data.py new file mode 100644 index 0000000..972a01f --- /dev/null +++ b/data.py @@ -0,0 +1,3 @@ +BOOKS_DATA = [["Тень за стеной", "Ужасы"], + ["Лабиринт будущего", "Фантастика"], ["Улика в тумане", "Детективы"], + ["Смех в мультивселенной", "Комедии"], ["Приключения плюшевого мишки", "Мультфильмы"]] diff --git a/tests.py b/tests.py index 65a9b97..75827e7 100644 --- a/tests.py +++ b/tests.py @@ -1,21 +1,10 @@ import pytest from main import BooksCollector - -name_n_genre = [["Тень за стеной", "Ужасы"], - ["Лабиринт будущего", "Фантастика"], ["Улика в тумане", "Детективы"], - ["Смех в мультивселенной", "Комедии"], ["Приключения плюшевого мишки", "Мультфильмы"]] +from data import BOOKS_DATA class TestBooksCollector: - @pytest.fixture - def collector_with_books(self): - collector = BooksCollector() - for name, genre in name_n_genre: - collector.add_new_book(name) - collector.set_book_genre(name, genre) - return collector - def test_add_new_book_add_two_books(self): collector = BooksCollector() @@ -47,7 +36,7 @@ def test_add_new_book_41_symbol_name(self): assert len(collector.get_books_genre()) == 0 - @pytest.mark.parametrize('name, genre', name_n_genre) + @pytest.mark.parametrize('name, genre', BOOKS_DATA) def test_set_book_genre_set_six_genre(self, name, genre): collector = BooksCollector() @@ -57,7 +46,13 @@ def test_set_book_genre_set_six_genre(self, name, genre): assert collector.get_book_genre(name) == genre - @pytest.mark.parametrize('name, genre', name_n_genre) + def test_get_book_genre_return_added_genre(self, collector_with_books): + collector = collector_with_books + + assert collector.get_book_genre('Лабиринт будущего') == 'Фантастика' + assert collector.get_book_genre('Приключения плюшевого мишки') == 'Мультфильмы' + + @pytest.mark.parametrize('name, genre', BOOKS_DATA) def test_get_books_with_specific_genre_six_genre(self, name, genre, collector_with_books): collector = collector_with_books @@ -123,3 +118,19 @@ def test_delete_book_from_favorites_deleted_book_not_in_list(self, collector_wit list_favorite_books = collector.get_list_of_favorites_books() assert set(list_favorite_books) == {first_book, second_book} + + def test_get_list_of_favorites_books_return_added_books(self, collector_with_books): + first_book = 'Улика в тумане' + second_book = 'Смех в мультивселенной' + collector = collector_with_books + + collector.add_book_in_favorites(first_book) + assert collector.get_list_of_favorites_books() == [first_book] + + collector.add_book_in_favorites(second_book) + assert set(collector.get_list_of_favorites_books()) == {first_book, second_book} + + def test_get_list_of_favorites_books_returns_empty_list(self, collector_with_books): + collector = collector_with_books + + assert collector.get_list_of_favorites_books() == []