Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 63 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,63 @@
# qa_python
# 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. Проверяет, что можно получить список всех добавленных в избранное книг.
Binary file added __pycache__/conftest.cpython-313-pytest-8.4.2.pyc
Binary file not shown.
Binary file added __pycache__/main.cpython-313.pyc
Binary file not shown.
Binary file added __pycache__/tests.cpython-313-pytest-8.4.2.pyc
Binary file not shown.
9 changes: 9 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import pytest

from main import BooksCollector

@pytest.fixture
def collector():
collector = BooksCollector()

return collector
176 changes: 169 additions & 7 deletions tests.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import pytest
from main import BooksCollector

# класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector
Expand All @@ -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()
# чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса 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()