Versiunea funcțională EUMI

This commit is contained in:
2026-08-31 16:10:46 +03:00
parent 75bcef3095
commit ce5028a27f
58 changed files with 4271 additions and 98 deletions
+142 -2
View File
@@ -1,3 +1,143 @@
from django.test import TestCase
from django.test import TestCase, Client
from django.urls import reverse
from users.models import Employee
from .models import Computer, Monitor, Peripheral, HandoverProtocol, DecommissionRecord
from django.contrib.auth.models import User
# Create your tests here.
class EquipmentModelTests(TestCase):
def setUp(self):
self.emp = Employee.objects.create(
name="Angajat Test",
username="angajat.test",
role="Consilier",
office_number="10",
email="test@primariaroman.ro",
)
self.pc = Computer.objects.create(
equipment_code="92601011",
motherboard="ASUS Test",
cpu="Intel i5",
ram="16GB",
storage="512GB SSD",
mac_address="00:11:22:33:44:55",
os_license="Windows 11 Pro",
assigned_to=self.emp,
status="activ",
)
def test_active_inventory_property(self):
# Verify the get_active_inventory property pulls the assigned PC
inventory = self.emp.get_active_inventory
self.assertIn(self.pc, inventory["computers"])
self.assertEqual(len(inventory["computers"]), 1)
def test_handover_protocol_auto_numbering(self):
# First protocol should be exactly 1000
pv1 = HandoverProtocol.objects.create(previous_holder=self.emp)
self.assertEqual(pv1.document_number, 1000)
# Second protocol should increment to 1001
pv2 = HandoverProtocol.objects.create(previous_holder=self.emp)
self.assertEqual(pv2.document_number, 1001)
class EquipmentViewsTests(TestCase):
def setUp(self):
self.client = Client()
# Creăm un utilizator simplu (non-staff)
self.normal_user = User.objects.create_user(
username="user.simplu", password="password123", is_staff=False
)
# Creăm un utilizator IT (staff)
self.staff_user = User.objects.create_user(
username="user.it", password="password123", is_staff=True
)
def test_dashboard_access_authenticated(self):
# Un utilizator logat trebuie să primească status 200 (OK) pe dashboard
self.client.login(username="user.simplu", password="password123")
response = self.client.get(
reverse("equipment:dashboard")
) # Ajustează numele rutei dacă diferă
self.assertEqual(response.status_code, 200)
def test_dashboard_access_unauthenticated(self):
# Un vizitator nelogat trebuie redirecționat (302) către pagina de login
response = self.client.get(reverse("equipment:dashboard"))
self.assertEqual(response.status_code, 302)
self.assertIn("/accounts/login/", response.url)
def test_staff_permission_denied_for_normal_users(self):
# Un utilizator simplu nu are voie să acceseze formularul de adăugare certificat
self.client.login(username="user.simplu", password="password123")
response = self.client.get(reverse("equipment:certificate_create"))
self.assertEqual(
response.status_code, 403
) # 403 = Forbidden (PermissionDenied)
def test_staff_permission_granted_for_it(self):
# Un utilizator IT trebuie să poată accesa formularul
self.client.login(username="user.it", password="password123")
response = self.client.get(reverse("equipment:certificate_create"))
self.assertEqual(response.status_code, 200)
class EquipmentBusinessLogicTests(TestCase):
def setUp(self):
self.client = Client()
self.staff_user = User.objects.create_user(
username="user.it", password="password123", is_staff=True
)
self.client.login(username="user.it", password="password123")
# Creăm un angajat
self.emp = Employee.objects.create(
name="Angajat Test", username="angajat.test", role="Inspector"
)
# Creăm un calculator activ, atribuit angajatului
self.pc = Computer.objects.create(
equipment_code="COMP-TEST-01",
cpu="Intel i5",
ram="16GB",
motherboard="ASUS",
mac_address="00:00:00:00:00:00",
status="activ",
assigned_to=self.emp,
)
def test_export_csv_headers(self):
# Verificăm dacă ruta de export returnează un fișier CSV valid
response = self.client.get(reverse("equipment:export_inventory"))
self.assertEqual(response.status_code, 200)
self.assertEqual(response["Content-Type"], "text/csv; charset=utf-8-sig")
self.assertIn(
'attachment; filename="Inventar_Echipamente.csv"',
response["Content-Disposition"],
)
def test_decommission_logic_updates_status(self):
# Simulăm trimiterea formularului de casare (POST request)
response = self.client.post(
reverse("equipment:decommission_create"),
{
"document_number": "PV-999",
"date": "2026-08-31",
"reason": "Test de casare automată",
"computers": [self.pc.id], # Selectăm PC-ul creat în setUp
# Celelalte pot fi goale dacă nu sunt required
},
)
# Status 204 sau 302 confirmă că formularul s-a procesat cu succes
self.assertIn(response.status_code, [204, 302])
# Reîncărcăm PC-ul din baza de date pentru a vedea modificările
self.pc.refresh_from_db()
# Verificăm dacă logica noastră a eliberat echipamentul corect
self.assertEqual(self.pc.status, "casat")
self.assertIsNone(self.pc.assigned_to)