mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-20 23:41:17 -05:00
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:
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user