Пример #1
0
def get_email_confirmation_email_data(
    user: users_models.User, token: users_models.Token
) -> Union[dict, SendinblueTransactionalEmailData]:
    expiration_timestamp = int(token.expirationDate.timestamp())
    email_confirmation_link = generate_firebase_dynamic_link(
        path="signup-confirmation",
        params={"token": token.value, "expiration_timestamp": expiration_timestamp, "email": user.email},
    )

    # 18 hard coded because the email template only talks about the 18 years old case
    deposit_amount = deposit_conf.GRANTED_DEPOSIT_AMOUNT_BY_AGE_AND_VERSION[18][2]

    if not FeatureToggle.ENABLE_SENDINBLUE_TRANSACTIONAL_EMAILS.is_active():
        return {
            "Mj-TemplateID": 2015423,
            "Mj-TemplateLanguage": True,
            "Mj-campaign": "confirmation-compte",
            "Mj-trackclick": 1,
            "Vars": {
                "nativeAppLink": email_confirmation_link,
                "isEligible": int(user.is_eligible),
                "isMinor": int(user.dateOfBirth + relativedelta(years=18) > datetime.today()),
                "depositAmount": int(deposit_amount),
            },
        }

    return SendinblueTransactionalEmailData(
        template=TransactionalEmail.EMAIL_CONFIRMATION.value,
        params={
            "CONFIRMATION_LINK": email_confirmation_link,
        },
    )
def make_fraud_suspicion_data(
) -> Union[dict, SendinblueTransactionalEmailData]:
    if not FeatureToggle.ENABLE_SENDINBLUE_TRANSACTIONAL_EMAILS.is_active():
        return {
            "Mj-TemplateID": 2905960,
            "Mj-TemplateLanguage": True,
            "Mj-campaign": "dossier-en-analyse",
        }

    return SendinblueTransactionalEmailData(
        template=TransactionalEmail.FRAUD_SUSPICION.value, params={})
def get_duplicate_beneficiary_pre_subscription_rejected_data(
) -> Union[dict, SendinblueTransactionalEmailData]:
    if not FeatureToggle.ENABLE_SENDINBLUE_TRANSACTIONAL_EMAILS.is_active():
        return {
            "Mj-TemplateID": 1530996,
            "Mj-TemplateLanguage": True,
        }

    return SendinblueTransactionalEmailData(
        template=TransactionalEmail.
        EMAIL_DUPLICATE_BENEFICIARY_PRE_SUBCRIPTION_REJECTED.value,
        params={},
    )
Пример #4
0
def get_accepted_as_underage_beneficiary_email_data(
        user: User) -> Optional[SendinblueTransactionalEmailData]:
    if not FeatureToggle.ENABLE_SENDINBLUE_TRANSACTIONAL_EMAILS.is_active():
        return None

    if user.has_active_deposit is None:
        raise ValueError("Beneficiary should have a deposit")

    deposit_amount = user.deposit.amount
    return SendinblueTransactionalEmailData(
        template=TransactionalEmail.ACCEPTED_AS_EAC_BENEFICIARY.value,
        params={
            "FIRSTNAME": user.firstName,
            "CREDIT": int(deposit_amount),
        },
    )
Пример #5
0
def get_information_email_change_data(
        first_name: str) -> Union[dict, SendinblueTransactionalEmailData]:
    if not FeatureToggle.ENABLE_SENDINBLUE_TRANSACTIONAL_EMAILS.is_active():
        return {
            "MJ-TemplateID": 2066067,
            "MJ-TemplateLanguage": True,
            "Vars": {
                "beneficiary_name": first_name,
            },
        }

    return SendinblueTransactionalEmailData(
        template=TransactionalEmail.EMAIL_CHANGE_REQUEST.value,
        params={
            "FIRSTNAME": first_name,
        },
    )
