Skip to content

480 criteria tests #589

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file modified tests/scripts/docker_check_tests.sh
100755 → 100644
Empty file.
13 changes: 13 additions & 0 deletions tests/tests_check/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
## For local tests:

```bash
$ pip install -r requirements.txt
```

### Run tests:

```bash

$ python -m unittest discover tests/tests_check

```
Empty file added tests/tests_check/__init__.py
Empty file.
11 changes: 11 additions & 0 deletions tests/tests_check/base_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import unittest
from unittest.mock import MagicMock

class BaseTestCase(unittest.TestCase):
def setUp(self):
self.file_info = {
'file': MagicMock(),
'filename': 'test.pdf',
'pdf_id': '1234',
'file_type': {'report_type': 'VKR'}
}
58 changes: 58 additions & 0 deletions tests/tests_check/test_banned_words.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import unittest
from unittest.mock import MagicMock
from app.main.checks.presentation_checks.banned_words import PresBannedWordsCheck
from app.main.checks.base_check import morph

class TestPresBannedWordsCheck(unittest.TestCase):

def setUp(self):
self.mock_file_info = {
'file': MagicMock(),
'filename': 'test_presentation.pptx',
'pdf_id': '12345'
}

self.mock_text_slides = [
"Это пример текста на первом слайде",
"Запрещенное слово тут",
"Еще один пример текста на слайде",
"Снова запрещенное слово на слайде",
"Обычный текст без запрещенных слов"
]

self.mock_file_info['file'].get_text_from_slides = MagicMock(return_value=self.mock_text_slides)
self.checker = PresBannedWordsCheck(self.mock_file_info, words=['запрещенное', 'слово'], min_count=1, max_count=3)

def test_no_banned_words(self):
self.mock_file_info['file'].get_text_from_slides = MagicMock(return_value=[
"Просто пример текста."
])
result = self.checker.check()
self.assertEqual(result['score'], 1)
self.assertEqual(result['verdict'][0], "Пройдена!")

def test_banned_words_below_min_count(self):
self.mock_file_info['file'].get_text_from_slides = MagicMock(return_value=[
"Запрещенное слово тут",
"Еще один пример текста",
"Снова запрещенное слово"
])
self.checker = PresBannedWordsCheck(self.mock_file_info, words=['запрещенное', 'слово'], min_count=3, max_count=6)
result = self.checker.check()
self.assertEqual(result['score'], 1.0)
self.assertIn("Обнаружены запретные слова!", result['verdict'][0])

def test_banned_words_above_max_count(self):
self.mock_file_info['file'].get_text_from_slides = MagicMock(return_value=[
"Запрещенное слово тут",
"Еще одно запрещенное слово тут",
"Снова запрещенное слово",
"Запрещенное слово тут снова"
])
result = self.checker.check()
self.assertEqual(result['score'], 0)
self.assertIn("Обнаружены запретные слова!", result['verdict'][0])


if __name__ == "__main__":
unittest.main()
90 changes: 90 additions & 0 deletions tests/tests_check/test_banned_words_check.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import unittest
from tests.tests_check.base_test import BaseTestCase
from app.main.checks.base_check import morph, answer
from app.main.checks.report_checks import ReportBannedWordsCheck

class TestReportBannedWordsCheck(BaseTestCase):
def setUp(self):
super().setUp()
self.file_info['file'].page_counter.return_value = 5
self.check = ReportBannedWordsCheck(file_info=self.file_info, words=["мы"], min_count=3, max_count=6)

def test_check_not_enough_pages(self):
self.file_info['file'].page_counter.return_value = 3
result = self.check.check()
self.assertEqual(result, answer(False, "В отчете недостаточно страниц. Нечего проверять."))

