import uuid from django.test import TestCase from django.contrib.auth import get_user_model from modules.fleet.services import VehicleService from modules.fleet.models import Vehicle, WorkOrder, VehicleServiceRecord from modules.task_management.models import Task class FleetServiceTests(TestCase): def setUp(self): User = get_user_model() self.user = User.objects.create_user(username="tech2", email=f"tech2+{uuid.uuid4()}@example.test", password="pass") self.vehicle = Vehicle.objects.create( registration_number=f"RI-{uuid.uuid4().hex[:6].upper()}", make="VW", model="Polo", current_mileage=5000, service_interval_km=10000, assigned_servicer=self.user ) def test_create_work_order_via_service(self): data = {"vehicle": self.vehicle, "creator": self.user, "start_mileage": 5000, "end_mileage": 5200, "purpose": "kontrola"} wo = VehicleService.create_work_order(data) self.vehicle.refresh_from_db() self.assertEqual(self.vehicle.current_mileage, 5200) self.assertEqual(wo.distance, 200) def test_create_service_record_via_service(self): data = {"vehicle": self.vehicle, "performed_by": self.user, "description": "Brake pads", "mileage": 5200, "cost": "120.00"} rec = VehicleService.create_service_record(data) self.vehicle.refresh_from_db() self.assertEqual(rec.next_service_due_at, 5200 + self.vehicle.service_interval_km) self.assertEqual(self.vehicle.current_mileage, 5200) def test_vehicle_next_service_at_logic(self): # current=12000, interval=15000 -> blocks=(12000//15000)+1 = 1 -> 1*15000 = 15000 v = Vehicle.objects.create(current_mileage=12000, service_interval_km=15000) assert v.next_service_at() == 15000 # current=16000, interval=15000 -> blocks=(16000//15000)+1 = 2 -> 2*15000 = 30000 v.current_mileage = 16000 assert v.next_service_at() == 30000 def test_work_order_distance_property(self): vehicle = Vehicle.objects.create(registration_number="ZG-004") # Nalog bez završne kilometraže wo = WorkOrder.objects.create(vehicle=vehicle, creator=self.user, start_mileage=1000) assert wo.distance is None # Nalog sa završnom kilometražom wo.end_mileage = 1100 assert wo.distance == 100 def test_closing_work_order_moves_task_to_ready_for_completion(self): work_order = WorkOrder.objects.create( vehicle=self.vehicle, creator=self.user, purpose="kontrola", status="open", start_mileage=5000, end_mileage=5200, ) task = Task.objects.create( title="Servis", description="", status="servis", assigned_to=self.user, vehicle=self.vehicle, work_order=work_order, ) VehicleService.update_work_order(work_order, {"status": "closed"}) task.refresh_from_db() self.assertEqual(task.status, "spreman_za_zavrsetak")