changeset 963:9866889be864

wsi: added test_search_active_users
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 07 Sep 2026 18:20:22 +0200
parents e585dc076aa5
children d038ae071934
files Plugins/WSI/Annotations.json Plugins/WSI/Annotations.py Plugins/WSI/AnnotationsLearnerToLearnerSharing.json
diffstat 3 files changed, 96 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/Plugins/WSI/Annotations.json	Fri Sep 04 18:13:38 2026 +0200
+++ b/Plugins/WSI/Annotations.json	Mon Sep 07 18:20:22 2026 +0200
@@ -13,6 +13,7 @@
     "AuthenticationHttpHeader" : "Mail",
     "EnableAnnotations" : true,
     "EnableAnnotationsSharing" : true,
+    "EnableLearnerToLearnerSharing" : false,
     "Instructors" : [
       "admin@uclouvain.be",
       "instructor@uclouvain.be"
--- a/Plugins/WSI/Annotations.py	Fri Sep 04 18:13:38 2026 +0200
+++ b/Plugins/WSI/Annotations.py	Mon Sep 07 18:20:22 2026 +0200
@@ -96,6 +96,16 @@
     return DoPost(ORTHANC, uri, body, headers = { 'Mail' : user })
 
 
+def UnpackSetOfStandardUsers(users):
+    s = []
+    for user in users:
+        assert(user['type'] == 1)
+        assert(not user['name'] in s)
+        s.append(user['name'])
+    return s
+
+
+
 class Orthanc(unittest.TestCase):
     def setUp(self):
         if (sys.version_info >= (3, 0)):
@@ -105,7 +115,12 @@
 
         DropOrthanc(ORTHANC)
 
-        for user in [ 'admin@uclouvain.be' ]:
+        for user in [
+                'admin@uclouvain.be',
+                'instructor@uclouvain.be',
+                'learner@uclouvain.be',
+                'learner2@uclouvain.be',
+        ]:
             for project in [ '', 'hello' ]:
                 layers = Execute('/wsi/api/list-user-layers', { 'project' : project }, user = user)
 
@@ -141,15 +156,17 @@
             'resource' : 'test'
         }, headers = { 'Mail' : 'admin@uclouvain.be' })
 
-        self.assertEqual(8, len(info))
+        self.assertEqual(11, len(info))
         self.assertEqual('', info['description'])
         self.assertEqual('', info['name'])
         self.assertEqual('', info['project'])
         self.assertEqual('admin@uclouvain.be', info['user'])
-        self.assertEqual('instructor', info['role'])
+        self.assertFalse(info['is_learner'])
+        self.assertTrue(info['is_instructor'])
         self.assertTrue(info['enabled'])
         self.assertTrue(info['persistent'])
         self.assertTrue(info['sharing'])
+        self.assertTrue('learner_to_learner_sharing' in info)
 
         info = DoPost(ORTHANC, '/wsi/api/workspace-info', {
             'level' : 'Series',
@@ -157,15 +174,17 @@
             'project' : 'hello',
         }, headers = { 'Mail' : 'learner@uclouvain.be' })
 
-        self.assertEqual(8, len(info))
+        self.assertEqual(11, len(info))
         self.assertEqual('', info['description'])
         self.assertEqual('', info['name'])
         self.assertEqual('hello', info['project'])
-        self.assertEqual('learner', info['role'])
         self.assertEqual('learner@uclouvain.be', info['user'])
+        self.assertTrue(info['is_learner'])
+        self.assertFalse(info['is_instructor'])
         self.assertTrue(info['enabled'])
         self.assertTrue(info['persistent'])
         self.assertTrue(info['sharing'])
+        self.assertTrue('learner_to_learner_sharing' in info)
 
 
     def test_create_delete_layers(self):
@@ -295,6 +314,55 @@
         b['color'] = 'invalid'
         self.assertRaises(Exception, lambda: Execute('/wsi/api/save-user-layer', { 'layer' : b }))
 
