68 lines
2.4 KiB
Python
68 lines
2.4 KiB
Python
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)
|