def test_check_no_banned_words(self):
self.file_info['file'].pdf_file.get_text_on_page.return_value = {
1: "Пример текста без запретных слов.",
2: "Еще один пример текста.",
3: "Текст без запретных слов.",
4: "Текст без запретных слов.",
5: "Текст без запретных слов."
}
result = self.check.check()
expected_output = 'Пройдена!'
expected_result = answer(1, expected_output)
self.assertEqual(result, expected_result)

def test_check_with_banned_words_in_range(self):
'''
исходя из кода критерия, из каждой строки берется только одно вхождение каждого слова
(создается множество), поэтому в этом примере запретных слов 5, что нарушает здравый смысл
'''
self.file_info['file'].pdf_file.get_text_on_page.return_value = {
1: "мы мы мы",
2: "мы мы",
3: "мы",
4: "мы мы",
5: "мы"
}
result = self.check.check()
expected_output = (
'<b>Запрещенные слова: мы</b><br>Обнаружены запретные слова! <br><br>'
'Страница №1:<br>Строка 1: мы мы мы <b>[мы]</b><br><br>'
'Страница №2:<br>Строка 1: мы мы <b>[мы]</b><br><br>'
'Страница №3:<br>Строка 1: мы <b>[мы]</b><br><br>'
'Страница №4:<br>Строка 1: мы мы <b>[мы]</b><br><br>'
'Страница №5:<br>Строка 1: мы <b>[мы]</b><br><br>'
)
expected_result = answer(0, expected_output)
self.assertEqual(result['score'], expected_result['score'])
self.assertEqual(result['verdict'][0], expected_result['verdict'][0])

def test_check_with_banned_words_exceeding_max(self):
self.file_info['file'].page_counter.return_value = 5
self.file_info['file'].pdf_file.get_text_on_page.return_value = {
1: "мы идем домой\nмы говорим о нас\nмы идем на работу",
2: "мы любим природу\nмы читаем книги\nмы изучаем языки",
3: "мы пишем код\nмы гуляем в парке\nмы играем в игры",
4: "мы поем песни\nмы танцуем дома\nмы готовим ужин",
5: "мы смотрим фильмы\nмы слушаем музыку\nмы общаемся с друзьями"
}

checker = ReportBannedWordsCheck(self.file_info, words=["мы"], min_count=3, max_count=6)
result = checker.check()
expected_output = (
'<b>Запрещенные слова: мы</b><br>'
'Обнаружены запретные слова! <br><br>'
'Страница №1:<br>Строка 1: мы идем домой <b>[мы]</b><br>'
'Строка 2: мы говорим о нас <b>[мы]</b><br>'
'Строка 3: мы идем на работу <b>[мы]</b><br><br>'
'Страница №2:<br>Строка 1: мы любим природу <b>[мы]</b><br>'
'Строка 2: мы читаем книги <b>[мы]</b><br>'
'Строка 3: мы изучаем языки <b>[мы]</b><br><br>'
'Страница №3:<br>Строка 1: мы пишем код <b>[мы]</b><br>'
'Строка 2: мы гуляем в парке <b>[мы]</b><br>'
'Строка 3: мы играем в игры <b>[мы]</b><br><br>'
'Страница №4:<br>Строка 1: мы поем песни <b>[мы]</b><br>'
'Строка 2: мы танцуем дома <b>[мы]</b><br>'
'Строка 3: мы готовим ужин <b>[мы]</b><br><br>'
'Страница №5:<br>Строка 1: мы смотрим фильмы <b>[мы]</b><br>'
'Строка 2: мы слушаем музыку <b>[мы]</b><br>'
'Строка 3: мы общаемся с друзьями <b>[мы]</b><br><br>'
)

self.assertEqual(result, answer(0, expected_output))

if __name__ == '__main__':
unittest.main()
45 changes: 45 additions & 0 deletions tests/tests_check/test_banned_words_in_literature.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import unittest
from app.main.checks.report_checks import BannedWordsInLiteratureCheck
from tests.tests_check.base_test import BaseTestCase
from app.main.checks.base_check import morph, answer

