Source code for helpscout.tests.test_helpscout_web_hook
# -*- coding: utf-8 -*-
# Copyright 2017-TODAY LasLabs Inc.
# License MIT (https://opensource.org/licenses/MIT).
import json
import mock
import unittest
from ..exceptions import HelpScoutSecurityException
from ..web_hook import HelpScoutWebHook, HelpScoutWebHookEvent
[docs]class TestHelpScoutWebHook(unittest.TestCase):
[docs] def setUp(self):
super(TestHelpScoutWebHook, self).setUp()
self.data_str = '{"firstName":"Jackie","lastName":"Chan",' \
'"email":"jackie.chan@somewhere.com",' \
'"gender":"male"}'
self.data = json.loads(self.data_str)
self.signature = '\n2iFmnzC8SCNVF/iNiMnSe19yceU=\n'
self.bad_signature = '4+kjl2zB5OwZZjHznSTkD1/J208='
self.hook = HelpScoutWebHook(secret_key='your secret key')
[docs] def test_validate_signature_valid(self):
"""It should return True for valid signature."""
self.assertTrue(
self.hook.validate_signature(self.signature, self.data_str),
)
[docs] def test_validate_signature_invalid(self):
"""It should return False for invalid signature."""
self.assertFalse(
self.hook.validate_signature(self.bad_signature, self.data_str),
)
[docs] def test_receive_str_invalid(self):
"""It should raise on invalid signature from data string."""
with self.assertRaises(HelpScoutSecurityException):
self.hook.receive(None, self.signature, '{"nope": "1"}')
[docs] def test_receive_returns_event(self):
"""Valid receive should return instantiated web hook event."""
self.assertIsInstance(
self.hook.receive(
'customer.created', self.signature, self.data_str,
),
HelpScoutWebHookEvent,
)
[docs] def test_create(self):
"""It should pass self through to the WebHook endpoint create."""
helpscout = mock.MagicMock()
self.hook.helpscout = helpscout
res = self.hook.create()
helpscout.WebHook.create.assert_called_once_with(self.hook)
self.assertEqual(res, helpscout.WebHook.create())