prvi kod za live uporabu
Some checks failed
ERP CI Pipeline / test (push) Has been cancelled

This commit is contained in:
mariomitte
2026-07-09 21:21:17 +02:00
parent 857bb65d52
commit 5d39e048ba
239 changed files with 25151 additions and 0 deletions

View File

@@ -0,0 +1,25 @@
import pytest
from django.contrib.auth import get_user_model
User = get_user_model()
@pytest.mark.django_db
def test_create_user():
"""Testira kreiranje standardnog korisnika."""
user = User.objects.create_user(
email="test@example.com",
password="password123"
)
assert user.email == "test@example.com"
assert user.check_password("password123")
assert user.is_active is True
@pytest.mark.django_db
def test_create_superuser():
"""Testira kreiranje superuser-a."""
admin = User.objects.create_superuser(
email="admin@example.com",
password="password123"
)
assert admin.is_superuser is True
assert admin.is_staff is True

View File

@@ -0,0 +1,37 @@
# backend/core/users/tests/test_permissions.py
import pytest
from rest_framework import status
from rest_framework.test import APIClient
from django.contrib.auth import get_user_model
User = get_user_model()
@pytest.mark.django_db
class TestUserPermissions:
def setup_method(self):
self.client = APIClient()
# Kreiramo dva korisnika
self.user1 = User.objects.create_user(email="user1@erp.hr", password="password123")
self.user2 = User.objects.create_user(email="user2@erp.hr", password="password123")
def test_user_cannot_edit_other_user(self):
"""Osigurava da user1 ne može mijenjati podatke od user2."""
self.client.force_authenticate(user=self.user1)
# Pokušavamo patchati user2 (pretpostavljamo URL /api/users/{id}/)
response = self.client.patch(f'/api/users/{self.user2.id}/', {"first_name": "Haker"})
# Trebali bismo dobiti 403 Forbidden ili 404 (ovisno kako skrivaš postojanje drugih)
assert response.status_code in [status.HTTP_403_FORBIDDEN, status.HTTP_404_NOT_FOUND]
def test_authenticated_user_can_edit_self(self):
"""Osigurava da user1 može mijenjati svoje podatke."""
self.client.force_authenticate(user=self.user1)
response = self.client.patch(f'/api/users/{self.user1.id}/', {"first_name": "Ime"})
assert response.status_code == status.HTTP_200_OK
self.user1.refresh_from_db()
assert self.user1.first_name == "Ime"

View File

@@ -0,0 +1,56 @@
import uuid
import pytest
from django.contrib.auth import get_user_model
from core.management.commands.seed_all_models import Command
from modules.fleet.models import Vehicle, VehicleServiceRecord
from modules.task_management.models import Task
@pytest.mark.django_db
def test_seed_service_records_creates_record_with_task_and_task_vehicle():
user = get_user_model().objects.create_user(
email=f"seed-test-{uuid.uuid4().hex[:8]}@example.test",
password="pass12345",
)
vehicle = Vehicle.objects.create(
registration_number=f"ST-{uuid.uuid4().hex[:6].upper()}",
asset_type="crane",
)
task = Task.objects.create(
title=f"Task {uuid.uuid4().hex[:6]}",
status="aktivan",
vehicle=vehicle,
assigned_to=user,
)
cmd = Command()
before = VehicleServiceRecord.objects.count()
cmd._seed_service_records(1, [user], [task])
assert VehicleServiceRecord.objects.count() == before + 1
record = VehicleServiceRecord.objects.order_by("-created_at").first()
assert record is not None
assert record.task_id == task.id
assert record.vehicle_id == task.vehicle_id
@pytest.mark.django_db
def test_seed_service_records_skips_tasks_without_vehicle():
user = get_user_model().objects.create_user(
email=f"seed-test-{uuid.uuid4().hex[:8]}@example.test",
password="pass12345",
)
task = Task.objects.create(
title=f"Task {uuid.uuid4().hex[:6]}",
status="aktivan",
vehicle=None,
assigned_to=user,
)
cmd = Command()
before = VehicleServiceRecord.objects.count()
cmd._seed_service_records(1, [user], [task])
assert VehicleServiceRecord.objects.count() == before

View File

@@ -0,0 +1,35 @@
import pytest
from django.core.exceptions import ValidationError as DjangoValidationError
from rest_framework.exceptions import ValidationError as DRFValidationError
from core.users.services import UserService
from django.contrib.auth import get_user_model
User = get_user_model()
@pytest.mark.django_db
class TestUserService:
def setup_method(self):
self.user = User.objects.create_user(
email="servis@primjer.hr",
password="password123"
)
def test_update_profile_success(self):
"""Testira uspješno ažuriranje profila preko servisa."""
new_data = {"first_name": "Novi", "last_name": "Korisnik"}
updated_user = UserService.update_user_profile(self.user, new_data)
assert updated_user.first_name == "Novi"
assert updated_user.last_name == "Korisnik"
# Provjera da email nije promijenjen ako nismo poslali
assert updated_user.email == "servis@primjer.hr"
def test_update_profile_invalid_data(self):
"""Testira validaciju (npr. neispravan format podataka)."""
# Pretpostavimo da dodamo logiku u serializer koja brani prazno ime
invalid_data = {"first_name": ""}
with pytest.raises(DRFValidationError):
UserService.update_user_profile(self.user, invalid_data)

View File

@@ -0,0 +1,61 @@
import pytest
from django.urls import reverse
from rest_framework import status
from rest_framework.test import APIClient
from django.contrib.auth import get_user_model
User = get_user_model()
@pytest.mark.django_db
class TestUserAPI:
def setup_method(self):
self.client = APIClient()
self.user_data = {
"email": "test@primjer.hr",
"first_name": "Test",
"last_name": "Korisnik",
"password": "strongpassword123"
}
self.user = User.objects.create_user(**self.user_data)
def test_get_me_authenticated(self):
"""Testira dohvat vlastitih podataka (uspjeh)."""
self.client.force_authenticate(user=self.user)
url = reverse('user-me') # Provjeri naziv u routeru
response = self.client.get(url)
assert response.status_code == status.HTTP_200_OK
assert response.data['email'] == self.user.email
assert 'is_serviser' in response.data
def test_get_me_unauthenticated(self):
"""Testira pristup bez prijave (neuspjeh)."""
url = reverse('user-me')
response = self.client.get(url)
# Ovisno o tvojim permission_classes, ovdje bi trebalo biti 401 ili 403
assert response.status_code in [status.HTTP_401_UNAUTHORIZED, status.HTTP_403_FORBIDDEN]
def test_user_creation(self):
"""Testira osnovno stvaranje korisnika u bazi."""
assert User.objects.count() == 1
assert self.user.is_serviser is False
def test_update_user_via_api(self):
"""Testira cjelokupan tok: API -> ViewSet -> Service."""
self.client.force_authenticate(user=self.user)
url = reverse('user-detail', kwargs={'pk': self.user.id}) # Provjeri basename
new_data = {"first_name": "Inženjer"}
# Simuliramo PATCH zahtjev
response = self.client.patch(url, new_data)
# Osvježi instancu iz baze
self.user.refresh_from_db()
assert response.status_code == status.HTTP_200_OK
assert self.user.first_name == "Inženjer"