From 3432e7b81a58afd5486b18cca9e94c60ec435d29 Mon Sep 17 00:00:00 2001 From: Pavel Gorshkov Date: Wed, 6 May 2026 01:28:19 +0300 Subject: [PATCH 1/3] list of tests --- README.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1cc701d..0707cbc 100644 --- a/README.md +++ b/README.md @@ -1 +1,20 @@ -# qa_python \ No newline at end of file +# Список тестов: +test_add_new_book_add_two_books - покрывает добавление новых книг +test_add_new_book_add_book_with_name_length_more_than_40_not_added - покрывает добавление книги, если название содержит менее 40 символов +test_add_new_book_add_book_with_name_length_less_than_41_added - покрывает отмену добавления книги, если название содержит более 40 символов +test_add_new_book_genre_empty - покрывает добавление пустого жанра при добавлении новой книги +test_init_books_genre_empty - покрывает в init создание пустого словаря books_genre +test_init_favorites_empty - покрывает в init создание пустого списка favorites +test_init_genre_filled - покрывает в init создание заполненного списка genre +test_init_genre_age_rating_filled - покрывает в init создание заполненного списка genre_age_rating +test_set_book_genre - покрывает установку жанра книги +test_set_book_genre_book_is_missing_genre_not_added - покрывает пропуск установки жанра на книгу отсутствующую в словаре +test_set_book_genre_genre_is_missing_genre_not_added - покрывает пропуск установки жанра не из доступного списка +test_get_book_genre - покрывает получение жанра книги по названию из словаря +test_get_books_with_specific_genre - покрывает получение списка книг по определенному жанру из словаря +test_get_books_for_children - покрывает получение списка книг доступных детям +test_add_book_in_favorites_add_two_books - покрывает добавление книг в избранное +test_add_book_in_favorites_add_book_not_in_dict - покрывает пропуск добавления книги в избранное, если она отсутствует в словаре +test_add_book_in_favorites_add_book_already_in_favorites - покрывает пропуск добавления книги в избранное, если она уже туда добавлена +test_delete_book_from_favorites_delete_one_book - покрывает удаление книги из избранного +test_get_list_of_favorites_books - покрывает получение списка книг из избранного From 287fd28ce695ce65a77c523ca0599aee1003b546 Mon Sep 17 00:00:00 2001 From: Pavel Gorshkov Date: Wed, 6 May 2026 01:35:18 +0300 Subject: [PATCH 2/3] Adding tests for BooksCollector class --- conftest.py | 25 ++++++++++ tests.py | 129 +++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 147 insertions(+), 7 deletions(-) create mode 100644 conftest.py diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..5eba462 --- /dev/null +++ b/conftest.py @@ -0,0 +1,25 @@ +import pytest +from main import BooksCollector + + +@pytest.fixture +def collector(): + return BooksCollector() + +@pytest.fixture +def collector_with_books(): + collector = BooksCollector() + title_book = ['Что делать, если ваш кот хочет вас убить', + 'Ограбление в восточном экспрессе', + 'Гордость и предубеждение и зомби', + 'Кот Баскервиллей', + 'Шрек и осел'] + genre = ['Ужасы', + 'Детективы', + 'Фантастика', + 'Детективы', + 'Мультфильмы'] + for i in range(0,len(title_book)): + collector.add_new_book(title_book[i]) + collector.set_book_genre(title_book[i], genre[i]) + return collector \ No newline at end of file diff --git a/tests.py b/tests.py index 383385e..f1b744f 100644 --- a/tests.py +++ b/tests.py @@ -1,5 +1,7 @@ +import pytest from main import BooksCollector + # класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector # обязательно указывать префикс Test class TestBooksCollector: @@ -8,17 +10,130 @@ class TestBooksCollector: # обязательно указывать префикс test_ # дальше идет название метода, который тестируем add_new_book_ # затем, что тестируем add_two_books - добавление двух книг - def test_add_new_book_add_two_books(self): - # создаем экземпляр (объект) класса BooksCollector - collector = BooksCollector() - + def test_add_new_book_add_two_books(self, collector): + # создаем экземпляр (объект) класса BooksCollector в фикстуре + # добавляем две книги collector.add_new_book('Гордость и предубеждение и зомби') collector.add_new_book('Что делать, если ваш кот хочет вас убить') # проверяем, что добавилось именно две - # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 + # словарь books_genre, который нам возвращает метод get_books_genre, имеет длину 2 + assert len(collector.get_books_genre()) == 2 # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file + # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() + + def test_add_new_book_add_book_with_name_length_more_than_40_not_added(self, collector): + # добавляем книгу с названием длиной больше 40 символов + collector.add_new_book('Гордость и предубеждение и зомби и зомби!') + # проверяем, что книга не добавилась + # словарь books_genre, который нам возвращает метод get_books_genre, имеет длину 0 + assert len(collector.get_books_genre()) == 0 + + def test_add_new_book_add_book_with_name_length_less_than_41_added(self, collector): + # добавляем книгу с названием длиной 40 символов + collector.add_new_book('Гордость и предубеждение и зомби и зомби') + # проверяем, что книга добавилась + # словарь books_genre, который нам возвращает метод get_books_genre, имеет длину 1 + assert len(collector.get_books_genre()) == 1 + + def test_add_new_book_genre_empty(self, collector): + collector.add_new_book('Гордость и предубеждение и зомби и зомби') + assert collector.get_books_genre()['Гордость и предубеждение и зомби и зомби'] == '' + + def test_init_books_genre_empty(self, collector): + assert {} == collector.books_genre + + def test_init_favorites_empty(self, collector): + assert [] == collector.favorites + + def test_init_genre_filled(self, collector): + list_genre = ['Фантастика', 'Ужасы', 'Детективы', 'Мультфильмы', 'Комедии'] + assert list_genre == collector.genre + + def test_init_genre_age_rating_filled(self, collector): + list_genre_age_rating = ['Ужасы', 'Детективы'] + assert list_genre_age_rating == collector.genre_age_rating + + @pytest.mark.parametrize('genre', ['Фантастика', 'Ужасы', 'Детективы', 'Мультфильмы', 'Комедии']) + def test_set_book_genre(self, collector, genre): + title_book = 'Что делать, если ваш кот хочет вас убить' + collector.add_new_book(title_book) + collector.set_book_genre(title_book, genre) + assert genre == collector.books_genre[title_book] + + @pytest.mark.parametrize('genre', ['Фантастика', 'Ужасы', 'Детективы', 'Мультфильмы', 'Комедии']) + def test_set_book_genre_book_is_missing_genre_not_added(self, collector, genre): + title_book_1 = 'Что делать, если ваш кот хочет вас убить' + title_book_2 = 'Гордость и предубеждение и зомби' + collector.add_new_book(title_book_2) + collector.set_book_genre(title_book_1, genre) + assert genre != collector.books_genre[title_book_2] and collector.books_genre[title_book_2] == '' + + def test_set_book_genre_genre_is_missing_genre_not_added(self, collector): + title_book = 'Что делать, если ваш кот хочет вас убить' + genre = 'Драма' + collector.add_new_book(title_book) + collector.set_book_genre(title_book, genre) + assert genre != collector.books_genre[title_book] and collector.books_genre[title_book] == '' + + def test_get_book_genre(self, collector): + title_book = 'Что делать, если ваш кот хочет вас убить' + genre = 'Ужасы' + collector.add_new_book(title_book) + collector.set_book_genre(title_book, genre) + assert genre == collector.get_book_genre(title_book) + + @pytest.mark.parametrize('books_with_specific_genre', ['Ограбление в восточном экспрессе', 'Кот Баскервиллей']) + def test_get_books_with_specific_genre(self, collector_with_books, books_with_specific_genre): + assert books_with_specific_genre in collector_with_books.get_books_with_specific_genre('Детективы') + + def test_get_books_genre_dicts_equal(self, collector_with_books): + title_book = ['Что делать, если ваш кот хочет вас убить', + 'Ограбление в восточном экспрессе', + 'Гордость и предубеждение и зомби', + 'Кот Баскервиллей', + 'Шрек и осел'] + genre = ['Ужасы', + 'Детективы', + 'Фантастика', + 'Детективы', + 'Мультфильмы'] + books_dict = {} + for i in range(0,len(title_book)): + books_dict[title_book[i]] = genre[i] + assert books_dict == collector_with_books.get_books_genre() + + @pytest.mark.parametrize('books_for_children', ['Гордость и предубеждение и зомби', 'Шрек и осел']) + def test_get_books_for_children(self, collector_with_books, books_for_children): + assert books_for_children in collector_with_books.get_books_for_children() + + @pytest.mark.parametrize('book_in_favorites', ['Что делать, если ваш кот хочет вас убить', 'Шрек и осел']) + def test_add_book_in_favorites_add_two_books(self, collector_with_books, book_in_favorites): + collector_with_books.add_book_in_favorites('Что делать, если ваш кот хочет вас убить') + collector_with_books.add_book_in_favorites('Шрек и осел') + assert book_in_favorites in collector_with_books.favorites and len(collector_with_books.favorites) == 2 + + def test_add_book_in_favorites_add_book_not_in_dict(self, collector_with_books): + collector_with_books.add_book_in_favorites('Что делать, если ваш кот хочет вас убить') + collector_with_books.add_book_in_favorites('Шрек и Фиона') + assert len(collector_with_books.get_list_of_favorites_books()) == 1 + + def test_add_book_in_favorites_add_book_already_in_favorites(self, collector_with_books): + collector_with_books.add_book_in_favorites('Что делать, если ваш кот хочет вас убить') + collector_with_books.add_book_in_favorites('Шрек и осел') + collector_with_books.add_book_in_favorites('Шрек и осел') + assert len(collector_with_books.get_list_of_favorites_books()) == 2 + + def test_delete_book_from_favorites_delete_one_book(self, collector_with_books): + collector_with_books.add_book_in_favorites('Что делать, если ваш кот хочет вас убить') + collector_with_books.add_book_in_favorites('Шрек и осел') + collector_with_books.delete_book_from_favorites('Что делать, если ваш кот хочет вас убить') + assert 'Шрек и осел' in collector_with_books.favorites and len(collector_with_books.favorites) == 1 + + def test_get_list_of_favorites_books(self, collector_with_books): + book_in_favorites = ['Что делать, если ваш кот хочет вас убить', 'Шрек и осел'] + collector_with_books.add_book_in_favorites('Что делать, если ваш кот хочет вас убить') + collector_with_books.add_book_in_favorites('Шрек и осел') + assert book_in_favorites == collector_with_books.get_list_of_favorites_books() and len(collector_with_books.get_list_of_favorites_books()) == 2 From c82bf6fcdbe7b4948fd4c81a89d6efcf2b00162b Mon Sep 17 00:00:00 2001 From: Pavel Gorshkov Date: Wed, 6 May 2026 01:39:51 +0300 Subject: [PATCH 3/3] list of tests fixed --- README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/README.md b/README.md index 0707cbc..34d57c2 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,38 @@ # Список тестов: test_add_new_book_add_two_books - покрывает добавление новых книг + test_add_new_book_add_book_with_name_length_more_than_40_not_added - покрывает добавление книги, если название содержит менее 40 символов + test_add_new_book_add_book_with_name_length_less_than_41_added - покрывает отмену добавления книги, если название содержит более 40 символов + test_add_new_book_genre_empty - покрывает добавление пустого жанра при добавлении новой книги + test_init_books_genre_empty - покрывает в init создание пустого словаря books_genre + test_init_favorites_empty - покрывает в init создание пустого списка favorites + test_init_genre_filled - покрывает в init создание заполненного списка genre + test_init_genre_age_rating_filled - покрывает в init создание заполненного списка genre_age_rating + test_set_book_genre - покрывает установку жанра книги + test_set_book_genre_book_is_missing_genre_not_added - покрывает пропуск установки жанра на книгу отсутствующую в словаре + test_set_book_genre_genre_is_missing_genre_not_added - покрывает пропуск установки жанра не из доступного списка + test_get_book_genre - покрывает получение жанра книги по названию из словаря + test_get_books_with_specific_genre - покрывает получение списка книг по определенному жанру из словаря + test_get_books_for_children - покрывает получение списка книг доступных детям + test_add_book_in_favorites_add_two_books - покрывает добавление книг в избранное + test_add_book_in_favorites_add_book_not_in_dict - покрывает пропуск добавления книги в избранное, если она отсутствует в словаре + test_add_book_in_favorites_add_book_already_in_favorites - покрывает пропуск добавления книги в избранное, если она уже туда добавлена + test_delete_book_from_favorites_delete_one_book - покрывает удаление книги из избранного + test_get_list_of_favorites_books - покрывает получение списка книг из избранного