diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7a60b85 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +__pycache__/ +*.pyc diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/__pycache__/__init__.cpython-311.pyc b/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000..8d621d6 Binary files /dev/null and b/__pycache__/__init__.cpython-311.pyc differ diff --git a/__pycache__/main.cpython-311.pyc b/__pycache__/main.cpython-311.pyc new file mode 100644 index 0000000..3df6bbf Binary files /dev/null and b/__pycache__/main.cpython-311.pyc differ diff --git a/__pycache__/main.cpython-38.pyc b/__pycache__/main.cpython-38.pyc deleted file mode 100644 index 5786eeb..0000000 Binary files a/__pycache__/main.cpython-38.pyc and /dev/null differ diff --git a/__pycache__/test.cpython-38-pytest-7.1.2.pyc b/__pycache__/test.cpython-38-pytest-7.1.2.pyc deleted file mode 100644 index b2898a8..0000000 Binary files a/__pycache__/test.cpython-38-pytest-7.1.2.pyc and /dev/null differ diff --git a/__pycache__/test_main.cpython-311-pytest-9.0.2.pyc b/__pycache__/test_main.cpython-311-pytest-9.0.2.pyc new file mode 100644 index 0000000..74025eb Binary files /dev/null and b/__pycache__/test_main.cpython-311-pytest-9.0.2.pyc differ diff --git a/__pycache__/tests.cpython-311-pytest-9.0.2.pyc b/__pycache__/tests.cpython-311-pytest-9.0.2.pyc new file mode 100644 index 0000000..a9fbf4b Binary files /dev/null and b/__pycache__/tests.cpython-311-pytest-9.0.2.pyc differ diff --git a/test_books_collector.py b/test_books_collector.py new file mode 100644 index 0000000..a6d83c0 --- /dev/null +++ b/test_books_collector.py @@ -0,0 +1,85 @@ +import pytest +from qa_python.main import BooksCollector + + +@pytest.fixture +def books_collector(): + return BooksCollector() + + +# add_new_book — книга добавляется в коллекцию +def test_add_new_book_adds_book_to_collection(books_collector): + books_collector.add_new_book('Властелин колец') + assert 'Властелин колец' in books_collector.get_books_genre() + + +# add_new_book — новая книга добавляется без жанра +def test_add_new_book_has_empty_genre_by_default(books_collector): + books_collector.add_new_book('Дюна') + assert books_collector.get_book_genre('Дюна') == '' + + +# add_new_book — книга с названием > 40 символов не добавляется +def test_add_new_book_with_long_name_is_not_added(books_collector): + long_name = 'А' * 41 + books_collector.add_new_book(long_name) + assert long_name not in books_collector.get_books_genre() + + +# set_book_genre + get_book_genre — жанр устанавливается корректно +def test_set_and_get_book_genre_returns_correct_genre(books_collector): + books_collector.add_new_book('Матрица') + books_collector.set_book_genre('Матрица', 'Фантастика') + assert books_collector.get_book_genre('Матрица') == 'Фантастика' + + +# set_book_genre — жанр не из списка не устанавливается +def test_set_book_genre_not_from_allowed_list_is_not_set(books_collector): + books_collector.add_new_book('Оно') + books_collector.set_book_genre('Оно', 'Роман') + assert books_collector.get_book_genre('Оно') == '' + + +# get_books_with_specific_genre — возвращаются книги нужного жанра +def test_get_books_with_specific_genre_returns_correct_books(books_collector): + books_collector.add_new_book('Чужой') + books_collector.set_book_genre('Чужой', 'Ужасы') + + books_collector.add_new_book('Назад в будущее') + books_collector.set_book_genre('Назад в будущее', 'Фантастика') + + assert books_collector.get_books_with_specific_genre('Ужасы') == ['Чужой'] + + +# get_books_for_children — книги с возрастным рейтингом исключаются +def test_get_books_for_children_excludes_age_restricted_genres(books_collector): + books_collector.add_new_book('Оно') + books_collector.set_book_genre('Оно', 'Ужасы') + + books_collector.add_new_book('Король Лев') + books_collector.set_book_genre('Король Лев', 'Мультфильмы') + + assert books_collector.get_books_for_children() == ['Король Лев'] + + +# add_book_in_favorites — книга добавляется в избранное +def test_add_book_in_favorites_adds_book(books_collector): + books_collector.add_new_book('Интерстеллар') + books_collector.add_book_in_favorites('Интерстеллар') + assert 'Интерстеллар' in books_collector.get_list_of_favorites_books() + + +# add_book_in_favorites — книга не добавляется повторно +def test_add_book_in_favorites_does_not_duplicate(books_collector): + books_collector.add_new_book('Гарри Поттер') + books_collector.add_book_in_favorites('Гарри Поттер') + books_collector.add_book_in_favorites('Гарри Поттер') + assert books_collector.get_list_of_favorites_books().count('Гарри Поттер') == 1 + + +# delete_book_from_favorites — книга удаляется из избранного +def test_delete_book_from_favorites_removes_book(books_collector): + books_collector.add_new_book('Аватар') + books_collector.add_book_in_favorites('Аватар') + books_collector.delete_book_from_favorites('Аватар') + assert 'Аватар' not in books_collector.get_list_of_favorites_books() diff --git a/tests.py b/tests.py index 5484ccc..ff698bb 100644 --- a/tests.py +++ b/tests.py @@ -1,89 +1,85 @@ import pytest -from main import BooksCollector - - -class TestBooksCollector: - - def test_initial_state(self): - collector = BooksCollector() - assert collector.get_books_genre() == {} and collector.get_list_of_favorites_books() == [] - - def test_add_new_book_correct_add_book_successful_add(self): - collector = BooksCollector() - collector.add_new_book('Азбука') - assert collector.get_book_genre('Азбука') == '' - - @pytest.mark.parametrize("name, expected_count", [ - ('Азбука', 1), - ('', 0), - ('Азбука' * 10, 0) - ]) - def test_add_new_book_incorrect_add_book_unsuccessful_add(self, name, expected_count): - collector = BooksCollector() - collector.add_new_book(name) - assert len(collector.get_books_genre()) == expected_count - - def test_set_book_genre_correct_genre_success(self): - collector = BooksCollector() - collector.add_new_book('Азбука') - collector.set_book_genre('Азбука', 'Ужасы') - assert collector.books_genre['Азбука'] == 'Ужасы' - - def test_set_book_genre_incorrect_genre_unsuccess(self): - collector = BooksCollector() - collector.add_new_book('Азбука') - collector.set_book_genre('Азбука', 'FFFFFF') - assert collector.books_genre['Азбука'] == '' - - def test_get_book_genre(self): - collector = BooksCollector() - collector.add_new_book('Азбука') - collector.set_book_genre('Азбука', 'Ужасы') - assert collector.get_book_genre('Азбука') == 'Ужасы' - - def test_get_books_with_specific_genre(self): - collector = BooksCollector() - books = ['Азбука', 'Алгебра', 'Маленький принц'] - for book in books: - collector.add_new_book(book) - collector.set_book_genre(book, 'Ужасы') - - collector.add_new_book('Ну погоди') - collector.set_book_genre('Ну погоди', 'Мультфильмы') - - assert collector.get_books_with_specific_genre('Ужасы') == books - - def test_get_books_genre(self): - collector = BooksCollector() - collector.add_new_book('Азбука') - assert collector.get_books_genre() == {'Азбука': ''} - - def test_get_books_for_children(self): - collector = BooksCollector() - collector.add_new_book('Детская') - collector.add_new_book('Взрослая') - collector.set_book_genre('Детская', 'Фантастика') - collector.set_book_genre('Взрослая', 'Ужасы') - - assert collector.get_books_for_children() == ['Детская'] - - def test_add_book_in_favorites(self): - collector = BooksCollector() - collector.add_new_book('Азбука') - collector.add_book_in_favorites('Азбука') - assert collector.get_list_of_favorites_books() == ['Азбука'] - - def test_delete_book_from_favorites(self): - collector = BooksCollector() - collector.add_new_book('Азбука') - collector.add_book_in_favorites('Азбука') - collector.delete_book_from_favorites('Азбука') - assert collector.get_list_of_favorites_books() == [] - - def test_get_list_of_favorites_books(self): - collector = BooksCollector() - collector.add_new_book('Азбука') - collector.add_new_book('Алгебра') - collector.add_book_in_favorites('Азбука') - collector.add_book_in_favorites('Алгебра') - assert collector.get_list_of_favorites_books() == ['Азбука', 'Алгебра'] \ No newline at end of file +from .main import BooksCollector + + +@pytest.fixture +def books_collector(): + return BooksCollector() + + +# add_new_book — книга добавляется в коллекцию +def test_add_new_book_adds_book_to_collection(books_collector): + books_collector.add_new_book('Властелин колец') + assert 'Властелин колец' in books_collector.get_books_genre() + + +# add_new_book — новая книга добавляется без жанра +def test_add_new_book_has_empty_genre_by_default(books_collector): + books_collector.add_new_book('Дюна') + assert books_collector.get_book_genre('Дюна') == '' + + +# add_new_book — книга с названием > 40 символов не добавляется +def test_add_new_book_with_long_name_is_not_added(books_collector): + long_name = 'А' * 41 + books_collector.add_new_book(long_name) + assert long_name not in books_collector.get_books_genre() + + +# set_book_genre + get_book_genre — жанр устанавливается корректно +def test_set_and_get_book_genre_returns_correct_genre(books_collector): + books_collector.add_new_book('Матрица') + books_collector.set_book_genre('Матрица', 'Фантастика') + assert books_collector.get_book_genre('Матрица') == 'Фантастика' + + +# set_book_genre — жанр не из списка не устанавливается +def test_set_book_genre_not_from_allowed_list_is_not_set(books_collector): + books_collector.add_new_book('Оно') + books_collector.set_book_genre('Оно', 'Роман') + assert books_collector.get_book_genre('Оно') == '' + + +# get_books_with_specific_genre — возвращаются книги нужного жанра +def test_get_books_with_specific_genre_returns_correct_books(books_collector): + books_collector.add_new_book('Чужой') + books_collector.set_book_genre('Чужой', 'Ужасы') + + books_collector.add_new_book('Назад в будущее') + books_collector.set_book_genre('Назад в будущее', 'Фантастика') + + assert books_collector.get_books_with_specific_genre('Ужасы') == ['Чужой'] + + +# get_books_for_children — книги с возрастным рейтингом исключаются +def test_get_books_for_children_excludes_age_restricted_genres(books_collector): + books_collector.add_new_book('Оно') + books_collector.set_book_genre('Оно', 'Ужасы') + + books_collector.add_new_book('Король Лев') + books_collector.set_book_genre('Король Лев', 'Мультфильмы') + + assert books_collector.get_books_for_children() == ['Король Лев'] + + +# add_book_in_favorites — книга добавляется в избранное +def test_add_book_in_favorites_adds_book(books_collector): + books_collector.add_new_book('Интерстеллар') + books_collector.add_book_in_favorites('Интерстеллар') + assert 'Интерстеллар' in books_collector.get_list_of_favorites_books() + + +# add_book_in_favorites — книга не добавляется повторно +def test_add_book_in_favorites_does_not_duplicate(books_collector): + books_collector.add_new_book('Гарри Поттер') + books_collector.add_book_in_favorites('Гарри Поттер') + books_collector.add_book_in_favorites('Гарри Поттер') + assert books_collector.get_list_of_favorites_books().count('Гарри Поттер') == 1 + + +# delete_book_from_favorites — книга удаляется из избранного +def test_delete_book_from_favorites_removes_book(books_collector): + books_collector.add_new_book('Аватар') + books_collector.add_book_in_favorites('Аватар') + books_collector.delete_book_from_favorites('Аватар') + assert 'Аватар' not in books_collector.get_list_of_favorites_books()