diff --git a/.coverage b/.coverage new file mode 100644 index 0000000..c15ee3c Binary files /dev/null and b/.coverage differ diff --git a/__pycache__/conftest.cpython-313-pytest-8.4.1.pyc b/__pycache__/conftest.cpython-313-pytest-8.4.1.pyc new file mode 100644 index 0000000..a260507 Binary files /dev/null and b/__pycache__/conftest.cpython-313-pytest-8.4.1.pyc differ diff --git a/__pycache__/main.cpython-313.pyc b/__pycache__/main.cpython-313.pyc new file mode 100644 index 0000000..946a19c Binary files /dev/null and b/__pycache__/main.cpython-313.pyc differ diff --git a/__pycache__/tests.cpython-313-pytest-8.4.1.pyc b/__pycache__/tests.cpython-313-pytest-8.4.1.pyc new file mode 100644 index 0000000..5dc658b Binary files /dev/null and b/__pycache__/tests.cpython-313-pytest-8.4.1.pyc differ diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..3830882 --- /dev/null +++ b/conftest.py @@ -0,0 +1,5 @@ +from main import BooksCollector +import pytest +@pytest.fixture +def collector(): + return BooksCollector() diff --git a/read.md b/read.md new file mode 100644 index 0000000..cff91fc --- /dev/null +++ b/read.md @@ -0,0 +1,12 @@ +1 тест(базовый) add_new_book_add_two_books проверяет добавление 2 новых книг в словарь без указания жанра +2 тест test_add_new_book__len_more_than_40_failed проверяет, что в словарь не добавляются книги, название которых более 40 символов +3 тест test_add_book_in_favorites_sucсess проверяет успешное добавление книги в избранное +4 тест test_add_book_in_favorites_two_equal_books_failed проверяет, что повторно одна и та же книга в избранное не добавляется +5 тест test_delete_book_from_favorites_success проверяет удаление книги из избранного +6 тест test_set_book_genre_in_list_success проверяет корректность присвоения методом жанра книги и возврат установленного жанра +7 тест test_set_book_genre_assign_genre_not_inlist_failed проверяет, что метод не присваевает книге невалидный жанр +8 тест test_get_book_genre_by_name_success проверяет вывод жанра книги по ее названию +9 тест test_get_books_with_specific_genre_success проверяет список книг с определённым жанром +10 тест test_get_books_for_children_success проверяет книги, которые подходят детям(у которых не установлен специальный рейтинг +11 тест test_get_list_of_favorites_books_success проверяет, что после добавления книги в избранное, книга добавляется в избранное +12 тест test_get_book_genre_success проверяет, что метод выводит ожидаемый результат из добавленных книг и их жанров diff --git a/tests.py b/tests.py index 383385e..72ff81b 100644 --- a/tests.py +++ b/tests.py @@ -1,24 +1,94 @@ from main import BooksCollector - -# класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector -# обязательно указывать префикс Test +import pytest 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): collector.add_new_book('Гордость и предубеждение и зомби') collector.add_new_book('Что делать, если ваш кот хочет вас убить') + assert len(collector.get_books_genre()) == 2 + + def test_add_new_book_len_more_than_40_failed(self, collector): + collector.add_new_book('Сказка о царе Салтане, о сыне его славном и могучем богатыре князе Гвидоне Салтановиче и о прекрасной Царевне Лебеди') + assert len(collector.get_books_genre()) == 0 + + def test_add_book_in_favorites_sucсess(self, collector): + collector.add_new_book('Преступление и наказание') + collector.add_book_in_favorites('Преступление и наказание') + assert len(collector.get_list_of_favorites_books()) == 1 + + def test_add_book_in_favorites_two_equal_books_failed(self, collector): + collector.add_new_book('Виола Тараканова') + collector.add_book_in_favorites('Виола Тараканова') + collector.add_book_in_favorites('Виола Тараканова') + assert len(collector.get_list_of_favorites_books()) == 1 + + def test_delete_book_from_favorites_success(self, collector): + collector.add_new_book('Сказка о золотой рыбке') + collector.add_book_in_favorites('Сказка о золотой рыбке') + collector.delete_book_from_favorites('Сказка о золотой рыбке') + assert len(collector.get_list_of_favorites_books()) == 0 + + @pytest.mark.parametrize('genre', ['Фантастика', 'Ужасы', 'Детективы', 'Мультфильмы', 'Комедии']) + def test_set_book_genre_in_list_success(self, genre, collector): + collector.add_new_book('Бегущий по лезвию') + collector.set_book_genre('Бегущий по лезвию', genre) + assert collector.get_book_genre('Бегущий по лезвию') == genre + + @pytest.mark.parametrize('genre_not_inlist', ['Триллер', 'Мелодрама']) + def test_set_book_genre_not_inlist_failed(self, genre_not_inlist, collector): + collector.add_new_book('Поющие в терновнике') + collector.set_book_genre('Поющие в терновнике', genre_not_inlist) + assert collector.get_book_genre('Поющие в терновнике') != genre_not_inlist + + @pytest.mark.parametrize('name,genre', [ + ['Заживо в темноте', 'Ужасы'], + ['Золотой теленок', 'Комедии'], + ['Восточный экспресс', 'Детективы'] +] +) + def test_get_book_genre_by_name_success(self, name, genre, collector): + collector.books_genre[name] = genre + assert collector.get_book_genre(name) == genre + + + @pytest.mark.parametrize('name,genre', [ + ['Заживо в темноте', 'Ужасы'], + ['Восточный экспресс', 'Детективы'] + ] + ) + def test_get_books_with_specific_genre_success(self, name, genre, collector): + collector.add_new_book(name) + collector.set_book_genre(name, genre) + books_with_specific_genre = collector.get_books_with_specific_genre(genre) + assert name in books_with_specific_genre + + @pytest.mark.parametrize('name,genre,specific_genre', [ + ['Заживо в темноте', 'Ужасы', True], + ['Восточный экспресс', 'Детективы', True], + ['Золотой ключик','Мультфильм', False] + ] + ) + def test_get_books_for_children_success(self, name, genre, specific_genre, collector): + collector.add_new_book(name) + collector.set_book_genre(name, genre) + books_with_specific_genre = collector.get_books_with_specific_genre(specific_genre) + books_for_children = collector.get_books_for_children() + assert (name in books_for_children) != books_with_specific_genre - # проверяем, что добавилось именно две - # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 + def test_get_list_of_favorites_books_success(self, collector): + collector.favorites = ['Золотой ключик'] + assert collector.get_list_of_favorites_books() == ['Золотой ключик'] + + def test_get_book_genre_success(self, collector): + collector.add_new_book('Заживо в темноте') + collector.set_book_genre('Заживо в темноте', 'Ужасы') + collector.add_new_book('Золотой теленок') + collector.set_book_genre('Золотой теленок', 'Комедии') + collector.add_new_book('Восточный экспресс') + collector.set_book_genre('Восточный экспресс', 'Детективы') + assert collector.get_books_genre() == { + 'Заживо в темноте':'Ужасы', + 'Золотой теленок':'Комедии', + 'Восточный экспресс':'Детективы' + } - # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file