def insert_user_into_group_pass_if_already_member(domain, group, email): """ Subscribes an email address to a mailing list. If the email address is already subscribed, silently pass. :param domain: The G Suite domain in question. :type domain: str :param group: The group to add an email to. :type group: str :param email: The email address to add to the group. :type email: str :return: Nothing. Raises exception if failed. :rtype None """ logger = logging.getLogger(__name__) try: insert_email_into_g_suite_group(domain, group, email) except HttpError as err: error_message = _get_error_message_from_httperror(err) if 'Member already exists' in error_message: logger.warning('Email address "{email}" was already subscribed to mailing list "{list}"!'.format( email=email, list=group )) else: raise err
def test_insert_ow4_user_into_g_suite_group(self, mocked_insert, mocked_logger): user = G(OnlineUser, online_mail="firstname.lastname") group_email = self.group + "@" + self.domain ow4_gsuite_sync = settings.OW4_GSUITE_SYNC ow4_gsuite_sync["ENABLED"] = True ow4_gsuite_sync["ENABLE_INSERT"] = True mocked_insert.return_value.members.return_value.insert.return_value.execute.return_value = { "email": user.online_mail } with override_settings(OW4_GSUITE_SYNC=ow4_gsuite_sync): resp = insert_email_into_g_suite_group(self.domain, self.group, user.online_mail) self.assertEqual(user.online_mail, resp.get("email")) mocked_logger.assert_called_with( "Inserting '{user}' into G Suite group '{group}'.".format( user=user.online_mail, group=group_email), extra={ "email": user.online_mail, "group": group_email }, )
def insert_user_into_group_pass_if_already_member(domain: str, group: str, email: str) -> None: """ Subscribes an email address to a mailing list. If the email address is already subscribed, silently pass. Raises exception if failed. """ logger = logging.getLogger(__name__) try: insert_email_into_g_suite_group(domain, group, email) except HttpError as err: error_message = _get_error_message_from_httperror(err) if "Member already exists" in error_message: logger.warning( 'Email address "{email}" was already subscribed to mailing list "{list}"!' .format(email=email, list=group)) else: raise err
def test_insert_email_into_g_suite_group_already_exists_raises( self, mocked_g_suite_client): group_name = list(settings.OW4_GSUITE_SYNC.get('GROUPS').keys())[0] email = '*****@*****.**' error_reason = 'Member already exists' mocked_g_suite_client.return_value.members.return_value.insert.side_effect = \ create_http_error(status=409, reason=error_reason, error=error_reason) ow4_gsuite_sync = self.ow4_gsuite_sync ow4_gsuite_sync['ENABLE_INSERT'] = True with override_settings(OW4_GSUITE_SYNC=ow4_gsuite_sync): with self.assertRaises(HttpError): insert_email_into_g_suite_group(self.domain, group_name, email) with override_settings(OW4_GSUITE_SYNC=ow4_gsuite_sync): insert_email_into_g_suite_group(self.domain, group_name, email, suppress_http_errors=True)
def test_insert_when_insert_disabled(self, mocked_logger): group_name = list(settings.OW4_GSUITE_SYNC.get("GROUPS").keys())[0] email = "*****@*****.**" ow4_gsuite_sync = self.ow4_gsuite_sync ow4_gsuite_sync["ENABLE_INSERT"] = False with override_settings(OW4_GSUITE_SYNC=ow4_gsuite_sync): resp = insert_email_into_g_suite_group(self.domain, group_name, email) self.assertIsNone(resp) mocked_logger.assert_called_with( f'Skipping inserting email "{email}" since ENABLE_INSERT is False.' )
def test_insert_email_into_g_suite_group(self, mocked_g_suite_client): group_name = list(settings.OW4_GSUITE_SYNC.get('GROUPS').keys())[0] email = '*****@*****.**' # Yes, really... https://stackoverflow.com/a/32956627 mocked_g_suite_client.return_value.members.return_value.insert.return_value.execute.return_value = \ {'email': email} ow4_gsuite_sync = self.ow4_gsuite_sync ow4_gsuite_sync['ENABLE_INSERT'] = True with override_settings(OW4_GSUITE_SYNC=ow4_gsuite_sync): resp = insert_email_into_g_suite_group(self.domain, group_name, email) self.assertEqual(resp.get('email'), email)