+
+    def test_search_active_users(self):
+        a = Execute('/wsi/api/create-user-layer')  # admin@uclouvain.be
+        b = Execute('/wsi/api/create-user-layer', user = 'instructor@uclouvain.be')
+        c = Execute('/wsi/api/create-user-layer', user = 'learner@uclouvain.be')
+        d = Execute('/wsi/api/create-user-layer', user = 'learner2@uclouvain.be')
+
+        v = UnpackSetOfStandardUsers(Execute('/wsi/api/search-active-users', { 'query' : '' }))
+        self.assertEqual(3, len(v))
+        self.assertTrue('instructor@uclouvain.be' in v)
+        self.assertTrue('learner@uclouvain.be' in v)
+        self.assertTrue('learner2@uclouvain.be' in v)
+
+        v = UnpackSetOfStandardUsers(Execute('/wsi/api/search-active-users', { 'query' : 'l' }))
+        self.assertEqual(3, len(v))
+        self.assertTrue('instructor@uclouvain.be' in v)
+        self.assertTrue('learner@uclouvain.be' in v)
+        self.assertTrue('learner2@uclouvain.be' in v)
+
+        v = UnpackSetOfStandardUsers(Execute('/wsi/api/search-active-users', { 'query' : 'lear' }))
+        self.assertEqual(2, len(v))
+        self.assertTrue('learner@uclouvain.be' in v)
+        self.assertTrue('learner2@uclouvain.be' in v)
+
+        v = UnpackSetOfStandardUsers(Execute('/wsi/api/search-active-users', { 'query' : 'ins' }))
+        self.assertEqual(1, len(v))
+        self.assertTrue('instructor@uclouvain.be' in v)
+
+        v = UnpackSetOfStandardUsers(Execute('/wsi/api/search-active-users', { 'query' : '' }, user = 'instructor@uclouvain.be'))
+        self.assertEqual(3, len(v))
+        self.assertTrue('admin@uclouvain.be' in v)
+        self.assertTrue('learner@uclouvain.be' in v)
+        self.assertTrue('learner2@uclouvain.be' in v)
+
+        info = Execute('/wsi/api/workspace-info')
+        pprint.pprint(info)
+
+        v = UnpackSetOfStandardUsers(Execute('/wsi/api/search-active-users', { 'query' : '' }, user = 'learner@uclouvain.be'))
+        if info['learner_to_learner_sharing']:
+            self.assertEqual(3, len(v))
+            self.assertTrue('admin@uclouvain.be' in v)
+            self.assertTrue('instructor@uclouvain.be' in v)
+            self.assertTrue('learner2@uclouvain.be' in v)
+        else:
+            self.assertEqual(2, len(v))
+            self.assertTrue('admin@uclouvain.be' in v)
+            self.assertTrue('instructor@uclouvain.be' in v)
+
+
 try:
     print('\nStarting the tests...')
     unittest.main(argv = [ sys.argv[0] ] + args.options)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/WSI/AnnotationsLearnerToLearnerSharing.json	Mon Sep 07 18:20:22 2026 +0200
@@ -0,0 +1,22 @@
+{
+  "Plugins" : [ "${PWD}" ],
+  "StorageDirectory" : "/tmp/orthanc-storage/",
+  "RemoteAccessAllowed" : true,
+  "AuthenticationEnabled" : true,
+  "RegisteredUsers" : {
+    "alice" : "orthanctest"
+  },
+  "ExecuteLuaEnabled": true,
+
+  "WholeSlideImaging" : {
+    "AuthenticationSource" : "HttpHeader",
+    "AuthenticationHttpHeader" : "Mail",
+    "EnableAnnotations" : true,
+    "EnableAnnotationsSharing" : true,
+    "EnableLearnerToLearnerSharing" : true,
+    "Instructors" : [
+      "admin@uclouvain.be",
+      "instructor@uclouvain.be"
+    ]
+  }
+}