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
55 changes: 54 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,54 @@
# qa_python
# qa_python
test_add_two_books_count_is_two
Проверяет, что после добавления двух книг их количество становится ровно два

test_add_book_with_empty_name_not_added
Проверяет, что книга с пустым названием или слишком длинным названием не добавляется

test_add_duplicate_book_not_duplicate_count
Проверяет, что нельзя добавить одну и ту же книгу дважды

test_set_book_genre_first_set
Проверяет, что можно успешно установить жанр для книги в первый раз

test_set_book_genre_change_to_another
Проверяет, что жанр книги можно изменить на другой

test_set_genre_for_nonexistent_book
Проверяет, что жанр не устанавливается для книги, которой нет в списке

test_get_book_genre_empty_initially
Проверяет, что у новой книги жанр по умолчанию пустой

test_get_book_genre_after_setting
Проверяет, что метод возвращает правильный жанр после установки

test_get_book_genre_for_nonexistent_book
Проверяет, что для несуществующей книги жанр не найден (возвращается None)

test_get_books_with_specific_genre_contains_only_right_books
Проверяет, что возвращаются только книги с указанным жанром

test_get_books_with_specific_genre_no_books
Проверяет, что если книг с указанным жанром нет, возвращается пустой список

test_get_all_books_genres
Проверяет, что возвращается весь словарь книг с их жанрами

test_get_books_for_children_includes_and_excludes_correctly
Проверяет, что книги с детским жанром включаются, а с возрастным ограничением исключаются

test_add_book_in_favorites_only_once
Проверяет, что книга добавляется в избранное только один раз

test_delete_book_from_favorites_removes_book
Проверяет, что книга успешно удаляется из избранного

test_delete_book_from_favorites_with_nonexistent_book
Проверяет, что попытка удалить отсутствующую книгу из избранного не вызывает ошибок

test_get_list_of_favorites_initially_empty
Проверяет, что список избранных книг пуст при старте

test_get_list_of_favorites_after_adding
Проверяет, что добавленная книга появляется в списке избранных
Binary file added __pycache__/main.cpython-312.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-312-pytest-8.4.2.pyc
Binary file not shown.
118 changes: 101 additions & 17 deletions tests.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,108 @@
import pytest
from main import BooksCollector

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

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


class TestBooksCollector:

# пример теста:
# обязательно указывать префикс test_
# дальше идет название метода, который тестируем add_new_book_
# затем, что тестируем add_two_books - добавление двух книг
def test_add_new_book_add_two_books(self):
# создаем экземпляр (объект) класса BooksCollector
collector = BooksCollector()
def test_add_two_books_count_is_two(self, collector):
collector.add_new_book('Гарри Поттер и философский камень')
collector.add_new_book('1984')
assert len(collector.get_books_genre()) == 2

@pytest.mark.parametrize("book_name, expected_count", [
("", 0),
("a" * 41, 0),
])
def test_add_book_with_empty_name_not_added(self, collector, book_name, expected_count):
collector.add_new_book(book_name)
assert len(collector.get_books_genre()) == expected_count

@pytest.mark.parametrize("book_name", [
"Властелин колец",
"Гарри Поттер",
"1984",
])
def test_add_duplicate_book_not_duplicate_count(self, collector, book_name):
collector.add_new_book(book_name)
collector.add_new_book(book_name)
assert len(collector.get_books_genre()) == 1

def test_set_book_genre_first_set(self, collector):
collector.add_new_book('Дюна')
collector.set_book_genre('Дюна', 'Детективы')
assert collector.books_genre['Дюна'] == 'Детективы'

def test_set_book_genre_change_to_another(self, collector):
collector.add_new_book('Дюна')
collector.set_book_genre('Дюна', 'Детективы')
collector.set_book_genre('Дюна', 'Фантастика')
assert collector.books_genre['Дюна'] == 'Фантастика'

def test_set_genre_for_nonexistent_book(self, collector):
collector.set_book_genre('1984', 'Фантастика')
assert '1984' not in collector.books_genre or collector.books_genre.get('1984') is None

def test_get_book_genre_empty_initially(self, collector):
collector.add_new_book('Пикник на обочине')
assert collector.get_book_genre('Пикник на обочине') == ''

def test_get_book_genre_after_setting(self, collector):
collector.books_genre['Пикник на обочине'] = 'Комедии'
assert collector.get_book_genre('Пикник на обочине') == 'Комедии'

def test_get_book_genre_for_nonexistent_book(self, collector):
assert collector.get_book_genre('Скотный двор') is None

def test_get_books_with_specific_genre_contains_only_right_books(self, collector):
collector.add_new_book('Дракула')
collector.add_new_book('Горе от ума')
collector.set_book_genre('Дракула', 'Ужасы')
collector.set_book_genre('Горе от ума', 'Комедии')
books = collector.get_books_with_specific_genre('Ужасы')
assert 'Дракула' in books and 'Горе от ума' not in books

def test_get_books_with_specific_genre_no_books(self, collector):
assert collector.get_books_with_specific_genre('Драма') == []

def test_get_all_books_genres(self, collector):
collector.add_new_book('Ведьмак')
collector.set_book_genre('Ведьмак', 'Мультфильмы')
collector.add_new_book('451 градус по Фаренгейту')
assert collector.get_books_genre() == {'Ведьмак': 'Мультфильмы', '451 градус по Фаренгейту': ''}

def test_get_books_for_children_includes_and_excludes_correctly(self, collector):
collector.add_new_book('Приключения Паддингтона')
collector.set_book_genre('Приключения Паддингтона', 'Мультфильмы')
collector.add_new_book('Оно')
collector.set_book_genre('Оно', 'Ужасы')
child_books = collector.get_books_for_children()
assert 'Приключения Паддингтона' in child_books and 'Оно' not in child_books

def test_add_book_in_favorites_only_once(self, collector):
collector.add_new_book('Шерлок Холмс')
collector.add_book_in_favorites('Шерлок Холмс')
collector.add_book_in_favorites('Шерлок Холмс')
assert collector.get_list_of_favorites_books().count('Шерлок Холмс') == 1

def test_delete_book_from_favorites_removes_book(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()

# добавляем две книги
collector.add_new_book('Гордость и предубеждение и зомби')
collector.add_new_book('Что делать, если ваш кот хочет вас убить')
def test_delete_book_from_favorites_with_nonexistent_book(self, collector):
collector.delete_book_from_favorites('Нет такой книги')
assert collector.get_list_of_favorites_books() == []

# проверяем, что добавилось именно две
# словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2
assert len(collector.get_books_rating()) == 2
def test_get_list_of_favorites_initially_empty(self, collector):
assert collector.get_list_of_favorites_books() == []

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