8000 Add Facebook Notification tests by broox · Pull Request #10642 · home-assistant/core · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Add Facebook Notification tests #10642

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 5 commits into from
Nov 18, 2017
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
1 change: 0 additions & 1 deletion .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,6 @@ omit =
homeassistant/components/notify/clicksend.py
homeassistant/components/notify/clicksend_tts.py
homeassistant/components/notify/discord.py
homeassistant/components/notify/facebook.py
homeassistant/components/notify/free_mobile.py
homeassistant/components/notify/gntp.py
homeassistant/components/notify/group.py
Expand Down
129 changes: 129 additions & 0 deletions tests/components/notify/test_facebook.py
8000
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
"""The test for the Facebook notify module."""
import unittest
import requests_mock

import homeassistant.components.notify.facebook as facebook


class TestFacebook(unittest.TestCase):
"""Tests for Facebook notifification service."""

def setUp(self):
"""Set up test variables."""
access_token = "page-access-token"
self.facebook = facebook.FacebookNotificationService(access_token)

@requests_mock.Mocker()
def test_send_simple_message(self, mock):
"""Test sending a simple message with success."""
mock.register_uri(
requests_mock.POST,
facebook.BASE_URL,
status_code=200
)

message = "This is just a test"
target = ["+15555551234"]

self.facebook.send_message(message=message, target=target)
self.assertTrue(mock.called)
self.assertEqual(mock.call_count, 1)

expected_body = {
"recipient": {"phone_number": target[0]},
"message": {"text": message}
}
self.assertEqual(mock.last_request.json(), expected_body)

expected_params = {"access_token": ["page-access-token"]}
self.assertEqual(mock.last_request.qs, expected_params)

@requests_mock.Mocker()
def test_sending_multiple_messages(self, mock):
"""Test sending a message to multiple targets."""
mock.register_uri(
requests_mock.POST,
facebook.BASE_URL,
status_code=200
)

message = "This is just a test"
targets = ["+15555551234", "+15555551235"]

self.facebook.send_message(message=message, target=targets)
self.assertTrue(mock.called)
self.assertEqual(mock.call_count, 2)

for idx, target in enumerate(targets):
request = mock.request_history[idx]
expected_body = {
"recipient": {"phone_number": target},
"message": {"text": message}
}
self.assertEqual(request.json(), expected_body)

expected_params = {"access_token": ["page-access-token"]}
self.assertEqual(request.qs, expected_params)

@requests_mock.Mocker()
def test_send_message_attachment(self, mock):
"""Test sending a message with a remote attachment."""
mock.register_uri(
requests_mock.POST,
facebook.BASE_URL,
status_code=200
)

message = "This will be thrown away."
data = {
"attachment": {
"type": "image",
"payload": {"url": "http://www.example.com/image.jpg"}
}
}
target = ["+15555551234"]

self.facebook.send_message(message=message, data=data, target=target)
self.assertTrue(mock.called)
self.assertEqual(mock.call_count, 1)

expected_body = {
"recipient": {"phone_number": target[0]},
"message": data
}
self.assertEqual(mock.last_request.json(), expected_body)

expected_params = {"access_token": ["page-access-token"]}
self.assertEqual(mock.last_request.qs, expected_params)

@requests_mock.Mocker()
def test_send_targetless_message(self, mock):
"""Test sending a message without a target."""
mock.register_uri(
requests_mock.POST,
facebook.BASE_URL,
status_code=200
)

self.facebook.send_message(message="goin nowhere")
self.assertFalse(mock.called)

@requests_mock.Mocker()
def test_send_message_with_400(self, mock):
"""Test sending a message with a 400 from Facebook."""
mock.register_uri(
requests_mock.POST,
facebook.BASE_URL,
status_code=400,
json={
"error": {
"message": "Invalid OAuth access token.",
"type": "OAuthException",
"code": 190,
"fbtrace_id": "G4Da2pFp2Dp"
}
}
)
self.facebook.send_message(message="nope!", target=["+15555551234"])
self.assertTrue(mock.called)
self.assertEqual(mock.call_count, 1)
0