144 lines
5.5 KiB
Python
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)
|