diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e15006d --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +__pycache__/ +*.log +*.cache +.coverage +__pycache__/ +.coverage +htmlcov/ diff --git a/README.md b/README.md index 1cc701d..34a8e3e 100644 --- a/README.md +++ b/README.md @@ -1 +1,30 @@ -# qa_python \ No newline at end of file + +## Фикстуры +1. `collector` - чистый экземпляр BooksCollector +2. `collector_with_books` - подготовленный экземпляр с: + - 2 книгами разных жанров + - 1 книгой в избранном + +## Группы тестов + +### 1. Тесты добавления книг +- Добавление книги с валидным названием +- Попытка добавить книгу с слишком коротким названием +- Попытка добавить книгу с слишком длинным названием +- Попытка добавить дубликат книги +- Проверка, что у новой книги нет жанра + +### 2. Тесты работы с жанрами +- Установка валидного жанра +- Попытка установки недопустимого жанра +- Попытка установки жанра несуществующей книге + +### 3. Тесты с подготовленными данными +- Получение книг определенного жанра +- Получение книг для детей (проверка детских жанров) + +### 4. Тесты работы с избранным +- Добавление книги в избранное +- Попытка повторного добавления в избранное +- Удаление книги из избранного +- Получение списка избранных книг diff --git a/__pycache__/main.cpython-38.pyc b/__pycache__/main.cpython-38.pyc deleted file mode 100644 index 5786eeb..0000000 Binary files a/__pycache__/main.cpython-38.pyc and /dev/null differ diff --git a/__pycache__/test.cpython-38-pytest-7.1.2.pyc b/__pycache__/test.cpython-38-pytest-7.1.2.pyc deleted file mode 100644 index b2898a8..0000000 Binary files a/__pycache__/test.cpython-38-pytest-7.1.2.pyc and /dev/null differ diff --git a/tests.py b/tests.py index 383385e..ee26ee1 100644 --- a/tests.py +++ b/tests.py @@ -1,24 +1,91 @@ +import pytest from main import BooksCollector -# класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector -# обязательно указывать префикс Test class TestBooksCollector: + @pytest.fixture + def collector(self): + return BooksCollector() + + @pytest.fixture + def collector_with_books(self): + collector = BooksCollector() + collector.add_new_book("Книга 1") + collector.add_new_book("Книга 2") + collector.set_book_genre("Книга 1", "Фантастика") + collector.set_book_genre("Книга 2", "Комедии") + collector.add_book_in_favorites("Книга 1") + return collector - # пример теста: - # обязательно указывать префикс test_ - # дальше идет название метода, который тестируем add_new_book_ - # затем, что тестируем add_two_books - добавление двух книг - def test_add_new_book_add_two_books(self): - # создаем экземпляр (объект) класса BooksCollector - collector = BooksCollector() + def test_add_new_book_valid_name(self, collector): + collector.add_new_book('Том Сойер') + assert collector.get_book_genre('Том Сойер') is not None - # добавляем две книги - collector.add_new_book('Гордость и предубеждение и зомби') - collector.add_new_book('Что делать, если ваш кот хочет вас убить') + def test_add_new_book_invalid_name_too_short(self, collector): + collector.add_new_book('') + assert collector.get_book_genre('') is None - # проверяем, что добавилось именно две - # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 + def test_add_new_book_invalid_name_too_long(self, collector): + long_name = 'x' * 41 + collector.add_new_book(long_name) + assert collector.get_book_genre(long_name) is None - # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file + def test_add_new_book_duplicate(self, collector): + collector.add_new_book('Том Сойер') + collector.add_new_book('Том Сойер') + assert len(collector.get_books_genre()) == 1 + + def test_added_book_has_no_genre(self, collector): + collector.add_new_book('Том Сойер') + assert collector.get_book_genre('Том Сойер') == '' + + def test_set_book_genre_valid(self, collector): + collector.add_new_book('Том Сойер') + collector.set_book_genre('Том Сойер', 'Фантастика') + assert collector.get_book_genre('Том Сойер') == 'Фантастика' + + def test_set_book_genre_invalid_genre(self, collector): + collector.add_new_book('Том Сойер') + collector.set_book_genre('Том Сойер', 'Фэнтези') + assert collector.get_book_genre('Том Сойер') == '' + + def test_set_book_genre_nonexistent_book(self, collector): + collector.set_book_genre('Несуществующая книга', 'Фантастика') + assert collector.get_book_genre('Несуществующая книга') is None + + def test_get_book_genre_for_book_with_genre(self, collector_with_books): + assert collector_with_books.get_book_genre("Книга 1") == "Фантастика" + + def test_get_book_genre_for_book_without_genre(self, collector): + collector.add_new_book("Книга без жанра") + assert collector.get_book_genre("Книга без жанра") == "" + + def test_get_books_with_specific_genre(self, collector_with_books): + books = collector_with_books.get_books_with_specific_genre('Фантастика') + assert "Книга 1" in books + assert len(books) == 1 + + def test_get_books_for_children(self, collector_with_books): + children_books = collector_with_books.get_books_for_children() + assert "Книга 1" in children_books + assert "Книга 2" in children_books + assert len(children_books) == 2 + + def test_add_book_in_favorites(self, collector): + collector.add_new_book('Том Сойер') + collector.add_book_in_favorites('Том Сойер') + assert 'Том Сойер' in collector.get_list_of_favorites_books() + + def test_add_book_in_favorites_twice(self, collector): + collector.add_new_book('Том Сойер') + collector.add_book_in_favorites('Том Сойер') + collector.add_book_in_favorites('Том Сойер') + assert len(collector.get_list_of_favorites_books()) == 1 + + def test_delete_book_from_favorites(self, collector_with_books): + collector_with_books.delete_book_from_favorites("Книга 1") + assert "Книга 1" not in collector_with_books.get_list_of_favorites_books() + + def test_get_list_of_favorites_books(self, collector_with_books): + favorites = collector_with_books.get_list_of_favorites_books() + assert "Книга 1" in favorites + assert len(favorites) == 1 \ No newline at end of file