add more multiuser support

This commit is contained in:
Ross
2026-06-16 13:14:24 +01:00
parent 6ebe74d785
commit dbb762bb09
13 changed files with 790 additions and 4 deletions
+103
View File
@@ -0,0 +1,103 @@
import pytest
from django.urls import reverse
from atlas.models import Case, MultiuserSession
from pytest_django.asserts import assertContains, assertRedirects
@pytest.mark.django_db
def test_multiuser_session_model_creation(create_user):
user = create_user
session = MultiuserSession.objects.create(
name="Test Sync Session",
creator=user
)
assert session.name == "Test Sync Session"
assert session.creator == user
assert session.active_case is None
assert str(session).startswith("Session Test Sync")
@pytest.mark.django_db
def test_multiuser_dashboard_view_anonymous_redirect(client):
response = client.get(reverse("atlas:multiuser_dashboard"))
assertRedirects(response, f"{reverse('login')}?next={reverse('atlas:multiuser_dashboard')}")
@pytest.mark.django_db
def test_multiuser_dashboard_lists_sessions(client, create_user):
user = create_user
session1 = MultiuserSession.objects.create(name="User Session 1", creator=user)
other_user = create_user
session2 = MultiuserSession.objects.create(name="Other Session 2", creator=other_user)
client.force_login(user)
response = client.get(reverse("atlas:multiuser_dashboard"))
assert response.status_code == 200
assertContains(response, "User Session 1")
assertContains(response, "Other Session 2")
assertContains(response, "Start New Session")
@pytest.mark.django_db
def test_multiuser_create_session_action(client, create_user):
client.force_login(create_user)
response = client.post(reverse("atlas:multiuser_create_session"), data={"name": "My New Session"})
session = MultiuserSession.objects.get(name="My New Session")
assertRedirects(response, reverse("atlas:multiuser_session_detail", kwargs={"session_id": session.id}))
@pytest.mark.django_db
def test_multiuser_session_detail_manager_vs_participant(client, create_user):
manager = create_user
participant = create_user
session = MultiuserSession.objects.create(name="Collaboration Session", creator=manager)
# Manager view
client.force_login(manager)
response = client.get(reverse("atlas:multiuser_session_detail", kwargs={"session_id": session.id}))
assert response.status_code == 200
assertContains(response, "Host Controls:")
assertContains(response, "Search cases to load...")
# Participant view
client.force_login(participant)
response = client.get(reverse("atlas:multiuser_session_detail", kwargs={"session_id": session.id}))
assert response.status_code == 200
assert "Host Controls:" not in response.content.decode("utf-8")
assertContains(response, "You are viewing this session in real-time")
@pytest.mark.django_db
def test_multiuser_search_cases_permission(client, create_user):
manager = create_user
participant = create_user
session = MultiuserSession.objects.create(name="Search Session", creator=manager)
# Participant cannot search
client.force_login(participant)
response = client.get(reverse("atlas:multiuser_search_cases", kwargs={"session_id": session.id}) + "?q=test")
assert response.status_code == 403
# Manager can search
client.force_login(manager)
response = client.get(reverse("atlas:multiuser_search_cases", kwargs={"session_id": session.id}) + "?q=test")
assert response.status_code == 200
@pytest.mark.django_db
def test_multiuser_load_case_action(client, create_user, make_case):
manager = create_user
participant = create_user
session = MultiuserSession.objects.create(name="Load Case Session", creator=manager)
case = make_case(title="Multiuser Dicom Case")
case.author.add(manager) # Grant access to manager
# Participant cannot load
client.force_login(participant)
response = client.post(reverse("atlas:multiuser_load_case", kwargs={"session_id": session.id}), data={"case_id": case.pk})
assert response.status_code == 403
# Manager loads case
client.force_login(manager)
response = client.post(reverse("atlas:multiuser_load_case", kwargs={"session_id": session.id}), data={"case_id": case.pk})
assert response.status_code == 200
session.refresh_from_db()
assert session.active_case == case
assertContains(response, "Interactive DICOM Viewer")