Обновлён анализ тестов customers - учтена реорганизация структуры
- Добавлены ссылки на файлы с тестами в каждом разделе - Исправлена нумерация разделов (было дублирование) - Добавлен раздел о реорганизации структуры тестов - Отмечено, что защита системного клиента теперь покрыта тестами - Обновлена статистика: 50 тестов (было 45), 6 пробелов (было 7) - Добавлена информация о новой модульной структуре customers/tests/ - Исправлен блок 'Защита системного клиента НЕ ПРОТЕСТИРОВАНА' - теперь выполнено
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
|
||||
### 1. **Тесты стратегий поиска (9 тестов)** ✅ Отлично (оптимизировано!)
|
||||
|
||||
**Файл:** `customers/tests/test_search_strategies.py`
|
||||
**Класс:** `DetermineSearchStrategyTestCase`
|
||||
|
||||
**Что покрывается:**
|
||||
@@ -29,6 +30,7 @@
|
||||
|
||||
### 2. **Тесты валидации телефонных запросов (17 тестов)** ✅ Отлично (исправлено!)
|
||||
|
||||
**Файл:** `customers/tests/test_search_strategies.py`
|
||||
**Класс:** `IsQueryPhoneOnlyTestCase`
|
||||
|
||||
**Что покрывается:**
|
||||
@@ -44,6 +46,7 @@
|
||||
|
||||
### 3. **Тесты вычисления баланса кошелька (6 тестов)** ✅ Базовое покрытие
|
||||
|
||||
**Файл:** `customers/tests/test_wallet_balance.py`
|
||||
**Класс:** `WalletBalanceCalculationTestCase`
|
||||
|
||||
**Что покрывается:**
|
||||
@@ -58,8 +61,9 @@
|
||||
|
||||
---
|
||||
|
||||
### 5. **Тесты защиты системного клиента (5 тестов)** ✅ Отличное покрытие
|
||||
### 4. **Тесты защиты системного клиента (5 тестов)** ✅ Отличное покрытие
|
||||
|
||||
**Файл:** `customers/tests/test_system_customer.py`
|
||||
**Класс:** `SystemCustomerProtectionTestCase`
|
||||
|
||||
**Что покрывается:**
|
||||
@@ -74,8 +78,9 @@
|
||||
|
||||
---
|
||||
|
||||
### 6. **Тесты WalletService (7 тестов)** ✅ Хорошее покрытие
|
||||
### 5. **Тесты WalletService (7 тестов)** ✅ Хорошее покрытие
|
||||
|
||||
**Файл:** `customers/tests/test_wallet_service.py`
|
||||
**Класс:** `WalletServiceTestCase`
|
||||
|
||||
**Что покрывается:**
|
||||
@@ -91,8 +96,9 @@
|
||||
|
||||
---
|
||||
|
||||
### 7. **Тесты модели WalletTransaction (3 теста)** 🔴 Слабое покрытие
|
||||
### 6. **Тесты модели WalletTransaction (3 теста)** 🔴 Слабое покрытие
|
||||
|
||||
**Файл:** `customers/tests/test_wallet_model.py`
|
||||
**Класс:** `WalletTransactionModelTestCase`
|
||||
|
||||
**Что покрывается:**
|
||||
@@ -131,7 +137,7 @@
|
||||
**Стало:** Пробелы возвращают False
|
||||
|
||||
**Что изменено в коде:**
|
||||
```python
|
||||
```
|
||||
# Было:
|
||||
if not query:
|
||||
return False
|
||||
@@ -160,7 +166,7 @@ return any(c.isdigit() for c in query)
|
||||
**Стало:** 5 полноценных тестов
|
||||
|
||||
**Что сделано:**
|
||||
- ✅ Создан новый класс `SystemCustomerProtectionTestCase` с 5 тестами
|
||||
- ✅ Создан новый класс `SystemCustomerProtectionTestCase` в `test_system_customer.py`
|
||||
- ✅ Покрыты все критичные сценарии защиты:
|
||||
- Создание системного клиента с правильными атрибутами
|
||||
- Защита от удаления
|
||||
@@ -177,6 +183,30 @@ return any(c.isdigit() for c in query)
|
||||
|
||||
---
|
||||
|
||||
### 4. **Реорганизация структуры тестов** ✅ Завершено
|
||||
|
||||
**Было:** Монолитный файл `tests.py` на 500+ строк
|
||||
**Стало:** Структурированная папка `customers/tests/` с модулями
|
||||
|
||||
**Новая структура:**
|
||||
```
|
||||
customers/tests/
|
||||
├── __init__.py
|
||||
├── test_search_strategies.py # Тесты поиска и валидации
|
||||
├── test_system_customer.py # Тесты защиты системного клиента
|
||||
├── test_wallet_balance.py # Тесты вычисления баланса
|
||||
├── test_wallet_service.py # Тесты WalletService
|
||||
└── test_wallet_model.py # Тесты модели WalletTransaction
|
||||
```
|
||||
|
||||
**Преимущества:**
|
||||
- ✅ Лучшая организация - тесты сгруппированы по функциональности
|
||||
- ✅ Проще навигация - легко найти нужные тесты
|
||||
- ✅ Лучше поддерживаемость - изменения локализованы
|
||||
- ✅ Удобно добавлять новые тесты в соответствующие модули
|
||||
|
||||
---
|
||||
|
||||
## 🔄 СТАТИСТИКА ИЗМЕНЕНИЙ
|
||||
|
||||
**Было тестов:** 59
|
||||
@@ -309,28 +339,28 @@ def clean_phone(self):
|
||||
|
||||
---
|
||||
|
||||
### 2. **Защита системного клиента НЕ ПРОТЕСТИРОВАНА**
|
||||
### 2. ~~**Защита системного клиента НЕ ПРОТЕСТИРОВАНА**~~ ✅ ИСПРАВЛЕНО
|
||||
|
||||
В модели есть защита:
|
||||
```python
|
||||
~~В модели есть защита:~~
|
||||
```
|
||||
def delete(self, *args, **kwargs):
|
||||
if self.is_system_customer:
|
||||
raise ValidationError("Нельзя удалить...")
|
||||
```
|
||||
|
||||
**НИ ОДНОГО ТЕСТА!** 😱
|
||||
~~**НИ ОДНОГО ТЕСТА!** 😱~~
|
||||
|
||||
Кто-то может случайно:
|
||||
- Удалить системного клиента
|
||||
- Изменить его email
|
||||
- Сломать всю POS систему
|
||||
**✅ ИСПРАВЛЕНО 28.12.2025:**
|
||||
- ✅ Добавлено 5 тестов защиты в `test_system_customer.py`
|
||||
- ✅ Защита от удаления, изменения email и флага
|
||||
- ✅ Невозможно случайно сломать POS систему
|
||||
|
||||
---
|
||||
|
||||
### 3. **Расчёты долга клиента НЕ ПРОТЕСТИРОВАНЫ**
|
||||
|
||||
В `customer_detail` есть сложная логика:
|
||||
```python
|
||||
```
|
||||
total_debt_result = customer.orders.exclude(
|
||||
Q(status__is_negative_end=True) |
|
||||
Q(payment_status='paid')
|
||||
@@ -366,14 +396,14 @@ total_debt_result = customer.orders.exclude(
|
||||
### ~~❓ 2. Тест `test_only_spaces` выглядел странно~~ ✅ ИСПРАВЛЕНО
|
||||
|
||||
**Было:**
|
||||
```python
|
||||
```
|
||||
def test_only_spaces(self):
|
||||
"""Query ' ' должен вернуть True (только пробелы разрешены)"""
|
||||
self.assertTrue(is_query_phone_only(' '))
|
||||
```
|
||||
|
||||
**Стало:**
|
||||
```python
|
||||
```
|
||||
def test_only_spaces(self):
|
||||
"""Query ' ' должен вернуть False (пустой запрос)"""
|
||||
self.assertFalse(is_query_phone_only(' '))
|
||||
@@ -400,12 +430,6 @@ def test_only_spaces(self):
|
||||
- ✅ `get_or_create_system_customer()` с правильными атрибутами
|
||||
- ✅ Обычные клиенты не затронуты
|
||||
|
||||
2. **Тесты модели Customer** (20+ тестов)
|
||||
- Валидация полей
|
||||
- Нормализация телефона
|
||||
- Защита системного клиента
|
||||
- Методы класса
|
||||
|
||||
2. **Тесты модели Customer** (15+ тестов)
|
||||
- Валидация полей
|
||||
- Нормализация телефона
|
||||
@@ -489,11 +513,13 @@ def test_only_spaces(self):
|
||||
## 📊 Статистика
|
||||
|
||||
**Текущее состояние:**
|
||||
- ✅ Покрыто: ~25% функционала
|
||||
- ❌ Не покрыто: ~75% функционала
|
||||
- 🔴 Критические пробелы: 7 областей
|
||||
- ✅ Покрыто: ~30% функционала (увеличено с 25%)
|
||||
- ❌ Не покрыто: ~70% функционала
|
||||
- 🔴 Критические пробелы: 6 областей (было 7 - защита системного клиента покрыта)
|
||||
- ✅ ~~Сомнительные тесты: 3-5 штук~~ **ИСПРАВЛЕНО!**
|
||||
- 🟢 Оптимизированные тесты: 45 (было 59)
|
||||
- 💚 Защищённые области: Системный клиент, Wallet, Поиск
|
||||
- 💛 Оптимизированные тесты: 50 (было 59)
|
||||
- 📦 Структура: Тесты разделены по модулям в `customers/tests/`
|
||||
|
||||
**Цель:**
|
||||
- Минимум 80% покрытия кода
|
||||
|
||||
Reference in New Issue
Block a user