From dec380339282ed5ab21d27173b7ddd440bcd93c8 Mon Sep 17 00:00:00 2001 From: Mikhail Erofeev Date: Tue, 31 Mar 2026 21:54:29 +0300 Subject: [PATCH 1/3] add 9 tests for BooksCollector --- README.md | 50 ++++++++++++++++++++++++++++++- tests.py | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 135 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1cc701d..b03484c 100644 --- a/README.md +++ b/README.md @@ -1 +1,49 @@ -# qa_python \ No newline at end of file +# qa_python + +#test_add_new_book_add_two_books +#проверяет (add_new_book) +#проверяет функцию добавления книги в коллекцию + + #@pytest.fixture + #создает тестовые данные - список из 3-х книг + +#test_set_book_genre_assign +#проверяет (set_book_genre) +#проверяет присвоение книге жанра из списка self.genre + + +#test_get_book_genre_existing_book +#проверяет (get_book_genre) +#проверяет что жанр выбранной книги выводится в соответствии с присвоенным жанром этой книги + + + #@pytest.mark.parametrize + #задает параметры нескольких сценариев для проведения теста test_get_books_with_specific_genre + +#test_get_books_with_specific_genre_show_books_selected_genre +#проверяет (get_books_with_specific_genre) +#проверяет фильтрацию книг по определенным жанрам + +#test_get_books_genre_returns_dictionary_sum_3 +#проверяет (get_books_genre) +#проверяет что get_books_genre возвращает словарь с правильным количеством значений, в соответствии с фиксатурой оно = три + +#test_get_books_for_children_filters_out_age_rating_genres +#проверяет (get_books_for_children) +#проверяет фильтрацию книг по жанру для отсеивания книг с возрастным ограничением + +#test_add_book_in_favorites_added_to_favorites_list_sum_1 +#проверяет (add_book_in_favorites) +#проверяет добавление книги в список self.favorites + +#test_add_book_in_favorites_book_duplicate_no_append_copy_sum_1 +#проверяет (add_book_in_favorites) +#проверяет что в список не добавляется книга второй раз (дубликат) + +#test_delete_book_from_favorites_book_removed_from_list +#проверяет (delete_book_from_favorites) +#проверяет удаление книги из списка self.favorites + +#test_get_list_of_favorites_books_returns_list_with_two_books +#проверяет (get_list_of_favorites_books) +#проверяет корректность данных при запросе хранящихся в списке self.favorites diff --git a/tests.py b/tests.py index 383385e..f93520f 100644 --- a/tests.py +++ b/tests.py @@ -1,4 +1,5 @@ from main import BooksCollector +import pytest # класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector # обязательно указывать префикс Test @@ -20,5 +21,88 @@ def test_add_new_book_add_two_books(self): # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 assert len(collector.get_books_rating()) == 2 - # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file + + @pytest.fixture + def collector_with_books(self): + collector = BooksCollector() + books = ['Книга 1', 'Книга 2', 'Книга 3'] + for book in books: + collector.add_new_book(book) + return collector + + + def test_set_book_genre_assign(self, collector_with_books): + collector = collector_with_books + collector.set_book_genre('Книга 1', 'Фантастика') + assert collector.get_book_genre('Книга 1') == 'Фантастика' + + + def test_get_book_genre_existing_book(self, collector_with_books): + collector = collector_with_books + collector.set_book_genre('Книга 2', 'Комедии') + assert collector.get_book_genre('Книга 2') == 'Комедии' + + + @pytest.mark.parametrize("genre, expected_books", [ + ('Фантастика', ['Книга 1']), + ('Ужасы', []), + ('Комедии', ['Книга 3']) + ]) + + def test_get_books_with_specific_genre_show_books_selected_genre(self, genre, expected_books, collector_with_books): + collector = collector_with_books + collector.set_book_genre('Книга 1', 'Фантастика') + collector.set_book_genre('Книга 3', 'Комедии') + result = collector.get_books_with_specific_genre(genre) + assert result == expected_books + + + def test_get_books_genre_returns_dictionary_sum_3(self, collector_with_books): + collector = collector_with_books + result = collector.get_books_genre() + assert isinstance(result, dict) + assert len(result) == 3 + + + def test_get_books_for_children_filters_out_age_rating_genres(self, collector_with_books): + collector = collector_with_books + collector.set_book_genre('Книга 1', 'Мультфильмы') + collector.set_book_genre('Книга 2', 'Комедии') + collector.set_book_genre('Книга 3', 'Детективы') + result = collector.get_books_for_children() + assert 'Книга 1' in result + assert 'Книга 2' in result + assert 'Книга 3' not in result + + + def test_add_book_in_favorites_added_to_favorites_list_sum_1(self, collector_with_books): + collector = collector_with_books + collector.add_book_in_favorites('Книга 1') + favorites = collector.get_list_of_favorites_books() + assert 'Книга 1' in favorites + assert len(favorites) == 1 + + + def test_add_book_in_favorites_book_duplicate_no_append_copy_sum_1(self, collector_with_books): + collector = collector_with_books + collector.add_book_in_favorites('Книга 2') + collector.add_book_in_favorites('Книга 2') + favorites = collector.get_list_of_favorites_books() + assert favorites.count('Книга 2') == 1 + + + def test_delete_book_from_favorites_book_removed_from_list(self, collector_with_books): + collector = collector_with_books + collector.add_book_in_favorites('Книга 3') + collector.delete_book_from_favorites('Книга 3') + favorites = collector.get_list_of_favorites_books() + assert 'Книга 3' not in favorites + + + def test_get_list_of_favorites_books_returns_list_with_two_books(self, collector_with_books): + collector = collector_with_books + collector.add_book_in_favorites('Книга 1') + collector.add_book_in_favorites('Книга 2') + favorites = collector.get_list_of_favorites_books() + assert isinstance(favorites, list) + assert set(favorites) == {'Книга 1', 'Книга 2'} From 7a39d190c3f7b800cb5459e6151a9316ff92be1f Mon Sep 17 00:00:00 2001 From: Mikhail Erofeev Date: Fri, 3 Apr 2026 16:45:38 +0300 Subject: [PATCH 2/3] fix: fixture and 9 tests --- README.md | 5 ++- tests.py | 115 ++++++++++++++++++++++++++++++++---------------------- 2 files changed, 72 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index b03484c..7a6cf75 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,12 @@ # qa_python + #@pytest.fixture + #создает тестовые данные - список из 3-х книг + #test_add_new_book_add_two_books #проверяет (add_new_book) #проверяет функцию добавления книги в коллекцию - #@pytest.fixture - #создает тестовые данные - список из 3-х книг #test_set_book_genre_assign #проверяет (set_book_genre) diff --git a/tests.py b/tests.py index f93520f..9486984 100644 --- a/tests.py +++ b/tests.py @@ -1,46 +1,40 @@ 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('Что делать, если ваш кот хочет вас убить') - - # проверяем, что добавилось именно две - # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 +class TestBooksCollector: @pytest.fixture def collector_with_books(self): - collector = BooksCollector() - books = ['Книга 1', 'Книга 2', 'Книга 3'] - for book in books: - collector.add_new_book(book) - return collector + return BooksCollector() + + # исправленный пример теста: + + def test_add_new_book_add_two_books(self, collector_with_books): + + collector = collector_with_books + + collector.add_new_book('Гордость и предубеждение и зомби') + collector.add_new_book('Что делать, если ваш кот хочет вас убить') + assert len(collector.get_books_genre()) == 2 def test_set_book_genre_assign(self, collector_with_books): collector = collector_with_books - collector.set_book_genre('Книга 1', 'Фантастика') - assert collector.get_book_genre('Книга 1') == 'Фантастика' + + name = 'Книга 1' + collector.add_new_book(name) + collector.set_book_genre(name, 'Фантастика') + assert collector.get_book_genre(name) == 'Фантастика' def test_get_book_genre_existing_book(self, collector_with_books): collector = collector_with_books - collector.set_book_genre('Книга 2', 'Комедии') - assert collector.get_book_genre('Книга 2') == 'Комедии' + + name = 'Книга 2' + collector.add_new_book(name) + collector.set_book_genre(name, 'Комедии') + assert collector.get_books_genre()[name] == 'Комедии' @pytest.mark.parametrize("genre, expected_books", [ @@ -51,58 +45,87 @@ def test_get_book_genre_existing_book(self, collector_with_books): def test_get_books_with_specific_genre_show_books_selected_genre(self, genre, expected_books, collector_with_books): collector = collector_with_books + + collector.add_new_book('Книга 1') + collector.add_new_book('Книга 3') collector.set_book_genre('Книга 1', 'Фантастика') collector.set_book_genre('Книга 3', 'Комедии') + result = collector.get_books_with_specific_genre(genre) assert result == expected_books def test_get_books_genre_returns_dictionary_sum_3(self, collector_with_books): collector = collector_with_books + + books = ['Книга 1', 'Книга 2', 'Книга 3'] + for book in books: + collector.add_new_book(book) + result = collector.get_books_genre() assert isinstance(result, dict) assert len(result) == 3 + def test_get_books_for_children_filters_out_age_rating_genres(self, collector_with_books): collector = collector_with_books - collector.set_book_genre('Книга 1', 'Мультфильмы') - collector.set_book_genre('Книга 2', 'Комедии') - collector.set_book_genre('Книга 3', 'Детективы') + + books_with_genres = { + 'Книга 1': 'Мультфильмы', + 'Книга 2': 'Комедии', + 'Книга 3': 'Детективы' + } + for name, genre in books_with_genres.items(): + collector.add_new_book(name) + collector.set_book_genre(name, genre) + result = collector.get_books_for_children() - assert 'Книга 1' in result - assert 'Книга 2' in result - assert 'Книга 3' not in result + assert result == ['Книга 1', 'Книга 2'] + def test_add_book_in_favorites_added_to_favorites_list_sum_1(self, collector_with_books): collector = collector_with_books - collector.add_book_in_favorites('Книга 1') + + book_name = 'Книга 1' + collector.add_new_book(book_name) + collector.add_book_in_favorites(book_name) favorites = collector.get_list_of_favorites_books() - assert 'Книга 1' in favorites - assert len(favorites) == 1 + assert favorites == [book_name] def test_add_book_in_favorites_book_duplicate_no_append_copy_sum_1(self, collector_with_books): collector = collector_with_books - collector.add_book_in_favorites('Книга 2') - collector.add_book_in_favorites('Книга 2') + + name = 'Книга 2' + collector.add_new_book(name) + collector.add_book_in_favorites(name) + collector.add_book_in_favorites(name) + favorites = collector.get_list_of_favorites_books() - assert favorites.count('Книга 2') == 1 + assert favorites == [name] def test_delete_book_from_favorites_book_removed_from_list(self, collector_with_books): collector = collector_with_books - collector.add_book_in_favorites('Книга 3') - collector.delete_book_from_favorites('Книга 3') + + name = 'Книга 3' + collector.add_new_book(name) + collector.add_book_in_favorites(name) + collector.delete_book_from_favorites(name) favorites = collector.get_list_of_favorites_books() - assert 'Книга 3' not in favorites + assert favorites == [] def test_get_list_of_favorites_books_returns_list_with_two_books(self, collector_with_books): collector = collector_with_books - collector.add_book_in_favorites('Книга 1') - collector.add_book_in_favorites('Книга 2') + + books = ['Книга 1', 'Книга 2'] + for book in books: + collector.add_new_book(book) + collector.add_book_in_favorites(book) + favorites = collector.get_list_of_favorites_books() assert isinstance(favorites, list) - assert set(favorites) == {'Книга 1', 'Книга 2'} + assert favorites == collector.favorites From b5443bc3bf95fdedb46974fc99341132e845633d Mon Sep 17 00:00:00 2001 From: Mikhail Erofeev Date: Sun, 5 Apr 2026 12:23:41 +0300 Subject: [PATCH 3/3] fix: two tests and description README --- README.md | 4 ++-- tests.py | 11 +++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 7a6cf75..55be93a 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # qa_python #@pytest.fixture - #создает тестовые данные - список из 3-х книг + #создает экземпляр класса BooksCollector для использования в тестах #test_add_new_book_add_two_books #проверяет (add_new_book) @@ -27,7 +27,7 @@ #test_get_books_genre_returns_dictionary_sum_3 #проверяет (get_books_genre) -#проверяет что get_books_genre возвращает словарь с правильным количеством значений, в соответствии с фиксатурой оно = три +#проверяет что get_books_genre возвращает словарь с правильным заданным количеством значений #test_get_books_for_children_filters_out_age_rating_genres #проверяет (get_books_for_children) diff --git a/tests.py b/tests.py index 9486984..9d1f98b 100644 --- a/tests.py +++ b/tests.py @@ -32,9 +32,10 @@ def test_get_book_genre_existing_book(self, collector_with_books): collector = collector_with_books name = 'Книга 2' - collector.add_new_book(name) - collector.set_book_genre(name, 'Комедии') - assert collector.get_books_genre()[name] == 'Комедии' + + collector.books_genre = {name: 'Комедии'} + result = collector.get_book_genre(name) + assert result == 'Комедии' @pytest.mark.parametrize("genre, expected_books", [ @@ -58,9 +59,7 @@ def test_get_books_with_specific_genre_show_books_selected_genre(self, genre, ex def test_get_books_genre_returns_dictionary_sum_3(self, collector_with_books): collector = collector_with_books - books = ['Книга 1', 'Книга 2', 'Книга 3'] - for book in books: - collector.add_new_book(book) + collector.books_genre = {'Книга 1': '', 'Книга 2': '', 'Книга 3': ''} result = collector.get_books_genre() assert isinstance(result, dict)