diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bee8a64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__ diff --git a/README.md b/README.md index 1cc701d..e1a0dfb 100644 --- a/README.md +++ b/README.md @@ -1 +1,21 @@ -# qa_python \ No newline at end of file +# qa_python +1. add_new_book- добавляется книга с валидным названием и не указаным жанром + +2. add_new_book- не добавляет книгу, если длина имени невалидная (параметризация) + +3. add_new_book- не добавляет дубликат книгт + +4. set_book_genre- устанавливает жанр, если книга есть и жанр находится в списке + +5. set_book_genre- не меняет жанр, если жанр недопустимый + +6. get_book_genre- возвращает None для неизвестной книги + +7. get_books_with_specific_genre- возвращает только книги нужного жанра + +8. get_books_genre- выводит текущий словарь + +9. get_books_for_children- книги с возрастным рейтингом не попадают (параметризация) + +10. add_book_in_favorites/delete_book_from_favorites/get_list_of_favorites_books- +добавляет в избранное книгу только из словаря(повторно добавить книгу нельзя)/удаляет книгу из избранного, если она там есть/получает список избранных книг \ No newline at end of file diff --git a/tests.py b/tests.py index 383385e..219d06a 100644 --- a/tests.py +++ b/tests.py @@ -1,24 +1,97 @@ +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() + collector.add_new_book('Старик и море') + collector.add_new_book('На Западном фронте без перемен') + assert len(collector.get_books_genre()) == 2 + + def test_add_new_book_adds_book_with_empty_genre(self): + collector = BooksCollector() + collector.add_new_book('Мастер и Маргарита') + assert collector.get_book_genre('Мастер и Маргарита') == '' + + @pytest.mark.parametrize('name', ['', 'a' * 41]) + def test_add_new_book_not_add_invalid_length_name(self, name): + collector = BooksCollector() + collector.add_new_book(name) + assert name not in collector.get_books_genre() + + def test_add_new_book_not_add_duplicate(self): + collector = BooksCollector() + collector.add_new_book('Заводной апельсин') + collector.add_new_book('Заводной апельсин') + assert list(collector.get_books_genre().keys()).count('Заводной апельсин') == 1 + + def test_set_book_genre_sets_genre_for_existing_book(self): + collector = BooksCollector() + collector.add_new_book('Война миров') + collector.set_book_genre('Война миров', 'Фантастика') + assert collector.get_book_genre('Война миров') == 'Фантастика' + + def test_set_book_genre_not_set_when_genre_invalid(self): + collector = BooksCollector() + collector.add_new_book('Грозовой перевал') + collector.set_book_genre('Грозовой перевал', 'Роман') + assert collector.get_book_genre('Грозовой перевал') == '' + + def test_get_book_genre_returns_none_for_unknown_book(self): + collector = BooksCollector() + assert collector.get_book_genre('Несуществующая') is None + + def test_get_books_with_specific_genre_returns_filtered_list(self): + collector = BooksCollector() + collector.add_new_book('Дюна') + collector.add_new_book('Оно') + collector.set_book_genre('Дюна', 'Фантастика') + collector.set_book_genre('Оно', 'Ужасы') + assert collector.get_books_with_specific_genre('Ужасы') == ['Оно'] - # добавляем две книги - collector.add_new_book('Гордость и предубеждение и зомби') - collector.add_new_book('Что делать, если ваш кот хочет вас убить') + def test_get_books_genre_returns_current_dict(self): + collector = BooksCollector() + collector.add_new_book('Дюна') + collector.set_book_genre('Дюна', 'Фантастика') + assert collector.get_books_genre() == {'Дюна': 'Фантастика'} + + @pytest.mark.parametrize('adult_genre', ['Ужасы', 'Детективы']) + def test_get_books_for_children_excludes_age_rated_genres(self, adult_genre): + collector = BooksCollector() + collector.add_new_book('Калигула 18+') + collector.set_book_genre('Калигула 18+', adult_genre) + + collector.add_new_book('Винни-Пух') + collector.set_book_genre('Винни-Пух', 'Мультфильмы') + + children = collector.get_books_for_children() + assert 'Винни-Пух' in children + assert 'Калигула 18+' not in children + + def test_favorites_add_no_duplicates(self): + collector = BooksCollector() + collector.add_new_book('Дом в котором') + + collector.add_book_in_favorites('Дом в котором') + collector.add_book_in_favorites('Дом в котором') + + assert collector.get_list_of_favorites_books() == ['Дом в котором'] + + def test_favorites_delete(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_favorites_add_not_existing(self): + collector = BooksCollector() + collector.add_new_book('Дом в котором') - # проверяем, что добавилось именно две - # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 + collector.add_book_in_favorites('Такой книги нет') - # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file + assert collector.get_list_of_favorites_books() == [] \ No newline at end of file