Skip to content

Commit

Permalink
allow user to prevent sending welcome email after user form
Browse files Browse the repository at this point in the history
- email may be subsequently sent from the grid

fixes #76
  • Loading branch information
guruofgentoo committed Jan 29, 2021
1 parent 83ff034 commit 3bb8f7a
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 1 deletion.
12 changes: 12 additions & 0 deletions keg_auth/forms.py
Expand Up @@ -9,6 +9,7 @@
from sqlalchemy_utils import EmailType
from webhelpers2.html.tags import link_to
from wtforms.fields import (
BooleanField,
DateField,
HiddenField,
PasswordField,
Expand Down Expand Up @@ -200,6 +201,10 @@ class FieldsMeta:
])
confirm = PasswordField(_('Confirm Password'))
field_order = field_order + ('reset_password', 'confirm')
else:
# place a Send Welcome field after the initial set of fields
send_welcome = BooleanField('Send Welcome Email', default=True)
field_order = tuple(_fields + ['send_welcome'] + list(field_order[len(_fields):]))

def get_object_by_field(self, field):
return user_cls.get_by(username=field.data)
Expand All @@ -212,6 +217,13 @@ def __iter__(self):
order = ('csrf_token', ) + self.field_order
return (getattr(self, field_id) for field_id in order)

def after_init(self, args, kwargs):
if kwargs.get('obj') and hasattr(self, 'send_welcome'):
self.send_welcome = None
self.field_order = tuple(filter(lambda v: v != 'send_welcome', self.field_order))

return super().after_init(args, kwargs)

return User


Expand Down
9 changes: 9 additions & 0 deletions keg_auth/tests/test_forms.py
Expand Up @@ -215,6 +215,15 @@ def test_alternate_ident_field(self):
allow_superuser=False, endpoint='auth.user:edit')
assert hasattr(form_cls, 'username')

def test_send_welcome_present(self):
form = self.make_form()
assert form.send_welcome

def test_send_welcome_absent(self):
user = ents.User.testing_create()
form = self.make_form(obj=user)
assert not form.send_welcome

def test_no_email(self):
with mock.patch('keg_auth_ta.extensions.auth_entity_registry._user_cls', ents.UserNoEmail):
form_cls = forms.user_form({'KEGAUTH_EMAIL_OPS_ENABLED': False},
Expand Down
13 changes: 13 additions & 0 deletions keg_auth/tests/test_views.py
Expand Up @@ -566,6 +566,19 @@ def test_add(self):
assert user.groups == [group_approve]
assert user.bundles == [bundle_approve]

def test_add_no_welcome(self):
resp = self.client.get('/users/add')

resp.form['email'] = 'abc3@example.com'
resp.form['send_welcome'] = False
with mail_ext.record_messages() as outbox:
resp = resp.form.submit()
assert resp.status_code == 302
assert resp.location.endswith('/users')
assert resp.flashes == [('success', 'Successfully created User')]
assert len(outbox) == 0
assert self.user_ent.get_by(email='abc3@example.com')

def test_resend_verification(self):
self.current_user.is_verified = True
self.current_user.permissions = ents.Permission.query.filter_by(token='auth-manage').all()
Expand Down
6 changes: 5 additions & 1 deletion keg_auth/views.py
Expand Up @@ -375,7 +375,11 @@ def grid_cls(self):

def create_user(self, form):
auth_manager = keg.current_app.auth_manager
email_enabled = flask.current_app.config.get('KEGAUTH_EMAIL_OPS_ENABLED', True)
email_enabled = (
flask.current_app.config.get('KEGAUTH_EMAIL_OPS_ENABLED', True)
and hasattr(form, 'send_welcome')
and form.send_welcome.data
)
user_kwargs = {}
user_kwargs['mail_enabled'] = email_enabled
for field in form.data:
Expand Down

0 comments on commit 3bb8f7a

Please sign in to comment.