substitute phone numbers back in when sending data to reports

This commit is contained in:
Kenneth Kehl
2024-01-17 09:04:04 -08:00
parent 848b62092a
commit c13ed73d23
4 changed files with 42 additions and 5 deletions

View File

@@ -2,7 +2,7 @@ import dateutil
import pytz import pytz
from flask import Blueprint, current_app, jsonify, request from flask import Blueprint, current_app, jsonify, request
from app.aws.s3 import get_job_metadata_from_s3 from app.aws.s3 import get_job_metadata_from_s3, get_phone_number_from_s3
from app.celery.tasks import process_job from app.celery.tasks import process_job
from app.config import QueueNames from app.config import QueueNames
from app.dao.fact_notification_status_dao import fetch_notification_statuses_for_job from app.dao.fact_notification_status_dao import fetch_notification_statuses_for_job
@@ -76,6 +76,16 @@ def get_all_notifications_for_service_job(service_id, job_id):
kwargs["service_id"] = service_id kwargs["service_id"] = service_id
kwargs["job_id"] = job_id kwargs["job_id"] = job_id
for notification in paginated_notifications.items:
if notification.job_id is not None:
recipient = get_phone_number_from_s3(
notification.service_id,
notification.job_id,
notification.job_row_number,
)
notification.to = recipient
notification.normalised_to = recipient
notifications = None notifications = None
if data.get("format_for_csv"): if data.get("format_for_csv"):
notifications = [ notifications = [

View File

@@ -6,6 +6,7 @@ from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm.exc import NoResultFound from sqlalchemy.orm.exc import NoResultFound
from werkzeug.datastructures import MultiDict from werkzeug.datastructures import MultiDict
from app.aws.s3 import get_phone_number_from_s3
from app.config import QueueNames from app.config import QueueNames
from app.dao import fact_notification_status_dao, notifications_dao from app.dao import fact_notification_status_dao, notifications_dao
from app.dao.annual_billing_dao import set_default_free_allowance_for_service from app.dao.annual_billing_dao import set_default_free_allowance_for_service
@@ -425,6 +426,16 @@ def get_all_notifications_for_service(service_id):
include_one_off=include_one_off, include_one_off=include_one_off,
) )
for notification in pagination.items:
if notification.job_id is not None:
recipient = get_phone_number_from_s3(
notification.service_id,
notification.job_id,
notification.job_row_number,
)
notification.to = recipient
notification.normalised_to = recipient
kwargs = request.args.to_dict() kwargs = request.args.to_dict()
kwargs["service_id"] = service_id kwargs["service_id"] = service_id

View File

@@ -448,8 +448,11 @@ def _setup_jobs(template, number_of_jobs=5):
def test_get_all_notifications_for_job_in_order_of_job_number( def test_get_all_notifications_for_job_in_order_of_job_number(
admin_request, sample_template admin_request, sample_template, mocker
): ):
mock_s3 = mocker.patch("app.job.rest.get_phone_number_from_s3")
mock_s3.return_value = "15555555555"
main_job = create_job(sample_template) main_job = create_job(sample_template)
another_job = create_job(sample_template) another_job = create_job(sample_template)
@@ -483,8 +486,11 @@ def test_get_all_notifications_for_job_in_order_of_job_number(
], ],
) )
def test_get_all_notifications_for_job_filtered_by_status( def test_get_all_notifications_for_job_filtered_by_status(
admin_request, sample_job, expected_notification_count, status_args admin_request, sample_job, expected_notification_count, status_args, mocker
): ):
mock_s3 = mocker.patch("app.job.rest.get_phone_number_from_s3")
mock_s3.return_value = "15555555555"
create_notification(job=sample_job, to_field="1", status="created") create_notification(job=sample_job, to_field="1", status="created")
resp = admin_request.get( resp = admin_request.get(
@@ -497,8 +503,11 @@ def test_get_all_notifications_for_job_filtered_by_status(
def test_get_all_notifications_for_job_returns_correct_format( def test_get_all_notifications_for_job_returns_correct_format(
admin_request, sample_notification_with_job admin_request, sample_notification_with_job, mocker
): ):
mock_s3 = mocker.patch("app.job.rest.get_phone_number_from_s3")
mock_s3.return_value = "15555555555"
service_id = sample_notification_with_job.service_id service_id = sample_notification_with_job.service_id
job_id = sample_notification_with_job.job_id job_id = sample_notification_with_job.job_id
@@ -813,8 +822,11 @@ def create_10_jobs(template):
def test_get_all_notifications_for_job_returns_csv_format( def test_get_all_notifications_for_job_returns_csv_format(
admin_request, sample_notification_with_job admin_request, sample_notification_with_job, mocker
): ):
mock_s3 = mocker.patch("app.job.rest.get_phone_number_from_s3")
mock_s3.return_value = "15555555555"
resp = admin_request.get( resp = admin_request.get(
"job.get_all_notifications_for_service_job", "job.get_all_notifications_for_service_job",
service_id=sample_notification_with_job.service_id, service_id=sample_notification_with_job.service_id,

View File

@@ -1846,7 +1846,11 @@ def test_get_all_notifications_for_service_including_ones_made_by_jobs(
sample_notification, sample_notification,
sample_notification_with_job, sample_notification_with_job,
sample_template, sample_template,
mocker,
): ):
mock_s3 = mocker.patch("app.service.rest.get_phone_number_from_s3")
mock_s3.return_value = "1"
# notification from_test_api_key # notification from_test_api_key
create_notification(sample_template, key_type=KEY_TYPE_TEST) create_notification(sample_template, key_type=KEY_TYPE_TEST)