mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-23 15:56:45 -04:00
Merge pull request #2836 from alixedi/add-csv-support
Add support for CSV files
This commit is contained in:
@@ -1,5 +1,3 @@
|
|||||||
import base64
|
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
from flask import current_app
|
from flask import current_app
|
||||||
@@ -26,15 +24,16 @@ class DocumentDownloadClient:
|
|||||||
def get_upload_url(self, service_id):
|
def get_upload_url(self, service_id):
|
||||||
return "{}/services/{}/documents".format(self.api_host, service_id)
|
return "{}/services/{}/documents".format(self.api_host, service_id)
|
||||||
|
|
||||||
def upload_document(self, service_id, file_contents):
|
def upload_document(self, service_id, file_contents, is_csv=None):
|
||||||
try:
|
try:
|
||||||
response = requests.post(
|
response = requests.post(
|
||||||
self.get_upload_url(service_id),
|
self.get_upload_url(service_id),
|
||||||
headers={
|
headers={
|
||||||
'Authorization': "Bearer {}".format(self.auth_token),
|
'Authorization': "Bearer {}".format(self.auth_token),
|
||||||
},
|
},
|
||||||
files={
|
json={
|
||||||
'document': base64.b64decode(file_contents)
|
'document': file_contents,
|
||||||
|
'is_csv': is_csv or False,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -325,7 +325,7 @@ def process_document_uploads(personalisation_data, service, simulated=False):
|
|||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
personalisation_data[key] = document_download_client.upload_document(
|
personalisation_data[key] = document_download_client.upload_document(
|
||||||
service.id, personalisation_data[key]['file']
|
service.id, personalisation_data[key]['file'], personalisation_data[key].get('is_csv')
|
||||||
)
|
)
|
||||||
except DocumentDownloadError as e:
|
except DocumentDownloadError as e:
|
||||||
raise BadRequestError(message=e.message, status_code=e.status_code)
|
raise BadRequestError(message=e.message, status_code=e.status_code)
|
||||||
|
|||||||
@@ -775,7 +775,16 @@ def test_post_email_notification_with_archived_reply_to_id_returns_400(client, s
|
|||||||
assert 'BadRequestError' in resp_json['errors'][0]['error']
|
assert 'BadRequestError' in resp_json['errors'][0]['error']
|
||||||
|
|
||||||
|
|
||||||
def test_post_notification_with_document_upload(client, notify_db_session, mocker):
|
@pytest.mark.parametrize(
|
||||||
|
'csv_param',
|
||||||
|
(
|
||||||
|
{'is_csv': None},
|
||||||
|
{'is_csv': False},
|
||||||
|
{'is_csv': True},
|
||||||
|
{},
|
||||||
|
)
|
||||||
|
)
|
||||||
|
def test_post_notification_with_document_upload(client, notify_db_session, mocker, csv_param):
|
||||||
service = create_service(service_permissions=[EMAIL_TYPE])
|
service = create_service(service_permissions=[EMAIL_TYPE])
|
||||||
service.contact_link = 'contact.me@gov.uk'
|
service.contact_link = 'contact.me@gov.uk'
|
||||||
template = create_template(
|
template = create_template(
|
||||||
@@ -786,14 +795,14 @@ def test_post_notification_with_document_upload(client, notify_db_session, mocke
|
|||||||
|
|
||||||
mocker.patch('app.celery.provider_tasks.deliver_email.apply_async')
|
mocker.patch('app.celery.provider_tasks.deliver_email.apply_async')
|
||||||
document_download_mock = mocker.patch('app.v2.notifications.post_notifications.document_download_client')
|
document_download_mock = mocker.patch('app.v2.notifications.post_notifications.document_download_client')
|
||||||
document_download_mock.upload_document.side_effect = lambda service_id, content: f'{content}-link'
|
document_download_mock.upload_document.side_effect = lambda service_id, content, is_csv: f'{content}-link'
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
"email_address": service.users[0].email_address,
|
"email_address": service.users[0].email_address,
|
||||||
"template_id": template.id,
|
"template_id": template.id,
|
||||||
"personalisation": {
|
"personalisation": {
|
||||||
"first_link": {"file": "abababab"},
|
"first_link": {"file": "abababab", **csv_param},
|
||||||
"second_link": {"file": "cdcdcdcd"}
|
"second_link": {"file": "cdcdcdcd", **csv_param}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -808,8 +817,8 @@ def test_post_notification_with_document_upload(client, notify_db_session, mocke
|
|||||||
assert validate(resp_json, post_email_response) == resp_json
|
assert validate(resp_json, post_email_response) == resp_json
|
||||||
|
|
||||||
assert document_download_mock.upload_document.call_args_list == [
|
assert document_download_mock.upload_document.call_args_list == [
|
||||||
call(service.id, 'abababab'),
|
call(service.id, 'abababab', csv_param.get('is_csv')),
|
||||||
call(service.id, 'cdcdcdcd')
|
call(service.id, 'cdcdcdcd', csv_param.get('is_csv'))
|
||||||
]
|
]
|
||||||
|
|
||||||
notification = Notification.query.one()
|
notification = Notification.query.one()
|
||||||
|
|||||||
Reference in New Issue
Block a user