sms: factorize OVH & SMS Factor low credit alert tests (#81143)
This commit is contained in:
parent
aed4c44107
commit
5fe9b9a1e6
|
@ -111,6 +111,17 @@ class OVHSMSGateway(TrackCreditSMSResource):
|
|||
],
|
||||
}
|
||||
|
||||
TEST_CREDIT_LEFT = {
|
||||
'create_kwargs': {
|
||||
'account': 'sms-test42',
|
||||
'application_key': 'RHrTdU2oTsrVC0pu',
|
||||
'application_secret': 'CLjtS69tTcPgCKxedeoZlgMSoQGSiXMa',
|
||||
'consumer_key': 'iF0zi0MJrbjNcI3hvuvwkhNk8skrigxz',
|
||||
},
|
||||
'url': (API_URL % {'serviceName': 'sms-test42'}),
|
||||
'get_credit_left_payload': lambda x: {'creditsLeft': x},
|
||||
}
|
||||
|
||||
class Meta:
|
||||
verbose_name = 'OVH'
|
||||
db_table = 'sms_ovh'
|
||||
|
|
|
@ -92,6 +92,14 @@ class SMSFactorSMSGateway(TrackCreditSMSResource):
|
|||
}
|
||||
URL = 'https://api.smsfactor.com'
|
||||
|
||||
TEST_CREDIT_LEFT = {
|
||||
'create_kwargs': {
|
||||
'auth_token': 'yyy',
|
||||
},
|
||||
'url': urllib.parse.urljoin(URL, 'credits'),
|
||||
'get_credit_left_payload': lambda x: {'credits': str(x)},
|
||||
}
|
||||
|
||||
def request(self, method, endpoint, **kwargs):
|
||||
url = urllib.parse.urljoin(self.URL, endpoint)
|
||||
|
||||
|
|
|
@ -497,59 +497,6 @@ def test_ovh_new_api_credit(app, freezer, admin_user):
|
|||
connector.check_status()
|
||||
|
||||
|
||||
def test_ovh_alert_emails(app, freezer, mailoutbox):
|
||||
connector = OVHSMSGateway.objects.create(
|
||||
slug='test-ovh',
|
||||
title='Test OVH',
|
||||
account='sms-test42',
|
||||
application_key='RHrTdU2oTsrVC0pu',
|
||||
application_secret='CLjtS69tTcPgCKxedeoZlgMSoQGSiXMa',
|
||||
consumer_key='iF0zi0MJrbjNcI3hvuvwkhNk8skrigxz',
|
||||
credit_threshold_alert=100,
|
||||
credit_left=102,
|
||||
alert_emails=['test@entrouvert.org'],
|
||||
)
|
||||
api = ApiUser.objects.create(username='apiuser')
|
||||
obj_type = ContentType.objects.get_for_model(connector)
|
||||
AccessRight.objects.create(
|
||||
codename='can_send_messages', apiuser=api, resource_type=obj_type, resource_pk=connector.pk
|
||||
)
|
||||
|
||||
freezer.move_to('2019-01-01 00:00:00')
|
||||
resp = {'creditsLeft': 101}
|
||||
ovh_url = connector.API_URL % {'serviceName': 'sms-test42'}
|
||||
with tests.utils.mock_url(ovh_url, resp, 200):
|
||||
connector.check_status()
|
||||
assert len(mailoutbox) == 0
|
||||
|
||||
resp = {'creditsLeft': 99}
|
||||
ovh_url = connector.API_URL % {'serviceName': 'sms-test42'}
|
||||
with tests.utils.mock_url(ovh_url, resp, 200):
|
||||
connector.check_status()
|
||||
assert len(mailoutbox) == 1
|
||||
|
||||
mail = mailoutbox[0]
|
||||
assert mail.recipients() == ['test@entrouvert.org']
|
||||
assert mail.subject == 'SMS alert: only 99 credits left'
|
||||
for body in (mail.body, mail.alternatives[0][0]):
|
||||
assert connector.title in body
|
||||
assert 'http://localhost/ovh/test-ovh/' in body
|
||||
mailoutbox.clear()
|
||||
|
||||
# alert is sent again daily
|
||||
freezer.move_to('2019-01-01 12:00:00')
|
||||
resp = {'creditsLeft': 99}
|
||||
ovh_url = connector.API_URL % {'serviceName': 'sms-test42'}
|
||||
with tests.utils.mock_url(ovh_url, resp, 200):
|
||||
connector.check_status()
|
||||
assert len(mailoutbox) == 0
|
||||
|
||||
freezer.move_to('2019-01-02 01:00:07')
|
||||
with tests.utils.mock_url(ovh_url, resp, 200):
|
||||
connector.check_status()
|
||||
assert len(mailoutbox) == 1
|
||||
|
||||
|
||||
def test_ovh_token_request(admin_user, app):
|
||||
connector = OVHSMSGateway.objects.create(
|
||||
slug='test-ovh',
|
||||
|
@ -783,52 +730,64 @@ def test_sfr_unicode_message(connector):
|
|||
_check_media_type('unicode message 😀', 'SMSUnicodeLong')
|
||||
|
||||
|
||||
def test_sms_factor_alert_emails(app, freezer, mailoutbox):
|
||||
connector = SMSFactorSMSGateway.objects.create(
|
||||
slug='test-sms-factor',
|
||||
title='Test SMS Factor',
|
||||
auth_token='foo',
|
||||
credit_threshold_alert=100,
|
||||
credit_left=102,
|
||||
alert_emails=['test@entrouvert.org'],
|
||||
credit_klasses = TrackCreditSMSResource.__subclasses__()
|
||||
|
||||
|
||||
@pytest.fixture(params=credit_klasses)
|
||||
def track_credit_connector(request, db):
|
||||
klass = request.param
|
||||
kwargs = getattr(klass, 'TEST_CREDIT_LEFT', {}).get('create_kwargs', {})
|
||||
kwargs.update(
|
||||
{
|
||||
'title': klass.__name__,
|
||||
'slug': klass.__name__.lower(),
|
||||
'description': klass.__name__,
|
||||
'credit_threshold_alert': 100,
|
||||
'credit_left': 102,
|
||||
'alert_emails': ['test@entrouvert.org'],
|
||||
}
|
||||
)
|
||||
api = ApiUser.objects.create(username='apiuser')
|
||||
obj_type = ContentType.objects.get_for_model(connector)
|
||||
c = klass.objects.create(**kwargs)
|
||||
api = ApiUser.objects.create(username='apiuser', fullname='Api User', description='api')
|
||||
obj_type = ContentType.objects.get_for_model(c)
|
||||
# no access check
|
||||
AccessRight.objects.create(
|
||||
codename='can_send_messages', apiuser=api, resource_type=obj_type, resource_pk=connector.pk
|
||||
codename='can_send_messages', apiuser=api, resource_type=obj_type, resource_pk=c.pk
|
||||
)
|
||||
return c
|
||||
|
||||
|
||||
def test_send_alert_emails(track_credit_connector, app, freezer, mailoutbox):
|
||||
get_credit_left_payload = track_credit_connector.TEST_CREDIT_LEFT['get_credit_left_payload']
|
||||
url = track_credit_connector.TEST_CREDIT_LEFT['url']
|
||||
|
||||
freezer.move_to('2019-01-01 00:00:00')
|
||||
resp = {'credits': '101'}
|
||||
url = connector.URL
|
||||
resp = get_credit_left_payload(101)
|
||||
with tests.utils.mock_url(url, resp, 200):
|
||||
connector.check_status()
|
||||
track_credit_connector.check_status()
|
||||
assert len(mailoutbox) == 0
|
||||
|
||||
resp = {'credits': '99'}
|
||||
url = connector.URL
|
||||
resp = get_credit_left_payload(99)
|
||||
with tests.utils.mock_url(url, resp, 200):
|
||||
connector.check_status()
|
||||
track_credit_connector.check_status()
|
||||
assert len(mailoutbox) == 1
|
||||
|
||||
mail = mailoutbox[0]
|
||||
assert mail.recipients() == ['test@entrouvert.org']
|
||||
assert mail.subject == 'SMS alert: only 99 credits left'
|
||||
for body in (mail.body, mail.alternatives[0][0]):
|
||||
assert 'SMS Factor' in body
|
||||
assert connector.title in body
|
||||
assert 'http://localhost/smsfactor/test-sms-factor/' in body
|
||||
assert track_credit_connector.title in body
|
||||
assert track_credit_connector.get_absolute_url() in body
|
||||
mailoutbox.clear()
|
||||
|
||||
# alert is sent again daily
|
||||
freezer.move_to('2019-01-01 12:00:00')
|
||||
resp = {'credits': 99}
|
||||
url = connector.URL
|
||||
resp = get_credit_left_payload(99)
|
||||
with tests.utils.mock_url(url, resp, 200):
|
||||
connector.check_status()
|
||||
track_credit_connector.check_status()
|
||||
assert len(mailoutbox) == 0
|
||||
|
||||
freezer.move_to('2019-01-02 01:00:07')
|
||||
with tests.utils.mock_url(url, resp, 200):
|
||||
connector.check_status()
|
||||
track_credit_connector.check_status()
|
||||
assert len(mailoutbox) == 1
|
||||
|
|
Loading…
Reference in New Issue