Files
ACORE/core/tests_portal_search.py
T
lokses a2fe4a49e3 mail + portal: самоподключение почты, веб-клиент и глобальный поиск
Сотрудник сам подключает ящик (autoconfig, вложения, пагинация списка, надёжный IMAP-поиск); в хедере работает /api/search по разделам и сущностям с ACL. Также устойчивость Mattermost-токена для чата.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 12:22:53 +03:00

77 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Тесты глобального поиска портала."""
from datetime import date
from django.contrib.auth.models import Group
from django.test import TestCase
from apps.employees.models import Employee
from apps.help.models import HelpArticle, HelpCategory
from apps.tasks.models import Task
from core.test_utils import login_2fa
def _make_employee(**overrides):
n = Employee.objects.count() + 1
defaults = {
'username': f'search.user{n}',
'email': f'search.user{n}@aks-apteka.com.ua',
'first_name': 'Иван',
'last_name': 'Тестов',
'hire_date': date(2026, 1, 1),
'user_location_type': 'office',
'is_active': True,
}
defaults.update(overrides)
return Employee.objects.create_user(password='pass', **defaults)
class PortalSearchViewTests(TestCase):
def setUp(self):
self.user = _make_employee(last_name='Поисковый', first_name='Юзер')
# Открытые разделы (без perm) требуют хотя бы одну группу
group = Group.objects.create(name='search-testers')
self.user.groups.add(group)
login_2fa(self.client, self.user)
def test_requires_login(self):
self.client.logout()
resp = self.client.get('/api/search', {'q': 'тест'})
self.assertIn(resp.status_code, (302, 401, 403))
def test_short_query_hint(self):
resp = self.client.get('/api/search', {'q': 'а'}, HTTP_HX_REQUEST='true')
self.assertEqual(resp.status_code, 200)
self.assertContains(resp, 'минимум')
def test_finds_employee_and_section(self):
other = _make_employee(last_name='Коваленко', first_name='Мария')
Task.objects.create(title='Проверить поиск по задачам', creator=self.user)
resp = self.client.get('/api/search', {'q': 'Коваленко'}, HTTP_HX_REQUEST='true')
self.assertEqual(resp.status_code, 200)
self.assertContains(resp, 'Коваленко')
self.assertContains(resp, f'/employees/{other.pk}/')
resp2 = self.client.get('/api/search', {'q': 'задач'}, HTTP_HX_REQUEST='true')
self.assertContains(resp2, 'Задачи')
self.assertContains(resp2, '/tasks/')
def test_finds_help_article(self):
cat = HelpCategory.objects.create(title='Общее', slug='general')
HelpArticle.objects.create(
category=cat,
title='Как сменить пароль портала',
body='Инструкция по смене пароля',
slug='change-password',
is_published=True,
)
resp = self.client.get('/api/search', {'q': 'пароль'}, HTTP_HX_REQUEST='true')
self.assertEqual(resp.status_code, 200)
self.assertContains(resp, 'сменить пароль')
self.assertContains(resp, '/help/a/change-password/')
def test_empty_result(self):
resp = self.client.get('/api/search', {'q': 'zzzznotfound999'}, HTTP_HX_REQUEST='true')
self.assertEqual(resp.status_code, 200)
self.assertContains(resp, 'Ничего не найдено')