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
39 changes: 38 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,38 @@
# qa_python
# Список тестов:
test_add_new_book_add_two_books - покрывает добавление новых книг

test_add_new_book_add_book_with_name_length_more_than_40_not_added - покрывает добавление книги, если название содержит менее 40 символов

test_add_new_book_add_book_with_name_length_less_than_41_added - покрывает отмену добавления книги, если название содержит более 40 символов

test_add_new_book_genre_empty - покрывает добавление пустого жанра при добавлении новой книги

test_init_books_genre_empty - покрывает в init создание пустого словаря books_genre

test_init_favorites_empty - покрывает в init создание пустого списка favorites

test_init_genre_filled - покрывает в init создание заполненного списка genre

test_init_genre_age_rating_filled - покрывает в init создание заполненного списка genre_age_rating

test_set_book_genre - покрывает установку жанра книги

test_set_book_genre_book_is_missing_genre_not_added - покрывает пропуск установки жанра на книгу отсутствующую в словаре

test_set_book_genre_genre_is_missing_genre_not_added - покрывает пропуск установки жанра не из доступного списка

test_get_book_genre - покрывает получение жанра книги по названию из словаря

test_get_books_with_specific_genre - покрывает получение списка книг по определенному жанру из словаря

test_get_books_for_children - покрывает получение списка книг доступных детям

test_add_book_in_favorites_add_two_books - покрывает добавление книг в избранное

test_add_book_in_favorites_add_book_not_in_dict - покрывает пропуск добавления книги в избранное, если она отсутствует в словаре

test_add_book_in_favorites_add_book_already_in_favorites - покрывает пропуск добавления книги в избранное, если она уже туда добавлена

test_delete_book_from_favorites_delete_one_book - покрывает удаление книги из избранного

test_get_list_of_favorites_books - покрывает получение списка книг из избранного
25 changes: 25 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import pytest
from main import BooksCollector


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

@pytest.fixture
def collector_with_books():
collector = BooksCollector()
title_book = ['Что делать, если ваш кот хочет вас убить',
'Ограбление в восточном экспрессе',
'Гордость и предубеждение и зомби',
'Кот Баскервиллей',
'Шрек и осел']
genre = ['Ужасы',
'Детективы',
'Фантастика',
'Детективы',
'Мультфильмы']
for i in range(0,len(title_book)):
collector.add_new_book(title_book[i])
collector.set_book_genre(title_book[i], genre[i])
return collector
129 changes: 122 additions & 7 deletions tests.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import pytest
from main import BooksCollector


# класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector
# обязательно указывать префикс Test
class TestBooksCollector:
Expand All @@ -8,17 +10,130 @@ 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):
# создаем экземпляр (объект) класса BooksCollector в фикстуре

# добавляем две книги
collector.add_new_book('Гордость и предубеждение и зомби')
collector.add_new_book('Что делать, если ваш кот хочет вас убить')

# проверяем, что добавилось именно две
# словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2
assert len(collector.get_books_rating()) == 2
# словарь books_genre, который нам возвращает метод get_books_genre, имеет длину 2
assert len(collector.get_books_genre()) == 2

# напиши свои тесты ниже
# чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector()
# чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector()

def test_add_new_book_add_book_with_name_length_more_than_40_not_added(self, collector):
# добавляем книгу с названием длиной больше 40 символов
collector.add_new_book('Гордость и предубеждение и зомби и зомби!')
# проверяем, что книга не добавилась
# словарь books_genre, который нам возвращает метод get_books_genre, имеет длину 0
assert len(collector.get_books_genre()) == 0

def test_add_new_book_add_book_with_name_length_less_than_41_added(self, collector):
# добавляем книгу с названием длиной 40 символов
collector.add_new_book('Гордость и предубеждение и зомби и зомби')
# проверяем, что книга добавилась
# словарь books_genre, который нам возвращает метод get_books_genre, имеет длину 1
assert len(collector.get_books_genre()) == 1

def test_add_new_book_genre_empty(self, collector):
collector.add_new_book('Гордость и предубеждение и зомби и зомби')
assert collector.get_books_genre()['Гордость и предубеждение и зомби и зомби'] == ''

def test_init_books_genre_empty(self, collector):
assert {} == collector.books_genre

def test_init_favorites_empty(self, collector):
assert [] == collector.favorites

def test_init_genre_filled(self, collector):
list_genre = ['Фантастика', 'Ужасы', 'Детективы', 'Мультфильмы', 'Комедии']
assert list_genre == collector.genre

def test_init_genre_age_rating_filled(self, collector):
list_genre_age_rating = ['Ужасы', 'Детективы']
assert list_genre_age_rating == collector.genre_age_rating

