From 1d8bb039452c463b01137848ce1dbf5b38b23f6d Mon Sep 17 00:00:00 2001 From: Derek Brooks Date: Fri, 17 Nov 2017 13:53:14 -0600 Subject: [PATCH 1/5] test the facebook notification component --- tests/components/notify/test_facebook.py | 154 +++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 tests/components/notify/test_facebook.py diff --git a/tests/components/notify/test_facebook.py b/tests/components/notify/test_facebook.py new file mode 100644 index 00000000000000..470e510e16f289 --- /dev/null +++ b/tests/components/notify/test_facebook.py @@ -0,0 +1,154 @@ +"""The test for the Facebook notify module.""" +import unittest +import requests_mock + +from six.moves.urllib import parse as urlparse + +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 + ) + + params = urlparse.parse_qs(mock.last_request.query) + expected_params = {"access_token": ["page-access-token"]} + self.assertEqual( + params, + 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 + ) + + params = urlparse.parse_qs(request.query) + expected_params = {"access_token": ["page-access-token"]} + self.assertEqual( + params, + 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 + ) + + params = urlparse.parse_qs(mock.last_request.query) + expected_params = {"access_token": ["page-access-token"]} + self.assertEqual( + params, + 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) From 2f60951df7988a7c0bf6432d6acbb4618deb8090 Mon Sep 17 00:00:00 2001 From: Derek Brooks Date: Fri, 17 Nov 2017 13:56:41 -0600 Subject: [PATCH 2/5] respond to hound feedback --- tests/components/notify/test_facebook.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/components/notify/test_facebook.py b/tests/components/notify/test_facebook.py index 470e510e16f289..1ab9b201ab1862 100644 --- a/tests/components/notify/test_facebook.py +++ b/tests/components/notify/test_facebook.py @@ -120,7 +120,6 @@ def test_send_message_attachment(self, mock): expected_params ) - @requests_mock.Mocker() def test_send_targetless_message(self, mock): """Test sending a message without a target.""" From ebb9e1a69e16734c3e2362511b92654384c4e64f Mon Sep 17 00:00:00 2001 From: Derek Brooks Date: Fri, 17 Nov 2017 13:59:47 -0600 Subject: [PATCH 3/5] remove unnecessary line breaks --- tests/components/notify/test_facebook.py | 31 +++++------------------- 1 file changed, 6 insertions(+), 25 deletions(-) diff --git a/tests/components/notify/test_facebook.py b/tests/components/notify/test_facebook.py index 1ab9b201ab1862..6e23469e7cc63d 100644 --- a/tests/components/notify/test_facebook.py +++ b/tests/components/notify/test_facebook.py @@ -12,7 +12,6 @@ class TestFacebook(unittest.TestCase): def setUp(self): """Set up test variables.""" - access_token = "page-access-token" self.facebook = facebook.FacebookNotificationService(access_token) @@ -36,17 +35,11 @@ def test_send_simple_message(self, mock): "recipient": {"phone_number": target[0]}, "message": {"text": message} } - self.assertEqual( - mock.last_request.json(), - expected_body - ) + self.assertEqual(mock.last_request.json(), expected_body) params = urlparse.parse_qs(mock.last_request.query) expected_params = {"access_token": ["page-access-token"]} - self.assertEqual( - params, - expected_params - ) + self.assertEqual(params, expected_params) @requests_mock.Mocker() def test_sending_multiple_messages(self, mock): @@ -70,17 +63,11 @@ def test_sending_multiple_messages(self, mock): "recipient": {"phone_number": target}, "message": {"text": message} } - self.assertEqual( - request.json(), - expected_body - ) + self.assertEqual(request.json(), expected_body) params = urlparse.parse_qs(request.query) expected_params = {"access_token": ["page-access-token"]} - self.assertEqual( - params, - expected_params - ) + self.assertEqual(params, expected_params) @requests_mock.Mocker() def test_send_message_attachment(self, mock): @@ -108,17 +95,11 @@ def test_send_message_attachment(self, mock): "recipient": {"phone_number": target[0]}, "message": data } - self.assertEqual( - mock.last_request.json(), - expected_body - ) + self.assertEqual(mock.last_request.json(), expected_body) params = urlparse.parse_qs(mock.last_request.query) expected_params = {"access_token": ["page-access-token"]} - self.assertEqual( - params, - expected_params - ) + self.assertEqual(params, expected_params) @requests_mock.Mocker() def test_send_targetless_message(self, mock): From 882284eefd50664fb5511b8cfd1e2bfc86910e37 Mon Sep 17 00:00:00 2001 From: Derek Brooks Date: Fri, 17 Nov 2017 16:59:21 -0600 Subject: [PATCH 4/5] parse_qs not needed with requests_mock --- tests/components/notify/test_facebook.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/tests/components/notify/test_facebook.py b/tests/components/notify/test_facebook.py index 6e23469e7cc63d..7bc7a55869abdc 100644 --- a/tests/components/notify/test_facebook.py +++ b/tests/components/notify/test_facebook.py @@ -2,8 +2,6 @@ import unittest import requests_mock -from six.moves.urllib import parse as urlparse - import homeassistant.components.notify.facebook as facebook @@ -37,9 +35,8 @@ def test_send_simple_message(self, mock): } self.assertEqual(mock.last_request.json(), expected_body) - params = urlparse.parse_qs(mock.last_request.query) expected_params = {"access_token": ["page-access-token"]} - self.assertEqual(params, expected_params) + self.assertEqual(mock.last_request.qs, expected_params) @requests_mock.Mocker() def test_sending_multiple_messages(self, mock): @@ -65,9 +62,8 @@ def test_sending_multiple_messages(self, mock): } self.assertEqual(request.json(), expected_body) - params = urlparse.parse_qs(request.query) expected_params = {"access_token": ["page-access-token"]} - self.assertEqual(params, expected_params) + self.assertEqual(request.qs, expected_params) @requests_mock.Mocker() def test_send_message_attachment(self, mock): @@ -97,9 +93,8 @@ def test_send_message_attachment(self, mock): } self.assertEqual(mock.last_request.json(), expected_body) - params = urlparse.parse_qs(mock.last_request.query) expected_params = {"access_token": ["page-access-token"]} - self.assertEqual(params, expected_params) + self.assertEqual(mock.last_request.qs, expected_params) @requests_mock.Mocker() def test_send_targetless_message(self, mock): From 0a60de33f08257a3e04653071a5afb9b649fd946 Mon Sep 17 00:00:00 2001 From: Derek Brooks Date: Fri, 17 Nov 2017 17:00:49 -0600 Subject: [PATCH 5/5] remove facebook notifier from .coveragerc --- .coveragerc | 1 - 1 file changed, 1 deletion(-) diff --git a/.coveragerc b/.coveragerc index 3bfd983dc3017b..25e9d6f370ee57 100644 --- a/.coveragerc +++ b/.coveragerc @@ -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