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
41 changes: 40 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,40 @@
# qa_python
# qa_python


Тесты для BooksCollector

add_new_book
test_add_new_book_added_successfully — книга добавляется успешно
test_add_new_book_parametrized — граничные значения (40 символов, 41 символ, обычное название, пустая строка)
test_add_new_book_duplicate_not_added_twice — дубликат не добавляется
test_add_new_book_default_genre_is_empty_string — жанр по умолчанию пустая строка

set_book_genre
test_set_book_genre_sets_correctly — жанр устанавливается успешно
test_set_book_genre_not_set_if_book_missing — книги нет в словаре
test_set_book_genre_not_set_if_genre_not_in_list — жанр не из списка

get_book_genre
test_get_book_genre_returns_genre — возвращает установленный жанр
test_get_book_genre_returns_empty_string_if_genre_not_set — возвращает пустую строку если жанр не задан

get_books_with_specific_genre
test_get_books_with_specific_genre_returns_correct_books — возвращает правильные книги
test_get_books_with_specific_genre_returns_empty_list_if_no_books — возвращает пустой список

get_books_for_children
test_get_books_for_children_returns_books_without_age_rating — книга без возрастного рейтинга попадает в список
test_get_books_for_children_excludes_books_with_age_rating — книга с возрастным рейтингом не попадает
test_get_books_for_children_excludes_books_without_genre — книга без жанра не попадает в список

add_book_in_favorites
test_add_book_in_favorites_added_successfully — книга добавляется в избранное
test_add_book_in_favorites_not_added_if_book_not_in_books_genre — книги нет в словаре
test_add_book_in_favorites_not_added_twice — дубликат не добавляется

delete_book_from_favorites
test_delete_book_from_favorites_deleted_successfully — книга удаляется из избранного
test_delete_book_from_favorites_no_error_if_book_not_in_favorites — нет ошибки если книги нет в избранном

get_list_of_favorites_books
test_get_list_of_favorites_books_returns_correct_list — возвращает корректный список
Binary file removed __pycache__/main.cpython-38.pyc
Binary file not shown.
Binary file removed __pycache__/test.cpython-38-pytest-7.1.2.pyc
Binary file not shown.
8 changes: 8 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import pytest

from main import BooksCollector

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

124 changes: 107 additions & 17 deletions tests.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,114 @@
import pytest
from main import BooksCollector

# класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector
# обязательно указывать префикс Test

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_added_successfully(self, collector):
collector.add_new_book('Властелин колец')
assert 'Властелин колец' in collector.get_books_genre()

@pytest.mark.parametrize('name, expected', [
('А' * 40, True), # граница — должна добавиться
('А' * 41, False), # за границей — не должна
('Властелин колец', True), # обычное название
('', False), # пустое — не должна
])
def test_add_new_book_parametrized(self, collector, name, expected):
collector.add_new_book(name)
assert (name in collector.get_books_genre()) == expected

def test_add_new_book_empty_name_not_added(self, collector):
collector.add_new_book('')
assert '' not in collector.get_books_genre()

def test_add_new_book_duplicate_not_added_twice(self, collector):
collector.add_new_book('Властелин колец')
collector.add_new_book('Властелин колец')
assert len(collector.get_books_genre()) == 1

def test_get_book_genre_returns_genre(self, collector):
collector.add_new_book('Властелин колец')
collector.set_book_genre('Властелин колец', 'Фантастика')
assert collector.get_book_genre('Властелин колец') == 'Фантастика'

def test_add_new_book_default_genre_is_empty_string(self, collector):
collector.add_new_book('Властелин колец')
assert collector.get_book_genre('Властелин колец') == ''

def test_set_book_genre_sets_correctly(self, collector):
collector.add_new_book('Властелин колец')
collector.set_book_genre('Властелин колец', 'Фантастика')
assert collector.get_book_genre('Властелин колец') == 'Фантастика'

def test_set_book_genre_not_set_if_book_missing(self, collector):
collector.set_book_genre('Несуществующая книга', 'Фантастика')
assert collector.get_book_genre('Несуществующая книга') is None

def test_set_book_genre_not_set_if_genre_not_in_list(self, collector):
collector.add_new_book('Властелин колец')
collector.set_book_genre('Властелин колец', 'Романтика')
assert collector.get_book_genre('Властелин колец') == ''

def test_get_book_genre_returns_empty_string_if_genre_not_set(self, collector):
collector.add_new_book('Властелин колец')
assert collector.get_book_genre('Властелин колец') == ''

def test_get_books_with_specific_genre_returns_correct_books(self, collector):
collector.add_new_book('Властелин колец')
collector.add_new_book('Мартин Иден')
collector.set_book_genre('Властелин колец', 'Фантастика')
collector.set_book_genre('Мартин Иден', 'Комедии')
assert collector.get_books_with_specific_genre('Фантастика') == ['Властелин колец']

def test_get_books_with_specific_genre_returns_empty_list_if_no_books(self, collector):
collector.add_new_book('Властелин колец')
collector.set_book_genre('Властелин колец', 'Фантастика')
assert collector.get_books_with_specific_genre('Комедии') == []

def test_get_books_for_children_returns_books_without_age_rating(self, collector):
collector.add_new_book('Властелин колец')
collector.set_book_genre('Властелин колец', 'Фантастика')
assert 'Властелин колец' in collector.get_books_for_children()

def test_get_books_for_children_excludes_books_with_age_rating(self, collector):
collector.add_new_book('Оно')
collector.set_book_genre('Оно', 'Ужасы')
assert 'Оно' not in collector.get_books_for_children()

def test_get_books_for_children_excludes_books_without_genre(self, collector):
collector.add_new_book('Властелин колец')
assert 'Властелин колец' not in collector.get_books_for_children()

def test_add_book_in_favorites_added_successfully(self, collector):
collector.add_new_book('Властелин колец')
collector.add_book_in_favorites('Властелин колец')
assert 'Властелин колец' in collector.get_list_of_favorites_books()

def test_add_book_in_favorites_not_added_if_book_not_in_books_genre(self, collector):
collector.add_book_in_favorites('Властелин колец')
assert 'Властелин колец' not in collector.get_list_of_favorites_books()

def test_add_book_in_favorites_not_added_twice(self, collector):
collector.add_new_book('Властелин колец')
collector.add_book_in_favorites('Властелин колец')
collector.add_book_in_favorites('Властелин колец')
assert len(collector.get_list_of_favorites_books()) == 1

# добавляем две книги
collector.add_new_book('Гордость и предубеждение и зомби')
collector.add_new_book('Что делать, если ваш кот хочет вас убить')
def test_delete_book_from_favorites_deleted_successfully(self, collector):
collector.add_new_book('Властелин колец')
collector.add_book_in_favorites('Властелин колец')
collector.delete_book_from_favorites('Властелин колец')
assert 'Властелин колец' not in collector.get_list_of_favorites_books()

# проверяем, что добавилось именно две
# словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2
assert len(collector.get_books_rating()) == 2
def test_delete_book_from_favorites_no_error_if_book_not_in_favorites(self, collector):
collector.add_new_book('Властелин колец')
collector.delete_book_from_favorites('Властелин колец')
assert 'Властелин колец' not in collector.get_list_of_favorites_books()

# напиши свои тесты ниже
# чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector()
def test_get_list_of_favorites_books_returns_correct_list(self, collector):
collector.add_new_book('Властелин колец')
collector.add_new_book('Оно')
collector.add_book_in_favorites('Властелин колец')
collector.add_book_in_favorites('Оно')
assert collector.get_list_of_favorites_books() == ['Властелин колец', 'Оно']