Пример #6
0
def get_user_credit_email_data(
        user: User) -> Union[dict, SendinblueTransactionalEmailData]:
    if not user.has_active_deposit:
        raise Exception("The user has no active deposit")
    deposit_amount = user.deposit.amount

    if not FeatureToggle.ENABLE_SENDINBLUE_TRANSACTIONAL_EMAILS.is_active():
        return {
            "Mj-TemplateID": 2016025,
            "Mj-TemplateLanguage": True,
            "Mj-campaign": "confirmation-credit",
            "Vars": {
                "depositAmount": int(deposit_amount),
            },
        }

    return SendinblueTransactionalEmailData(
        template=TransactionalEmail.GRANT_USER_CREDIT,
        params={
            "CREDIT": int(deposit_amount),
        },
    )
Пример #7
0
class SendinblueBackendTest:

    recipients = ["*****@*****.**", "*****@*****.**"]
    mock_template = Template(
        id_prod=1, id_not_prod=10, tags=["this_is_such_a_great_tag", "it_would_be_a_pity_if_anything_happened_to_it"]
    )
    params = {"Name": "Lucy", "City": "Kennet", "OtherCharacteristics": "Awsomeness"}
    data = SendinblueTransactionalEmailData(template=mock_template, params=params)

    expected_sent_data = SendTransactionalEmailRequest(
        recipients=recipients,
        params=params,
        template_id=data.template.id,
        tags=data.template.tags,
    )

    def _get_backend(self, path_str):
        return import_string(path_str)

    @patch("pcapi.core.mails.backends.sendinblue.send_transactional_email_task.delay")
    @pytest.mark.parametrize(
        "backend_import_string",
        (
            "pcapi.core.mails.backends.sendinblue.SendinblueBackend",
            "pcapi.core.mails.backends.sendinblue.ToDevSendinblueBackend",
        ),
    )
    def test_send_mail(self, mock_send_transactional_email_task, backend_import_string):
        backend = self._get_backend(backend_import_string)
        result = backend().send_mail(recipients=self.recipients, data=self.data)

        assert list(mock_send_transactional_email_task.call_args[0][0].recipients) == list(
            self.expected_sent_data.recipients
        )
        assert mock_send_transactional_email_task.call_args[0][0].params == self.expected_sent_data.params
        assert mock_send_transactional_email_task.call_args[0][0].template_id == self.expected_sent_data.template_id
        assert mock_send_transactional_email_task.call_args[0][0].tags == self.expected_sent_data.tags
        assert result.successful
Пример #8
0
def get_accepted_as_beneficiary_email_data(
        user: User) -> Union[dict, SendinblueTransactionalEmailData]:
    if not user.has_active_deposit:
        raise ValueError("Beneficiary should have a deposit")

    deposit_amount = user.deposit.amount

    if not FeatureToggle.ENABLE_SENDINBLUE_TRANSACTIONAL_EMAILS.is_active():
        return {
            "Mj-TemplateID": 2016025,
            "Mj-TemplateLanguage": True,
            "Mj-campaign": "confirmation-credit",
            "Vars": {
                "depositAmount": int(deposit_amount),
            },
        }

    return SendinblueTransactionalEmailData(
        template=TransactionalEmail.ACCEPTED_AS_BENEFICIARY.value,
        params={
            "CREDIT": int(deposit_amount),
        },
    )
def retrieve_data_for_reset_password_native_app_email(
    user: User, token: Token
) -> typing.Union[dict, SendinblueTransactionalEmailData]:
    reset_password_link = generate_firebase_dynamic_link(
        path="mot-de-passe-perdu",
        params={
            "token": token.value,
            "expiration_timestamp": int(token.expirationDate.timestamp()),
            "email": user.email,
        },
    )

    if not FeatureToggle.ENABLE_SENDINBLUE_TRANSACTIONAL_EMAILS.is_active():
        return {
            "MJ-TemplateID": 1838526,
            "MJ-TemplateLanguage": True,
            "Mj-trackclick": 1,
            "Vars": {"native_app_link": reset_password_link},
        }

    return SendinblueTransactionalEmailData(
        template=TransactionalEmail.NEW_PASSWORD_REQUEST.value, params={"NATIVE_APP_LINK": reset_password_link}
    )