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
50 changes: 49 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,49 @@
# qa_python
# Тестирование приложения BooksCollector

Проект содержит набор автотестов для проверки работоспособности приложения `BooksCollector`. Тесты написаны на языке **Python** с использованием фреймворка **pytest**.

## Структура проекта

* **`main.py`** — содержит исходный код класса `BooksCollector`.
* **`test.py`** — основной файл с тестами (класс `TestBooksCollector`).
* **`conftest.py`** — хранит общую фикстуру `collector_with_books`, которая автоматически подтягивается в тесты.
* **`books_data.py`** — содержит тестовые данные и параметры (например, список `BOOK_WITH_GENRE`), вынесенные из кода тестов.



## Описание реализованных тестов

### 1. Добавление книг в коллекцию (`add_new_book`)
* **test_add_new_book_add_two_books**: Проверка успешного добавления нескольких книг в пустую коллекцию.
* **test_add_new_book_ignore_duplicate_name**: Проверка того, что книга с уже существующим именем не добавляется повторно.
* **test_add_new_book_igonore_empty_name**: Проверка запрета на добавление книги с пустым названием.
* **test_add_new_book_igonore_book_name_longer_than_41_symblos**: Проверка граничного значения длины названия: книги с именами длиной 41 символ и более не добавляются.

### 2. Установка и получение жанров (`set_book_genre`, `get_book_genre`)
* **test_set_book_genre**: (Параметризованный) Проверка корректной установки допустимого жанра для существующих книг.
* **test_set_book_genre_ignore_genre_not_in_list**: Проверка того, что жанр не устанавливается, если его нет в списке доступных (`self.genre`).
* **test_set_book_genre_ignore_book_not_in_collection**: Проверка того, что невозможно установить жанр книге, которой нет в коллекции.
* **test_get_book_genre_book_exist**: Проверка получения жанра для книги, которая есть в коллекции.
* **test_get_book_genre_book_not_exist**: Проверка, что при запросе жанра для отсутствующей книги возвращается `None`.

### 3. Фильтрация и словари (`get_books_genre`, `get_books_with_specific_genre`)
* **test_get_books_genre_book_exist**: Проверка получения полного словаря `books_genre`. Тест подтверждает соответствие итогового словаря эталонному набору данных.
* **test_get_books_with_specific_genre**: (Параметризованный) Проверка фильтрации книг по конкретному жанру. Подтверждает, что метод возвращает список названий книг, соответствующих запросу.

### 4. Детская библиотека (`get_books_for_children`)
* **test_get_books_for_children_only_children_genres**: Проверка корректной фильтрации книг для детей. Убеждаемся, что в список попадают только безопасные жанры без возрастного рейтинга.
* **test_get_books_for_children_no_children_genres**: (Параметризованный) Проверка исключения жанров "Ужасы" и "Детективы" из выдачи для детей.

### 5. Работа с «Избранным» (`favorites`)
* **test_add_book_in_favorites_one_book**: Проверка успешного добавления книги в список избранного.
* **test_add_book_in_favorites_ignore_duplicates**: Проверка защиты от повторного добавления одной и той же книги в избранное.
* **test_delete_book_from_favorites_one_book**: Проверка удаления единственной книги из избранного.
* **test_delete_book_from_favorites_one_of_many**: Проверка точечного удаления: при удалении одной книги остальные должны остаться в списке.
* **test_delete_book_from_favorites_book_not_in_favorites**: Проверка того, что попытка удаления книги, которой нет в избранном, не вызывает ошибок и не меняет список.
* **test_get_list_of_favorites_books_return_favorites**: Проверка получения полного списка избранных книг.
* **test_get_list_of_favorites_books_empty_favorites**: Проверка работы метода при пустом списке избранного.

## Технические особенности тестов
* **Фикстуры**: Применяется фикстура `collector_with_books` из `conftest.py` для быстрой предустановки объекта с набором данных.
* **Параметризация**: Используется `@pytest.mark.parametrize` с данными из `books_data.py`.
* **Множества (Set)**: Применяются для сравнения списков, где порядок элементов не имеет значения.
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.
14 changes: 14 additions & 0 deletions books_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
BOOK_WITH_GENRE = [
["Цветы для Элджернона", "Фантастика"],
["Оно", "Ужасы"],
["Убийство в Восточном экспрессе", "Детективы"],
["Приключения Винни", "Мультфильмы"],
["Горе от ума", "Комедии"]
]


BOOK_FOR_CHILDREN = [
"Цветы для Элджернона",
"Приключения Винни",
"Горе от ума"
]
17 changes: 17 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import pytest
from main import BooksCollector
from books_data import BOOK_WITH_GENRE


# Фикстура для создания пустого эксземпляра BooksCollector
@pytest.fixture
def collector():
return BooksCollector()

# Фикстура для создания экземпляра BooksCollector с предзаполненными книгами и жанрами
@pytest.fixture
def collector_with_books(collector):
for name, genre in BOOK_WITH_GENRE:

This comment was marked as resolved.

collector.add_new_book(name)
collector.set_book_genre(name, genre)
return collector
Loading