diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..571b696 --- /dev/null +++ b/.gitignore @@ -0,0 +1,34 @@ +venv/ +env/ +ENV/ +.venv/ +.env/ +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +*.egg-info/ +dist/ +build/ +.pytest_cache/ +.pytest/ +*.pyc +.coverage +htmlcov/ +.vscode/ +.idea/ +*.swp +*.swo +*~ +.project +.pydevproject +.DS_Store +Thumbs.db +desktop.ini +*.log +*.tmp +*.bak +*.db +*.sqlite +.env.local \ No newline at end of file diff --git a/README.md b/README.md index 1cc701d..defd328 100644 --- a/README.md +++ b/README.md @@ -1 +1,33 @@ -# qa_python \ No newline at end of file +# qa_python + +## Реализованные тесты + +1. **__init__** + - Проверка количества жанров + +2. **add_new_book** + - Добавление новой книги + +3. **set_book_genre** + - Установка несуществующего жанра + +4. **get_book_genre** + - Вывод жанра по имени книги + +5. **get_books_with_specific_genre** + - Вывод списка книг по определенному жанру + +6. **get_books_genre** + - Вывод текущего словаря + +7. **get_books_for_children** + - Вывод книг которые подходят детям + +8. **add_book_in_favorites** + - Добавление книги в избранное + +9. **delete_book_from_favorites** + - Удаление книги из избранного + +10. **get_list_of_favorites_books** + - Вывод списка избранных книг \ No newline at end of file diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..77e5aef --- /dev/null +++ b/conftest.py @@ -0,0 +1,6 @@ +import pytest +from main import BooksCollector + +@pytest.fixture +def collector(): + return BooksCollector() \ No newline at end of file diff --git a/tests.py b/tests.py index 383385e..8180015 100644 --- a/tests.py +++ b/tests.py @@ -1,24 +1,88 @@ +import pytest from main import BooksCollector -# класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector -# обязательно указывать префикс Test class TestBooksCollector: + + def test_init_has_correct_genres(self, collector): + assert collector.genre == ['Фантастика', 'Ужасы', 'Детективы', 'Мультфильмы', 'Комедии'] - # пример теста: - # обязательно указывать префикс test_ - # дальше идет название метода, который тестируем add_new_book_ - # затем, что тестируем add_two_books - добавление двух книг - def test_add_new_book_add_two_books(self): - # создаем экземпляр (объект) класса BooksCollector - collector = BooksCollector() + @pytest.mark.parametrize('book_name', [ + 'Эхо', + 'Зов Ктулху', + ]) - # добавляем две книги - collector.add_new_book('Гордость и предубеждение и зомби') - collector.add_new_book('Что делать, если ваш кот хочет вас убить') + def test_add_new_book_success(self, collector, book_name): + collector.add_new_book(book_name) + assert book_name in collector.books_genre - # проверяем, что добавилось именно две - # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 + def test_set_book_genre_invalid_genre_fail(self, collector): + book_name = 'Нейромант' + + collector.add_new_book(book_name) + collector.set_book_genre(book_name, 'Киберпанк') + assert collector.get_book_genre(book_name) == '' - # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file + def test_get_book_genre_returns_correct_genre(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(self, collector): + book_name = 'Лавина' + genre = 'Фантастика' + + collector.add_new_book(book_name) + collector.set_book_genre(book_name, genre) + assert collector.get_books_with_specific_genre(genre) == [book_name] + + def test_get_books_genre_returns_correct_dictionary(self, collector): + + book1 = 'Игра престолов' + book2 = 'Властелин колец' + book3 = 'Ведьмак' + + collector.add_new_book(book1) + collector.add_new_book(book2) + collector.add_new_book(book3) + assert collector.get_books_genre() == {book1: '', book2: '', book3: ''} + + def test_get_books_for_children(self, collector): + + book_name = 'Вверх' + genre = 'Мультфильмы' + + collector.add_new_book(book_name) + collector.set_book_genre(book_name, genre) + assert book_name in collector.get_books_for_children() + + def test_add_book_in_favorites_success(self, collector): + + book_name = 'Властелин колец' + + collector.add_new_book(book_name) + collector.add_book_in_favorites(book_name) + assert book_name in collector.get_list_of_favorites_books() + + def test_delete_book_from_favorites_success(self, collector): + + book_name = 'Молчание' + + collector.add_new_book(book_name) + collector.add_book_in_favorites(book_name) + collector.delete_book_from_favorites(book_name) + assert book_name not in collector.get_list_of_favorites_books() + + def test_get_list_of_favorites_books_returns_correct_list(self, collector): + + book1 = 'Рельсы' + book2 = 'Эндимион' + + collector.add_new_book(book1) + collector.add_new_book(book2) + collector.add_book_in_favorites(book1) + collector.add_book_in_favorites(book2) + + assert collector.get_list_of_favorites_books() == [book1, book2]