From 8ea7c10934fd0efb8b43d949010bf479ae542355 Mon Sep 17 00:00:00 2001 From: Eva Date: Fri, 13 Feb 2026 01:35:16 +0300 Subject: [PATCH 1/5] Add tests for BooksCollector --- README.md | 27 ++++- __pycache__/main.cpython-314.pyc | Bin 0 -> 3699 bytes .../tests.cpython-314-pytest-9.0.2.pyc | Bin 0 -> 14195 bytes tests.py | 106 +++++++++++++++--- 4 files changed, 119 insertions(+), 14 deletions(-) create mode 100644 __pycache__/main.cpython-314.pyc create mode 100644 __pycache__/tests.cpython-314-pytest-9.0.2.pyc diff --git a/README.md b/README.md index 1cc701d..bd5acbe 100644 --- a/README.md +++ b/README.md @@ -1 +1,26 @@ -# qa_python \ No newline at end of file +# В проекте реализованы тесты для класса BooksCollector. + +# Покрыты методы: + +# + +# \- add\_new\_book - обычный + длинное имя + параметризация + +# \- set\_book\_genre - корректный / некорректный + +# \- get\_book\_genre + +# \- get\_books\_with\_specific\_genre + +# \- get\_books\_genre + +# \- get\_books\_for\_children + +# \- add\_book\_in\_favorites + +# \- delete\_book\_from\_favorites + +# \- get\_list\_of\_favorites\_books + +# Используется параметризация для проверки добавления книг. + diff --git a/__pycache__/main.cpython-314.pyc b/__pycache__/main.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..59dee353c7198dd63c6ca2b7409fc2c5e5a8d8fa GIT binary patch literal 3699 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 Date: Fri, 13 Feb 2026 01:36:29 +0300 Subject: [PATCH 2/5] Remove pycache and add gitignore --- .gitignore | 2 ++ __pycache__/main.cpython-314.pyc | Bin 3699 -> 0 bytes __pycache__/main.cpython-38.pyc | Bin 2030 -> 0 bytes __pycache__/test.cpython-38-pytest-7.1.2.pyc | Bin 8183 -> 0 bytes __pycache__/tests.cpython-314-pytest-9.0.2.pyc | Bin 14195 -> 0 bytes 5 files changed, 2 insertions(+) create mode 100644 .gitignore delete mode 100644 __pycache__/main.cpython-314.pyc delete mode 100644 __pycache__/main.cpython-38.pyc delete mode 100644 __pycache__/test.cpython-38-pytest-7.1.2.pyc delete mode 100644 __pycache__/tests.cpython-314-pytest-9.0.2.pyc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7a60b85 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +__pycache__/ +*.pyc diff --git a/__pycache__/main.cpython-314.pyc b/__pycache__/main.cpython-314.pyc deleted file mode 100644 index 59dee353c7198dd63c6ca2b7409fc2c5e5a8d8fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3699 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 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 b2898a8a207c1ae4014c5ac436acbbfebcdd6cd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8183 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 Date: Fri, 13 Feb 2026 15:55:43 +0300 Subject: [PATCH 3/5] Fix tests structure after review --- tests.py | 99 ++++++++++++++++++++++++-------------------------------- 1 file changed, 43 insertions(+), 56 deletions(-) diff --git a/tests.py b/tests.py index d6c0aeb..bbde934 100644 --- a/tests.py +++ b/tests.py @@ -2,103 +2,90 @@ from main import BooksCollector -class TestBooksCollector: +@pytest.fixture +def collector(): + return BooksCollector() - def test_add_new_book_add_two_books(self): - collector = BooksCollector() - collector.add_new_book('Гордость и предубеждение и зомби') - collector.add_new_book('Что делать, если ваш кот хочет вас убить') +class TestBooksCollector: - assert len(collector.get_books_genre()) == 2 + def test_add_new_book_add_two_books(self, collector): + collector.add_new_book('Книга 1') + collector.add_new_book('Книга 2') - def test_add_new_book_name_more_40_symbols_not_added(self): - collector = BooksCollector() + assert len(collector.books_genre) == 2 + def test_add_new_book_name_more_40_symbols_not_added(self, collector): long_name = 'А' * 41 + collector.add_new_book(long_name) - assert len(collector.get_books_genre()) == 0 + assert len(collector.books_genre) == 0 - def test_set_book_genre_success(self): - collector = BooksCollector() + def test_set_book_genre_success(self, collector): + collector.books_genre['Оно'] = '' - collector.add_new_book('Оно') collector.set_book_genre('Оно', 'Ужасы') - assert collector.get_book_genre('Оно') == 'Ужасы' - - def test_set_book_genre_not_in_genre_list(self): - collector = BooksCollector() + assert collector.books_genre['Оно'] == 'Ужасы' - collector.add_new_book('Оно') - collector.set_book_genre('Оно', 'Роман') + def test_get_book_genre(self, collector): + collector.books_genre['Оно'] = 'Ужасы' - assert collector.get_book_genre('Оно') == '' + result = collector.get_book_genre('Оно') - def test_get_books_with_specific_genre(self): - collector = BooksCollector() + assert result == 'Ужасы' - collector.add_new_book('Книга 1') - collector.add_new_book('Книга 2') - - collector.set_book_genre('Книга 1', 'Фантастика') - collector.set_book_genre('Книга 2', 'Ужасы') + def test_get_books_with_specific_genre(self, collector): + collector.books_genre = { + 'Книга 1': 'Фантастика', + 'Книга 2': 'Ужасы' + } result = collector.get_books_with_specific_genre('Фантастика') assert result == ['Книга 1'] - 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('Страшная книга', 'Ужасы') + def test_get_books_for_children(self, collector): + collector.books_genre = { + 'Детская': 'Комедии', + 'Страшная': 'Ужасы' + } result = collector.get_books_for_children() - assert result == ['Книга детям'] + assert result == ['Детская'] - def test_add_book_in_favorites(self): - collector = BooksCollector() + def test_add_book_in_favorites(self, collector): + collector.books_genre['Оно'] = '' - collector.add_new_book('Оно') collector.add_book_in_favorites('Оно') - assert collector.get_list_of_favorites_books() == ['Оно'] + assert collector.favorites == ['Оно'] - def test_add_book_in_favorites_twice_not_added(self): - collector = BooksCollector() + def test_get_list_of_favorites_books(self, collector): + collector.favorites = ['Оно', 'Дюна'] - collector.add_new_book('Оно') - collector.add_book_in_favorites('Оно') - collector.add_book_in_favorites('Оно') + result = collector.get_list_of_favorites_books() - assert len(collector.get_list_of_favorites_books()) == 1 + assert result == ['Оно', 'Дюна'] - def test_delete_book_from_favorites(self): - collector = BooksCollector() + def test_delete_book_from_favorites(self, collector): + collector.favorites = ['Оно'] - collector.add_new_book('Оно') - collector.add_book_in_favorites('Оно') collector.delete_book_from_favorites('Оно') - assert collector.get_list_of_favorites_books() == [] + assert collector.favorites == [] @pytest.mark.parametrize( 'book_name', [ - 'Книга 1', + 'Книга', 'Очень интересная книга', - 'Python для начинающих' + 'Python для всех' ] ) - def test_add_new_book_parametrized(self, book_name): - collector = BooksCollector() - + def test_add_new_book_parametrized(self, collector, book_name): collector.add_new_book(book_name) - assert book_name in collector.get_books_genre() + assert book_name in collector.books_genre From cb2ba4205cdb5b0eb1ee901b098a110e9f23c925 Mon Sep 17 00:00:00 2001 From: Eva Date: Sat, 14 Feb 2026 00:49:59 +0300 Subject: [PATCH 4/5] Move fixture to conftest and add get_books_genre test --- .idea/.gitignore | 10 ++++++++++ .idea/inspectionProfiles/profiles_settings.xml | 6 ++++++ .idea/misc.xml | 7 +++++++ .idea/modules.xml | 8 ++++++++ .idea/qa_python.iml | 8 ++++++++ .idea/vcs.xml | 6 ++++++ conftest.py | 7 +++++++ tests.py | 18 +++++++++++++----- 8 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/qa_python.iml create mode 100644 .idea/vcs.xml create mode 100644 conftest.py diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..b60ab01 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..718fab5 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..616a194 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/qa_python.iml b/.idea/qa_python.iml new file mode 100644 index 0000000..f6f1505 --- /dev/null +++ b/.idea/qa_python.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..c8397c9 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..b02f1c6 --- /dev/null +++ b/conftest.py @@ -0,0 +1,7 @@ +import pytest +from main import BooksCollector + + +@pytest.fixture +def collector(): + return BooksCollector() diff --git a/tests.py b/tests.py index bbde934..fae5599 100644 --- a/tests.py +++ b/tests.py @@ -2,11 +2,6 @@ from main import BooksCollector -@pytest.fixture -def collector(): - return BooksCollector() - - class TestBooksCollector: def test_add_new_book_add_two_books(self, collector): @@ -36,6 +31,19 @@ def test_get_book_genre(self, collector): assert result == 'Ужасы' + def test_get_books_genre(self, collector): + collector.books_genre = { + 'Оно': 'Ужасы', + 'Дюна': 'Фантастика' + } + + result = collector.get_books_genre() + + assert result == { + 'Оно': 'Ужасы', + 'Дюна': 'Фантастика' + } + def test_get_books_with_specific_genre(self, collector): collector.books_genre = { 'Книга 1': 'Фантастика', From 43736612c6fefc9c0c75343e687d55b420e2128a Mon Sep 17 00:00:00 2001 From: Eva Date: Sat, 14 Feb 2026 00:51:45 +0300 Subject: [PATCH 5/5] Remove .idea from repository and add to gitignore --- .gitignore | 1 + .idea/.gitignore | 10 ---------- .idea/inspectionProfiles/profiles_settings.xml | 6 ------ .idea/misc.xml | 7 ------- .idea/modules.xml | 8 -------- .idea/qa_python.iml | 8 -------- .idea/vcs.xml | 6 ------ 7 files changed, 1 insertion(+), 45 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/inspectionProfiles/profiles_settings.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/qa_python.iml delete mode 100644 .idea/vcs.xml diff --git a/.gitignore b/.gitignore index 7a60b85..aa6cef2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ __pycache__/ *.pyc +.idea/ diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index b60ab01..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Ignored default folder with query files -/queries/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -# Editor-based HTTP Client requests -/httpRequests/ diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2d..0000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 718fab5..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 616a194..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/qa_python.iml b/.idea/qa_python.iml deleted file mode 100644 index f6f1505..0000000 --- a/.idea/qa_python.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index c8397c9..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file