105 lines
4.7 KiB
Python
105 lines
4.7 KiB
Python
from django.test import TestCase
|
|
from django.urls import reverse
|
|
from django.contrib.auth import get_user_model
|
|
from common.models import UserConfig, Role, Thematic, UserThematics
|
|
|
|
User = get_user_model()
|
|
|
|
class MobileIndexViewTests(TestCase):
|
|
def setUp(self):
|
|
# Create user
|
|
self.user = User.objects.create_user(username="testuser", password="password")
|
|
self.client.login(username="testuser", password="password")
|
|
|
|
# Create user config
|
|
self.user_config = UserConfig.objects.create(user=self.user, is_intern=True)
|
|
|
|
def test_mobile_index_context_for_admin(self):
|
|
# Add admin role
|
|
admin_role, _ = Role.objects.get_or_create(name="admin")
|
|
self.user_config.roles.add(admin_role)
|
|
|
|
response = self.client.get(reverse("mobile:mobile_index"))
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertTrue(response.context["can_add_intervention_mobile"])
|
|
self.assertFalse(response.context["is_inspector"])
|
|
self.assertFalse(response.context["can_add_structures_repair"])
|
|
|
|
def test_mobile_index_context_for_inspector(self):
|
|
# Add inspector role
|
|
inspector_role, _ = Role.objects.get_or_create(name="inspector")
|
|
self.user_config.roles.add(inspector_role)
|
|
|
|
response = self.client.get(reverse("mobile:mobile_index"))
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertTrue(response.context["is_inspector"])
|
|
|
|
def test_mobile_index_context_for_structures_technician(self):
|
|
# Add technician role
|
|
technician_role, _ = Role.objects.get_or_create(name="technician")
|
|
self.user_config.roles.add(technician_role)
|
|
|
|
# Create structures thematic
|
|
structures_thematic = Thematic.objects.create(code="structures", name_fr="Ouvrages d'art", name_nl="Kunstwerken")
|
|
self.user_config.default_thematic = structures_thematic
|
|
self.user_config.save()
|
|
|
|
# Create UserThematics with can_edit_interventions = True
|
|
UserThematics.objects.create(
|
|
user_config=self.user_config,
|
|
thematic=structures_thematic,
|
|
can_edit_interventions=True
|
|
)
|
|
|
|
response = self.client.get(reverse("mobile:mobile_index"))
|
|
# Note: if a user has only technician role, index redirects to /mobile/interventions/
|
|
# So it should be a 302 redirect.
|
|
self.assertEqual(response.status_code, 302)
|
|
self.assertEqual(response.url, "/mobile/interventions/")
|
|
|
|
# If we add another role so they are not only technician, they stay on index
|
|
admin_role, _ = Role.objects.get_or_create(name="admin")
|
|
self.user_config.roles.add(admin_role)
|
|
|
|
response = self.client.get(reverse("mobile:mobile_index"))
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertTrue(response.context["can_add_structures_repair"])
|
|
|
|
|
|
class MobileStockPermissionTests(TestCase):
|
|
def setUp(self):
|
|
from stock.models import Warehouse
|
|
self.user = User.objects.create_user(username="stockuser", password="password")
|
|
self.client.login(username="stockuser", password="password")
|
|
self.user_config = UserConfig.objects.create(user=self.user, is_intern=True)
|
|
self.warehouse = Warehouse.objects.create(code="WH_TEST", name="Test Warehouse", manager="test_manager")
|
|
|
|
def test_unauthorized_user_cannot_access_stock(self):
|
|
# Assign observer and inspector roles (non-stock roles)
|
|
observer_role, _ = Role.objects.get_or_create(name="observer")
|
|
inspector_role, _ = Role.objects.get_or_create(name="inspector")
|
|
self.user_config.roles.add(observer_role, inspector_role)
|
|
|
|
# Check mobile index page context
|
|
response = self.client.get(reverse("mobile:mobile_index"))
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertFalse(response.context.get("can_access_stock", False))
|
|
|
|
# Check view-level access restriction
|
|
stock_response = self.client.get(reverse("mobile:stock_index_mobile"))
|
|
self.assertEqual(stock_response.status_code, 403)
|
|
|
|
def test_authorized_user_can_access_stock(self):
|
|
# Assign stock_manager role
|
|
stock_manager_role, _ = Role.objects.get_or_create(name="stock_manager")
|
|
self.user_config.roles.add(stock_manager_role)
|
|
|
|
# Check mobile index page context
|
|
response = self.client.get(reverse("mobile:mobile_index"))
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertTrue(response.context.get("can_access_stock", False))
|
|
|
|
# Check view-level access success
|
|
stock_response = self.client.get(reverse("mobile:stock_index_mobile"))
|
|
self.assertEqual(stock_response.status_code, 200)
|
|
|