Исправление ошибки POS: разрешено добавление в корзину для PlatformAdmin (использование session_id вместо пользователя). Включены изменения по AI названиям букетов.

This commit is contained in:
2026-01-22 20:29:05 +03:00
parent 01873be15d
commit 22e300394b
13 changed files with 739 additions and 20 deletions

View File

@@ -1,5 +1,6 @@
from django_tenants.test.cases import TenantTestCase
from products.services import BouquetNameGenerator
from products.models import BouquetName, ProductTag
from unittest.mock import patch, MagicMock
@@ -167,3 +168,123 @@ I'm sorry, but I can't help with that right now.
"""
names = self.generator._parse_response(response_text)
self.assertEqual(len(names), 0)
@patch('products.services.ai.bouquet_names.BouquetNameGenerator.get_glm_service')
def test_generate_and_store(self, mock_get_glm_service):
"""
Тест генерации и сохранения названий в базе данных
"""
# Создаем мок-объект сервиса
mock_service = MagicMock()
mock_service.generate_text.return_value = (
True,
"Текст успешно сгенерирован",
{
'generated_text': (
"1. Розавая мечта\n"
"2. Лиловые настроения\n"
"3. Яркий букет для дня рождения"
),
'model': 'glm-4',
'usage': {'prompt_tokens': 100, 'completion_tokens': 50}
}
)
mock_get_glm_service.return_value = mock_service
# Очищаем базу перед тестом
BouquetName.objects.all().delete()
# Вызываем метод генерации и сохранения
success, msg, data = self.generator.generate_and_store(count=3)
self.assertTrue(success)
self.assertIn("Сгенерировано и сохранено 3 названий для букетов", msg)
self.assertEqual(BouquetName.objects.count(), 3)
def test_mark_as_used(self):
"""
Тест увеличения счетчика использования названия
"""
# Создаем тестовое название
bouquet_name = BouquetName.objects.create(
name="Тестовый букет",
language="russian",
is_approved=True
)
# Проверяем начальное значение счетчика
self.assertEqual(bouquet_name.usage_count, 0)
# Увеличиваем счетчик
self.generator.mark_as_used("Тестовый букет", "russian")
# Проверяем обновленное значение
bouquet_name.refresh_from_db()
self.assertEqual(bouquet_name.usage_count, 1)
def test_get_approved_names(self):
"""
Тест получения одобренных названий
"""
# Очищаем базу перед тестом
BouquetName.objects.all().delete()
# Создаем тестовые данные
BouquetName.objects.create(
name="Одобренный букет 1",
language="russian",
is_approved=True
)
BouquetName.objects.create(
name="Одобренный букет 2",
language="russian",
is_approved=True
)
BouquetName.objects.create(
name="Неодобренный букет",
language="russian",
is_approved=False
)
# Получаем одобренные названия
approved_names = self.generator.get_approved_names(language="russian")
self.assertEqual(len(approved_names), 2)
self.assertIn("Одобренный букет 1", approved_names)
self.assertIn("Одобренный букет 2", approved_names)
self.assertNotIn("Неодобренный букет", approved_names)
def test_bouquet_name_model(self):
"""
Тест создания и работы с моделью BouquetName
"""
# Создаем тестовые теги
red_tag = ProductTag.objects.create(name="красный", slug="krasny")
romantic_tag = ProductTag.objects.create(name="романтический", slug="romanticheskiy")
# Создаем экземпляр модели
bouquet_name = BouquetName.objects.create(
name="Романтический букет",
language="russian",
is_approved=True
)
# Добавляем теги
bouquet_name.color_tags.add(red_tag)
bouquet_name.style_tags.add(romantic_tag)
# Проверяем сохраненные значения
self.assertEqual(bouquet_name.name, "Романтический букет")
self.assertEqual(bouquet_name.language, "russian")
self.assertTrue(bouquet_name.is_approved)
self.assertEqual(bouquet_name.usage_count, 0)
self.assertIn(red_tag, bouquet_name.color_tags.all())
self.assertIn(romantic_tag, bouquet_name.style_tags.all())
# Обновляем поле
bouquet_name.usage_count = 5
bouquet_name.save()
# Проверяем обновление
updated_name = BouquetName.objects.get(id=bouquet_name.id)
self.assertEqual(updated_name.usage_count, 5)