This commit is contained in:
67
backend/modules/fleet/tests/test_crane_serial_number.py
Normal file
67
backend/modules/fleet/tests/test_crane_serial_number.py
Normal file
@@ -0,0 +1,67 @@
|
||||
import uuid
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
from modules.fleet.serializers import CraneSerializer
|
||||
|
||||
|
||||
class CraneSerialNumberTests(TestCase):
|
||||
def _base_payload(self):
|
||||
suffix = uuid.uuid4().hex[:6].upper()
|
||||
return {
|
||||
"registration_number": f"ZG-CRN-{suffix}",
|
||||
"make": "Liebherr",
|
||||
"model": "LTM",
|
||||
"year": 2024,
|
||||
"current_mileage": 12000,
|
||||
"service_interval_km": 8000,
|
||||
"is_company_vehicle": True,
|
||||
"is_active": True,
|
||||
}
|
||||
|
||||
def test_create_crane_with_serial_number_succeeds(self):
|
||||
payload = {
|
||||
**self._base_payload(),
|
||||
"crane_serial_number": "123456",
|
||||
}
|
||||
serializer = CraneSerializer(data=payload)
|
||||
self.assertTrue(serializer.is_valid(), serializer.errors)
|
||||
|
||||
crane = serializer.save()
|
||||
self.assertEqual(crane.asset_type, "crane")
|
||||
self.assertEqual(crane.crane_serial_number, "123456")
|
||||
|
||||
def test_create_crane_without_serial_number_fails(self):
|
||||
payload = self._base_payload()
|
||||
serializer = CraneSerializer(data=payload)
|
||||
self.assertFalse(serializer.is_valid())
|
||||
self.assertIn("crane_serial_number", serializer.errors)
|
||||
|
||||
def test_crane_serial_number_industry_standard_validation(self):
|
||||
valid_payload = {
|
||||
**self._base_payload(),
|
||||
"registration_number": f"ZG-CRN-{uuid.uuid4().hex[:6].upper()}",
|
||||
"crane_serial_number": "000123",
|
||||
}
|
||||
valid_serializer = CraneSerializer(data=valid_payload)
|
||||
self.assertTrue(valid_serializer.is_valid(), valid_serializer.errors)
|
||||
|
||||
invalid_serials = [
|
||||
"12345", # prekratko
|
||||
"1234567", # predugo
|
||||
"12A456", # slova nisu dozvoljena
|
||||
"12 456", # razmaci nisu dozvoljeni
|
||||
"12-456", # specijalni znakovi nisu dozvoljeni
|
||||
"123456", # unicode znamenke nisu dozvoljene (samo ASCII 0-9)
|
||||
]
|
||||
|
||||
for value in invalid_serials:
|
||||
with self.subTest(serial=value):
|
||||
payload = {
|
||||
**self._base_payload(),
|
||||
"registration_number": f"ZG-CRN-{uuid.uuid4().hex[:6].upper()}",
|
||||
"crane_serial_number": value,
|
||||
}
|
||||
serializer = CraneSerializer(data=payload)
|
||||
self.assertFalse(serializer.is_valid())
|
||||
self.assertIn("crane_serial_number", serializer.errors)
|
||||
Reference in New Issue
Block a user