morph.normal_forms = lambda word: [word]

class TestBannedWordsInLiteratureCheck(BaseTestCase):

def test_check_with_no_banned_words(self):
self.file_info['file'].page_counter.return_value = 10
self.file_info['file'].find_literature_vkr.return_value = {"number": 1, "child": [{"number": 2, "text": "This is a good source."}]}
self.file_info['file'].find_literature_page.return_value = 10

checker = BannedWordsInLiteratureCheck(self.file_info)
result = checker.check()

self.assertEqual(result, answer(True, "Пройдена!"))

def test_check_with_banned_words(self):
self.file_info['file'].page_counter.return_value = 10
self.file_info['file'].find_literature_vkr.return_value = {"number": 1, "child": [{"number": 2, "text": "Source from wikipedia."}]}
self.file_info['file'].find_literature_page.return_value = 10

checker = BannedWordsInLiteratureCheck(self.file_info)
result = checker.check()

expected_output = (
'Есть запрещенные слова в списке источников '
'[\'<a href="/get_pdf/1234#page=10"target="_blank" rel="noopener">10<a>\']:<br><br>'
'Абзац 1: wikipedia.<br>'
)

self.assertEqual(result, answer(False, expected_output))

def test_check_not_enough_pages(self):
self.file_info['file'].page_counter.return_value = 3

checker = BannedWordsInLiteratureCheck(self.file_info)
result = checker.check()

self.assertEqual(result, answer(False, "В отчете недостаточно страниц. Нечего проверять."))

if __name__ == '__main__':
unittest.main()
70 changes: 70 additions & 0 deletions tests/tests_check/test_chapters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import unittest
from unittest.mock import MagicMock
from tests.tests_check.base_test import BaseTestCase
from app.main.checks.base_check import morph, answer
from app.main.checks.report_checks import ReportChapters

class TestReportChaptersCheck(BaseTestCase):
def setUp(self):
super().setUp()
self.file_info['file'].page_counter.return_value = 5
self.check = ReportChapters(file_info=self.file_info)

def test_check_not_enough_pages(self):
self.file_info['file'].page_counter.return_value = 3 # Недостаточное количество страниц
result = self.check.check()
self.assertEqual(result, answer(False, "В отчете недостаточно страниц. Нечего проверять."))

def test_check_no_headers_found(self):
self.file_info['file'].make_chapters.return_value = [] # Пустой список заголовков
result = self.check.check()
self.assertEqual(result, answer(False, "Не найдено ни одного заголовка.<br><br>Проверьте корректность использования стилей."))

def test_check_valid_headers(self):
# Подготовка заголовков
mock_headers = [
{"text": "Заголовок 1", "style": "Заголовок", "styled_text": {"runs": [{"text": "Заголовок 1", "style": MagicMock()}]}},
{"text": "Заголовок 2", "style": "Заголовок", "styled_text": {"runs": [{"text": "Заголовок 2", "style": MagicMock()}]}}
]
self.file_info['file'].make_chapters.return_value = mock_headers

# Настройка
self.check.docx_styles = {
0: ["Заголовок"]
}
self.check.target_styles = {
0: {"style": MagicMock()}
}
self.check.style_regex = {
0: MagicMock()
}

result = self.check.check()
self.assertEqual(result['score'], 1)
self.assertTrue("Форматирование заголовков соответствует требованиям." in result['verdict'])

def test_check_invalid_headers(self):
# Подготовка заголовков с несоответствующим стилем
mock_headers = [
{"text": "Заголовок 1", "style": "Неверный стиль", "styled_text": {"runs": [{"text": "Заголовок 1", "style": MagicMock()}]}},
{"text": "Заголовок 2", "style": "Неверный стиль", "styled_text": {"runs": [{"text": "Заголовок 2", "style": MagicMock()}]}}
]
self.file_info['file'].make_chapters.return_value = mock_headers

