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
26 changes: 25 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,25 @@
# qa_python
# qa_python
## Описание проекта
Этот проект содержит автоматизированные тесты для класса BooksCollector, который управляет коллекцией книг с жанрами и функционалом избранного.

## Основные возможности
Тесты для всех основных методов класса BooksCollector

Параметризованные тесты для граничных случаев

Изоляция тестов с помощью фикстуры вынесенной в conftest.py

Полное покрытие позитивных и негативных сценариев

## Покрытие тест-кейсов
Добавление книг с проверкой имени

Назначение и проверка жанров

Управление избранным

Фильтрация по жанрам

Фильтрация по возрастному рейтингу

Добавлены отдельные тесты для add_new_book и get_books_genre()
Binary file added __pycache__/main.cpython-313.pyc
Binary file not shown.
Binary file added __pycache__/tests.cpython-313-pytest-8.4.1.pyc
Binary file not shown.
5 changes: 5 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
conftest.py
#Фикстура collector - создает новый экземпляр класса для каждого теста
@pytest.fixture
def collector(self):
return BooksCollector()
24 changes: 0 additions & 24 deletions tests.py

This file was deleted.

95 changes: 95 additions & 0 deletions tests_books_collector.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import pytest
from main import BooksCollector

class TestBooksCollector:

# Тесты для add_new_book
# Проверяем корректность добавления новых книг с разными названиями
@pytest.mark.parametrize('name, expected', [
('Мастер и Маргарита', True),
('', False),
('X' * 41, False),
('X' * 40, True)
])
def test_add_new_book(self, collector, name, expected):
collector.add_new_book(name)
assert (name in collector.get_books_genre()) == expected

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нужно исправить: нужны отдельные тесты для add_new_book и get_books_genre()

# Тестирование добавления книг
def test_get_books_genre_returns_correct_dict(self, collector):
collector.add_new_book('Мастер и Маргарита')
collector.add_new_book('Онегин')
collector.set_book_genre('Мастер и Маргарита', 'Драма')
expected = {'Мастер и Маргарита': 'Драма', 'Онегин': ''}
assert collector.get_books_genre() == expected
# Тестирование метода set_book_genre() - невалидные случаи
def test_set_book_genre_invalid(self, collector):
collector.add_new_book('1984')
collector.set_book_genre('1984', 'Несуществующий жанр')
assert collector.get_book_genre('1984') == ''

# Тест только для test_book_addition_success
def test_book_addition_success(self, collector):
collector.add_new_book('Мастер и Маргарита')
assert 'Мастер и Маргарита' in collector.books_genre # Прямой доступ к словарю
# Тест только для get_book_genre
def test_get_book_genre(self, collector):
collector.books_genre = {'Убийство в Восточном экспрессе': 'Детективы'}
assert collector.get_book_genre('Убийство в Восточном экспрессе') == 'Детективы'
# Проверяем, что set_book_genre устанавливает жанр при использовании книги из books_genre и жанра из genre
def test_set_book_genre_valid_genre_is_set(self, collector):
collector.add_new_book('Десять негритят')
collector.set_book_genre('Десять негритят', 'Детективы')
assert collector.books_genre['Десять негритят'] == 'Детективы'
# Проверяем что get_books_with_specific_genre возвращает книги определенного жанра
# Запрашиваем книги определенного жанра ('Фантастика')
def test_get_books_with_specific_genre(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('Фантастика') == ['Гарри Поттер и философский камень']

# Проверяем что метод get_books_for_children возвращает только детскую книгу
def test_get_books_for_children(self, collector):
collector.add_new_book('Винни-Пух')
collector.add_new_book('Дракула')
collector.set_book_genre('Винни-Пух', 'Мультфильмы')
collector.set_book_genre('Дракула', 'Ужасы')
assert collector.get_books_for_children() == ['Винни-Пух']

# Проверяем, что add_book_in_favorites добавляет книгу в избранное
def test_add_book_in_favorites(self, collector):
collector.add_new_book('Три товарища')
collector.add_book_in_favorites('Три товарища')
assert 'Три товарища' in collector.get_list_of_favorites_books()
# Проверяем, что add_book_in_favorites не добавляет повторно книгу в избранное
def test_add_book_in_favorites_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

# Проверяем метод delete_book_from_favorites для удаления из избранного
def test_delete_book_from_favorites(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()

# Проверяем, что метод get_list_of_favorites_books возвращает обе книги
# Проверяем корректность работы со списком избранного
def test_get_list_of_favorites_books(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() == ['Скотный двор', 'Мы']

# Проверяем что метод get_book_genre возвращает правильный жанр
def test_get_book_genre(self, collector):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нужно исправить: тест аналогичен set_book_genre. Попробуй установить значение жанра иначе, или иначе получить его для сравнения. Используй доступ к словарю. В идеале - в каждом тесте нужно использовать только один проверяемый метод

collector.add_new_book('Убийство в Восточном экспрессе')
collector.set_book_genre('Убийство в Восточном экспрессе', 'Детективы')
assert collector.get_book_genre('Убийство в Восточном экспрессе') == 'Детективы'