diff --git a/app/clients/cbc_proxy.py b/app/clients/cbc_proxy.py index a52eac80d..8500e57c4 100644 --- a/app/clients/cbc_proxy.py +++ b/app/clients/cbc_proxy.py @@ -1,7 +1,9 @@ import json +from abc import ABC, abstractmethod import boto3 from flask import current_app +from notifications_utils.template import non_gsm_characters from app.config import BroadcastProvider from app.utils import DATETIME_FORMAT, format_sequential_number @@ -48,9 +50,19 @@ class CBCProxyClient: return proxy_classes[provider](self._lambda_client) -class CBCProxyClientBase: +class CBCProxyClientBase(ABC): lambda_name = None + @property + @abstractmethod + def LANGUAGE_ENGLISH(self): + pass + + @property + @abstractmethod + def LANGUAGE_WELSH(self): + pass + def __init__(self, lambda_client): self._lambda_client = lambda_client @@ -111,6 +123,11 @@ class CBCProxyClientBase: return result + def infer_language_from(self, content): + if non_gsm_characters(content): + return self.LANGUAGE_WELSH + return self.LANGUAGE_ENGLISH + class CBCProxyCanary(CBCProxyClientBase): """ @@ -119,6 +136,9 @@ class CBCProxyCanary(CBCProxyClientBase): """ lambda_name = 'canary' + LANGUAGE_ENGLISH = None + LANGUAGE_WELSH = None + def send_canary( self, identifier, @@ -129,6 +149,9 @@ class CBCProxyCanary(CBCProxyClientBase): class CBCProxyEE(CBCProxyClientBase): lambda_name = 'bt-ee-1-proxy' + LANGUAGE_ENGLISH = 'en-GB' + LANGUAGE_WELSH = 'cy-GB' + def send_link_test( self, identifier, @@ -158,6 +181,7 @@ class CBCProxyEE(CBCProxyClientBase): 'areas': areas, 'sent': sent, 'expires': expires, + 'language': self.infer_language_from(description), } self._invoke_lambda(payload=payload) @@ -184,6 +208,9 @@ class CBCProxyEE(CBCProxyClientBase): class CBCProxyVodafone(CBCProxyClientBase): lambda_name = 'vodafone-1-proxy' + LANGUAGE_ENGLISH = 'English' + LANGUAGE_WELSH = 'Welsh' + def send_link_test( self, identifier, @@ -215,6 +242,7 @@ class CBCProxyVodafone(CBCProxyClientBase): 'areas': areas, 'sent': sent, 'expires': expires, + 'language': self.infer_language_from(description), } self._invoke_lambda(payload=payload) diff --git a/tests/app/clients/test_cbc_proxy.py b/tests/app/clients/test_cbc_proxy.py index 742e97736..c8db4cc45 100644 --- a/tests/app/clients/test_cbc_proxy.py +++ b/tests/app/clients/test_cbc_proxy.py @@ -59,10 +59,18 @@ def test_cbc_proxy_lambda_client_has_correct_keys(cbc_proxy_ee): assert secret == 'cbc-proxy-aws-secret-access-key' -def test_cbc_proxy_ee_create_and_send_invokes_function(mocker, cbc_proxy_ee): +@pytest.mark.parametrize('description, expected_language', ( + ('my-description', 'en-GB'), + ('mŷ-description', 'cy-GB'), +)) +def test_cbc_proxy_ee_create_and_send_invokes_function( + mocker, + cbc_proxy_ee, + description, + expected_language, +): identifier = 'my-identifier' headline = 'my-headline' - description = 'my-description' sent = 'a-passed-through-sent-value' expires = 'a-passed-through-expires-value' @@ -117,6 +125,7 @@ def test_cbc_proxy_ee_create_and_send_invokes_function(mocker, cbc_proxy_ee): assert payload['areas'] == areas assert payload['sent'] == sent assert payload['expires'] == expires + assert payload['language'] == expected_language def test_cbc_proxy_ee_cancel_invokes_function(mocker, cbc_proxy_ee): @@ -175,10 +184,18 @@ def test_cbc_proxy_ee_cancel_invokes_function(mocker, cbc_proxy_ee): assert payload['sent'] == sent -def test_cbc_proxy_vodafone_create_and_send_invokes_function(mocker, cbc_proxy_vodafone): +@pytest.mark.parametrize('description, expected_language', ( + ('my-description', 'English'), + ('mŷ-description', 'Welsh'), +)) +def test_cbc_proxy_vodafone_create_and_send_invokes_function( + mocker, + cbc_proxy_vodafone, + description, + expected_language, +): identifier = 'my-identifier' headline = 'my-headline' - description = 'my-description' sent = 'a-passed-through-sent-value' expires = 'a-passed-through-expires-value' @@ -233,6 +250,7 @@ def test_cbc_proxy_vodafone_create_and_send_invokes_function(mocker, cbc_proxy_v assert payload['areas'] == areas assert payload['sent'] == sent assert payload['expires'] == expires + assert payload['language'] == expected_language def test_cbc_proxy_vodafone_cancel_invokes_function(mocker, cbc_proxy_vodafone):