From 3c3978c9d2eb0c19f16fc2baebca8481cfed666f Mon Sep 17 00:00:00 2001 From: GibtTanya Date: Fri, 17 Jul 2026 00:03:03 +0300 Subject: [PATCH 1/2] new_commit --- README.md | 50 ++++++++++++- tests.py | 204 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 239 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 1cc701d..b546a0a 100644 --- a/README.md +++ b/README.md @@ -1 +1,49 @@ -# qa_python \ No newline at end of file +# qa_python +------------add_new_book----------- + +test_add_new_book_book_added - проверяет, что книга добавляется +test_add_new_book_duplicate_not_added - проверяет, что книга не добавляется дважды +test_add_new_book_length_zero_not_added - проверяет, что книга с пустой строкой вместо названия не добавляется в словарь +test_add_new_book_length_over40_not_added - проверяет, что книга с названием в 41 символ не добавляется в словарь + +------------set_book_genre----------- + +test_set_book_genre_valid_genre_and_name_add_successully - параметризованный тест, проверяющий, что все разрешенные жанры книг успешно устанавливаются к соответствующим книгам +test_set_book_genre_invalid_genre_not_added - проверяет, что отсутствующий в списке жанров жанр не устанавилвается к книге. +test_set_book_genre_add_genre_book_not_in_collection_book_is_none - проверяет, что при добавлении жанра к несуществующей книге в коллекции, книга в коллекцию не добавляется + +------------get_book_genre----------- + +test_get_book_genre_book_with_genre_correct_genre - проверяет,что кооректный жанр успешно получен у книги с жанром. +test_get_book_genre_book_without_genre_empty_string - проверяет, что у книги без жанра метод возвращает пустую строку, т.к. по умолчанию у книги вместо жанра пустая строка. + +------------get_books_with_specific_genre----------- + +test_get_books_with_specific_genre_valid_genre_correct_list - проверяет, что метод возвращает корректный списк книг по указанному жанру +test_get_books_with_specific_genre_empty_collection_empty_list - проверяет, что метод возвращает пустую коллекцию, если указать отсутствующий в списке жанров жанр. +test_get_books_with_specific_genre_valid_genre_not_included_empty_list - проверяет, что метод возвращает пустую коллекцию, если указать допустимый жанр, который не прикреплен ни к одной книге в коллекции. + +------------get_books_genre----------- + +test_get_books_genre_no_added_books_empty_collection - проверяет, что метод возвращает пустую коллекцию, если в нее ничего не добавлено +test_get_books_genre_collection_with_book_correct_collection - проверяет, что метод возврашает коллекцию с корректной книгой, если она в нее добавлялась + +------------get_books_for_children----------- + +test_get_books_for_children_collection_with_books_for_children_correct_list - проверяет, что метод возвращает корректный список книг для детей, даже если в коллекции, есть книги, которые не подходят по возрасту. + +------------add_book_in_favorites----------- + +test_add_book_in_favorites_book_from_current_collection_successfully_added - проверяет, что книга из коллекции успешно добавляется в избранное +test_add_book_in_favorites_book_already_in_favorites_not_duplicated - проверяет, что книга не добавляется в избранное дважды +test_add_book_in_favorites_book_not_in_collection_not_added - проверяет, что книга не добавляется в избранное, если ее нет в коллекции + +------------delete_book_from_favorites----------- + +test_delete_book_from_favorites_book_in_favorites_deleted - проверяет, что книга успешно удаляется из избранного +test_delete_book_from_favorites_book_not_in_favorites_list_did_not_changed - проверяет, что список не ломается, при удалении из избранного книги, которой там нет. + +------------get_list_of_favorites_books----------- + +test_get_list_of_favorites_books_empty_list - проверяет, что изначально список избранного пуст +test_get_list_of_favorites_books_not_empty_favorites_correct_list - проверяет, что если в избранном что-то есть, то возвращается корректный список \ No newline at end of file diff --git a/tests.py b/tests.py index 383385e..385276c 100644 --- a/tests.py +++ b/tests.py @@ -1,24 +1,200 @@ from main import BooksCollector +import pytest # класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector # обязательно указывать префикс Test class TestBooksCollector: +# ------------add_new_book----------- + def test_add_new_book_book_added(self): + collector = BooksCollector() + collector.add_new_book('Дюна') + + assert len(collector.get_books_genre()) == 1 + + def test_add_new_book_duplicate_not_added(self): + collector = BooksCollector() + collector.add_new_book('Дюна') + collector.add_new_book('Дюна') + + assert len(collector.get_books_genre()) == 1 + + def test_add_new_book_length_zero_not_added(self): + collector = BooksCollector() + collector.add_new_book('') + + assert len(collector.get_books_genre()) == 0 + + def test_add_new_book_length_over40_not_added(self): + collector = BooksCollector() + collector.add_new_book('ДюнаДюнаДюнаДюнаДюнаДюнаДюнаДюнаДюнаДюнаД') + + assert len(collector.get_books_genre()) == 0 + +# ------------set_book_genre----------- + + @pytest.mark.parametrize('name, genre', [['Дюна', 'Фантастика'], ['Гарри Поттер', 'Детективы'], ['Эйс Вентура', 'Комедии'],['Мгла', 'Ужасы'], ['Тачки', 'Мультфильмы']]) + def test_set_book_genre_valid_genre_and_name_add_successully(self, name, genre): + collector = BooksCollector() + collector.add_new_book(name) + collector.set_book_genre(name, genre) + + assert collector.get_book_genre(name) == genre + + # @pytest.mark.parametrize('name, genre', [['Дюна', 'Фантастика'], ['Гарри Поттер', 'Детективы'], ['Эйс Вентура', 'Комедии']]) + def test_set_book_genre_invalid_genre_not_added(self): + collector = BooksCollector() + collector.add_new_book('Дюна') + collector.set_book_genre("Дюна", 'Приколы') + + assert collector.get_book_genre("Дюна") == '' + + def test_set_book_genre_add_genre_book_not_in_collection_book_is_none(self): + collector = BooksCollector() + collector.set_book_genre("Гарри Поттер", 'Фантастика') + books_collection = collector.get_books_genre() + + assert books_collection.get('Гарри Поттер') is None + +# ------------get_book_genre----------- + + def test_get_book_genre_book_with_genre_correct_genre(self): + collector = BooksCollector() + collector.add_new_book('Дюна') + collector.set_book_genre('Дюна', 'Фантастика') + + assert collector.get_book_genre('Дюна') == 'Фантастика' + + def test_get_book_genre_book_without_genre_empty_string(self): + collector = BooksCollector() + collector.add_new_book('Дюна') + + assert collector.get_book_genre('Дюна') == '' + +# ------------get_books_with_specific_genre----------- + + def test_get_books_with_specific_genre_valid_genre_correct_list(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('Эйс Вентура', 'Комедии') + + assert collector.get_books_with_specific_genre("Фантастика") == ['Дюна', 'Гарри Поттер'] + + def test_get_books_with_specific_genre_empty_collection_empty_list(self): + collector = BooksCollector() + + assert len(collector.get_books_with_specific_genre('Детектив')) == 0 - # пример теста: - # обязательно указывать префикс test_ - # дальше идет название метода, который тестируем add_new_book_ - # затем, что тестируем add_two_books - добавление двух книг - def test_add_new_book_add_two_books(self): - # создаем экземпляр (объект) класса BooksCollector + def test_get_books_with_specific_genre_invalid_genre_empty_list(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('Эйс Вентура', 'Комедии') - # добавляем две книги - collector.add_new_book('Гордость и предубеждение и зомби') - collector.add_new_book('Что делать, если ваш кот хочет вас убить') + assert len(collector.get_books_with_specific_genre('Приколы')) == 0 + + def test_get_books_with_specific_genre_valid_genre_not_included_empty_list(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('Эйс Вентура', 'Комедии') + + assert len(collector.get_books_with_specific_genre('Мультфильмы')) == 0 + +# ------------get_books_genre----------- + + def test_get_books_genre_no_added_books_empty_collection(self): + collector = BooksCollector() + + assert collector.get_books_genre() == {} + + def test_get_books_genre_collection_with_book_correct_collection(self): + collector = BooksCollector() + collector.add_new_book('Дюна') + + assert collector.get_books_genre() == {'Дюна': ''} + +# ------------get_books_for_children----------- + + def test_get_books_for_children_collection_with_books_for_children_correct_list(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('Эйс Вентура', 'Комедии') + collection = collector.get_books_for_children() + + assert collection == ['Дюна', 'Эйс Вентура'] + +# ------------add_book_in_favorites----------- + + def test_add_book_in_favorites_book_from_current_collection_successfully_added(self): + collector = BooksCollector() + collector.add_new_book('Дюна') + collector.add_book_in_favorites('Дюна') + favorites = collector.get_list_of_favorites_books() + + assert favorites == ['Дюна'] + + def test_add_book_in_favorites_book_already_in_favorites_not_duplicated(self): + collector = BooksCollector() + collector.add_new_book('Дюна') + collector.add_book_in_favorites('Дюна') + collector.add_book_in_favorites('Дюна') + favorites = collector.get_list_of_favorites_books() + + assert favorites == ['Дюна'] - # проверяем, что добавилось именно две - # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 + def test_add_book_in_favorites_book_not_in_collection_not_added(self): + collector = BooksCollector() + collector.add_book_in_favorites('Дюна') + favorites = collector.get_list_of_favorites_books() + + assert 'Дюна' not in favorites + +# ------------delete_book_from_favorites----------- + + def test_delete_book_from_favorites_book_in_favorites_deleted(self): + collector = BooksCollector() + collector.add_book_in_favorites('Дюна') + collector.delete_book_from_favorites('Дюна') + favorites = collector.get_list_of_favorites_books() + + assert favorites == [] + + def test_delete_book_from_favorites_book_not_in_favorites_list_did_not_changed(self): + collector = BooksCollector() + collector.add_new_book('Дюна') + collector.add_book_in_favorites('Дюна') + collector.delete_book_from_favorites('Гарри Поттер') + favorites = collector.get_list_of_favorites_books() + + assert favorites == ['Дюна'] + +# ------------get_list_of_favorites_books----------- + + def test_get_list_of_favorites_books_empty_list(self): + collector = BooksCollector() + + assert collector.get_list_of_favorites_books() == [] + + + def test_get_list_of_favorites_books_not_empty_favorites_correct_list(self): + collector = BooksCollector() + collector.add_new_book('Дюна') + collector.add_book_in_favorites('Дюна') + favorites = collector.get_list_of_favorites_books() - # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file + assert favorites == ['Дюна'] + \ No newline at end of file From 3d243ef268315493f088615ae5690becddacf036 Mon Sep 17 00:00:00 2001 From: GibtTanya Date: Fri, 17 Jul 2026 19:58:50 +0300 Subject: [PATCH 2/2] edit bounds tests --- README.md | 4 ++-- tests.py | 15 ++++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index b546a0a..685044a 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,8 @@ test_add_new_book_book_added - проверяет, что книга добавляется test_add_new_book_duplicate_not_added - проверяет, что книга не добавляется дважды -test_add_new_book_length_zero_not_added - проверяет, что книга с пустой строкой вместо названия не добавляется в словарь -test_add_new_book_length_over40_not_added - проверяет, что книга с названием в 41 символ не добавляется в словарь +test_add_new_book_length_outside0and40_not_added - проверяет граничные значения за пределами диапазона 0-41 +test_add_new_book_length_inside0and40_added - проверяет граничные значения в пределах диапазона 0-41 ------------set_book_genre----------- diff --git a/tests.py b/tests.py index 385276c..f20099a 100644 --- a/tests.py +++ b/tests.py @@ -17,18 +17,20 @@ def test_add_new_book_duplicate_not_added(self): collector.add_new_book('Дюна') assert len(collector.get_books_genre()) == 1 - - def test_add_new_book_length_zero_not_added(self): + + @pytest.mark.parametrize('name', ['', 'а' * 41,'а' * 100 ]) + def test_add_new_book_length_outside0and40_not_added(self, name): collector = BooksCollector() - collector.add_new_book('') + collector.add_new_book(name) assert len(collector.get_books_genre()) == 0 - def test_add_new_book_length_over40_not_added(self): + @pytest.mark.parametrize('name', ['а', 'аа', 'а' * 20, 'а' * 39, 'а' * 40 ]) + def test_add_new_book_length_inside0and40_added(self, name): collector = BooksCollector() - collector.add_new_book('ДюнаДюнаДюнаДюнаДюнаДюнаДюнаДюнаДюнаДюнаД') + collector.add_new_book(name) - assert len(collector.get_books_genre()) == 0 + assert name in collector.get_books_genre() # ------------set_book_genre----------- @@ -40,7 +42,6 @@ def test_set_book_genre_valid_genre_and_name_add_successully(self, name, genre): assert collector.get_book_genre(name) == genre - # @pytest.mark.parametrize('name, genre', [['Дюна', 'Фантастика'], ['Гарри Поттер', 'Детективы'], ['Эйс Вентура', 'Комедии']]) def test_set_book_genre_invalid_genre_not_added(self): collector = BooksCollector() collector.add_new_book('Дюна')