Удалена вся документация .md из репозитория
- Удалены все файлы .md (30 файлов) - Добавлена маска *.md в .gitignore для защиты от будущих коммитов - Причина: .md файлы содержали примеры паролей и внутреннюю документацию 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,137 +0,0 @@
|
||||
# 🧪 Критические тесты переходов между статусами заказов
|
||||
|
||||
## 📋 Описание
|
||||
|
||||
Набор из **5 критических тестов**, проверяющих корректность работы системы резервирования и списания товаров при переходах между статусами заказов.
|
||||
|
||||
## 🎯 Тестируемые сценарии
|
||||
|
||||
### 1️⃣ **Тест "Танцы туда-сюда"** (`test_01_draft_to_completed_to_cancelled_to_completed`)
|
||||
Проверяет множественные переходы между статусами:
|
||||
- `draft` → `completed` → `cancelled` → `completed` (снова)
|
||||
- **Цель:** Убедиться что Sale не дублируется при повторном переходе в `completed`
|
||||
|
||||
### 2️⃣ **Тест отмены из черновика** (`test_02_draft_to_cancelled_releases_reservations`)
|
||||
Проверяет освобождение резервов при отмене:
|
||||
- `draft` → `cancelled`
|
||||
- **Цель:** Резервы должны корректно освобождаться
|
||||
|
||||
### 3️⃣ **Тест возврата из отмены** (`test_03_cancelled_to_pending_reserves_stock`)
|
||||
Проверяет резервирование при возврате:
|
||||
- `draft` → `cancelled` → `pending`
|
||||
- **Цель:** Резервы должны восстанавливаться при возврате из отмены
|
||||
|
||||
### 4️⃣ **Тест промежуточного статуса** (`test_04_create_order_with_intermediate_status`)
|
||||
Проверяет создание заказа с новым статусом:
|
||||
- Создание заказа сразу со статусом "Упаковывается" (не positive, не negative)
|
||||
- **Цель:** Система должна работать с любыми промежуточными статусами
|
||||
|
||||
### 5️⃣ **Тест отката от выполненного** (`test_05_completed_to_draft_rollback_sale`)
|
||||
Проверяет откат Sale:
|
||||
- `draft` → `completed` → `draft`
|
||||
- **Цель:** Sale должен корректно откатываться, товар возвращаться на склад
|
||||
|
||||
## 🚀 Запуск тестов
|
||||
|
||||
### Запуск всех тестов:
|
||||
```bash
|
||||
cd myproject
|
||||
python manage.py test inventory.tests.test_order_status_transitions
|
||||
```
|
||||
|
||||
### Запуск конкретного теста:
|
||||
```bash
|
||||
python manage.py test inventory.tests.test_order_status_transitions.OrderStatusTransitionCriticalTest.test_01_draft_to_completed_to_cancelled_to_completed
|
||||
```
|
||||
|
||||
### Запуск с подробным выводом:
|
||||
```bash
|
||||
python manage.py test inventory.tests.test_order_status_transitions --verbosity=2
|
||||
```
|
||||
|
||||
## ✅ Что проверяет каждый тест
|
||||
|
||||
Все тесты проверяют **3 критических аспекта**:
|
||||
|
||||
### 1. **Корректность Stock**
|
||||
- `quantity_available` - доступное количество
|
||||
- `quantity_reserved` - зарезервированное количество
|
||||
- `quantity_free` - свободное количество (available - reserved)
|
||||
|
||||
### 2. **Корректность Reservation**
|
||||
- Статус резерва (`reserved`, `converted_to_sale`, `released`)
|
||||
- Переходы между статусами при изменении статуса заказа
|
||||
|
||||
### 3. **Корректность Sale и StockBatch**
|
||||
- Sale не дублируется при повторных переходах
|
||||
- StockBatch корректно уменьшается/восстанавливается
|
||||
- SaleBatchAllocation создаётся только один раз
|
||||
|
||||
## 🔍 Пример вывода успешного теста
|
||||
|
||||
```
|
||||
test_01_draft_to_completed_to_cancelled_to_completed ... ok
|
||||
test_02_draft_to_cancelled_releases_reservations ... ok
|
||||
test_03_cancelled_to_pending_reserves_stock ... ok
|
||||
test_04_create_order_with_intermediate_status ... ok
|
||||
test_05_completed_to_draft_rollback_sale ... ok
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Ran 5 tests in 2.341s
|
||||
|
||||
OK
|
||||
```
|
||||
|
||||
## ⚠️ Важные особенности
|
||||
|
||||
1. **Тесты используют TransactionTestCase** - каждый тест выполняется в отдельной транзакции
|
||||
2. **Создаётся отдельная схема БД** `test_order_status` для изоляции
|
||||
3. **После каждого теста данные очищаются** - тесты не влияют друг на друга
|
||||
4. **Тесты работают с тенантами** - используется `schema_context()`
|
||||
|
||||
## 🐛 Если тесты падают
|
||||
|
||||
### Проверьте сигналы:
|
||||
- `inventory/signals.py` - все сигналы должны быть подключены
|
||||
- `inventory/apps.py` - сигналы должны импортироваться в `ready()`
|
||||
|
||||
### Проверьте модели:
|
||||
- `Reservation.status` - должны быть варианты: `reserved`, `converted_to_sale`, `released`
|
||||
- `OrderStatus` - должны быть флаги `is_positive_end`, `is_negative_end`
|
||||
|
||||
### Проверьте БД:
|
||||
```bash
|
||||
python manage.py migrate
|
||||
```
|
||||
|
||||
## 📝 Добавление новых тестов
|
||||
|
||||
Чтобы добавить новый тест:
|
||||
|
||||
1. Создайте метод в классе `OrderStatusTransitionCriticalTest`
|
||||
2. Начните имя с `test_` (обязательно!)
|
||||
3. Используйте вспомогательные методы:
|
||||
- `_create_order(status, quantity)` - создать заказ
|
||||
- `_assert_stock_state(available, reserved, free)` - проверить Stock
|
||||
- `_assert_reservation_status(order, expected_status)` - проверить резерв
|
||||
- `_assert_sale_exists(order, should_exist)` - проверить Sale
|
||||
|
||||
Пример:
|
||||
```python
|
||||
def test_06_my_new_scenario(self):
|
||||
"""Описание сценария"""
|
||||
with schema_context('test_order_status'):
|
||||
order = self._create_order(self.status_draft, quantity=Decimal('10.00'))
|
||||
|
||||
# Ваши проверки
|
||||
self._assert_stock_state(
|
||||
available=Decimal('100.00'),
|
||||
reserved=Decimal('10.00'),
|
||||
free=Decimal('90.00')
|
||||
)
|
||||
```
|
||||
|
||||
## 🎓 Дополнительная информация
|
||||
|
||||
- Документация Django Testing: https://docs.djangoproject.com/en/stable/topics/testing/
|
||||
- Django Tenants Testing: https://django-tenants.readthedocs.io/en/latest/test.html
|
||||
Reference in New Issue
Block a user