diff --git a/README.md b/README.md index 1cc701d..de7a963 100644 --- a/README.md +++ b/README.md @@ -1 +1,54 @@ -# qa_python \ No newline at end of file +# qa_python +test_add_two_books_count_is_two +Проверяет, что после добавления двух книг их количество становится ровно два + +test_add_book_with_empty_name_not_added +Проверяет, что книга с пустым названием или слишком длинным названием не добавляется + +test_add_duplicate_book_not_duplicate_count +Проверяет, что нельзя добавить одну и ту же книгу дважды + +test_set_book_genre_first_set +Проверяет, что можно успешно установить жанр для книги в первый раз + +test_set_book_genre_change_to_another +Проверяет, что жанр книги можно изменить на другой + +test_set_genre_for_nonexistent_book +Проверяет, что жанр не устанавливается для книги, которой нет в списке + +test_get_book_genre_empty_initially +Проверяет, что у новой книги жанр по умолчанию пустой + +test_get_book_genre_after_setting +Проверяет, что метод возвращает правильный жанр после установки + +test_get_book_genre_for_nonexistent_book +Проверяет, что для несуществующей книги жанр не найден (возвращается None) + +test_get_books_with_specific_genre_contains_only_right_books +Проверяет, что возвращаются только книги с указанным жанром + +test_get_books_with_specific_genre_no_books +Проверяет, что если книг с указанным жанром нет, возвращается пустой список + +test_get_all_books_genres +Проверяет, что возвращается весь словарь книг с их жанрами + +test_get_books_for_children_includes_and_excludes_correctly +Проверяет, что книги с детским жанром включаются, а с возрастным ограничением исключаются + +test_add_book_in_favorites_only_once +Проверяет, что книга добавляется в избранное только один раз + +test_delete_book_from_favorites_removes_book +Проверяет, что книга успешно удаляется из избранного + +test_delete_book_from_favorites_with_nonexistent_book +Проверяет, что попытка удалить отсутствующую книгу из избранного не вызывает ошибок + +test_get_list_of_favorites_initially_empty +Проверяет, что список избранных книг пуст при старте + +test_get_list_of_favorites_after_adding +Проверяет, что добавленная книга появляется в списке избранных \ No newline at end of file diff --git a/__pycache__/main.cpython-312.pyc b/__pycache__/main.cpython-312.pyc new file mode 100644 index 0000000..018c83c Binary files /dev/null and b/__pycache__/main.cpython-312.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_books_collector.cpython-312-pytest-8.4.2.pyc b/__pycache__/test_books_collector.cpython-312-pytest-8.4.2.pyc new file mode 100644 index 0000000..c289532 Binary files /dev/null and b/__pycache__/test_books_collector.cpython-312-pytest-8.4.2.pyc differ diff --git a/__pycache__/tests.cpython-312-pytest-8.4.2.pyc b/__pycache__/tests.cpython-312-pytest-8.4.2.pyc new file mode 100644 index 0000000..5a1c994 Binary files /dev/null and b/__pycache__/tests.cpython-312-pytest-8.4.2.pyc differ diff --git a/tests.py b/tests.py index 383385e..2f1737f 100644 --- a/tests.py +++ b/tests.py @@ -1,24 +1,108 @@ +import pytest from main import BooksCollector -# класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector -# обязательно указывать префикс Test + +@pytest.fixture +def collector(): + return BooksCollector() + + class TestBooksCollector: - # пример теста: - # обязательно указывать префикс test_ - # дальше идет название метода, который тестируем add_new_book_ - # затем, что тестируем add_two_books - добавление двух книг - def test_add_new_book_add_two_books(self): - # создаем экземпляр (объект) класса BooksCollector - collector = BooksCollector() + def test_add_two_books_count_is_two(self, collector): + collector.add_new_book('Гарри Поттер и философский камень') + collector.add_new_book('1984') + assert len(collector.get_books_genre()) == 2 + + @pytest.mark.parametrize("book_name, expected_count", [ + ("", 0), + ("a" * 41, 0), + ]) + def test_add_book_with_empty_name_not_added(self, collector, book_name, expected_count): + collector.add_new_book(book_name) + assert len(collector.get_books_genre()) == expected_count + + @pytest.mark.parametrize("book_name", [ + "Властелин колец", + "Гарри Поттер", + "1984", + ]) + def test_add_duplicate_book_not_duplicate_count(self, collector, book_name): + collector.add_new_book(book_name) + collector.add_new_book(book_name) + assert len(collector.get_books_genre()) == 1 + + def test_set_book_genre_first_set(self, collector): + collector.add_new_book('Дюна') + collector.set_book_genre('Дюна', 'Детективы') + assert collector.books_genre['Дюна'] == 'Детективы' + + def test_set_book_genre_change_to_another(self, collector): + collector.add_new_book('Дюна') + collector.set_book_genre('Дюна', 'Детективы') + collector.set_book_genre('Дюна', 'Фантастика') + assert collector.books_genre['Дюна'] == 'Фантастика' + + def test_set_genre_for_nonexistent_book(self, collector): + collector.set_book_genre('1984', 'Фантастика') + assert '1984' not in collector.books_genre or collector.books_genre.get('1984') is None + + def test_get_book_genre_empty_initially(self, collector): + collector.add_new_book('Пикник на обочине') + assert collector.get_book_genre('Пикник на обочине') == '' + + def test_get_book_genre_after_setting(self, collector): + collector.books_genre['Пикник на обочине'] = 'Комедии' + assert collector.get_book_genre('Пикник на обочине') == 'Комедии' + + def test_get_book_genre_for_nonexistent_book(self, collector): + assert collector.get_book_genre('Скотный двор') is None + + def test_get_books_with_specific_genre_contains_only_right_books(self, collector): + collector.add_new_book('Дракула') + collector.add_new_book('Горе от ума') + collector.set_book_genre('Дракула', 'Ужасы') + collector.set_book_genre('Горе от ума', 'Комедии') + books = collector.get_books_with_specific_genre('Ужасы') + assert 'Дракула' in books and 'Горе от ума' not in books + + def test_get_books_with_specific_genre_no_books(self, collector): + assert collector.get_books_with_specific_genre('Драма') == [] + + def test_get_all_books_genres(self, collector): + collector.add_new_book('Ведьмак') + collector.set_book_genre('Ведьмак', 'Мультфильмы') + collector.add_new_book('451 градус по Фаренгейту') + assert collector.get_books_genre() == {'Ведьмак': 'Мультфильмы', '451 градус по Фаренгейту': ''} + + def test_get_books_for_children_includes_and_excludes_correctly(self, collector): + collector.add_new_book('Приключения Паддингтона') + collector.set_book_genre('Приключения Паддингтона', 'Мультфильмы') + collector.add_new_book('Оно') + collector.set_book_genre('Оно', 'Ужасы') + child_books = collector.get_books_for_children() + assert 'Приключения Паддингтона' in child_books and 'Оно' not in child_books + + def test_add_book_in_favorites_only_once(self, collector): + collector.add_new_book('Шерлок Холмс') + collector.add_book_in_favorites('Шерлок Холмс') + collector.add_book_in_favorites('Шерлок Холмс') + assert collector.get_list_of_favorites_books().count('Шерлок Холмс') == 1 + + def test_delete_book_from_favorites_removes_book(self, collector): + collector.add_new_book('Мастера и Маргарита') + collector.add_book_in_favorites('Мастера и Маргарита') + collector.delete_book_from_favorites('Мастера и Маргарита') + assert 'Мастера и Маргарита' not in collector.get_list_of_favorites_books() - # добавляем две книги - collector.add_new_book('Гордость и предубеждение и зомби') - collector.add_new_book('Что делать, если ваш кот хочет вас убить') + def test_delete_book_from_favorites_with_nonexistent_book(self, collector): + collector.delete_book_from_favorites('Нет такой книги') + assert collector.get_list_of_favorites_books() == [] - # проверяем, что добавилось именно две - # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 + def test_get_list_of_favorites_initially_empty(self, collector): + assert collector.get_list_of_favorites_books() == [] - # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file + def test_get_list_of_favorites_after_adding(self, collector): + collector.add_new_book('Хоббит') + collector.add_book_in_favorites('Хоббит') + assert collector.get_list_of_favorites_books() == ['Хоббит'] \ No newline at end of file