Skip to content

Commit eacadba

Browse files
committed
Test Session access management
1 parent d208d83 commit eacadba

1 file changed

Lines changed: 116 additions & 2 deletions

File tree

sasdata/fair_database/data/test/test_session.py

Lines changed: 116 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -518,9 +518,120 @@ def tearDownClass(cls):
518518
class TestSessionAccessManagement(APITestCase):
519519
@classmethod
520520
def setUpTestData(cls):
521-
pass
521+
cls.user1 = User.objects.create_user(username="testUser1", password="secret")
522+
cls.user2 = User.objects.create_user(username="testUser2", password="secret")
523+
cls.private_session = Session.objects.create(
524+
id=1, current_user=cls.user1, title="Private Session", is_public=False
525+
)
526+
cls.shared_session = Session.objects.create(
527+
id=2, current_user=cls.user1, title="Shared Session", is_public=False
528+
)
529+
cls.private_dataset = DataSet.objects.create(
530+
id=1,
531+
current_user=cls.user1,
532+
name="Private Dataset",
533+
session=cls.private_session,
534+
)
535+
cls.shared_dataset = DataSet.objects.create(
536+
id=2,
537+
current_user=cls.user1,
538+
name="Shared Dataset",
539+
session=cls.shared_session,
540+
)
541+
cls.shared_session.users.add(cls.user2)
542+
cls.shared_dataset.users.add(cls.user2)
543+
cls.client_owner = APIClient()
544+
cls.client_other = APIClient()
545+
cls.client_owner.force_authenticate(cls.user1)
546+
cls.client_other.force_authenticate(cls.user2)
522547

523548
# Test listing access
549+
def test_list_access_private(self):
550+
request = self.client_owner.get("/v1/data/session/1/users/")
551+
self.assertEqual(request.status_code, status.HTTP_200_OK)
552+
self.assertEqual(
553+
request.data,
554+
{
555+
"session_id": 1,
556+
"title": "Private Session",
557+
"is_public": False,
558+
"users": [],
559+
},
560+
)
561+
562+
def test_list_access_shared(self):
563+
request = self.client_owner.get("/v1/data/session/2/users/")
564+
self.assertEqual(request.status_code, status.HTTP_200_OK)
565+
self.assertEqual(
566+
request.data,
567+
{
568+
"session_id": 2,
569+
"title": "Shared Session",
570+
"is_public": False,
571+
"users": ["testUser2"],
572+
},
573+
)
574+
575+
def test_list_access_unauthorized(self):
576+
request1 = self.client_other.get("/v1/data/session/1/users/")
577+
request2 = self.client_other.get("/v1/data/session/2/users/")
578+
self.assertEqual(request1.status_code, status.HTTP_403_FORBIDDEN)
579+
self.assertEqual(request2.status_code, status.HTTP_403_FORBIDDEN)
580+
581+
def test_grant_access(self):
582+
request1 = self.client_owner.put(
583+
"/v1/data/session/1/users/", {"username": "testUser2", "access": True}
584+
)
585+
request2 = self.client_other.get("/v1/data/session/1/")
586+
request3 = self.client_other.get("/v1/data/set/1/")
587+
self.assertEqual(request1.status_code, status.HTTP_200_OK)
588+
self.assertEqual(
589+
request1.data,
590+
{
591+
"username": "testUser2",
592+
"session_id": 1,
593+
"title": "Private Session",
594+
"access": True,
595+
},
596+
)
597+
self.assertEqual(request2.status_code, status.HTTP_200_OK)
598+
self.assertEqual(request3.status_code, status.HTTP_200_OK)
599+
self.assertIn(self.user2, self.private_session.users.all()) # codespell:ignore
600+
self.assertIn(self.user2, self.private_dataset.users.all()) # codespell:ignore
601+
self.private_session.users.remove(self.user2)
602+
self.private_dataset.users.remove(self.user2)
603+
604+
def test_revoke_access(self):
605+
request1 = self.client_owner.put(
606+
"/v1/data/session/2/users/", {"username": "testUser2", "access": False}
607+
)
608+
request2 = self.client_other.get("/v1/data/session/2/")
609+
request3 = self.client_other.get("/v1/data/session/2/")
610+
self.assertEqual(request1.status_code, status.HTTP_200_OK)
611+
self.assertEqual(request2.status_code, status.HTTP_403_FORBIDDEN)
612+
self.assertEqual(request3.status_code, status.HTTP_403_FORBIDDEN)
613+
self.assertEqual(
614+
request1.data,
615+
{
616+
"username": "testUser2",
617+
"session_id": 2,
618+
"title": "Shared Session",
619+
"access": False,
620+
},
621+
)
622+
self.assertNotIn(self.user2, self.shared_session.users.all())
623+
self.assertNotIn(self.user2, self.shared_dataset.users.all())
624+
self.shared_session.users.add(self.user2)
625+
self.shared_dataset.users.add(self.user2)
626+
627+
def test_revoke_access_unauthorized(self):
628+
request1 = self.client_other.put(
629+
"/v1/data/session/2/users/", {"username": "testUser2", "access": False}
630+
)
631+
request2 = self.client_other.get("/v1/data/session/2/")
632+
self.assertEqual(request1.status_code, status.HTTP_403_FORBIDDEN)
633+
self.assertEqual(request2.status_code, status.HTTP_200_OK)
634+
self.assertIn(self.user2, self.shared_session.users.all()) # codespell:ignore
524635

525636
# Test listing access not as the owner
526637

@@ -534,4 +645,7 @@ def setUpTestData(cls):
534645

535646
@classmethod
536647
def tearDownClass(cls):
537-
pass
648+
cls.private_session.delete()
649+
cls.shared_session.delete()
650+
cls.user1.delete()
651+
cls.user2.delete()

0 commit comments

Comments
 (0)