def execute(self, application_id: int) -> None:
        beneficiary_pre_subscription = get_application_by_id(application_id)

        user = find_user_by_email(beneficiary_pre_subscription.email)

        try:
            validate(beneficiary_pre_subscription, preexisting_account=user)

        except CantRegisterBeneficiary as cant_register_beneficiary_exception:
            self.beneficiary_repository.reject(
                beneficiary_pre_subscription,
                detail=str(cant_register_beneficiary_exception))
            send_rejection_email_to_beneficiary_pre_subscription(
                beneficiary_pre_subscription=beneficiary_pre_subscription,
                beneficiary_is_eligible=isinstance(
                    cant_register_beneficiary_exception,
                    BeneficiaryIsADuplicate),
            )

        else:
            beneficiary = self.beneficiary_repository.save(
                beneficiary_pre_subscription, user=user)
            if user is None:
                send_activation_email(user=beneficiary)
            else:
                send_accepted_as_beneficiary_email(user=beneficiary)
Пример #2
0
    def execute(self, application_id: int) -> None:
        beneficiary_pre_subscription = get_application_by_id(application_id)

        user = find_user_by_email(beneficiary_pre_subscription.email)

        try:
            validate(beneficiary_pre_subscription, preexisting_account=user)

        except CantRegisterBeneficiary as cant_register_beneficiary_exception:
            self.beneficiary_repository.reject(
                beneficiary_pre_subscription,
                detail=str(cant_register_beneficiary_exception))
            send_rejection_email_to_beneficiary_pre_subscription(
                beneficiary_pre_subscription=beneficiary_pre_subscription,
                beneficiary_is_eligible=isinstance(
                    cant_register_beneficiary_exception,
                    BeneficiaryIsADuplicate),
                send_email=send_raw_email,
            )

        else:
            if not user:
                beneficiary = self.beneficiary_repository.save(
                    beneficiary_pre_subscription)
            else:
                beneficiary = users_api.activate_beneficiary(
                    user, beneficiary_pre_subscription.deposit_source)
                users_api.attach_beneficiary_import_details(
                    user, beneficiary_pre_subscription)
            send_activation_email(user=beneficiary, send_email=send_raw_email)
Пример #3
0
def _send_beneficiary_activation_email(user: users_models.User, has_activated_account: bool):
    if not has_activated_account:
        old_user_emails.send_activation_email(
            user=user, reset_password_token_life_time=users_constants.RESET_PASSWORD_TOKEN_LIFE_TIME_EXTENDED
        )
    else:
        accepted_as_beneficiary_email.send_accepted_as_beneficiary_email(user=user)
    def test_send_activation_email(self):
        # given
        beneficiary = users_factories.BeneficiaryGrant18Factory.build()

        # when
        send_activation_email(beneficiary)

        # then
        assert len(mails_testing.outbox) == 1
        assert mails_testing.outbox[0].sent_data["Mj-TemplateID"] == 994771
Пример #5
0
    def test_send_activation_email_for_native(self):
        # given
        beneficiary = users_factories.UserFactory.build()
        token = users_factories.EmailValidationToken.build(user=beneficiary)

        # when
        send_activation_email(beneficiary, native_version=True, token=token)

        # then
        native_app_link = mails_testing.outbox[0].sent_data["Vars"][
            "nativeAppLink"]
        assert token.value in native_app_link
Пример #6
0
    def test_send_activation_email(self, mocked_get_activation_email_data):
        # given
        beneficiary = users_factories.UserFactory.build()
        mocked_get_activation_email_data.return_value = {"Html-part": ""}

        # when
        send_activation_email(beneficiary)

        # then
        mocked_get_activation_email_data.assert_called_once_with(
            user=beneficiary)
        assert mails_testing.outbox[0].sent_data["Html-part"] == ""
Пример #7
0
    def test_send_activation_email(self, mocked_get_activation_email_data):
        # given
        beneficiary = users_factories.UserFactory.build()
        mocked_send_email = Mock()
        mocked_get_activation_email_data.return_value = {"Html-part": ""}

        # when
        send_activation_email(beneficiary, mocked_send_email)

        # then
        mocked_get_activation_email_data.assert_called_once_with(
            user=beneficiary)
        mocked_send_email.assert_called_once_with(data={"Html-part": ""})
Пример #8
0
    def test_send_activation_email_for_native(self):
        # given
        beneficiary = users_factories.UserFactory.build()
        token = users_factories.EmailValidationToken.build(user=beneficiary)
        mocked_send_email = Mock()

        # when
        send_activation_email(beneficiary,
                              mocked_send_email,
                              native_version=True,
                              token=token)

        # then
        mocked_send_email.assert_called()
        native_app_link = mocked_send_email.call_args_list[0][1]["data"][
            "Vars"]["native_app_link"]
        assert token.value in native_app_link
Пример #9
0
def _process_creation(
    error_messages: List[str],
    information: Dict,
    new_beneficiaries: List[User],
    procedure_id: int,
    user: Optional[User] = None,
) -> None:
    new_beneficiary = create_beneficiary_from_application(information,
                                                          user=user)
    try:
        repository.save(new_beneficiary)
    except ApiErrors as api_errors:
        logger.warning(
            "[BATCH][REMOTE IMPORT BENEFICIARIES] Could not save application %s, because of error: %s - Procedure %s",
            information["application_id"],
            api_errors,
            procedure_id,
        )
        error_messages.append(str(api_errors))
    else:
        logger.info(
            "[BATCH][REMOTE IMPORT BENEFICIARIES] Successfully created user for application %s - Procedure %s",
            information["application_id"],
            procedure_id,
        )
        save_beneficiary_import_with_status(
            ImportStatus.CREATED,
            information["application_id"],
            source=BeneficiaryImportSources.demarches_simplifiees,
            source_id=procedure_id,
            user=new_beneficiary,
        )
        new_beneficiaries.append(new_beneficiary)
        try:
            if user is None:
                send_activation_email(new_beneficiary)
            else:
                send_accepted_as_beneficiary_email(new_beneficiary)
        except MailServiceException as mail_service_exception:
            logger.exception(
                "Email send_activation_email failure for application %s - Procedure %s : %s",
                information["application_id"],
                procedure_id,
                mail_service_exception,
            )
 def after_model_change(self, form: Form, model: User,
                        is_created: bool) -> None:
     update_external_user(model)
     if is_created and not send_activation_email(model):
         token = create_reset_password_token(model)
         flash(
             f"L'envoi d'email a échoué. Le mot de passe peut être réinitialisé depuis le lien suivant : {build_pc_webapp_reset_password_link(token.value)}",
             "error",
         )
     super().after_model_change(form, model, is_created)
 def after_model_change(self, form: Form, model: User,
                        is_created: bool) -> None:
     if is_created and not send_activation_email(model, send_raw_email):
         flash("L'envoi d'email a échoué", "error")
     super().after_model_change(form, model, is_created)
Пример #12
0
def request_email_confirmation(user: User) -> None:
    token = create_email_validation_token(user)
    user_emails.send_activation_email(user,
                                      mailing_utils.send_raw_email,
                                      native_version=True,
                                      token=token)