Uveden je novi Notes drawer s kalendar integracijom, zajednički DRY left-slide mehanizam te međusobno isključivo prikazivanje s Kalendar widgetom. Backend i frontend su prošireni za servisne bilješke (uključujući slanje na više servisera), dodan je users/servicers endpoint, te su uvedene warning notifikacije kada serviser ima više od 2 zadatka isti dan. U admin su dodane stavke za Bilješke i zaseban Kalendar zadataka (proxy TaskCalendar) radi lakšeg operativnog pregleda. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
86 lines
3.0 KiB
Python
86 lines
3.0 KiB
Python
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"
|
|
|
|
def test_get_servicers_returns_only_servicers(self):
|
|
serviser = User.objects.create_user(
|
|
email="serviser@test.hr",
|
|
first_name="Serviser",
|
|
last_name="Jedan",
|
|
password="strongpassword123",
|
|
is_serviser=True,
|
|
is_team_member=True,
|
|
)
|
|
non_serviser = User.objects.create_user(
|
|
email="nons@test.hr",
|
|
first_name="Nije",
|
|
last_name="Serviser",
|
|
password="strongpassword123",
|
|
is_serviser=False,
|
|
is_team_member=True,
|
|
)
|
|
self.client.force_authenticate(user=self.user)
|
|
url = reverse('user-servicers')
|
|
response = self.client.get(url)
|
|
assert response.status_code == status.HTTP_200_OK
|
|
returned_ids = {str(item['id']) for item in response.data}
|
|
assert str(serviser.id) in returned_ids
|
|
assert str(non_serviser.id) not in returned_ids |