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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
__pycache__
22 changes: 21 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,21 @@
# qa_python
# qa_python
1. add_new_book- добавляется книга с валидным названием и не указаным жанром

2. add_new_book- не добавляет книгу, если длина имени невалидная (параметризация)

3. add_new_book- не добавляет дубликат книгт

4. set_book_genre- устанавливает жанр, если книга есть и жанр находится в списке

5. set_book_genre- не меняет жанр, если жанр недопустимый

6. get_book_genre- возвращает None для неизвестной книги

7. get_books_with_specific_genre- возвращает только книги нужного жанра

8. get_books_genre- выводит текущий словарь

9. get_books_for_children- книги с возрастным рейтингом не попадают (параметризация)

10. add_book_in_favorites/delete_book_from_favorites/get_list_of_favorites_books-
добавляет в избранное книгу только из словаря(повторно добавить книгу нельзя)/удаляет книгу из избранного, если она там есть/получает список избранных книг
101 changes: 87 additions & 14 deletions tests.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,97 @@
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()
collector.add_new_book('Старик и море')
collector.add_new_book('На Западном фронте без перемен')
assert len(collector.get_books_genre()) == 2

def test_add_new_book_adds_book_with_empty_genre(self):
collector = BooksCollector()
collector.add_new_book('Мастер и Маргарита')
assert collector.get_book_genre('Мастер и Маргарита') == ''

@pytest.mark.parametrize('name', ['', 'a' * 41])
def test_add_new_book_not_add_invalid_length_name(self, name):
collector = BooksCollector()
collector.add_new_book(name)
assert name not in collector.get_books_genre()

def test_add_new_book_not_add_duplicate(self):
collector = BooksCollector()
collector.add_new_book('Заводной апельсин')
collector.add_new_book('Заводной апельсин')
assert list(collector.get_books_genre().keys()).count('Заводной апельсин') == 1

def test_set_book_genre_sets_genre_for_existing_book(self):
collector = BooksCollector()
collector.add_new_book('Война миров')
collector.set_book_genre('Война миров', 'Фантастика')
assert collector.get_book_genre('Война миров') == 'Фантастика'

def test_set_book_genre_not_set_when_genre_invalid(self):
collector = BooksCollector()
collector.add_new_book('Грозовой перевал')
collector.set_book_genre('Грозовой перевал', 'Роман')
assert collector.get_book_genre('Грозовой перевал') == ''

def test_get_book_genre_returns_none_for_unknown_book(self):
collector = BooksCollector()
assert collector.get_book_genre('Несуществующая') is None

def test_get_books_with_specific_genre_returns_filtered_list(self):
collector = BooksCollector()
collector.add_new_book('Дюна')
collector.add_new_book('Оно')
collector.set_book_genre('Дюна', 'Фантастика')
collector.set_book_genre('Оно', 'Ужасы')
assert collector.get_books_with_specific_genre('Ужасы') == ['Оно']

# добавляем две книги
collector.add_new_book('Гордость и предубеждение и зомби')
collector.add_new_book('Что делать, если ваш кот хочет вас убить')
def test_get_books_genre_returns_current_dict(self):
collector = BooksCollector()
collector.add_new_book('Дюна')
collector.set_book_genre('Дюна', 'Фантастика')
assert collector.get_books_genre() == {'Дюна': 'Фантастика'}

@pytest.mark.parametrize('adult_genre', ['Ужасы', 'Детективы'])
def test_get_books_for_children_excludes_age_rated_genres(self, adult_genre):
collector = BooksCollector()
collector.add_new_book('Калигула 18+')
collector.set_book_genre('Калигула 18+', adult_genre)

collector.add_new_book('Винни-Пух')
collector.set_book_genre('Винни-Пух', 'Мультфильмы')

children = collector.get_books_for_children()
assert 'Винни-Пух' in children
assert 'Калигула 18+' not in children

def test_favorites_add_no_duplicates(self):
collector = BooksCollector()
collector.add_new_book('Дом в котором')

collector.add_book_in_favorites('Дом в котором')
collector.add_book_in_favorites('Дом в котором')

assert collector.get_list_of_favorites_books() == ['Дом в котором']

def test_favorites_delete(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_favorites_add_not_existing(self):
collector = BooksCollector()
collector.add_new_book('Дом в котором')

# проверяем, что добавилось именно две
# словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2
assert len(collector.get_books_rating()) == 2
collector.add_book_in_favorites('Такой книги нет')

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