Add cluster tests

pull/1727/head
Piero Toffanin 2025-08-20 11:21:08 -04:00
rodzic 4c7141af94
commit 8c9429ecdd
3 zmienionych plików z 75 dodań i 8 usunięć

Wyświetl plik

@ -0,0 +1,56 @@
from django.contrib.auth.models import User
from rest_framework import status
from rest_framework.test import APIClient
from app.models import Task, Project
from .classes import BootTestCase
from webodm import settings
class TestCluster(BootTestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_redirects(self):
c = APIClient()
c.login(username="testuser", password="test1234")
settings.CLUSTER_ID = None
settings.CLUSTER_URL = ""
user = User.objects.get(username="testuser")
self.assertIsNone(user.profile.cluster_id)
# Can access dashboard as usual
res = c.get('/dashboard/', follow=False)
self.assertTrue(res.status_code == status.HTTP_200_OK)
user.profile.cluster_id = 2
user.profile.save()
# Can still access dashboard as usual (clusterID not set)
res = c.get('/dashboard/', follow=False)
self.assertEqual(res.status_code, status.HTTP_200_OK)
settings.CLUSTER_ID = 2
settings.CLUSTER_URL = "http://test%s.dev"
# Can still access dashboard as usual (clusterID match)
res = c.get('/dashboard/', follow=False)
self.assertEqual(res.status_code, status.HTTP_200_OK)
settings.CLUSTER_ID = 1
# Dashboard redirect
res = c.get('/dashboard/', follow=False)
self.assertEqual(res.status_code, status.HTTP_302_FOUND)
self.assertEqual(res.url, "http://test2.dev/dashboard/")
# With URL query
res = c.get('/dashboard/?project_task_open=5', follow=False)
self.assertEqual(res.status_code, status.HTTP_302_FOUND)
self.assertEqual(res.url, "http://test2.dev/dashboard/?project_task_open=5")

Wyświetl plik

@ -13,7 +13,7 @@ from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.utils.translation import ugettext as _
from django import forms
from app.views.utils import get_permissions, get_project_or_raise, get_task_or_raise, handle_302, ResponseClusterRedirect
from app.views.utils import get_permissions, get_project_or_raise, get_task_or_raise, handle_302, ResponseClusterRedirect, cluster_mode
from webodm import settings
def index(request):
@ -34,7 +34,7 @@ def index(request):
@login_required
def dashboard(request):
if settings.CLUSTER_ID is not None:
if cluster_mode():
if request.user.profile.cluster_id is not None and request.user.profile.cluster_id != settings.CLUSTER_ID:
return ResponseClusterRedirect(request, request.user.profile.cluster_id)

Wyświetl plik

@ -19,6 +19,8 @@ class HttpRedirect302(Exception):
def ResponseClusterRedirect(request, to_cluster):
return HttpResponseRedirect((settings.CLUSTER_URL % to_cluster) + request.get_full_path())
def cluster_mode():
return settings.CLUSTER_ID is not None
def handle_302(func):
@wraps(func)
@ -37,10 +39,15 @@ def get_project_or_raise(pk=None, public_id=None):
kwargs['public_id'] = public_id
try:
return get_object_or_404(Project, **kwargs)
p = get_object_or_404(Project, **kwargs)
if cluster_mode():
# Make sure the owner hasn't been moved
if p.owner.profile.cluster_id is not None and p.owner.profile.cluster_id != settings.CLUSTER_ID:
raise HttpRedirect302(p.owner.profile.cluster_id)
return p
except Http404 as err404:
# Check for redirects if cluster mode is enabled
if settings.CLUSTER_ID is not None:
# Check for redirects
if cluster_mode():
p = {}
if pk is not None:
p['project_id'] = pk
@ -62,10 +69,14 @@ def get_task_or_raise(pk=None, project=None):
if project is not None:
kwargs['project'] = project
try:
return get_object_or_404(Task, **kwargs)
t = get_object_or_404(Task, **kwargs)
if cluster_mode():
# Make sure the owner hasn't been moved
if t.project.owner.profile.cluster_id is not None and t.project.owner.profile.cluster_id != settings.CLUSTER_ID:
raise HttpRedirect302(t.project.owner.profile.cluster_id)
except Http404 as err404:
# Check for redirects if cluster mode is enabled
if settings.CLUSTER_ID is not None:
# Check for redirects
if cluster_mode():
try:
r = Redirect.objects.get(task_id=pk)
raise HttpRedirect302(r.cluster_id)