Versiunea funcțională EUMI
This commit is contained in:
+142
-2
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user