diff --git a/app/celery/broadcast_message_tasks.py b/app/celery/broadcast_message_tasks.py index 9def33129..213b671ef 100644 --- a/app/celery/broadcast_message_tasks.py +++ b/app/celery/broadcast_message_tasks.py @@ -2,10 +2,11 @@ import uuid from flask import current_app from notifications_utils.statsd_decorators import statsd +from sqlalchemy.schema import Sequence -from app import cbc_proxy_client, notify_celery +from app import cbc_proxy_client, db, notify_celery from app.config import QueueNames -from app.models import BroadcastEventMessageType +from app.models import BroadcastEventMessageType, BroadcastProvider from app.dao.broadcast_message_dao import dao_get_broadcast_event_by_id, create_broadcast_provider_message @@ -78,6 +79,10 @@ def send_broadcast_provider_message(broadcast_event_id, provider): @notify_celery.task(name='trigger-link-test') def trigger_link_test(provider): identifier = str(uuid.uuid4()) + sequential_number = None + if provider == BroadcastProvider.VODAFONE: + sequence = Sequence('broadcast_provider_message_number_seq') + sequential_number = db.session.connection().execute(sequence) message = f"Sending a link test to CBC proxy for provider {provider} with ID {identifier}" current_app.logger.info(message) - cbc_proxy_client.get_proxy(provider).send_link_test(identifier) + cbc_proxy_client.get_proxy(provider).send_link_test(identifier, sequential_number) diff --git a/app/clients/cbc_proxy.py b/app/clients/cbc_proxy.py index 81d1a34d0..6a730301d 100644 --- a/app/clients/cbc_proxy.py +++ b/app/clients/cbc_proxy.py @@ -42,6 +42,7 @@ class CBCProxyClient: proxy_classes = { 'canary': CBCProxyCanary, BroadcastProvider.EE: CBCProxyEE, + BroadcastProvider.VODAFONE: CBCProxyVodafone, } return proxy_classes[provider](self._lambda_client) @@ -61,6 +62,7 @@ class CBCProxyClientBase: def send_link_test( self, identifier, + sequential_number=None ): pass @@ -131,6 +133,7 @@ class CBCProxyEE(CBCProxyClientBase): def send_link_test( self, identifier, + sequential_number=None ): """ link test - open up a connection to a specific provider, and send them an xml payload with a of @@ -155,3 +158,20 @@ class CBCProxyEE(CBCProxyClientBase): 'expires': expires, } self._invoke_lambda(payload=payload) + + +class CBCProxyVodafone(CBCProxyClientBase): + lambda_name = 'bt-ee-1-proxy' + + def send_link_test( + self, + identifier, + sequential_number + ): + """ + link test - open up a connection to a specific provider, and send them an xml payload with a of + test. + """ + payload = {'message_type': 'test', 'identifier': identifier, 'message_number': sequential_number} + + self._invoke_lambda(payload=payload) diff --git a/tests/app/celery/test_broadcast_message_tasks.py b/tests/app/celery/test_broadcast_message_tasks.py index c6afb6998..1b0ccecd8 100644 --- a/tests/app/celery/test_broadcast_message_tasks.py +++ b/tests/app/celery/test_broadcast_message_tasks.py @@ -279,14 +279,18 @@ def test_send_broadcast_provider_message_errors(mocker, sample_service): ) +@pytest.mark.parametrize("provider,provider_capitalised", [ + ["ee", "EE"], + ["vodafone", "Vodafone"] +]) def test_trigger_link_tests_invokes_cbc_proxy_client( - mocker, + mocker, provider, provider_capitalised ): mock_send_link_test = mocker.patch( - 'app.clients.cbc_proxy.CBCProxyEE.send_link_test', + f'app.clients.cbc_proxy.CBCProxy{provider_capitalised}.send_link_test', ) - trigger_link_test('ee') + trigger_link_test(provider) assert mock_send_link_test.called # the 0th argument of the call to send_link_test @@ -296,3 +300,9 @@ def test_trigger_link_tests_invokes_cbc_proxy_client( uuid.UUID(identifier) except BaseException: pytest.fail(f"{identifier} is not a valid uuid") + + # testing sequential number: + if provider == 'vodafone': + assert type(mock_send_link_test.mock_calls[0][1][1]) is int + else: + assert not mock_send_link_test.mock_calls[0][1][1] diff --git a/tests/app/db.py b/tests/app/db.py index 30f00e7b6..a0354e894 100644 --- a/tests/app/db.py +++ b/tests/app/db.py @@ -63,7 +63,8 @@ from app.models import ( BroadcastMessage, BroadcastStatusType, BroadcastEvent, - BroadcastProviderMessage + BroadcastProviderMessage, + BroadcastProviderMessageNumber ) @@ -1058,11 +1059,19 @@ def create_broadcast_provider_message( provider, status='sending' ): + broadcast_provider_message_id = uuid.uuid4() provider_message = BroadcastProviderMessage( + id=broadcast_provider_message_id, broadcast_event=broadcast_event, provider=provider, - status=status + status=status, ) db.session.add(provider_message) + db.session.commit() + + provider_message_number = BroadcastProviderMessageNumber( + broadcast_provider_message_id=broadcast_provider_message_id) + db.session.add(provider_message_number) + db.session.commit() return provider_message