Merge pull request #543 from alphagov/use-new-mmg-api

Use the new mmg api
This commit is contained in:
Rebecca Law
2016-07-20 10:45:57 +01:00
committed by GitHub
5 changed files with 22 additions and 29 deletions

View File

@@ -63,6 +63,7 @@ class MMGClient(SmsClient):
self.from_number = current_app.config.get('FROM_NUMBER')
self.name = 'mmg'
self.statsd_client = statsd_client
self.mmg_url = current_app.config.get('MMG_URL')
def get_name(self):
return self.name
@@ -78,8 +79,9 @@ class MMGClient(SmsClient):
}
start_time = monotonic()
try:
response = request("POST", "https://www.mmgrp.co.uk/API/json/api.php",
response = request("POST", self.mmg_url,
data=json.dumps(data),
headers={'Content-Type': 'application/json',
'Authorization': 'Basic {}'.format(self.api_key)})
@@ -89,7 +91,7 @@ class MMGClient(SmsClient):
self.current_app.logger.info(
"API {} request on {} succeeded with {} '{}'".format(
"POST",
"https://www.mmgrp.co.uk/API/json/api.php",
self.mmg_url,
response.status_code,
response.json().items()
)
@@ -99,7 +101,7 @@ class MMGClient(SmsClient):
self.current_app.logger.error(
"API {} request on {} failed with {} '{}'".format(
"POST",
"https://www.mmgrp.co.uk/API/json/api.php",
self.mmg_url,
api_error.status_code,
api_error.message
)

View File

@@ -27,6 +27,7 @@ class Config(object):
NOTIFY_EMAIL_DOMAIN = os.environ['NOTIFY_EMAIL_DOMAIN']
PAGE_SIZE = 50
SMS_CHAR_COUNT_LIMIT = 495
MMG_URL = os.environ['MMG_URL']
NOTIFY_SERVICE_ID = 'd6aa2c68-a2d9-4437-ab19-3ae8eb202553'
INVITATION_EMAIL_TEMPLATE_ID = '4f46df42-f795-4cc4-83bb-65ca312f49cc'

View File

@@ -23,3 +23,4 @@ export STATSD_PORT=1000
export STATSD_PREFIX="stats-prefix"
export API_HOST_NAME="http://localhost:6011"
export FROM_NUMBER='from_number'
export MMG_URL="https://api.mmg.co.uk/json/api.php"

View File

@@ -1,5 +1,6 @@
import pytest
import requests_mock
from app import mmg_client
from app.clients.sms.mmg import (get_mmg_responses, MMGClientException)
@@ -28,43 +29,43 @@ def test_should_be_none_if_unrecognised_status_code():
assert not response_dict['success']
def test_send_sms_successful_returns_mmg_response(mocker, mock_mmg_client):
def test_send_sms_successful_returns_mmg_response(notify_api, mocker):
to = content = reference = 'foo'
response_dict = {'Reference': 12345678}
with requests_mock.Mocker() as request_mock:
request_mock.post('https://www.mmgrp.co.uk/API/json/api.php', json=response_dict, status_code=200)
response = mock_mmg_client.send_sms(to, content, reference)
request_mock.post('https://api.mmg.co.uk/json/api.php', json=response_dict, status_code=200)
response = mmg_client.send_sms(to, content, reference)
response_json = response.json()
assert response.status_code == 200
assert response_json['Reference'] == 12345678
def test_send_sms_calls_mmg_correctly(mocker, mock_mmg_client):
def test_send_sms_calls_mmg_correctly(notify_api, mocker):
to = '+447234567890'
content = 'my message'
reference = 'my reference'
response_dict = {'Reference': 12345678}
with requests_mock.Mocker() as request_mock:
request_mock.post('https://www.mmgrp.co.uk/API/json/api.php', json=response_dict, status_code=200)
mock_mmg_client.send_sms(to, content, reference)
request_mock.post('https://api.mmg.co.uk/json/api.php', json=response_dict, status_code=200)
mmg_client.send_sms(to, content, reference)
assert request_mock.call_count == 1
assert request_mock.request_history[0].url == 'https://www.mmgrp.co.uk/API/json/api.php'
assert request_mock.request_history[0].url == 'https://api.mmg.co.uk/json/api.php'
assert request_mock.request_history[0].method == 'POST'
request_args = request_mock.request_history[0].json()
assert request_args['reqType'] == 'BULK'
assert request_args['MSISDN'] == to
assert request_args['msg'] == content
assert request_args['sender'] == 'bar'
assert request_args['sender'] == 'from_number'
assert request_args['cid'] == reference
assert request_args['multi'] is True
def test_send_sms_raises_if_mmg_rejects(mocker, mock_mmg_client):
def test_send_sms_raises_if_mmg_rejects(notify_api, mocker):
to = content = reference = 'foo'
response_dict = {
'Error': 206,
@@ -72,14 +73,14 @@ def test_send_sms_raises_if_mmg_rejects(mocker, mock_mmg_client):
}
with pytest.raises(MMGClientException) as exc, requests_mock.Mocker() as request_mock:
request_mock.post('https://www.mmgrp.co.uk/API/json/api.php', json=response_dict, status_code=400)
mock_mmg_client.send_sms(to, content, reference)
request_mock.post('https://api.mmg.co.uk/json/api.php', json=response_dict, status_code=400)
mmg_client.send_sms(to, content, reference)
assert exc.value.code == 206
assert exc.value.description == 'Some kind of error'
def test_send_sms_override_configured_shortcode_with_sender(mocker, mock_mmg_client):
def test_send_sms_override_configured_shortcode_with_sender(notify_api, mocker):
to = '+447234567890'
content = 'my message'
reference = 'my reference'
@@ -87,8 +88,8 @@ def test_send_sms_override_configured_shortcode_with_sender(mocker, mock_mmg_cli
sender = 'fromservice'
with requests_mock.Mocker() as request_mock:
request_mock.post('https://www.mmgrp.co.uk/API/json/api.php', json=response_dict, status_code=200)
mock_mmg_client.send_sms(to, content, reference, sender=sender)
request_mock.post('https://api.mmg.co.uk/json/api.php', json=response_dict, status_code=200)
mmg_client.send_sms(to, content, reference, sender=sender)
request_args = request_mock.request_history[0].json()
assert request_args['sender'] == 'fromservice'

View File

@@ -551,18 +551,6 @@ def mock_firetext_client(mocker, statsd_client=None):
return client
@pytest.fixture(scope='function')
def mock_mmg_client(mocker, statsd_client=None):
client = MMGClient()
statsd_client = statsd_client or mocker.Mock()()
current_app = mocker.Mock(config={
'MMG_API_KEY': 'foo',
'FROM_NUMBER': 'bar'
})
client.init_app(current_app, statsd_client)
return client
@pytest.fixture(scope='function')
def sms_code_template(notify_db,
notify_db_session):