from django.test import TestCase from django.urls import reverse from django.contrib.auth import get_user_model from django.core.files.uploadedfile import SimpleUploadedFile from documents.models import ManagedDocument, DocumentVersion User = get_user_model() class BimViewerTestCase(TestCase): def setUp(self): self.user = User.objects.create_user(username="testuser", email="test@streetup.be", password="password123", is_superuser=True) self.other_user = User.objects.create_user(username="otheruser", email="other@streetup.be", password="password123") # Create sample IFC ManagedDocument self.doc = ManagedDocument.objects.create( title="Maquette Test BIM", description="Fichier IFC de test", created_by=self.user, ) dummy_ifc_content = b"ISO-10303-21;\nHEADER;\nENDSEC;\nDATA;\n#1= IFCORGANIZATION('Test',$,$,$,$);\nENDSEC;\nEND-ISO-10303-21;\n" self.version = DocumentVersion.objects.create( document=self.doc, version_number=1, file=SimpleUploadedFile("model.ifc", dummy_ifc_content, content_type="application/x-step"), uploaded_by=self.user, ) self.doc.current_version = self.version self.doc.title = "Maquette Test BIM" self.doc.save() def test_unauthenticated_user_redirected(self): url = reverse("bim:viewer", kwargs={"doc_code": self.doc.uuid}) response = self.client.get(url) self.assertEqual(response.status_code, 302) def test_owner_can_access_viewer(self): self.client.force_login(self.user) url = reverse("bim:viewer", kwargs={"doc_code": self.doc.uuid}) response = self.client.get(url) self.assertEqual(response.status_code, 200) def test_info_api(self): self.client.force_login(self.user) url = reverse("bim:document_info", kwargs={"doc_code": self.doc.uuid}) response = self.client.get(url) self.assertEqual(response.status_code, 200) json_data = response.json() self.assertEqual(json_data["title"], "Maquette Test BIM") self.assertEqual(json_data["uuid"], str(self.doc.uuid)) def test_download_api(self): self.client.force_login(self.user) url = reverse("bim:download_ifc", kwargs={"doc_code": self.doc.uuid}) response = self.client.get(url) self.assertEqual(response.status_code, 200) self.assertIn(b"ISO-10303-21", b"".join(response.streaming_content)) def test_unauthorized_user_denied(self): self.client.force_login(self.other_user) url = reverse("bim:viewer", kwargs={"doc_code": self.doc.uuid}) response = self.client.get(url) self.assertEqual(response.status_code, 403)