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
11 changes: 10 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,10 @@
# qa_python
# qa_python
# 1 test_add_new_book_add_two_books - Добавляем две книги, проверяется их количество
# 2 test_add_new_book_valid_name - Валидное имя книги (1–40 символов)
# 3 test_add_new_book_invalid_name (параметризированный) - Книги с длиной >40 или <0 не добавляются (тут 2 проверки)
# 4 test_set_book_genre_valid - Задаем валидный жанр для книги, жанр сохраняется корректно
# 5 test_get_books_with_specific_genre_fantasy - Возвращам только книги указанного жанра
# 6 test_get_books_for_children - Исключаем возрастные жанры, возвращаем только детские
# 7 test_add_book_in_favorites - Добавляем книгу в Избранное (если она есть в books_genre)
# 8 test_delete_book_from_favorites - Удаляем книгу из Избранного
# 9 test_get_list_of_favorites_books_empty - По умолчанию Избранное пусто
6 changes: 6 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import pytest
from main import BooksCollector

@pytest.fixture(scope='function')
def collector():
return BooksCollector()
92 changes: 76 additions & 16 deletions tests.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,84 @@
# tests.py
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()
class TestBooksCollector:

# добавляем две книги
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
assert len(collector.get_books_genre()) == 2

# Тест с валидным именем
def test_add_new_book_valid_name(self, collector):
collector.add_new_book('Мастер и Маргарита')
assert 'Мастер и Маргарита' in collector.get_books_genre()

# Параметризованный тест
@pytest.mark.parametrize("invalid_name", [
("A" * 41), # 41 символ — недопустимо
('') # пустая строка
])
def test_add_new_book_invalid_name(self, collector, invalid_name):
collector.add_new_book(invalid_name)
assert invalid_name not in collector.get_books_genre()

def test_set_book_genre_valid(self, collector):
book_name = 'Мастер и Маргарита'
genre = 'Фантастика'

collector.add_new_book(book_name)
collector.set_book_genre(book_name, genre)

assert collector.get_book_genre(book_name) == genre

def test_get_books_with_specific_genre_fantasy(self, collector):
collector.add_new_book('Война и мир')
collector.set_book_genre('Война и мир', 'Фантастика')
collector.add_new_book('Майор Гром')
collector.set_book_genre('Майор Гром', 'Детективы')

assert collector.get_books_with_specific_genre('Фантастика') == ['Война и мир']

def test_get_books_for_children(self, collector):
collector.add_new_book('Книжка про Тильду')
collector.set_book_genre('Книжка про Тильду', 'Мультфильмы')
collector.add_new_book('Шерлок Холмс')
collector.set_book_genre('Шерлок Холмс', 'Детективы')

children_books = collector.get_books_for_children()
assert 'Книжка про Тильду' in children_books
assert 'Шерлок Холмс' not in children_books

def test_add_book_in_favorites(self, collector):
collector.add_new_book('Мастер и Маргарита')
collector.add_book_in_favorites('Мастер и Маргарита')

assert collector.get_list_of_favorites_books() == ['Мастер и Маргарита']

def test_delete_book_from_favorites(self, collector):
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_empty_by_default(self, collector):
assert collector.get_list_of_favorites_books() == []

def test_get_list_of_favorites_books_with_added_book(self, collector):
collector.add_new_book('Мастер и Маргарита')
collector.add_book_in_favorites('Мастер и Маргарита')
assert collector.get_list_of_favorites_books() == ['Мастер и Маргарита']

def test_get_book_genre(self, collector):
collector.add_new_book('Шерлок Холмс')
collector.set_book_genre('Шерлок Холмс', 'Детективы')
assert collector.get_book_genre('Шерлок Холмс') == 'Детективы'

# напиши свои тесты ниже
# чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector()
def test_get_books_genre(self, collector):
collector.add_new_book('Книжка про Тильду')
collector.set_book_genre('Книжка про Тильду', 'Мультфильмы')
assert collector.get_books_genre() == {'Книжка про Тильду': 'Мультфильмы'}