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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
__pycache__/
*.pyc
Empty file added __init__.py
Empty file.
Binary file added __pycache__/__init__.cpython-311.pyc
Binary file not shown.
Binary file added __pycache__/main.cpython-311.pyc
Binary file not shown.
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.
Binary file not shown.
Binary file added __pycache__/tests.cpython-311-pytest-9.0.2.pyc
Binary file not shown.
85 changes: 85 additions & 0 deletions test_books_collector.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import pytest
from qa_python.main import BooksCollector


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


# add_new_book — книга добавляется в коллекцию
def test_add_new_book_adds_book_to_collection(books_collector):
books_collector.add_new_book('Властелин колец')
assert 'Властелин колец' in books_collector.get_books_genre()


# add_new_book — новая книга добавляется без жанра
def test_add_new_book_has_empty_genre_by_default(books_collector):
books_collector.add_new_book('Дюна')
assert books_collector.get_book_genre('Дюна') == ''


# add_new_book — книга с названием > 40 символов не добавляется
def test_add_new_book_with_long_name_is_not_added(books_collector):
long_name = 'А' * 41
books_collector.add_new_book(long_name)
assert long_name not in books_collector.get_books_genre()


# set_book_genre + get_book_genre — жанр устанавливается корректно
def test_set_and_get_book_genre_returns_correct_genre(books_collector):
books_collector.add_new_book('Матрица')
books_collector.set_book_genre('Матрица', 'Фантастика')
assert books_collector.get_book_genre('Матрица') == 'Фантастика'


# set_book_genre — жанр не из списка не устанавливается
def test_set_book_genre_not_from_allowed_list_is_not_set(books_collector):
books_collector.add_new_book('Оно')
books_collector.set_book_genre('Оно', 'Роман')
assert books_collector.get_book_genre('Оно') == ''


# get_books_with_specific_genre — возвращаются книги нужного жанра
def test_get_books_with_specific_genre_returns_correct_books(books_collector):
books_collector.add_new_book('Чужой')
books_collector.set_book_genre('Чужой', 'Ужасы')

books_collector.add_new_book('Назад в будущее')
books_collector.set_book_genre('Назад в будущее', 'Фантастика')

assert books_collector.get_books_with_specific_genre('Ужасы') == ['Чужой']


# get_books_for_children — книги с возрастным рейтингом исключаются
def test_get_books_for_children_excludes_age_restricted_genres(books_collector):
books_collector.add_new_book('Оно')
books_collector.set_book_genre('Оно', 'Ужасы')

books_collector.add_new_book('Король Лев')
books_collector.set_book_genre('Король Лев', 'Мультфильмы')

assert books_collector.get_books_for_children() == ['Король Лев']


# add_book_in_favorites — книга добавляется в избранное
def test_add_book_in_favorites_adds_book(books_collector):
books_collector.add_new_book('Интерстеллар')
books_collector.add_book_in_favorites('Интерстеллар')
assert 'Интерстеллар' in books_collector.get_list_of_favorites_books()


# add_book_in_favorites — книга не добавляется повторно
def test_add_book_in_favorites_does_not_duplicate(books_collector):
books_collector.add_new_book('Гарри Поттер')
books_collector.add_book_in_favorites('Гарри Поттер')
books_collector.add_book_in_favorites('Гарри Поттер')
assert books_collector.get_list_of_favorites_books().count('Гарри Поттер') == 1


# delete_book_from_favorites — книга удаляется из избранного
def test_delete_book_from_favorites_removes_book(books_collector):
books_collector.add_new_book('Аватар')
books_collector.add_book_in_favorites('Аватар')
books_collector.delete_book_from_favorites('Аватар')
assert 'Аватар' not in books_collector.get_list_of_favorites_books()
172 changes: 84 additions & 88 deletions tests.py
Original file line number Diff line number Diff line change
@@ -1,89 +1,85 @@
import pytest
from main import BooksCollector


class TestBooksCollector:

def test_initial_state(self):
collector = BooksCollector()
assert collector.get_books_genre() == {} and collector.get_list_of_favorites_books() == []

def test_add_new_book_correct_add_book_successful_add(self):
collector = BooksCollector()
collector.add_new_book('Азбука')
assert collector.get_book_genre('Азбука') == ''

@pytest.mark.parametrize("name, expected_count", [
('Азбука', 1),
('', 0),
('Азбука' * 10, 0)
])
def test_add_new_book_incorrect_add_book_unsuccessful_add(self, name, expected_count):
collector = BooksCollector()
collector.add_new_book(name)
assert len(collector.get_books_genre()) == expected_count

def test_set_book_genre_correct_genre_success(self):
collector = BooksCollector()
collector.add_new_book('Азбука')
collector.set_book_genre('Азбука', 'Ужасы')
assert collector.books_genre['Азбука'] == 'Ужасы'

def test_set_book_genre_incorrect_genre_unsuccess(self):
collector = BooksCollector()
collector.add_new_book('Азбука')
collector.set_book_genre('Азбука', 'FFFFFF')
assert collector.books_genre['Азбука'] == ''

