Task is the same whether job based or not

- use notification to build action
- notification has job
- based in encrypted blob
This commit is contained in:
Martyn Inglis
2016-02-23 17:39:08 +00:00
parent 635debb5a6
commit 201c2d01ba
5 changed files with 32 additions and 9 deletions

View File

@@ -9,7 +9,7 @@ from sqlalchemy.exc import SQLAlchemyError
@notify_celery.task(name="send-sms") @notify_celery.task(name="send-sms")
def send_sms(service_id, notification_id, encrypted_notification, job_id=None): def send_sms(service_id, notification_id, encrypted_notification):
notification = encryption.decrypt(encrypted_notification) notification = encryption.decrypt(encrypted_notification)
template = get_model_templates(notification['template']) template = get_model_templates(notification['template'])
@@ -19,7 +19,7 @@ def send_sms(service_id, notification_id, encrypted_notification, job_id=None):
template_id=notification['template'], template_id=notification['template'],
to=notification['to'], to=notification['to'],
service_id=service_id, service_id=service_id,
job_id=job_id, job_id=notification.get('job', None),
status='sent' status='sent'
) )
save_notification(notification_db_object) save_notification(notification_db_object)

View File

@@ -41,12 +41,12 @@ def get_job_for_service(service_id, job_id=None):
if job_id: if job_id:
try: try:
job = get_job(service_id, job_id) job = get_job(service_id, job_id)
if not job:
return jsonify(result="error", message="Job not found"), 404
data, errors = job_schema.dump(job) data, errors = job_schema.dump(job)
return jsonify(data=data) return jsonify(data=data)
except DataError: except DataError:
return jsonify(result="error", message="Invalid job id"), 400 return jsonify(result="error", message="Invalid job id"), 400
except NoResultFound:
return jsonify(result="error", message="Job not found"), 404
else: else:
jobs = get_jobs_by_service(service_id) jobs = get_jobs_by_service(service_id)
data, errors = jobs_schema.dump(jobs) data, errors = jobs_schema.dump(jobs)

View File

@@ -105,8 +105,7 @@ def create_sms_for_service(service_id):
send_sms.apply_async(( send_sms.apply_async((
api_user['client'], api_user['client'],
notification_id, notification_id,
encryption.encrypt(notification), encryption.encrypt(notification)),
job_id),
queue='sms') queue='sms')
return jsonify({'notification_id': notification_id}), 201 return jsonify({'notification_id': notification_id}), 201

View File

@@ -31,6 +31,32 @@ def test_should_send_template_to_correct_sms_provider_and_persist(sample_templat
assert persisted_notification.to == '+441234123123' assert persisted_notification.to == '+441234123123'
assert persisted_notification.template_id == sample_template.id assert persisted_notification.template_id == sample_template.id
assert persisted_notification.status == 'sent' assert persisted_notification.status == 'sent'
assert not persisted_notification.job_id
def test_should_send_template_to_correct_sms_provider_and_persist_with_job_id(sample_job, mocker):
notification = {
"template": sample_job.template.id,
"job": sample_job.id,
"to": "+441234123123"
}
mocker.patch('app.encryption.decrypt', return_value=notification)
mocker.patch('app.firetext_client.send_sms')
notification_id = uuid.uuid4()
send_sms(
sample_job.service.id,
notification_id,
"encrypted-in-reality")
firetext_client.send_sms.assert_called_once_with("+441234123123", sample_job.template.content)
persisted_notification = notifications_dao.get_notification(sample_job.template.service_id, notification_id)
assert persisted_notification.id == notification_id
assert persisted_notification.to == '+441234123123'
assert persisted_notification.job_id == sample_job.id
assert persisted_notification.template_id == sample_job.template.id
assert persisted_notification.status == 'sent'
def test_should_send_template_to_email_provider_and_persist(sample_email_template, mocker): def test_should_send_template_to_email_provider_and_persist(sample_email_template, mocker):

View File

@@ -1,6 +1,5 @@
import uuid import uuid
import app.celery.tasks import app.celery.tasks
import moto
from tests import create_authorization_header from tests import create_authorization_header
from flask import json from flask import json
from app.models import Service from app.models import Service
@@ -484,8 +483,7 @@ def test_should_allow_valid_sms_notification_for_job(notify_api, sample_job, moc
app.celery.tasks.send_sms.apply_async.assert_called_once_with( app.celery.tasks.send_sms.apply_async.assert_called_once_with(
(str(sample_job.template.service_id), (str(sample_job.template.service_id),
notification_id, notification_id,
"something_encrypted", "something_encrypted"),
str(sample_job.id)),
queue="sms" queue="sms"
) )
assert response.status_code == 201 assert response.status_code == 201