# Настройка
self.check.docx_styles = {
0: ["Заголовок"]
}
self.check.target_styles = {
0: {"style": MagicMock()}
}
self.check.style_regex = {
0: MagicMock()
}

result = self.check.check()
self.assertEqual(result['score'], 0)
self.assertFalse("Найдены ошибки в оформлении заголовков" in result['verdict'])

if __name__ == '__main__':
unittest.main()
100 changes: 100 additions & 0 deletions tests/tests_check/test_empty_slide_check.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import unittest
from unittest.mock import MagicMock
from app.main.checks.presentation_checks.empty_slide_check import PresEmptySlideCheck
from app.utils.parse_for_html import format_header


class TestPresEmptySlideCheck(unittest.TestCase):

def setUp(self):
self.mock_file_info = {
'file': MagicMock(),
'filename': 'test_presentation.pptx',
'pdf_id': '12345',
'presentation_name': 'test_presentation.pptx'
}

self.mock_text_slides = [
"", # Пустой слайд
"Title Slide\nContent on Slide", # Слайд с заголовком и контентом
"Only Title Slide\n", # Слайд только с заголовком
"", # Пустой слайд
]
self.mock_titles = [
"Title Slide",
"Title Slide",
"Only Title Slide",
""
]

self.mock_file_info['file'].get_text_from_slides = MagicMock(return_value=self.mock_text_slides)
self.mock_file_info['file'].get_titles = MagicMock(return_value=self.mock_titles)
self.mock_file_info['file'].slides = [MagicMock() for _ in self.mock_text_slides]

for slide in self.mock_file_info['file'].slides:
slide.get_images = MagicMock(return_value=[])
slide.get_table = MagicMock(return_value=None)

self.checker = PresEmptySlideCheck(self.mock_file_info)

def test_empty_slides(self):
result = self.checker.check()
self.assertEqual(result['score'], 0)
self.assertIn("Не пройдена! Обнаружены пустые слайды:", result['verdict'][0])

def test_only_title_slides(self):
self.mock_text_slides = [
"Title Slide\n",
"Title Slide\nContent on Slide",
"Only Title Slide\n",
"Another Title\nContent"
]
self.mock_file_info['file'].get_text_from_slides = MagicMock(return_value=self.mock_text_slides)
self.mock_file_info['file'].get_titles = MagicMock(return_value=self.mock_titles)

result = self.checker.check()
self.assertEqual(result['score'], 0)
self.assertIn("Не пройдена! Обнаружены слайды, в которых присутствует только заголовок:", result['verdict'][0])

def test_mixed_empty_and_title_slides(self):
self.mock_text_slides = [
"",
"Title Slide\nContent on Slide",
"Only Title Slide\n",
"",
]
self.mock_titles = [
"Empty Slide",
"Title Slide",
"Only Title Slide",
"Empty Slide"
]
self.mock_file_info['file'].get_text_from_slides = MagicMock(return_value=self.mock_text_slides)
self.mock_file_info['file'].get_titles = MagicMock(return_value=self.mock_titles)

result = self.checker.check()
self.assertEqual(result['score'], 0)
self.assertIn("Не пройдена! Обнаружены пустые слайды:", result['verdict'][0])
self.assertIn("также обнаружены слайды, в которых присутствует только заголовок:", result['verdict'][0])

def test_no_empty_or_title_only_slides(self):
self.mock_text_slides = [
"Title Slide\nContent on Slide",
"Another Title\nContent",
"Content without Title",
]
self.mock_titles = [
"Title Slide",
"Another Title",
""
]
self.mock_file_info['file'].get_text_from_slides = MagicMock(return_value=self.mock_text_slides)
self.mock_file_info['file'].get_titles = MagicMock(return_value=self.mock_titles)

result = self.checker.check()
self.assertEqual(result['score'], 1)
self.assertEqual(result['verdict'][0], "Пройдена!")


if __name__ == "__main__":
unittest.main()
Loading
Loading