kopia lustrzana https://github.com/OpenDroneMap/WebODM
Add cluster tests
rodzic
4c7141af94
commit
8c9429ecdd
|
@ -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")
|
||||
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Ładowanie…
Reference in New Issue