diff --git a/README.md b/README.md index 1cc701d..7a35ecf 100644 --- a/README.md +++ b/README.md @@ -1 +1,10 @@ -# qa_python \ No newline at end of file +# qa_python +# 1 test_add_new_book_add_two_books - Добавляем две книги, проверяется их количество +# 2 test_add_new_book_valid_name - Валидное имя книги (1–40 символов) +# 3 test_add_new_book_invalid_name (параметризированный) - Книги с длиной >40 или <0 не добавляются (тут 2 проверки) +# 4 test_set_book_genre_valid - Задаем валидный жанр для книги, жанр сохраняется корректно +# 5 test_get_books_with_specific_genre_fantasy - Возвращам только книги указанного жанра +# 6 test_get_books_for_children - Исключаем возрастные жанры, возвращаем только детские +# 7 test_add_book_in_favorites - Добавляем книгу в Избранное (если она есть в books_genre) +# 8 test_delete_book_from_favorites - Удаляем книгу из Избранного +# 9 test_get_list_of_favorites_books_empty - По умолчанию Избранное пусто \ No newline at end of file diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..59848ce --- /dev/null +++ b/conftest.py @@ -0,0 +1,6 @@ +import pytest +from main import BooksCollector + +@pytest.fixture(scope='function') +def collector(): + return BooksCollector() \ No newline at end of file diff --git a/tests.py b/tests.py index 383385e..9ea340f 100644 --- a/tests.py +++ b/tests.py @@ -1,24 +1,84 @@ +# tests.py +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 - collector = BooksCollector() +class TestBooksCollector: - # добавляем две книги + def test_add_new_book_add_two_books(self, collector): collector.add_new_book('Гордость и предубеждение и зомби') collector.add_new_book('Что делать, если ваш кот хочет вас убить') - # проверяем, что добавилось именно две - # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 + assert len(collector.get_books_genre()) == 2 + + # Тест с валидным именем + def test_add_new_book_valid_name(self, collector): + collector.add_new_book('Мастер и Маргарита') + assert 'Мастер и Маргарита' in collector.get_books_genre() + + # Параметризованный тест + @pytest.mark.parametrize("invalid_name", [ + ("A" * 41), # 41 символ — недопустимо + ('') # пустая строка + ]) + def test_add_new_book_invalid_name(self, collector, invalid_name): + collector.add_new_book(invalid_name) + assert invalid_name not in collector.get_books_genre() + + def test_set_book_genre_valid(self, collector): + book_name = 'Мастер и Маргарита' + genre = 'Фантастика' + + collector.add_new_book(book_name) + collector.set_book_genre(book_name, genre) + + assert collector.get_book_genre(book_name) == genre + + def test_get_books_with_specific_genre_fantasy(self, collector): + collector.add_new_book('Война и мир') + collector.set_book_genre('Война и мир', 'Фантастика') + collector.add_new_book('Майор Гром') + collector.set_book_genre('Майор Гром', 'Детективы') + + assert collector.get_books_with_specific_genre('Фантастика') == ['Война и мир'] + + def test_get_books_for_children(self, collector): + 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 + assert 'Шерлок Холмс' not in children_books + + def test_add_book_in_favorites(self, collector): + collector.add_new_book('Мастер и Маргарита') + collector.add_book_in_favorites('Мастер и Маргарита') + + assert collector.get_list_of_favorites_books() == ['Мастер и Маргарита'] + + def test_delete_book_from_favorites(self, collector): + 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_empty_by_default(self, collector): + assert collector.get_list_of_favorites_books() == [] + + def test_get_list_of_favorites_books_with_added_book(self, collector): + collector.add_new_book('Мастер и Маргарита') + collector.add_book_in_favorites('Мастер и Маргарита') + assert collector.get_list_of_favorites_books() == ['Мастер и Маргарита'] + + def test_get_book_genre(self, collector): + collector.add_new_book('Шерлок Холмс') + collector.set_book_genre('Шерлок Холмс', 'Детективы') + assert collector.get_book_genre('Шерлок Холмс') == 'Детективы' - # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file + def test_get_books_genre(self, collector): + collector.add_new_book('Книжка про Тильду') + collector.set_book_genre('Книжка про Тильду', 'Мультфильмы') + assert collector.get_books_genre() == {'Книжка про Тильду': 'Мультфильмы'} \ No newline at end of file