Files

144 lines
5.5 KiB
Python

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
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)