Sfoglia il codice sorgente

[slack] Refactor slack permission check and UTs

- Allows the permission check to be used for other events
- UTs refactoring reduces the time taken for running tests by half
Harshg999 4 anni fa
parent
commit
f37f66860c

+ 12 - 12
desktop/core/src/desktop/lib/botserver/views.py

@@ -124,19 +124,11 @@ def handle_on_link_shared(host_domain, channel_id, message_ts, links, user_id):
       raise PopupException(_(msg))
 
     # Permission check for Slack user to be Hue user
-    try:
-      slack_user = check_slack_user_permission(host_domain, user_id)
-      user = User.objects.get(username=slack_user.get('user_email_prefix')) if not slack_user['is_bot'] else doc.owner
-    except User.DoesNotExist:
-      bot_message = 'Corresponding Hue user not found or does not have access to the query'
-      _send_message(channel_id, bot_message)
-      raise PopupException(_("Slack user does not have access to the query"))
-
+    slack_user = check_slack_user_permission(host_domain, user_id)
+    user = get_user(channel_id, slack_user) if not slack_user['is_bot'] else doc.owner
     doc.can_read_or_exception(user)
 
-    # Mock request for query execution and fetch result
-    user = rewrite_user(user)
-    request = MockRequest(user=user)
+    request = MockRequest(user=rewrite_user(user))
 
     payload = _make_unfurl_payload(request, item['url'], id_type, doc, doc_type)
     try:
@@ -149,8 +141,16 @@ def handle_on_link_shared(host_domain, channel_id, message_ts, links, user_id):
       send_result_file(request, channel_id, message_ts, doc, 'xls')
 
 
-def check_slack_user_permission(host_domain, user_id):
+def get_user(channel_id, slack_user):
+  try:
+    return User.objects.get(username=slack_user.get('user_email_prefix'))
+  except User.DoesNotExist:
+    bot_message = 'Corresponding Hue user not found or does not have access to the query'
+    _send_message(channel_id, bot_message)
+    raise PopupException(_("Slack user does not have access to the query"), error_code=200)
+
 
+def check_slack_user_permission(host_domain, user_id):
   try:
     slack_user = slack_client.users_info(user=user_id)
   except Exception as e:

+ 6 - 6
desktop/core/src/desktop/lib/botserver/views_tests.py

@@ -45,16 +45,16 @@ class TestBotServer(unittest.TestCase):
   def setUpClass(cls):
     if not conf.SLACK.IS_ENABLED.get():
       raise SkipTest
-  
-  def setUp(self):
+
     # Slack user: test
-    self.client = make_logged_in_client(username="test", groupname="default", recreate=True, is_superuser=False)
-    self.user = User.objects.get(username="test")
+    cls.client = make_logged_in_client(username="test", groupname="default", recreate=True, is_superuser=False)
+    cls.user = User.objects.get(username="test")
 
     # Other slack user: test_not_me
-    self.client_not_me = make_logged_in_client(username="test_not_me", groupname="default", recreate=True, is_superuser=False)
-    self.user_not_me = User.objects.get(username="test_not_me")
+    cls.client_not_me = make_logged_in_client(username="test_not_me", groupname="default", recreate=True, is_superuser=False)
+    cls.user_not_me = User.objects.get(username="test_not_me")
 
+  def setUp(self):
     self.host_domain = 'testserver.gethue.com'
     self.email_domain = '.'.join(self.host_domain.split('.')[-2:])