diff --git a/README.md b/README.md index 1cc701d..9d944f1 100644 --- a/README.md +++ b/README.md @@ -1 +1,63 @@ -# qa_python \ No newline at end of file +# TestBooksCollector + +Тестовый класс TestBooksCollector для тестирования класса BooksCollector содержит следующие тестовые методы: + +## 1. test_add_new_book_add_two_books + +Метод для тестирования метода add_new_book. Проверяет возможность добавления нескольких книг. + +## 2. test_init_favorites_len_is_zero + +Проверяет, что при создании объекта класса BooksCollector, он создается с полем favorites, содержащим пустой список. + +## 3. test_init_all_genre_exist + +Проверяет, что при создании объекта класса BooksCollector, он создается с полем genre, содержащим список со следующими жанрами: `'Фантастика', 'Ужасы', 'Детективы', 'Мультфильмы', 'Комедии'`. Принимает параметр genre - название жанраб наличие которого проверяем. Вызывается для всех вышеперечисленных жанров. + +## 4. test_add_new_book_add_book_one_more_time_not_possible + +Метод для тестирования метода add_new_book. Проверяет, что невозможно добавить одну и ту же книгу несколько раз. + +## 5. test_add_new_book_name_more_then0_and_less_then41_true + +Метод для тестирования метода add_new_book. Проверяет, что можно добавить книгу, если длина её названия в диапозоне 1-40 символов. Принимает параметр name - название книги. Вызывается для следующего набора данных: `['Я', 'Мы', 'Гордость и предубеждение', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa']` + +## 6. test_add_new_book_name_more_then40_false + +Метод для тестирования метода add_new_book. Проверяет, что нельзя добавить книгу, если в ее названии более 40 символов. Принимает параметр name - название книги. Вызывается для следующего набора данных: `['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaи еще немного символов']` + +## 7. test_set_book_genre_true + +Метод для тестирования метода set_book_genre. Проверяет, что книге устанавливается жанр из жанров, перечисленных в списке в поле genre. + +## 8. test_set_book_genre_genre_is_not_exist_in_genre_list_false + +Метод для тестирования метода set_book_genre. Проверяет, что невозможно установить книге жанр, если его нет в списке жанров в поле genre. + +## 9. test_get_book_genre_true + +Метод для тестирования метода get_book_genre. Проверяет, что можно получить жанр книги по ее названию. + +## 10. test_get_books_with_specific_genre_true + +Метод для тестирования метода get_books_with_specific_genre. Проверяет, что можно получить список книг, с определенным жанром. + +## 11. test_get_books_genre_return_all_books_with_genres + +Метод для тестирования метода get_books_genre. Проверяет, что можно получить содержимое поля books_genre, в котором будут названия добавленных книг и их жанры. + +## 12. test_get_books_for_children_return_all_books_for_children + +Метод для тестирования метода get_books_for_children. Проверяет, что можно получить список книг, жанр которых не содержится в списке genre_age_rating. + +## 13. test_add_books_in_favorite_true + +Метод для тестирования метода add_book_in_favorites. Проверяем, что ранее добавленную книгу можно добавить в список избранных книг. + +## 14. test_delete_book_from_favorites_true + +Метод для тестирования метода delete_book_from_favorites. Проверяет, что из списка избранных книг можно удалить книгу. + +## 15. test_get_list_of_favorites_books_return_list_of_favorite_books + +Метод для тестирования метода get_list_of_favorites_books. Проверяет, что можно получить список всех добавленных в избранное книг. diff --git a/__pycache__/conftest.cpython-313-pytest-8.4.2.pyc b/__pycache__/conftest.cpython-313-pytest-8.4.2.pyc new file mode 100644 index 0000000..42e4d5d Binary files /dev/null and b/__pycache__/conftest.cpython-313-pytest-8.4.2.pyc differ diff --git a/__pycache__/main.cpython-313.pyc b/__pycache__/main.cpython-313.pyc new file mode 100644 index 0000000..a8a2223 Binary files /dev/null and b/__pycache__/main.cpython-313.pyc differ diff --git a/__pycache__/tests.cpython-313-pytest-8.4.2.pyc b/__pycache__/tests.cpython-313-pytest-8.4.2.pyc new file mode 100644 index 0000000..b043c53 Binary files /dev/null and b/__pycache__/tests.cpython-313-pytest-8.4.2.pyc differ diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..30a6a33 --- /dev/null +++ b/conftest.py @@ -0,0 +1,9 @@ +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..3c482b7 100644 --- a/tests.py +++ b/tests.py @@ -1,3 +1,4 @@ +import pytest from main import BooksCollector # класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector @@ -8,17 +9,178 @@ 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('Что делать, если ваш кот хочет вас убить') # проверяем, что добавилось именно две - # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 + # словарь books_genre имеет длину 2 + assert len(collector.books_genre) == 2 # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file + # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() + + def test_init_favorites_len_is_zero(self, collector): + assert len(collector.favorites) == 0 + + @pytest.mark.parametrize('genre', ['Фантастика', 'Ужасы', 'Детективы', 'Мультфильмы', 'Комедии']) + def test_init_all_genre_exist(self, genre, collector): + assert genre in collector.genre + + def test_add_new_book_add_book_one_more_time_not_possible(self, collector): + # добавляем книгу + collector.add_new_book('Гордость и предубеждение и зомби') + # добавляем эту же книгу повторно + collector.add_new_book('Гордость и предубеждение и зомби') + + # проверяем, что книга не добавилась второй раз + # словарь books_genre, который нам возвращает метод get_books_genre, имеет длину 1 + assert len(collector.books_genre) == 1 + + # проверяем добавление книги, если длина названия книги в диапозоне 1-40 + @pytest.mark.parametrize('name', ['Я', 'Мы', 'Гордость и предубеждение', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa']) + def test_add_new_book_name_more_then0_and_less_then41_true(self, name, collector): + # добавляем книгу в словарь books_genre + collector.add_new_book(name) + + # проверяем добавилась ли книга в словарь books_genre + assert len(collector.books_genre) == 1 + + # проверяем, что книга не добавляется, если длина названия больше 40 символов + @pytest.mark.parametrize('name', ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaи еще немного символов']) + def test_add_new_book_name_more_then40_false(self, name, collector): + # добавляем книгу в словарь books_genre + collector.add_new_book(name) + + # проверяем, что книга не добавилась в словарь books_genre + assert len(collector.books_genre) == 0 + + # проверяем, что жанр устанавливается книге + def test_set_book_genre_true(self, collector): + # создаем переменные с названием книги и жанром + book_name = 'Властелин колец' + genre = 'Фантастика' + + # добавляем книгу в словарь books_genre + collector.books_genre[book_name] = '' + + # устанавливаем жанр к книге + collector.set_book_genre(book_name,genre) + + # проверяем, что нужный жанр установлен к книге + assert collector.books_genre[book_name] == genre + + # проверяем, что жанр, которого нет в списке, не устанавливается + def test_set_book_genre_genre_is_not_exist_in_genre_list_false(self, collector): + #создаем переменные с названием книги и жанра, которого нет в списке + genre = 'Аниме' + book_name = 'Селойрмун' + + # добавляем книгу в словарь books_genre + collector.books_genre[book_name] = '' + + # устанавливаем жанр к книге + collector.set_book_genre(book_name, genre) + + # проверяем, что жанр, которого нет в списке, не установился и остался пустым + assert collector.books_genre[book_name] == '' + + # проверяем, что по имени книги получаем жанр + def test_get_book_genre_true(self, collector): + # добавляем книгу в словарь books_genre с жанром 'Фантастика' + collector.books_genre['Властелин колец'] = 'Фантастика' + + # проверяем, что метод get_book_genre возвращает жанр книги + assert collector.get_book_genre('Властелин колец') == 'Фантастика' + + # проверяем, что мы можем получить список книг с определенным жанром + def test_get_books_with_specific_genre_true(self, collector): + # создаем переменную со списом книг и переменную с жанром + fantastic_books_list = ['Братство кольца', 'Две крепости', 'Возвращение короля'] + genre = 'Фантастика' + + # добавляем книги из списка в словарь books_genre и устанавливаем им жанр + for book in fantastic_books_list: + collector.books_genre[book] = genre + + # добавляем книгу с другим жанром + collector.books_genre['Винни-пух'] = 'Ужасы' + + # проверяем, что при список получаемый по жанру в переменной genre соответтствует списку fantastic_books_list + assert collector.get_books_with_specific_genre(genre) == fantastic_books_list + + # проверяем, что метод get_books_genre возвращает список books_genre + def test_get_books_genre_return_all_books_with_genres(self, collector): + # объявляем словарь books_list c книгами и их жанрами + books_list = { + 'Братство кольца': 'Фантастика', + 'Две крепости': 'Ужасы', + 'Возвращение короля': 'Детективы' + } + + # добавляем книги из списка в словарь books_genre и устанавливаем им жанр + for book, genre in books_list.items(): + collector.books_genre[book] = genre + + # проверяем что словарь books_genre содержит все книги с их жанрами + assert collector.get_books_genre() == books_list + + # проверяем, что метод get_books_for_children возвращает все книги подходящие детям + def test_get_books_for_children_return_all_books_for_children(self, collector): + # добавляем книгу для взрослях и устанавливаем ей жанр из списка genre_age_rating + adult_book = 'Книга для взрослых' + adult_genre = 'Ужасы' + + collector.books_genre[adult_book] = adult_genre + + # добавляем книгу для детей и устанавливаем ей жанр не входящий в список genre_age_rating + children_book = 'Книга для детей' + children_genre = 'Фантастика' + + collector.books_genre[children_book] = children_genre + + # проверяем, что метод get_books_for_children возвращает только книги подходящие детям + child_books_list = collector.get_books_for_children() + + assert len(child_books_list) == 1 and children_book in child_books_list + + # проверяем, что книгу можно добавить в избранное + def test_add_books_in_favorite_true(self, collector): + # создаем переменную с названием книги + book_name = 'Властелин колец' + + # добавляем книгу в словарь books_genre + collector.books_genre[book_name] = '' + + # добавляем книгу в избранное + collector.add_book_in_favorites(book_name) + + # проворяем, что книга добавилась в избранное + # список favorites имеет длинну 1 + assert len(collector.favorites) == 1 + + # проверяем, что книга удаляется из избранного + def test_delete_book_from_favorites_true(self, collector): + # добавляем список из 3-х книг в избранное + collector.favorites = ['Братство кольца', 'Две крепости', 'Возвращение короля'] + + # удаляем одну книгу из избранного + collector.delete_book_from_favorites('Возвращение короля') + + # проверяем, что в избранном только 2 книги + # список favorites, который нам возвращает метод get_list_of_favorites_books имеет длинну 2 + assert len(collector.favorites) == 2 + + # проверяем, что метод get_list_of_favorites_books возвращает список избранных книг + def test_get_list_of_favorites_books_return_list_of_favorite_books(self, collector): + # создаем переменную с названием книги + book_name = 'Властелин колец' + + # добавляем книгу в список избранное + collector.favorites.append(book_name) + + # проверяем, что метод get_list_of_favorites_books возвращает список ибранных книг + assert book_name in collector.get_list_of_favorites_books() + +