generated from yandex-praktikum/qa_python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtests.py
More file actions
146 lines (118 loc) · 7.71 KB
/
tests.py
File metadata and controls
146 lines (118 loc) · 7.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
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('Что делать, если ваш кот хочет вас убить')
# проверяем, что добавилось именно две
# словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2
assert len(collector.get_books_rating()) == 2
# напиши свои тесты ниже
# чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector()
import pytest
class TestBooksCollector:
# 1. Тест на добавление новой книги (метод add_new_book)
def test_add_new_book_valid_name_adds_book_without_genre(self):
collector = BooksCollector()
book_name = "Война и мир"
collector.add_new_book(book_name)
assert book_name in collector.books_genre
assert collector.books_genre[book_name] == '' # У добавленной книги нет жанра
# 2. Тест на невозможность добавления дубликата (метод add_new_book)
def test_add_new_book_duplicate_not_added(self):
collector = BooksCollector()
book_name = "1984"
collector.add_new_book(book_name)
collector.add_new_book(book_name) # Пытаемся добавить второй раз
assert len(collector.books_genre) == 1 # Только одна книга
# 3. Тест на установку жанра (метод set_book_genre)
def test_set_book_genre_valid_book_and_genre_sets_genre(self):
collector = BooksCollector()
collector.add_new_book("Преступление и наказание")
collector.set_book_genre("Преступление и наказание", "Детективы")
assert collector.get_book_genre("Преступление и наказание") == "Детективы"
# 4. Тест на получение жанра книги (метод get_book_genre)
def test_get_book_genre_returns_correct_genre(self):
collector = BooksCollector()
collector.add_new_book("Мастер и Маргарита")
collector.set_book_genre("Мастер и Маргарита", "Фантастика")
genre = collector.get_book_genre("Мастер и Маргарита")
assert genre == "Фантастика"
# 5. Параметризованный тест на получение книг по жанру (метод get_books_with_specific_genre)
@pytest.mark.parametrize("book_name,genre", [
("Книга 1", "Фантастика"),
("Книга 2", "Ужасы"),
("Книга 3", "Комедии"),
])
def test_get_books_with_specific_genre_returns_correct_books(self, book_name, genre):
collector = BooksCollector()
collector.add_new_book(book_name)
collector.set_book_genre(book_name, genre)
books = collector.get_books_with_specific_genre(genre)
assert book_name in books
assert len(books) == 1
# 6. Тест на получение всех книг (метод get_books_genre)
def test_get_books_genre_returns_all_books(self):
collector = BooksCollector()
collector.add_new_book("Книга 1")
collector.add_new_book("Книга 2")
all_books = collector.get_books_genre()
assert len(all_books) == 2
assert "Книга 1" in all_books
assert "Книга 2" in all_books
# 7. Тест на получение книг для детей (метод get_books_for_children)
def test_get_books_for_children_excludes_age_rated_genres(self):
collector = BooksCollector()
# Добавляем книги с разными жанрами
collector.add_new_book("Страшная книга")
collector.add_new_book("Веселая книга")
collector.add_new_book("Загадочная книга")
collector.set_book_genre("Страшная книга", "Ужасы") # С возрастным рейтингом
collector.set_book_genre("Веселая книга", "Комедии") # Без возрастного рейтинга
collector.set_book_genre("Загадочная книга", "Детективы") # С возрастным рейтингом
children_books = collector.get_books_for_children()
# Только "Веселая книга" должна быть в списке
assert children_books == ["Веселая книга"]
# 8. Тест на добавление в избранное (метод add_book_in_favorites)
def test_add_book_in_favorites_adds_book_to_favorites(self):
collector = BooksCollector()
collector.add_new_book("Любимая книга")
collector.add_book_in_favorites("Любимая книга")
favorites = collector.get_list_of_favorites_books()
assert "Любимая книга" in favorites
assert len(favorites) == 1
# 9. Тест на удаление из избранного (метод delete_book_from_favorites)
def test_delete_book_from_favorites_removes_book(self):
collector = BooksCollector()
collector.add_new_book("Книга для удаления")
collector.add_book_in_favorites("Книга для удаления")
# Проверяем, что книга добавлена
assert "Книга для удаления" in collector.get_list_of_favorites_books()
# Удаляем
collector.delete_book_from_favorites("Книга для удаления")
# Проверяем, что книга удалена
assert "Книга для удаления" not in collector.get_list_of_favorites_books()
assert len(collector.get_list_of_favorites_books()) == 0
# 10. Тест на получение списка избранного (метод get_list_of_favorites_books)
def test_get_list_of_favorites_books_returns_correct_list(self):
collector = BooksCollector()
# Добавляем несколько книг
collector.add_new_book("Книга 1")
collector.add_new_book("Книга 2")
collector.add_new_book("Книга 3")
# Добавляем в избранное только некоторые
collector.add_book_in_favorites("Книга 1")
collector.add_book_in_favorites("Книга 3")
favorites = collector.get_list_of_favorites_books()
assert len(favorites) == 2
assert "Книга 1" in favorites
assert "Книга 2" not in favorites
assert "Книга 3" in favorites