diff --git a/.vscode/.gitignore b/.vscode/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/.vscode/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/README.md b/README.md index 1cc701d..af14176 100644 --- a/README.md +++ b/README.md @@ -1 +1,57 @@ -# qa_python \ No newline at end of file +# qa_python + +Реализованные тесты: + +1. test_add_new_book_title_less_than40_successfull (параметризованный) + Проверка правильности добавления книги при длине названия не больше 40 символов + +2. test_add_new_book_title_greater_than40_unsuccessfull (параметризованный) + Проверка корректности работы (книга не добавляется) при добавлении книги с названием длинее 40 символов + +3. test_add_new_book_twice_unsuccessfull + Проверка корректности работы при добавлении одной и той же книги дважды (должна добавиться только один раз) + +4. test_get_books_genre_from_list_successfull (параметризованный) + Проверка правильности получения словаря книг + +5. test_set_book_genre_from_list_successfull (параметризованный) + Проверка правильности назначения жанра книге (жанр из списка) + +6. test_get_book_genre_from_list_successfull (параметризованный) + Проверка правильности получения жанра книни (жанр из списка) + +7. test_set_book_genre_not_from_list_unsuccessfull (параметризованный) + Проверка корректности работы при назначении жанра не из списка (в поле жанр ожидается пустая строка) + +8. test_get_book_genre_not_from_list_empty_string + Проверка корректности работы при получении жанра у книги, не добавленной в список (ожидается что результат None) + +9. test_get_books_with_specific_genre_from_list_successfull + Проверка правильности работы при запросе списка книг конкретных жанров из списка + +10. test_get_books_with_specific_genre_not_from_list_empty_list + Проверка корректности работы при запросе списка книг конкретного жанра, если в списке нет книг с таким жанром (ожидаетсяя пустой список) + +11. test_get_books_for_children_not_from_age_genre_rating_successfull + Проверка правильности запроса книг для детей (ожидается что в списке не будет книг с возрастным ограничением) + +12. test_get_books_for_children_from_age_genre_rating_empty_list + Проверка корректности работы при запросе книг для детей, при этом в списке нет таких книг (ожидается пустой список) + +13. test_add_book_in_favorites_from_books_genre_list_successfull (параметризованный) + Проверка правильности добавления книги в избранное + +14. test_get_list_of_favorites_books_from_books_genre_list_successfull (параметризованный) + Проверка правильности получения списка избранных книг + +15. test_add_book_in_favorites_not_from_books_genre_list_empty_list + Проверка корректности работы при добавлении книги в избранное, которой нет в списке книг (ожидается, что список избранных книг пустой) + +16. test_add_book_in_favorites_from_books_genre_list_twice_len_favorites_1 + Проверка корректности добавления одной и той же книги дважды в список избранных (ожидается, что в список книга будет добавлена один раз) + +17. test_delete_book_from_favorites_book_in_favorites_list_successfull + Проверка правильности удаления книги из списка избранных + +18. test_delete_book_from_favorites_book_not_in_favorites_list_unsuccessfull + Проверка корректности работы при удалении книги из списка избранных, которой нет в этом списке \ No newline at end of file diff --git a/__pycache__/.gitignore b/__pycache__/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/__pycache__/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore 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/conftest.py b/conftest.py new file mode 100644 index 0000000..d863cda --- /dev/null +++ b/conftest.py @@ -0,0 +1,8 @@ +import pytest +from main import BooksCollector + +@pytest.fixture +def collector(): + collector = BooksCollector() + + return collector \ No newline at end of file diff --git a/tests.py b/tests.py index 383385e..0e88e6f 100644 --- a/tests.py +++ b/tests.py @@ -1,24 +1,199 @@ -from main import BooksCollector +import pytest # класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector # обязательно указывать префикс Test class TestBooksCollector: - # пример теста: - # обязательно указывать префикс test_ - # дальше идет название метода, который тестируем add_new_book_ - # затем, что тестируем add_two_books - добавление двух книг - def test_add_new_book_add_two_books(self): - # создаем экземпляр (объект) класса BooksCollector - collector = BooksCollector() + @pytest.mark.parametrize("name", ['Чебурашка', 'Гордость и предубеждение и зомби', 'Гордость и предубеждение и зомби .......']) + def test_add_new_book_title_less_than40_successfull(self, collector, name): + collector.add_new_book(name) - # добавляем две книги - collector.add_new_book('Гордость и предубеждение и зомби') - collector.add_new_book('Что делать, если ваш кот хочет вас убить') + assert len(collector.books_genre) == 1 - # проверяем, что добавилось именно две - # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 + @pytest.mark.parametrize("name", ['Гордость и предубеждение и зомби и пираты карибского моря', + 'Ехала машина полный бак бензина ехала ехала и в гараж заехала', + 'По поля по полям синий трактор едет к нам']) + def test_add_new_book_title_greater_than40_unsuccessfull(self, collector, name): + collector.add_new_book(name) - # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file + assert len(collector.books_genre) == 0 + + def test_add_new_book_twice_unsuccessfull(self, collector): + collector.add_new_book('Гордость и предубеждение') + collector.add_new_book('Гордость и предубеждение') + + assert len(collector.books_genre) == 1 + + @pytest.mark.parametrize("name", ['Чебурашка', 'Гордость и предубеждение и зомби', 'Гордость и предубеждение и зомби .......']) + def test_get_books_genre_from_list_successfull(self, collector, name): + collector.add_new_book(name) + + assert len(collector.get_books_genre()) == 1 + + @pytest.mark.parametrize('name,genre', [['Гордость и предубеждение', 'Детективы'], ['Преступление и наказание', 'Ужасы']]) + def test_set_book_genre_from_list_successfull(self, collector, name, genre): + collector.add_new_book(name) + collector.set_book_genre(name, genre) + + assert collector.books_genre[name] == genre + + @pytest.mark.parametrize('name,genre', [['Гордость и предубеждение', 'Детективы'], ['Преступление и наказание', 'Ужасы']]) + def test_get_book_genre_from_list_successfull(self, collector, name, genre): + collector.add_new_book(name) + collector.set_book_genre(name, genre) + + assert collector.get_book_genre(name) == genre + + @pytest.mark.parametrize('name,genre', [['Гордость и предубеждение', 'Драма'], ['Игра в кальмара', 'Дорама']]) + def test_set_book_genre_not_from_list_unsuccessfull(self, collector, name, genre): + collector.add_new_book(name) + collector.set_book_genre(name, genre) + + assert collector.books_genre[name] == '' + + def test_get_book_genre_not_from_list_empty_string(self, collector): + name = 'Гордость и предубеждение' + genre = 'Детективы' + collector.add_new_book(name) + collector.set_book_genre(name, genre) + wrong_name = "Преступление и наказание" + + assert collector.get_book_genre(wrong_name) is None + + def test_get_books_with_specific_genre_from_list_successfull(self, collector): + name1 = 'Гордость и предубеждение' + genre1 = 'Детективы' + + collector.add_new_book(name1) + collector.set_book_genre(name1, genre1) + + name2 = 'Преступление и наказание' + genre2 = 'Детективы' + + collector.add_new_book(name2) + collector.set_book_genre(name2, genre2) + + name3 = 'Один дома' + genre3 = 'Комедии' + + collector.add_new_book(name3) + collector.set_book_genre(name3, genre3) + + assert len(collector.get_books_with_specific_genre(genre2)) == 2 + assert len(collector.get_books_with_specific_genre(genre3)) == 1 + + + def test_get_books_with_specific_genre_not_from_list_empty_list(self, collector): + name1 = 'Гордость и предубеждение' + genre1 = 'Детективы' + + collector.add_new_book(name1) + collector.set_book_genre(name1, genre1) + + name2 = 'Преступление и наказание' + genre2 = 'Детективы' + + collector.add_new_book(name2) + collector.set_book_genre(name2, genre2) + + name3 = 'Один дома' + genre3 = 'Комедии' + + collector.add_new_book(name3) + collector.set_book_genre(name3, genre3) + + assert len(collector.get_books_with_specific_genre('Мультфильмы')) == 0 + + def test_get_books_for_children_not_from_age_genre_rating_successfull(self, collector): + name1 = 'Алёша Попович' + genre1 = 'Комедии' + + collector.add_new_book(name1) + collector.set_book_genre(name1, genre1) + + name2 = 'Преступление и наказание' + genre2 = 'Детективы' + + collector.add_new_book(name2) + collector.set_book_genre(name2, genre2) + + name3 = 'Простоквашино' + genre3 = 'Мультфильмы' + + collector.add_new_book(name3) + collector.set_book_genre(name3, genre3) + + assert len(collector.get_books_for_children()) == 2 + assert 'Преступление и наказание' not in collector.get_books_for_children() + + def test_get_books_for_children_from_age_genre_rating_empty_list(self, collector): + name1 = 'Гордость и предубеждение' + genre1 = 'Детективы' + + collector.add_new_book(name1) + collector.set_book_genre(name1, genre1) + + name2 = 'Преступление и наказание' + genre2 = 'Детективы' + + collector.add_new_book(name2) + collector.set_book_genre(name2, genre2) + + assert len(collector.get_books_for_children()) == 0 + + @pytest.mark.parametrize('name', ['Гордость и предубеждение', 'Преступление и наказание']) + def test_add_book_in_favorites_from_books_genre_list_successfull(self, collector, name): + collector.add_new_book(name) + collector.add_book_in_favorites(name) + + assert len(collector.favorites) == 1 + + @pytest.mark.parametrize('name', ['Гордость и предубеждение', 'Преступление и наказание']) + def test_get_list_of_favorites_books_from_books_genre_list_successfull(self, collector, name): + collector.add_new_book(name) + collector.add_book_in_favorites(name) + + assert len(collector.get_list_of_favorites_books()) == 1 + + def test_add_book_in_favorites_not_from_books_genre_list_empty_list(self, collector): + name = 'Гордость и предубеждение' + collector.add_new_book(name) + + name2 = 'Преступление и наказание' + collector.add_book_in_favorites(name2) + + assert len(collector.favorites) == 0 + + def test_add_book_in_favorites_from_books_genre_list_twice_len_favorites_1(self, collector): + name = 'Гордость и предубеждение' + collector.add_new_book(name) + collector.add_book_in_favorites(name) + collector.add_book_in_favorites(name) + + assert len(collector.favorites) == 1 + + def test_delete_book_from_favorites_book_in_favorites_list_successfull(self, collector): + name = 'Гордость и предубеждение' + collector.add_new_book(name) + collector.add_book_in_favorites(name) + + name2 = 'Простоквашино' + + collector.add_new_book(name2) + collector.add_book_in_favorites(name2) + + assert len(collector.favorites) == 2 + collector.delete_book_from_favorites(name) + assert len(collector.favorites) == 1 + + def test_delete_book_from_favorites_book_not_in_favorites_list_unsuccessfull(self, collector): + name = 'Гордость и предубеждение' + collector.add_new_book(name) + collector.add_book_in_favorites(name) + + name2 = 'Простоквашино' + collector.add_new_book(name2) + + assert len(collector.favorites) == 1 + collector.delete_book_from_favorites(name2) + assert len(collector.favorites) == 1