Browse Source

Update slack_events view and add its unit test. Also update pylint issues

Harshg999 4 years ago
parent
commit
29c6678666

+ 18 - 14
desktop/core/src/desktop/lib/botserver/views.py

@@ -41,22 +41,26 @@ appname = "hue_bot"
 @login_notrequired
 @csrf_exempt
 def slack_events(request):
-  slack_message = json.loads(request.body.decode('utf-8'))
-
-  if slack_message['token'] != SLACK_VERIFICATION_TOKEN:
-    return HttpResponse(status=403)
-
-  # challenge verification
-  if slack_message['type'] == 'url_verification':
-    response_dict = {"challenge": slack_message.get('challenge')}
-    return JsonResponse(response_dict, status=200)
+  try:
+    slack_message = json.loads(request.body)
+
+    if slack_message['token'] != SLACK_VERIFICATION_TOKEN:
+      return HttpResponse(status=403)
+
+      # challenge verification
+    if slack_message['type'] == 'url_verification':
+        response_dict = {"challenge": slack_message.get('challenge')}
+        return JsonResponse(response_dict, status=200)
+    
+    if 'event' in slack_message:
+        event_message = slack_message['event']
+        parse_events(event_message)
+  except Exception as e:
+    LOG.exception('Response content is not valid JSON in %s' % slack_events)
   
-  if 'event' in slack_message:
-    event_message = slack_message['event']
-    parse_events(event_message)
-
   return HttpResponse(status=200)
 
+
 def parse_events(event_message):
   user_id = event_message.get('user')
   text = event_message.get('text')
@@ -82,5 +86,5 @@ def get_bot_id(botusername):
   response = slack_client.api_call('users.list')
   users = response['members']
   for user in users:
-    if 'name' in user and botusername in user.get('name') and not user.get('deleted'):
+    if botusername in user.get('name', '') and not user.get('deleted'):
       return user.get('id')

+ 9 - 0
desktop/core/src/desktop/lib/botserver/views_tests.py

@@ -63,8 +63,17 @@ class TestBotServer(unittest.TestCase):
       }
       response = say_hi_user("channel", "user_id")
       assert_equal(response.status_code, 200)
+  
+  def test_slack_events(self):
+    payload =  {"token": "Jhj5dZrVaK7ZwHHjRyZWjbDl",
+    "challenge": "3eZbrw1aBm2rZgRNFdxV2595E9CY3gmdALWMmHkvFXO7tYXAYM8P",
+    "type": "message"}
+    client = Client()
+    response = client.post('/slack/events/', payload)
+    assert_equal(response.status_code, 200)
 
   
+  
 
 
 

+ 1 - 1
desktop/libs/metadata/src/metadata/conf.py

@@ -473,7 +473,7 @@ NAVIGATOR = ConfigSection(
       dynamic_default=get_security_default,
       type=coerce_bool
     ),
-     FETCH_SIZE_SEARCH=Config(
+    FETCH_SIZE_SEARCH=Config(
       key="fetch_size_search",
       help=_t("Max number of items to fetch in one call in object search."),
       default=450,