from django.test import TestCase, Client from django.urls import reverse from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType from django.utils import timezone from assets.models.parking import ParkingSpot from interventions.models import Intervention from common.models import Thematic from .models import Inspection, ParkingSpotInspection, InspectionDocument User = get_user_model() class InspectionModelAndViewsTestCase(TestCase): def setUp(self): self.client = Client() self.user = User.objects.create_user( username='inspector_user', password='password123', first_name='Jean', last_name='Valjean' ) self.thematic, _ = Thematic.objects.get_or_create( code='parking', defaults={'name_fr': 'Stationnement'} ) self.spot = ParkingSpot.objects.create( name_fr='Emplacement Vélo Test' ) self.spot_ct = ContentType.objects.get_for_model(ParkingSpot) self.mission_interv = Intervention.objects.create( title="Mission inspection GIEP Nord", thematic=self.thematic, status="in_progress" ) self.work_interv = Intervention.objects.create( title="Travaux réfection par Prestataire A", thematic=self.thematic, status="done" ) def test_inspection_creation_with_interventions(self): insp = Inspection.objects.create( asset_content_type=self.spot_ct, asset_object_id=self.spot.id, inspector=self.user, mission_intervention=self.mission_interv, checked_intervention=self.work_interv, nature='technical', inspector_role='provider', result_status='compliant', notes="Tiers contrôle OK" ) self.assertTrue(insp.is_mission_inspection) self.assertTrue(insp.is_cross_check) self.assertEqual(insp.mission_intervention, self.mission_interv) self.assertEqual(insp.checked_intervention, self.work_interv) self.assertIn(insp, self.mission_interv.generated_inspections.all()) self.assertIn(insp, self.work_interv.quality_inspections.all()) def test_create_inspection_api(self): self.client.login(username='inspector_user', password='password123') url = reverse('inspections:create_inspection_api') response = self.client.post(url, { 'content_type_id': self.spot_ct.id, 'object_id': self.spot.id, 'result_status': 'compliant', 'nature': 'visual', 'inspector_role': 'provider', 'mission_intervention_id': self.mission_interv.id, 'checked_intervention_id': self.work_interv.id, 'notes': 'Inspection via API' }) self.assertEqual(response.status_code, 200) data = response.json() self.assertTrue(data['success']) insp = Inspection.objects.get(pk=data['inspection_id']) self.assertEqual(insp.mission_intervention, self.mission_interv) self.assertEqual(insp.checked_intervention, self.work_interv)