Обновить тесты it_manager под каталог моделей оборудования
Тесты создавали Equipment со старыми полями type/model и били по удалённому /equipment/create/. Переведены на EquipmentModel + массовый ввод/выдачу (bulk-create/bulk-assign), добавлен тест массовой выдачи. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -6,7 +6,9 @@ from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.models import Group
|
||||
from django.test import Client, TestCase
|
||||
|
||||
from apps.it_manager.models import Equipment, EquipmentAssignment, Ticket, WorkLog
|
||||
from apps.it_manager.models import (
|
||||
Equipment, EquipmentAssignment, EquipmentModel, Ticket, WorkLog,
|
||||
)
|
||||
from core.models.directories import Directory
|
||||
|
||||
Employee = get_user_model()
|
||||
@@ -36,10 +38,19 @@ def make_employee(**overrides):
|
||||
return Employee.objects.create(**defaults)
|
||||
|
||||
|
||||
def make_equipment(**overrides):
|
||||
def make_equipment_model(**overrides):
|
||||
defaults = {
|
||||
'equipment_type_id': _dir_id('equipment_type', 'laptop'),
|
||||
'model': 'ThinkPad T14',
|
||||
'name': 'ThinkPad T14',
|
||||
}
|
||||
defaults.update(overrides)
|
||||
obj, _ = EquipmentModel.objects.get_or_create(**defaults)
|
||||
return obj
|
||||
|
||||
|
||||
def make_equipment(**overrides):
|
||||
defaults = {
|
||||
'equipment_model': make_equipment_model(),
|
||||
'serial_number': f'SN-{Equipment.objects.count() + 1}',
|
||||
}
|
||||
defaults.update(overrides)
|
||||
@@ -59,8 +70,8 @@ class ItManagerAccessTests(TestCase):
|
||||
self.assertEqual(r.status_code, 403)
|
||||
|
||||
def test_equipment_create_forbidden_for_non_it(self):
|
||||
r = self.client.post('/it-manager/equipment/create/', {
|
||||
'equipment_type': 'laptop', 'model': 'X', 'serial_number': 'X1',
|
||||
r = self.client.post('/it-manager/equipment/bulk-create/', {
|
||||
'equipment_model_id': '1', 'serial_numbers': 'X1',
|
||||
})
|
||||
self.assertEqual(r.status_code, 403)
|
||||
|
||||
@@ -83,12 +94,39 @@ class ItManagerEquipmentTests(TestCase):
|
||||
r = self.client.get('/it-manager/')
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
||||
def test_create_equipment(self):
|
||||
r = self.client.post('/it-manager/equipment/create/', {
|
||||
'equipment_type': 'laptop', 'model': 'ThinkPad T14', 'serial_number': 'SN-100',
|
||||
def test_bulk_create_equipment(self):
|
||||
model = make_equipment_model()
|
||||
# масовий ввід: одна модель + список серійників (з дублем)
|
||||
r = self.client.post('/it-manager/equipment/bulk-create/', {
|
||||
'equipment_model_id': str(model.pk),
|
||||
'serial_numbers': 'SN-100\nSN-101\nSN-101\nSN-102',
|
||||
}, HTTP_HX_REQUEST='true')
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(Equipment.objects.filter(serial_number='SN-100').exists())
|
||||
units = Equipment.objects.filter(equipment_model=model)
|
||||
self.assertEqual(units.count(), 3) # дубль SN-101 пропущено
|
||||
self.assertEqual(
|
||||
sorted(units.values_list('serial_number', flat=True)),
|
||||
['SN-100', 'SN-101', 'SN-102'],
|
||||
)
|
||||
self.assertTrue(all(u.status.code == 'stock' for u in units))
|
||||
|
||||
def test_bulk_assign_equipment(self):
|
||||
model = make_equipment_model()
|
||||
units = [
|
||||
Equipment.objects.create(equipment_model=model, serial_number=f'BA-{i}')
|
||||
for i in range(3)
|
||||
]
|
||||
emp = make_employee()
|
||||
r = self.client.post('/it-manager/equipment/bulk-assign/', {
|
||||
'equipment_ids': [str(units[0].pk), str(units[1].pk)],
|
||||
'assigned_to_id': str(emp.id),
|
||||
}, HTTP_HX_REQUEST='true')
|
||||
self.assertEqual(r.status_code, 200)
|
||||
units[0].refresh_from_db(); units[1].refresh_from_db(); units[2].refresh_from_db()
|
||||
self.assertEqual(units[0].assigned_to_id, emp.id)
|
||||
self.assertEqual(units[0].status.code, 'assigned')
|
||||
self.assertIsNone(units[2].assigned_to_id) # не відмічений — не чіпаємо
|
||||
self.assertEqual(EquipmentAssignment.objects.filter(equipment__in=units[:2]).count(), 2)
|
||||
|
||||
def test_assign_equipment_creates_and_closes_history(self):
|
||||
equipment = make_equipment()
|
||||
|
||||
Reference in New Issue
Block a user