@pytest.mark.parametrize('genre', ['Фантастика', 'Ужасы', 'Детективы', 'Мультфильмы', 'Комедии'])
def test_set_book_genre(self, collector, genre):
title_book = 'Что делать, если ваш кот хочет вас убить'
collector.add_new_book(title_book)
collector.set_book_genre(title_book, genre)
assert genre == collector.books_genre[title_book]

@pytest.mark.parametrize('genre', ['Фантастика', 'Ужасы', 'Детективы', 'Мультфильмы', 'Комедии'])
def test_set_book_genre_book_is_missing_genre_not_added(self, collector, genre):
title_book_1 = 'Что делать, если ваш кот хочет вас убить'
title_book_2 = 'Гордость и предубеждение и зомби'
collector.add_new_book(title_book_2)
collector.set_book_genre(title_book_1, genre)
assert genre != collector.books_genre[title_book_2] and collector.books_genre[title_book_2] == ''

def test_set_book_genre_genre_is_missing_genre_not_added(self, collector):
title_book = 'Что делать, если ваш кот хочет вас убить'
genre = 'Драма'
collector.add_new_book(title_book)
collector.set_book_genre(title_book, genre)
assert genre != collector.books_genre[title_book] and collector.books_genre[title_book] == ''

def test_get_book_genre(self, collector):
title_book = 'Что делать, если ваш кот хочет вас убить'
genre = 'Ужасы'
collector.add_new_book(title_book)
collector.set_book_genre(title_book, genre)
assert genre == collector.get_book_genre(title_book)

@pytest.mark.parametrize('books_with_specific_genre', ['Ограбление в восточном экспрессе', 'Кот Баскервиллей'])
def test_get_books_with_specific_genre(self, collector_with_books, books_with_specific_genre):
assert books_with_specific_genre in collector_with_books.get_books_with_specific_genre('Детективы')

def test_get_books_genre_dicts_equal(self, collector_with_books):
title_book = ['Что делать, если ваш кот хочет вас убить',
'Ограбление в восточном экспрессе',
'Гордость и предубеждение и зомби',
'Кот Баскервиллей',
'Шрек и осел']
genre = ['Ужасы',
'Детективы',
'Фантастика',
'Детективы',
'Мультфильмы']
books_dict = {}
for i in range(0,len(title_book)):
books_dict[title_book[i]] = genre[i]
assert books_dict == collector_with_books.get_books_genre()

@pytest.mark.parametrize('books_for_children', ['Гордость и предубеждение и зомби', 'Шрек и осел'])
def test_get_books_for_children(self, collector_with_books, books_for_children):
assert books_for_children in collector_with_books.get_books_for_children()

@pytest.mark.parametrize('book_in_favorites', ['Что делать, если ваш кот хочет вас убить', 'Шрек и осел'])
def test_add_book_in_favorites_add_two_books(self, collector_with_books, book_in_favorites):
collector_with_books.add_book_in_favorites('Что делать, если ваш кот хочет вас убить')
collector_with_books.add_book_in_favorites('Шрек и осел')
assert book_in_favorites in collector_with_books.favorites and len(collector_with_books.favorites) == 2

def test_add_book_in_favorites_add_book_not_in_dict(self, collector_with_books):
collector_with_books.add_book_in_favorites('Что делать, если ваш кот хочет вас убить')
collector_with_books.add_book_in_favorites('Шрек и Фиона')
assert len(collector_with_books.get_list_of_favorites_books()) == 1

def test_add_book_in_favorites_add_book_already_in_favorites(self, collector_with_books):
collector_with_books.add_book_in_favorites('Что делать, если ваш кот хочет вас убить')
collector_with_books.add_book_in_favorites('Шрек и осел')
collector_with_books.add_book_in_favorites('Шрек и осел')
assert len(collector_with_books.get_list_of_favorites_books()) == 2

def test_delete_book_from_favorites_delete_one_book(self, collector_with_books):
collector_with_books.add_book_in_favorites('Что делать, если ваш кот хочет вас убить')
collector_with_books.add_book_in_favorites('Шрек и осел')
collector_with_books.delete_book_from_favorites('Что делать, если ваш кот хочет вас убить')
assert 'Шрек и осел' in collector_with_books.favorites and len(collector_with_books.favorites) == 1

def test_get_list_of_favorites_books(self, collector_with_books):
book_in_favorites = ['Что делать, если ваш кот хочет вас убить', 'Шрек и осел']
collector_with_books.add_book_in_favorites('Что делать, если ваш кот хочет вас убить')
collector_with_books.add_book_in_favorites('Шрек и осел')
assert book_in_favorites == collector_with_books.get_list_of_favorites_books() and len(collector_with_books.get_list_of_favorites_books()) == 2