def test_get_book_genre(self):
collector = BooksCollector()
collector.add_new_book('Азбука')
collector.set_book_genre('Азбука', 'Ужасы')
assert collector.get_book_genre('Азбука') == 'Ужасы'

def test_get_books_with_specific_genre(self):
collector = BooksCollector()
books = ['Азбука', 'Алгебра', 'Маленький принц']
for book in books:
collector.add_new_book(book)
collector.set_book_genre(book, 'Ужасы')

collector.add_new_book('Ну погоди')
collector.set_book_genre('Ну погоди', 'Мультфильмы')

assert collector.get_books_with_specific_genre('Ужасы') == books

def test_get_books_genre(self):
collector = BooksCollector()
collector.add_new_book('Азбука')
assert collector.get_books_genre() == {'Азбука': ''}

def test_get_books_for_children(self):
collector = BooksCollector()
collector.add_new_book('Детская')
collector.add_new_book('Взрослая')
collector.set_book_genre('Детская', 'Фантастика')
collector.set_book_genre('Взрослая', 'Ужасы')

assert collector.get_books_for_children() == ['Детская']

def test_add_book_in_favorites(self):
collector = BooksCollector()
collector.add_new_book('Азбука')
collector.add_book_in_favorites('Азбука')
assert collector.get_list_of_favorites_books() == ['Азбука']

def test_delete_book_from_favorites(self):
collector = BooksCollector()
collector.add_new_book('Азбука')
collector.add_book_in_favorites('Азбука')
collector.delete_book_from_favorites('Азбука')
assert collector.get_list_of_favorites_books() == []

def test_get_list_of_favorites_books(self):
collector = BooksCollector()
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() == ['Азбука', 'Алгебра']
from .main import BooksCollector


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


# add_new_book — книга добавляется в коллекцию
def test_add_new_book_adds_book_to_collection(books_collector):
books_collector.add_new_book('Властелин колец')
assert 'Властелин колец' in books_collector.get_books_genre()


# add_new_book — новая книга добавляется без жанра
def test_add_new_book_has_empty_genre_by_default(books_collector):
books_collector.add_new_book('Дюна')
assert books_collector.get_book_genre('Дюна') == ''


# add_new_book — книга с названием > 40 символов не добавляется
def test_add_new_book_with_long_name_is_not_added(books_collector):
long_name = 'А' * 41
books_collector.add_new_book(long_name)
assert long_name not in books_collector.get_books_genre()


# set_book_genre + get_book_genre — жанр устанавливается корректно
def test_set_and_get_book_genre_returns_correct_genre(books_collector):
books_collector.add_new_book('Матрица')
books_collector.set_book_genre('Матрица', 'Фантастика')
assert books_collector.get_book_genre('Матрица') == 'Фантастика'


# set_book_genre — жанр не из списка не устанавливается
def test_set_book_genre_not_from_allowed_list_is_not_set(books_collector):
books_collector.add_new_book('Оно')
books_collector.set_book_genre('Оно', 'Роман')
assert books_collector.get_book_genre('Оно') == ''


# get_books_with_specific_genre — возвращаются книги нужного жанра
def test_get_books_with_specific_genre_returns_correct_books(books_collector):
books_collector.add_new_book('Чужой')
books_collector.set_book_genre('Чужой', 'Ужасы')

books_collector.add_new_book('Назад в будущее')
books_collector.set_book_genre('Назад в будущее', 'Фантастика')

assert books_collector.get_books_with_specific_genre('Ужасы') == ['Чужой']


# get_books_for_children — книги с возрастным рейтингом исключаются
def test_get_books_for_children_excludes_age_restricted_genres(books_collector):
books_collector.add_new_book('Оно')
books_collector.set_book_genre('Оно', 'Ужасы')

books_collector.add_new_book('Король Лев')
books_collector.set_book_genre('Король Лев', 'Мультфильмы')

assert books_collector.get_books_for_children() == ['Король Лев']


# add_book_in_favorites — книга добавляется в избранное
def test_add_book_in_favorites_adds_book(books_collector):
books_collector.add_new_book('Интерстеллар')
books_collector.add_book_in_favorites('Интерстеллар')
assert 'Интерстеллар' in books_collector.get_list_of_favorites_books()


# add_book_in_favorites — книга не добавляется повторно
def test_add_book_in_favorites_does_not_duplicate(books_collector):
books_collector.add_new_book('Гарри Поттер')
books_collector.add_book_in_favorites('Гарри Поттер')
books_collector.add_book_in_favorites('Гарри Поттер')
assert books_collector.get_list_of_favorites_books().count('Гарри Поттер') == 1


# delete_book_from_favorites — книга удаляется из избранного
def test_delete_book_from_favorites_removes_book(books_collector):
books_collector.add_new_book('Аватар')
books_collector.add_book_in_favorites('Аватар')
books_collector.delete_book_from_favorites('Аватар')
assert 'Аватар' not in books_collector.get_list_of_favorites_books()