salt/tests/unit/modules/test_twilio_notify.py
Benjamin Drung df8d7b9d05 Fix twilio version checking
twilio.__version__ is a string and twilio.__version_info__ is a tuple of
strings containing integers [e.g. ('6', '8', '2')]. The
test_twilio_notify unittest fails:

```
ERROR: unit.modules.test_twilio_notify (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: unit.modules.test_twilio_notify
Traceback (most recent call last):
  File "/usr/lib/python3.7/unittest/loader.py", line 434, in _find_test_path
    module = self._get_module_from_name(name)
  File "/usr/lib/python3.7/unittest/loader.py", line 375, in _get_module_from_name
    __import__(name)
  File "tests/unit/modules/test_twilio_notify.py", line 20, in <module>
    import salt.modules.twilio_notify as twilio_notify
  File "salt/modules/twilio_notify.py", line 28, in <module>
    if twilio.__version__ > 5:
TypeError: '>' not supported between instances of 'str' and 'int'
```

Fix the twilio version check to use __version_info__ and converting its
elements to int.
2018-12-21 11:21:58 +01:00

139 lines
4.0 KiB
Python

# -*- coding: utf-8 -*-
'''
:codeauthor: Jayesh Kariya <jayeshk@saltstack.com>
'''
# Import Python Libs
from __future__ import absolute_import, print_function, unicode_literals
# Import Salt Testing Libs
from tests.support.mixins import LoaderModuleMockMixin
from tests.support.unit import TestCase, skipIf
from tests.support.mock import (
MagicMock,
patch,
NO_MOCK,
NO_MOCK_REASON
)
# Import Salt Libs
import salt.modules.twilio_notify as twilio_notify
HAS_LIBS = False
try:
import twilio
# Grab version, ensure elements are ints
twilio_version = tuple([int(x) for x in twilio.__version_info__])
if twilio_version > (5, ):
TWILIO_5 = False
else:
TWILIO_5 = True
HAS_LIBS = True
except ImportError:
pass
class MockTwilioRestException(Exception):
'''
Mock TwilioRestException class
'''
def __init__(self):
self.code = 'error code'
self.msg = 'Exception error'
self.status = 'Not send'
super(MockTwilioRestException, self).__init__(self.msg)
class MockMessages(object):
'''
Mock SMS class
'''
flag = None
def __init__(self):
self.sid = '011'
self.price = '200'
self.price_unit = '1'
self.status = 'Sent'
self.num_segments = '2'
self.body = None
self.date_sent = '01-01-2015'
self.date_created = '01-01-2015'
self.to = None
self.from_ = None
def create(self, body, to, from_):
'''
Mock create method
'''
msg = MockMessages()
if self.flag == 1:
raise MockTwilioRestException()
msg.body = body
msg.to = to
msg.from_ = from_
return msg
class MockSMS(object):
'''
Mock SMS class
'''
def __init__(self):
self.messages = MockMessages()
class MockTwilioRestClient(object):
'''
Mock TwilioRestClient class
'''
def __init__(self):
if TWILIO_5:
self.sms = MockSMS()
else:
self.messages = MockMessages()
@skipIf(not HAS_LIBS, 'twilio.rest is not available')
@skipIf(NO_MOCK, NO_MOCK_REASON)
class TwilioNotifyTestCase(TestCase, LoaderModuleMockMixin):
'''
Test cases for salt.modules.twilio_notify
'''
def setup_loader_modules(self):
return {
twilio_notify: {
'TwilioRestClient': MockTwilioRestClient,
'TwilioRestException': MockTwilioRestException
}
}
# 'send_sms' function tests: 1
def test_send_sms(self):
'''
Test if it send an sms.
'''
mock = MagicMock(return_value=MockTwilioRestClient())
with patch.object(twilio_notify, '_get_twilio', mock):
self.assertDictEqual(twilio_notify.send_sms('twilio-account',
'SALTSTACK',
'+18019999999',
'+18011111111'),
{'message': {'status': 'Sent',
'num_segments': '2',
'price': '200',
'body': 'SALTSTACK', 'sid': '011',
'date_sent': '01-01-2015',
'date_created': '01-01-2015',
'price_unit': '1'}})
MockMessages.flag = 1
self.assertDictEqual(twilio_notify.send_sms('twilio-account',
'SALTSTACK',
'+18019999999',
'+18011111111'),
{'message': {'sid': None}, '_error':
{'msg': 'Exception error',
'status': 'Not send', 'code': 'error code'}})