diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..89de410 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +__pycache__/ +*.py[cod] +.pytest_cache/ +venv/ +.venv/ \ No newline at end of file diff --git a/README.md b/README.md index 1cc701d..b7de704 100644 --- a/README.md +++ b/README.md @@ -1 +1,12 @@ -# qa_python \ No newline at end of file +## Описание тестов + +- `test_add_new_book_add_one_book` — проверка успешного добавления одной книги. +- `test_add_new_book_invalid_name_length_not_added` — проверка, что книги с некорректной длиной названия (0 или 41+ символов) не добавляются. +- `test_set_book_genre_existing_genre` — проверка установки жанра из списка разрешённых. +- `test_set_book_genre_not_in_list_not_set` — проверка, что жанр не устанавливается, если его нет в списке `genre`. +- `test_get_books_with_specific_genre_is_correct` — проверка фильтрации книг по выбранному жанру. +- `test_get_books_genre_returns_dict` — проверка корректного возврата всего словаря книг. +- `test_get_books_for_children_excludes_age_rating_genres` — проверка, что книги с жанрами из `genre_age_rating` не попадают в детский список. +- `test_add_book_in_favorites_added_successfully` — проверка успешного добавления книги в список избранного. +- `test_add_book_in_favorites_book_not_in_collector_not_added` — проверка запрета на добавление в избранное книг, отсутствующих в коллекции. +- `test_delete_book_from_favorites_removed_successfully` — проверка удаления книги из списка избранного. 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/tests.py b/tests.py index 383385e..55abb94 100644 --- a/tests.py +++ b/tests.py @@ -1,24 +1,67 @@ +import pytest from main import BooksCollector -# класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector -# обязательно указывать префикс Test class TestBooksCollector: - - # пример теста: - # обязательно указывать префикс test_ - # дальше идет название метода, который тестируем add_new_book_ - # затем, что тестируем add_two_books - добавление двух книг - def test_add_new_book_add_two_books(self): - # создаем экземпляр (объект) класса BooksCollector + + def test_add_new_book_add_one_book(self): collector = BooksCollector() - - # добавляем две книги - collector.add_new_book('Гордость и предубеждение и зомби') - collector.add_new_book('Что делать, если ваш кот хочет вас убить') - - # проверяем, что добавилось именно две - # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 - - # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file + collector.add_new_book('Гордость и предубеждение') + assert 'Гордость и предубеждение' in collector.get_books_genre() + + @pytest.mark.parametrize('name', ['', 'Название книги, которое длиннее сорока одного символа']) + def test_add_new_book_invalid_name_length_not_added(self, name): + collector = BooksCollector() + collector.add_new_book(name) + assert name not in collector.get_books_genre() + + def test_set_book_genre_existing_genre(self): + collector = BooksCollector() + collector.add_new_book('Дюна') + collector.set_book_genre('Дюна', 'Фантастика') + assert collector.get_book_genre('Дюна') == 'Фантастика' + + def test_set_book_genre_not_in_list_not_set(self): + collector = BooksCollector() + collector.add_new_book('Дюна') + collector.set_book_genre('Дюна', 'Киберпанк') + assert collector.get_book_genre('Дюна') == '' + + def test_get_books_with_specific_genre_is_correct(self): + collector = BooksCollector() + collector.add_new_book('Дракула') + collector.set_book_genre('Дракула', 'Ужасы') + assert 'Дракула' in collector.get_books_with_specific_genre('Ужасы') + + def test_get_books_genre_returns_dict(self): + collector = BooksCollector() + collector.add_new_book('Оно') + assert isinstance(collector.get_books_genre(), dict) + assert 'Оно' in collector.get_books_genre() + + def test_get_books_for_children_excludes_age_rating_genres(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 and 'Сияние' not in children_books + + def test_add_book_in_favorites_added_successfully(self): + collector = BooksCollector() + collector.add_new_book('Ведьмак') + collector.add_book_in_favorites('Ведьмак') + assert 'Ведьмак' in collector.get_list_of_favorites_books() + + def test_add_book_in_favorites_book_not_in_collector_not_added(self): + collector = BooksCollector() + collector.add_book_in_favorites('Неизвестная книга') + assert len(collector.get_list_of_favorites_books()) == 0 + + def test_delete_book_from_favorites_removed_successfully(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()