loko/streetup/inspections/tests.py

85 lines
3.2 KiB
Python

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)