From ed908f22bd767803a9d2cbc17f25c8fd0a93d5a1 Mon Sep 17 00:00:00 2001 From: Serg-nt Date: Tue, 6 May 2025 11:53:40 +0300 Subject: [PATCH 1/5] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B2=20tests.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests.py | 112 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 97 insertions(+), 15 deletions(-) diff --git a/tests.py b/tests.py index 383385e..2a4f1e3 100644 --- a/tests.py +++ b/tests.py @@ -1,24 +1,106 @@ from main import BooksCollector +import pytest # класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector # обязательно указывать префикс Test class TestBooksCollector: - # пример теста: - # обязательно указывать префикс test_ - # дальше идет название метода, который тестируем add_new_book_ - # затем, что тестируем add_two_books - добавление двух книг - def test_add_new_book_add_two_books(self): - # создаем экземпляр (объект) класса BooksCollector - collector = BooksCollector() + @pytest.fixture + def collector(self): + return BooksCollector() - # добавляем две книги - collector.add_new_book('Гордость и предубеждение и зомби') - collector.add_new_book('Что делать, если ваш кот хочет вас убить') + def test_initial_state(self, collector): + assert collector.get_books_genre() == {} + assert collector.get_list_of_favorites_books() == [] - # проверяем, что добавилось именно две - # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 + def test_add_new_book_correct_add_book_successful_add(self, collector): + collector.add_new_book('Азбука') + assert collector.get_book_genre('Азбука') == '' + assert len(collector.get_books_genre()) == 1 + + def test_add_new_book_incorrect_add_book_unsuccessful_add(self, collector): + collector.add_new_book('Азбука') + assert len(collector.get_books_genre()) == 1 + collector.add_new_book('Азбука') + assert len(collector.get_books_genre()) == 1 + collector.add_new_book('Азбука' * 10) + assert len(collector.get_books_genre()) == 1 - # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file + def test_set_book_genre_correct_genre_success(self, collector): + collector.add_new_book('Азбука') + collector.set_book_genre('Азбука', 'Ужасы') + assert collector.books_genre['Азбука'] == 'Ужасы' + + def test_set_book_genre_incorrect_genre_unsuccess(self, collector): + collector.set_book_genre('Азбука', 'Ужасы') + assert len(collector.books_genre) == 0 + collector.add_new_book('Азбука') + collector.set_book_genre('Азбука', 'FFFFFF') + assert collector.books_genre['Азбука'] == '' + + def test_get_book_genre(self, collector): + collector.add_new_book('Азбука') + collector.set_book_genre('Азбука', 'Ужасы') + assert collector.get_book_genre('Азбука') == 'Ужасы' + + def test_get_books_with_specific_genre(self, collector): + books = ['Азбука', 'Алгебра', 'Маленький принц'] + for book in books: + collector.add_new_book(book) + collector.set_book_genre(book, 'Ужасы') + + collector.add_new_book('Ну погоди') + collector.set_book_genre('Ну погоди', 'Мультфильмы') + + assert len(collector.get_books_with_specific_genre('Ужасы')) == 3 + assert len(collector.get_books_with_specific_genre('Мультфильмы')) == 1 + + def test_get_books_genre(self, collector): + collector.add_new_book('Азбука') + assert collector.get_books_genre() == {'Азбука': ''} + + def test_get_books_for_children(self, collector): + books = ['детская1', 'детская2', 'детская3', 'взрослая1', 'взрослая2'] + genres = ['Фантастика', 'Мультфильмы', 'Комедии', 'Ужасы', 'Детективы'] + + for i in range(len(books)): + collector.add_new_book(books[i]) + collector.set_book_genre(books[i], genres[i]) + + children_books = collector.get_books_for_children() + assert len(children_books) == 3 + assert 'детская1' in children_books + assert 'детская2' in children_books + assert 'детская3' in children_books + assert 'взрослая1' not in children_books + assert 'взрослая2' not in children_books + + def test_add_book_in_favorites(self, collector): + collector.add_book_in_favorites('Азбука') + assert len(collector.get_books_genre()) == 0 + collector.add_new_book('Азбука') + collector.add_book_in_favorites('Азбука') + assert len(collector.get_books_genre()) == 1 + assert len(collector.favorites) == 1 + assert 'Азбука' in collector.favorites + collector.add_book_in_favorites('Азбука') + assert len(collector.favorites) == 1 + + def test_delete_book_from_favorites(self, collector): + collector.add_new_book('Азбука') + collector.add_book_in_favorites('Азбука') + collector.delete_book_from_favorites('Алгебра') + assert len(collector.favorites) == 1 + assert 'Азбука' in collector.favorites + collector.delete_book_from_favorites('Азбука') + assert len(collector.favorites) == 0 + assert 'Азбука' not in collector.favorites + + def get_list_of_favorites_books(self, collector): + collector.add_new_book('Азбука') + collector.add_book_in_favorites('Азбука') + collector.add_new_book('Алгебра') + collector.add_book_in_favorites('Алгебра') + assert len(collector.get_list_of_favorites_books()) == 2 + assert 'Азбука' in collector.get_list_of_favorites_books() + assert 'Алгебра' in collector.get_list_of_favorites_books() \ No newline at end of file From 94b22430d0351a8570c24d1c808259552e30cc8a Mon Sep 17 00:00:00 2001 From: Serg-nt Date: Wed, 14 May 2025 13:27:21 +0300 Subject: [PATCH 2/5] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests.py | 107 +++++++++++++++++++++++-------------------------------- 1 file changed, 45 insertions(+), 62 deletions(-) diff --git a/tests.py b/tests.py index 2a4f1e3..5484ccc 100644 --- a/tests.py +++ b/tests.py @@ -1,49 +1,48 @@ -from main import BooksCollector import pytest +from main import BooksCollector + -# класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector -# обязательно указывать префикс Test class TestBooksCollector: - @pytest.fixture - def collector(self): - return BooksCollector() + def test_initial_state(self): + collector = BooksCollector() + assert collector.get_books_genre() == {} and collector.get_list_of_favorites_books() == [] - def test_initial_state(self, collector): - assert collector.get_books_genre() == {} - assert collector.get_list_of_favorites_books() == [] - - def test_add_new_book_correct_add_book_successful_add(self, collector): + def test_add_new_book_correct_add_book_successful_add(self): + collector = BooksCollector() collector.add_new_book('Азбука') assert collector.get_book_genre('Азбука') == '' - assert len(collector.get_books_genre()) == 1 - - def test_add_new_book_incorrect_add_book_unsuccessful_add(self, collector): - collector.add_new_book('Азбука') - assert len(collector.get_books_genre()) == 1 - collector.add_new_book('Азбука') - assert len(collector.get_books_genre()) == 1 - collector.add_new_book('Азбука' * 10) - assert len(collector.get_books_genre()) == 1 - def test_set_book_genre_correct_genre_success(self, collector): + @pytest.mark.parametrize("name, expected_count", [ + ('Азбука', 1), + ('', 0), + ('Азбука' * 10, 0) + ]) + def test_add_new_book_incorrect_add_book_unsuccessful_add(self, name, expected_count): + collector = BooksCollector() + collector.add_new_book(name) + assert len(collector.get_books_genre()) == expected_count + + def test_set_book_genre_correct_genre_success(self): + collector = BooksCollector() collector.add_new_book('Азбука') collector.set_book_genre('Азбука', 'Ужасы') assert collector.books_genre['Азбука'] == 'Ужасы' - def test_set_book_genre_incorrect_genre_unsuccess(self, collector): - collector.set_book_genre('Азбука', 'Ужасы') - assert len(collector.books_genre) == 0 + def test_set_book_genre_incorrect_genre_unsuccess(self): + collector = BooksCollector() collector.add_new_book('Азбука') collector.set_book_genre('Азбука', 'FFFFFF') assert collector.books_genre['Азбука'] == '' - def test_get_book_genre(self, collector): + def test_get_book_genre(self): + collector = BooksCollector() collector.add_new_book('Азбука') collector.set_book_genre('Азбука', 'Ужасы') assert collector.get_book_genre('Азбука') == 'Ужасы' - def test_get_books_with_specific_genre(self, collector): + def test_get_books_with_specific_genre(self): + collector = BooksCollector() books = ['Азбука', 'Алгебра', 'Маленький принц'] for book in books: collector.add_new_book(book) @@ -52,55 +51,39 @@ def test_get_books_with_specific_genre(self, collector): collector.add_new_book('Ну погоди') collector.set_book_genre('Ну погоди', 'Мультфильмы') - assert len(collector.get_books_with_specific_genre('Ужасы')) == 3 - assert len(collector.get_books_with_specific_genre('Мультфильмы')) == 1 + assert collector.get_books_with_specific_genre('Ужасы') == books - def test_get_books_genre(self, collector): + def test_get_books_genre(self): + collector = BooksCollector() collector.add_new_book('Азбука') assert collector.get_books_genre() == {'Азбука': ''} - def test_get_books_for_children(self, collector): - books = ['детская1', 'детская2', 'детская3', 'взрослая1', 'взрослая2'] - genres = ['Фантастика', 'Мультфильмы', 'Комедии', 'Ужасы', 'Детективы'] - - for i in range(len(books)): - collector.add_new_book(books[i]) - collector.set_book_genre(books[i], genres[i]) + def test_get_books_for_children(self): + collector = BooksCollector() + collector.add_new_book('Детская') + collector.add_new_book('Взрослая') + collector.set_book_genre('Детская', 'Фантастика') + collector.set_book_genre('Взрослая', 'Ужасы') - children_books = collector.get_books_for_children() - assert len(children_books) == 3 - assert 'детская1' in children_books - assert 'детская2' in children_books - assert 'детская3' in children_books - assert 'взрослая1' not in children_books - assert 'взрослая2' not in children_books + assert collector.get_books_for_children() == ['Детская'] - def test_add_book_in_favorites(self, collector): - collector.add_book_in_favorites('Азбука') - assert len(collector.get_books_genre()) == 0 + def test_add_book_in_favorites(self): + collector = BooksCollector() collector.add_new_book('Азбука') collector.add_book_in_favorites('Азбука') - assert len(collector.get_books_genre()) == 1 - assert len(collector.favorites) == 1 - assert 'Азбука' in collector.favorites - collector.add_book_in_favorites('Азбука') - assert len(collector.favorites) == 1 + assert collector.get_list_of_favorites_books() == ['Азбука'] - def test_delete_book_from_favorites(self, collector): + def test_delete_book_from_favorites(self): + collector = BooksCollector() collector.add_new_book('Азбука') collector.add_book_in_favorites('Азбука') - collector.delete_book_from_favorites('Алгебра') - assert len(collector.favorites) == 1 - assert 'Азбука' in collector.favorites collector.delete_book_from_favorites('Азбука') - assert len(collector.favorites) == 0 - assert 'Азбука' not in collector.favorites + assert collector.get_list_of_favorites_books() == [] - def get_list_of_favorites_books(self, collector): + def test_get_list_of_favorites_books(self): + collector = BooksCollector() collector.add_new_book('Азбука') - collector.add_book_in_favorites('Азбука') collector.add_new_book('Алгебра') + collector.add_book_in_favorites('Азбука') collector.add_book_in_favorites('Алгебра') - assert len(collector.get_list_of_favorites_books()) == 2 - assert 'Азбука' in collector.get_list_of_favorites_books() - assert 'Алгебра' in collector.get_list_of_favorites_books() \ No newline at end of file + assert collector.get_list_of_favorites_books() == ['Азбука', 'Алгебра'] \ No newline at end of file From 102d8895ebc4feb4fa453c83cd6bc477719b86ae Mon Sep 17 00:00:00 2001 From: Serg-nt Date: Wed, 14 May 2025 13:41:37 +0300 Subject: [PATCH 3/5] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20README=20=D1=81=D0=BE=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1cc701d..286080d 100644 --- a/README.md +++ b/README.md @@ -1 +1,15 @@ -# qa_python \ No newline at end of file +# qa_python +Тесты для BooksCollector + +test_initial_state - проверка первоначального состояния +test_add_new_book_correct_add_book_successful_add - проверка добавления книги в словарь без жанра +test_add_new_book_incorrect_add_book_unsuccessful_add - проверка добавления книги в словарь +test_set_book_genre_correct_genre_success - проверка на успешную установку жанра из списка +test_set_book_genre_incorrect_genre_unsuccess - проверку жанр не входящий в список не устанавливается +test_get_book_genre - получение книг по жанрам +test_get_books_with_specific_genre - проверка выведения списка книг с определенным жанром +test_get_books_genre - проверка получения списка книг +test_get_books_for_children - проверка возврата детских книг +test_add_book_in_favorites - проверка добавления книги в избранное +test_delete_book_from_favorites - проверка удаления книги из избранного +test_get_list_of_favorites_books - проверка получения списка избранных книг \ No newline at end of file From f43f70272d9004eefa57296525eb523bba99678f Mon Sep 17 00:00:00 2001 From: mariya Date: Tue, 23 Jun 2026 21:40:07 +0500 Subject: [PATCH 4/5] =?UTF-8?q?=D0=9F=D0=BE=D0=BA=D1=80=D1=8B=D1=82=D0=B8?= =?UTF-8?q?=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE=D0=BD=D0=B0?= =?UTF-8?q?=D0=BB=D0=B0=20=D1=82=D0=B5=D1=81=D1=82=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 14 ++++- tests.py | 166 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 171 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 1cc701d..8fb2357 100644 --- a/README.md +++ b/README.md @@ -1 +1,13 @@ -# qa_python \ No newline at end of file +# qa_python + +----Реализованные тесты---- +1. добавления новой книги. +2. проверка валидации длины названия книги. +3. установка жанра существующей книги. +4. проверка обработки некорректных сценариев при установке жанра. +5. получение списка книг по жанру. +6. отбор книг подходящих для детей. +7. добавление книги в избранное. +8. удаление книги из избранного. +9. попытка повторного добавления книги в избранное. +10. получение словаря books_genre для пустой коллекции. \ No newline at end of file diff --git a/tests.py b/tests.py index 383385e..1e2bee6 100644 --- a/tests.py +++ b/tests.py @@ -1,13 +1,15 @@ from main import BooksCollector +import pytest # класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector # обязательно указывать префикс Test class TestBooksCollector: - - # пример теста: - # обязательно указывать префикс test_ - # дальше идет название метода, который тестируем add_new_book_ - # затем, что тестируем add_two_books - добавление двух книг + """ + Тест добавления новой книги. + Проверяет корректность работы метода add_new_book: + 1. Добавляем две книги. + Ожидаемый результат: обе книги добавились в словарь books_genre. + """ def test_add_new_book_add_two_books(self): # создаем экземпляр (объект) класса BooksCollector collector = BooksCollector() @@ -18,7 +20,155 @@ def test_add_new_book_add_two_books(self): # проверяем, что добавилось именно две # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 + assert len(collector.get_books_genre()) == 2 + + """ + Параметризованный тест проверки валидации длины названия книги. + Проверяет два негативных сценария: + - добавление книги с пустым названием; + - добавление книги с названием длиннее 40 символов. + Ожидаемый результат: ни одна из таких книг не добавляется в словарь books_genre. + """ + @pytest.mark.parametrize('book_name', [ + '', # тест с пустой строкой — книга не должна быть добавлена + 'a' * 41 # тест со строкой из 41 символа (превышает лимит в 40 символов) — книга не должна быть добавлена + ]) + def test_add_new_book_invalid_length(self, book_name): + collector = BooksCollector() + collector.add_new_book(book_name) + assert book_name not in collector.get_books_genre() + + """ + Тест установки жанра существующей книги. + Проверяет корректность работы метода get_book_genre: + 1. Добавляем книгу. + 2. Устанавливаем ей жанр. + 3. Получаем жанр через get_book_genre и убеждаемся, что он равен установленному жанру. + """ + @pytest.mark.parametrize('book_name, genre', [ + ( 'Король Лев','Мультфильмы'), # проверяем случай когда у книги есть жанр и что он равен 'Мультфильмы' + ('Дюна', '') # проверяем случай, когда у книги не задан жанр + ]) + def test_set_book_genre_valid_book_and_genre(self, book_name, genre): + collector = BooksCollector() + collector.add_new_book(book_name) + collector.set_book_genre(book_name, genre) + assert collector.get_book_genre(book_name) == genre + + """ + Параметризованный тест для проверки обработки некорректных сценариев при установке жанра. + Тестируются два случая: + - попытка установить жанр, отсутствующий в списке доступных (genre not in self.genre); + - попытка установить жанр для книги, которой нет в словаре books_genre. + Ожидаемый результат: жанр не устанавливается в обоих случаях. + """ + @pytest.mark.parametrize('book_name, genre', [ + ('Хоббит', 'Романтика'), # жанр 'Романтика' отсутствует в списке доступных жанров + ('Неизвестная книга', 'Фантастика') # книга 'Неизвестная книга' не добавлена в словарь + ]) + def test_set_book_genre_invalid_cases(self, book_name, genre): + collector = BooksCollector() + if book_name != 'Неизвестная книга': # добавляем книгу, если она не «Неизвестная книга» + collector.add_new_book(book_name) + collector.set_book_genre(book_name, genre) + # если книги нет или жанр недопустимый, жанр не должен установиться + assert collector.get_book_genre(book_name) != genre + + """ + Параметризованный тест получения списка книг по жанру. + Проверяет работу метода get_books_with_specific_genre для разных жанров: + - 'Фантастика' — должна вернуть ['Дюна']; + - 'Мультфильмы' — должна вернуть ['Король Лев']; + - 'Комедии' — список должен быть пустым (книг этого жанра нет). + """ + @pytest.mark.parametrize('genre, expected_books', [ + ('Фантастика', ['Дюна']), + ('Мультфильмы', ['Король Лев']), + ('Комедии', []) # проверяем случай, когда книг заданного жанра нет + ]) + def test_get_books_with_specific_genre_specific_genre(self, genre, expected_books): + collector = BooksCollector() + # добавляем тестовые книги + collector.add_new_book('Дюна') + collector.set_book_genre('Дюна', 'Фантастика') + collector.add_new_book('Король Лев') + collector.set_book_genre('Король Лев', 'Мультфильмы') + result = collector.get_books_with_specific_genre(genre) + assert sorted(result) == sorted(expected_books) - # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file + """ + Тест отбора книг, подходящих для детей. + Проверяет метод get_books_for_children: + 1. Добавляем книги разных жанров. + 2. Книги жанров из genre_age_rating ('Ужасы', 'Детективы') не должны попасть в результат. + 3. Остальные книги (без возрастного рейтинга) должны быть в списке. + Ожидаемый результат: в списке только 'Винни Пух' и 'Золушка'. + """ + def test_get_books_for_children_correct_selection(self): + collector = BooksCollector() + # книга для детей + 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 + + """ + Тест добавления книги в избранное. + Проверяет: + 1. Книга добавлена в books_genre через add_new_book. + 2. Книга успешно добавлена в список favorites через add_book_in_favorites. + 3. Книга присутствует в списке избранного после добавления. + """ + def test_add_book_in_favorites_valid_book(self): + collector = BooksCollector() + book_name = 'Маленький принц' + collector.add_new_book(book_name) + collector.add_book_in_favorites(book_name) + assert book_name in collector.get_list_of_favorites_books() + + """ + Тест удаления книги из избранного. + Проверяет сценарий: + 1. Книга добавлена в избранное. + 2. Вызывается метод delete_book_from_favorites. + 3. После удаления книга отсутствует в списке избранного. + """ + def test_delete_book_from_favorites_existing_book(self): + collector = BooksCollector() + book_name = '1984' + collector.add_new_book(book_name) + collector.add_book_in_favorites(book_name) + collector.delete_book_from_favorites(book_name) + assert book_name not in collector.get_list_of_favorites_books() + + """ + Тест попытки повторного добавления книги в избранное. + Проверяет, что книга не добавляется в список избранного повторно. + Шаги: + 1. Добавляем книгу в коллекцию. + 2. Добавляем её в избранное первый раз. + 3. Пытаемся добавить её в избранное второй раз. + 4. Проверяем, что в списке избранного только одна копия книги. + """ + def test_add_book_in_favorites_already_in_favorites(self): + collector = BooksCollector() + book_name = 'Война и мир' + collector.add_new_book(book_name) + collector.add_book_in_favorites(book_name) + collector.add_book_in_favorites(book_name) # повторная попытка добавления + favorites = collector.get_list_of_favorites_books() + assert favorites.count(book_name) == 1 + + """ + Тест получения словаря books_genre для пустой коллекции. + Проверяет, что при отсутствии добавленных книг метод возвращает пустой словарь. + """ + def test_get_books_genre_empty_collection(self): + collector = BooksCollector() + books_genre = collector.get_books_genre() + assert isinstance(books_genre, dict) + assert len(books_genre) == 0 \ No newline at end of file From 9929e99705a09e9e04058d042604e31bc891c66d Mon Sep 17 00:00:00 2001 From: mariya Date: Wed, 24 Jun 2026 20:28:04 +0500 Subject: [PATCH 5/5] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B9.=20=D0=9A=D0=BE=D1=80=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 22 ++++++++------- tests.py | 83 +++++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 75 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 8fb2357..a9e8979 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,15 @@ # qa_python ----Реализованные тесты---- -1. добавления новой книги. -2. проверка валидации длины названия книги. -3. установка жанра существующей книги. -4. проверка обработки некорректных сценариев при установке жанра. -5. получение списка книг по жанру. -6. отбор книг подходящих для детей. -7. добавление книги в избранное. -8. удаление книги из избранного. -9. попытка повторного добавления книги в избранное. -10. получение словаря books_genre для пустой коллекции. \ No newline at end of file +1. test_add_new_book_valid_name - добавления новой книги. +2. test_add_new_book_invalid_length - проверка валидации длины названия книги. +3. test_set_book_genre_valid_book_and_genre - установка жанра существующей книги. +4. test_set_book_genre_invalid_genre - установка недопустимого жанра. +5. test_set_book_genre_book_not_in_collection - установка жанра для книги, которой нет в коллекции. +6. test_get_books_with_specific_genre_specific_genre - получение списка книг по жанру. +7. test_get_books_for_children_correct_selection - отбор книг подходящих для детей. +8. test_add_book_in_favorites_valid_book - добавление книги в избранное. +9. test_delete_book_from_favorites_existing_book - удаление книги из избранного. +10. test_add_book_already_in_books_genre - повторное добавление книги в коллекцию. +11. test_add_book_in_favorites_already_in_favorites - попытка повторного добавления книги в избранное. +12. test_get_books_genre_empty_collection - получение пустой коллекции. \ No newline at end of file diff --git a/tests.py b/tests.py index 1e2bee6..76f544c 100644 --- a/tests.py +++ b/tests.py @@ -4,12 +4,11 @@ # класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector # обязательно указывать префикс Test class TestBooksCollector: - """ - Тест добавления новой книги. - Проверяет корректность работы метода add_new_book: - 1. Добавляем две книги. - Ожидаемый результат: обе книги добавились в словарь books_genre. - """ + + # пример теста: + # обязательно указывать префикс test_ + # дальше идет название метода, который тестируем add_new_book_ + # затем, что тестируем add_two_books - добавление двух книг def test_add_new_book_add_two_books(self): # создаем экземпляр (объект) класса BooksCollector collector = BooksCollector() @@ -22,6 +21,18 @@ def test_add_new_book_add_two_books(self): # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 assert len(collector.get_books_genre()) == 2 + """ + Тест добавления новой книги с валидным названием. + Проверяет корректность работы метода add_new_book: + 1. Добавляе книгу. + Ожидаемый результат: книга добавилена в словарь books_genre. + """ + def test_add_new_book_valid_name(self): + collector = BooksCollector() + book_name = "50 оттенков серого" + collector.add_new_book(book_name) + assert book_name in collector.get_books_genre() + """ Параметризованный тест проверки валидации длины названия книги. Проверяет два негативных сценария: @@ -56,23 +67,39 @@ def test_set_book_genre_valid_book_and_genre(self, book_name, genre): assert collector.get_book_genre(book_name) == genre """ - Параметризованный тест для проверки обработки некорректных сценариев при установке жанра. - Тестируются два случая: - - попытка установить жанр, отсутствующий в списке доступных (genre not in self.genre); - - попытка установить жанр для книги, которой нет в словаре books_genre. - Ожидаемый результат: жанр не устанавливается в обоих случаях. + Тест попытки установки недопустимого жанра. + Проверяет, что жанр не устанавливается, если он отсутствует в списке self.genre. + Сценарий: + 1. Создаём экземпляр BooksCollector. + 2. Добавляем книгу 'Хоббит'. + 3. Пытаемся установить ей жанр 'Романтика', которого нет в self.genre. + 4. Проверяем, что жанр книги не стал равен 'Романтика'. """ - @pytest.mark.parametrize('book_name, genre', [ - ('Хоббит', 'Романтика'), # жанр 'Романтика' отсутствует в списке доступных жанров - ('Неизвестная книга', 'Фантастика') # книга 'Неизвестная книга' не добавлена в словарь - ]) - def test_set_book_genre_invalid_cases(self, book_name, genre): + def test_set_book_genre_invalid_genre(self): + collector = BooksCollector() + book_name = 'Хоббит' + invalid_genre = 'Романтика' + collector.add_new_book(book_name) + collector.set_book_genre(book_name, invalid_genre) + assert collector.get_book_genre(book_name) != invalid_genre + + """ + Тест попытки установки жанра для книги, которой нет в коллекции. + Проверяет, что метод корректно обрабатывает ситуацию, когда книга + отсутствует в словаре books_genre. + Сценарий: + 1. Создаём экземпляр BooksCollector. + 2. Не добавляем книгу 'Неизвестная книга' в коллекцию. + 3. Пытаемся установить ей жанр 'Фантастика'. + 4. Проверяем, что книга не появилась в словаре и жанр не установлен. + """ + def test_set_book_genre_book_not_in_collection(self): collector = BooksCollector() - if book_name != 'Неизвестная книга': # добавляем книгу, если она не «Неизвестная книга» - collector.add_new_book(book_name) + book_name = 'Неизвестная книга' + genre = 'Фантастика' collector.set_book_genre(book_name, genre) - # если книги нет или жанр недопустимый, жанр не должен установиться - assert collector.get_book_genre(book_name) != genre + assert book_name not in collector.get_books_genre() + assert collector.get_book_genre(book_name) is None """ Параметризованный тест получения списка книг по жанру. @@ -145,6 +172,22 @@ def test_delete_book_from_favorites_existing_book(self): collector.delete_book_from_favorites(book_name) assert book_name not in collector.get_list_of_favorites_books() + """ + Тест попытки повторного добавления книги в коллекцию. + Проверяет, что книга не добавляется в список повторно. + Шаги: + 1. Добавляем книгу в коллекцию. + 2. Пытаемся добавить её в коллекцию второй раз. + 4. Проверяем, что в списке только одна копия книги. + """ + def test_add_book_already_in_books_genre(self): + collector = BooksCollector() + book_name = 'Война и мир' + collector.add_new_book(book_name) + collector.add_new_book(book_name) # повторная попытка добавления + books = collector.get_books_genre() + assert len(books) == 1 + """ Тест попытки повторного добавления книги в избранное. Проверяет, что книга не добавляется в список избранного повторно.