Browse Source

Add unit test for slack events

Harshg999 4 years ago
parent
commit
6fecd9ec0a

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

@@ -34,16 +34,8 @@ SLACK_BOT_USER_TOKEN = getattr(settings, 'SLACK_BOT_USER_TOKEN', None)
 
 
 slack_client = WebClient(token=SLACK_BOT_USER_TOKEN)
-appname = "SQL Assistant"
+appname = "hue_bot"
 
-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'):
-      return user.get('id')
-
-BOT_ID = get_bot_id(appname)
 
 @login_notrequired
 @csrf_exempt
@@ -68,6 +60,7 @@ def parse_events(event_message):
   user_id = event_message.get('user')
   text = event_message.get('text')
   channel = event_message.get('channel')
+  BOT_ID = get_bot_id(appname)
 
   # ignore bot's own message
   if BOT_ID == user_id:
@@ -81,3 +74,10 @@ def say_hi_user(channel, user_id):
   bot_message = f'Hi <@{user_id}> :wave:'
   slack_client.api_call(api_method='chat.postMessage', json={'channel': channel, 'text': bot_message})
   return HttpResponse(status=200)
+
+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'):
+      return user.get('id')

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

@@ -0,0 +1,53 @@
+#!/usr/bin/env python
+# Licensed to Cloudera, Inc. under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  Cloudera, Inc. licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import json
+import logging
+import unittest
+import sys
+
+from nose.tools import assert_equal, assert_true
+from django.test import TestCase
+from desktop.lib.botserver.views import *
+
+if sys.version_info[0] > 2:
+  from unittest.mock import patch
+else:
+  from mock import patch
+
+LOG = logging.getLogger(__name__)
+
+class TestBotServer(unittest.TestCase):
+  def test_get_bot_id(self):
+    with patch('desktop.lib.botserver.views.slack_client') as slack_client_mock:
+      slack_client_mock.api_call("users.list").return_value = {
+        'members': [
+          {
+            'name': 'hue_bot',
+            'deleted': False,
+            'id': 'U01K99VEDR9'
+          }
+        ]
+      }
+      bot_id = get_bot_id('hue_bot')
+      assert_equal(bot_id, 'U01K99VEDR9')
+  
+
+
+
+
+