Skip to content

Adding Teams extension methods + tests #470

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Dec 6, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions libraries/botbuilder-core/botbuilder/core/teams/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,16 @@

from .teams_activity_handler import TeamsActivityHandler
from .teams_info import TeamsInfo
from .teams_activity_extensions import (
teams_get_channel_id,
teams_get_team_info,
teams_notify_user,
)

__all__ = [
"TeamsActivityHandler",
"TeamsInfo",
"teams_get_channel_id",
"teams_get_team_info",
"teams_notify_user",
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from botbuilder.schema import Activity
from botbuilder.schema.teams import NotificationInfo, TeamsChannelData, TeamInfo


def dummy():
return 1


def teams_get_channel_id(activity: Activity) -> str:
if not activity:
return None

if activity.channel_data:
channel_data = TeamsChannelData().deserialize(activity.channel_data)
return channel_data.channel.id if channel_data.channel else None

return None


def teams_get_team_info(activity: Activity) -> TeamInfo:
if not activity:
return None

if activity.channel_data:
channel_data = TeamsChannelData().deserialize(activity.channel_data)
return channel_data.team

return None


def teams_notify_user(activity: Activity):
if not activity:
return

if not activity.channel_data:
activity.channel_data = {}

channel_data = TeamsChannelData().deserialize(activity.channel_data)
channel_data.notification = NotificationInfo(alert=True)
activity.channel_data = channel_data
148 changes: 148 additions & 0 deletions libraries/botbuilder-core/tests/teams/test_teams_extension.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
import aiounittest

from botbuilder.schema import Activity
from botbuilder.schema.teams import TeamInfo
from botbuilder.core.teams import (
teams_get_channel_id,
teams_get_team_info,
teams_notify_user,
)


class TestTeamsActivityHandler(aiounittest.AsyncTestCase):
def test_teams_get_channel_id(self):
# Arrange
activity = Activity(
channel_data={"channel": {"id": "id123", "name": "channel_name"}}
)

# Act
result = teams_get_channel_id(activity)

# Assert
assert result == "id123"

def test_teams_get_channel_id_with_no_channel(self):
# Arrange
activity = Activity(
channel_data={"team": {"id": "id123", "name": "channel_name"}}
)

# Act
result = teams_get_channel_id(activity)

# Assert
assert result is None

def test_teams_get_channel_id_with_no_channel_id(self):
# Arrange
activity = Activity(channel_data={"team": {"name": "channel_name"}})

# Act
result = teams_get_channel_id(activity)

# Assert
assert result is None

def test_teams_get_channel_id_with_no_channel_data(self):
# Arrange
activity = Activity(type="type")

# Act
result = teams_get_channel_id(activity)

# Assert
assert result is None

def test_teams_get_channel_id_with_none_activity(self):
# Arrange
activity = None

# Act
result = teams_get_channel_id(activity)

# Assert
assert result is None

def test_teams_get_team_info(self):
# Arrange
activity = Activity(
channel_data={"team": {"id": "id123", "name": "channel_name"}}
)

# Act
result = teams_get_team_info(activity)

# Assert
assert result == TeamInfo(id="id123", name="channel_name")

def test_teams_get_team_info_with_no_channel_data(self):
# Arrange
activity = Activity(type="type")

# Act
result = teams_get_team_info(activity)

# Assert
assert result is None

def test_teams_get_team_info_with_no_team_info(self):
# Arrange
activity = Activity(channel_data={"eventType": "eventType"})

# Act
result = teams_get_team_info(activity)

# Assert
assert result is None

def test_teams_get_team_info_with_none_activity(self):
# Arrange
activity = None

# Act
result = teams_get_team_info(activity)

# Assert
assert result is None

def test_teams_notify_user(self):
# Arrange
activity = Activity(channel_data={"eventType": "eventType"})

# Act
teams_notify_user(activity)

# Assert
assert activity.channel_data.notification.alert

def test_teams_notify_user_with_no_activity(self):
# Arrange
activity = None

# Act
teams_notify_user(activity)

# Assert
assert activity is None

def test_teams_notify_user_with_preexisting_notification(self):
# Arrange
activity = Activity(channel_data={"notification": {"alert": False}})

# Act
teams_notify_user(activity)

# Assert
assert activity.channel_data.notification.alert

def test_teams_notify_user_with_no_channel_data(self):
# Arrange
activity = Activity(id="id123")

# Act
teams_notify_user(activity)

# Assert
assert activity.channel_data.notification.alert
assert activity.id == "id123"