mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-05-03 15:41:06 -04:00
Move service permission handle inside the model
These helper functions for modifying a service permission were just floating around loose in the view code. A much better home for them is on the model. This will also make it easy to reuse them in other views if we ever need to.
This commit is contained in:
@@ -227,42 +227,11 @@ def service_switch_research_mode(service_id):
|
||||
return redirect(url_for('.service_settings', service_id=service_id))
|
||||
|
||||
|
||||
def switch_service_permissions(service_id, permission, sms_sender=None):
|
||||
|
||||
force_service_permission(
|
||||
service_id,
|
||||
permission,
|
||||
on=permission not in current_service.permissions,
|
||||
sms_sender=sms_sender
|
||||
)
|
||||
|
||||
|
||||
def force_service_permission(service_id, permission, on=False, sms_sender=None):
|
||||
|
||||
permissions, permission = set(current_service.permissions), {permission}
|
||||
|
||||
update_service_permissions(
|
||||
service_id,
|
||||
permissions | permission if on else permissions - permission,
|
||||
sms_sender=sms_sender
|
||||
)
|
||||
|
||||
|
||||
def update_service_permissions(service_id, permissions, sms_sender=None):
|
||||
|
||||
data = {'permissions': list(permissions)}
|
||||
|
||||
if sms_sender:
|
||||
data['sms_sender'] = sms_sender
|
||||
|
||||
current_service.update_with_properties(data)
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/service-settings/can-send-email")
|
||||
@login_required
|
||||
@user_is_platform_admin
|
||||
def service_switch_can_send_email(service_id):
|
||||
switch_service_permissions(service_id, 'email')
|
||||
current_service.switch_permission('email')
|
||||
return redirect(url_for('.service_settings', service_id=service_id))
|
||||
|
||||
|
||||
@@ -270,7 +239,7 @@ def service_switch_can_send_email(service_id):
|
||||
@login_required
|
||||
@user_is_platform_admin
|
||||
def service_switch_can_send_sms(service_id):
|
||||
switch_service_permissions(service_id, 'sms')
|
||||
current_service.switch_permission('sms')
|
||||
return redirect(url_for('.service_settings', service_id=service_id))
|
||||
|
||||
|
||||
@@ -278,7 +247,7 @@ def service_switch_can_send_sms(service_id):
|
||||
@login_required
|
||||
@user_is_platform_admin
|
||||
def service_switch_email_auth(service_id):
|
||||
switch_service_permissions(service_id, 'email_auth')
|
||||
current_service.switch_permission('email_auth')
|
||||
return redirect(url_for('.service_settings', service_id=service_id))
|
||||
|
||||
|
||||
@@ -286,7 +255,7 @@ def service_switch_email_auth(service_id):
|
||||
@login_required
|
||||
@user_is_platform_admin
|
||||
def service_switch_can_send_precompiled_letter(service_id):
|
||||
switch_service_permissions(service_id, 'precompiled_letter')
|
||||
current_service.switch_permission('precompiled_letter')
|
||||
return redirect(url_for('.service_settings', service_id=service_id))
|
||||
|
||||
|
||||
@@ -299,7 +268,7 @@ def service_switch_can_upload_document(service_id):
|
||||
# If turning the permission off, or turning it on and the service already has a contact_link,
|
||||
# don't show the form to add the link
|
||||
if current_service.has_permission('upload_document') or current_service.contact_link:
|
||||
switch_service_permissions(service_id, 'upload_document')
|
||||
current_service.switch_permission('upload_document')
|
||||
return redirect(url_for('.service_settings', service_id=service_id))
|
||||
|
||||
if form.validate_on_submit():
|
||||
@@ -308,7 +277,7 @@ def service_switch_can_upload_document(service_id):
|
||||
current_service.update(
|
||||
contact_link=form.data[contact_type]
|
||||
)
|
||||
switch_service_permissions(service_id, 'upload_document')
|
||||
current_service.switch_permission('upload_document')
|
||||
return redirect(url_for('.service_settings', service_id=service_id))
|
||||
|
||||
return render_template('views/service-settings/contact_link.html', form=form)
|
||||
@@ -318,7 +287,7 @@ def service_switch_can_upload_document(service_id):
|
||||
@login_required
|
||||
@user_is_platform_admin
|
||||
def service_switch_can_edit_folders(service_id):
|
||||
switch_service_permissions(service_id, 'edit_folders')
|
||||
current_service.switch_permission('edit_folders')
|
||||
return redirect(url_for('.service_settings', service_id=service_id))
|
||||
|
||||
|
||||
@@ -490,7 +459,7 @@ def service_set_inbound_number(service_id):
|
||||
is_default=True,
|
||||
inbound_number_id=form.inbound_number.data
|
||||
)
|
||||
switch_service_permissions(current_service.id, 'inbound_sms')
|
||||
current_service.force_permission('inbound_sms', on=True)
|
||||
return redirect(url_for('.service_settings', service_id=service_id))
|
||||
return render_template(
|
||||
'views/service-settings/set-inbound-number.html',
|
||||
@@ -539,8 +508,7 @@ def service_set_international_sms(service_id):
|
||||
enabled='on' if current_service.has_permission('international_sms') else 'off'
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
force_service_permission(
|
||||
service_id,
|
||||
current_service.force_permission(
|
||||
'international_sms',
|
||||
on=(form.enabled.data == 'on'),
|
||||
)
|
||||
@@ -570,8 +538,7 @@ def service_set_letters(service_id):
|
||||
enabled='on' if current_service.has_permission('letter') else 'off'
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
force_service_permission(
|
||||
service_id,
|
||||
current_service.force_permission(
|
||||
'letter',
|
||||
on=(form.enabled.data == 'on'),
|
||||
)
|
||||
|
||||
@@ -53,6 +53,31 @@ class Service():
|
||||
def update_with_properties(self, properties):
|
||||
return service_api_client.update_service_with_properties(self.id, properties)
|
||||
|
||||
def switch_permission(self, permission, sms_sender=None):
|
||||
return self.force_permission(
|
||||
permission,
|
||||
on=not self.has_permission(permission),
|
||||
sms_sender=sms_sender
|
||||
)
|
||||
|
||||
def force_permission(self, permission, on=False, sms_sender=None):
|
||||
|
||||
permissions, permission = set(self.permissions), {permission}
|
||||
|
||||
return self.update_permissions(
|
||||
permissions | permission if on else permissions - permission,
|
||||
sms_sender=sms_sender
|
||||
)
|
||||
|
||||
def update_permissions(self, permissions, sms_sender=None):
|
||||
|
||||
data = {'permissions': list(permissions)}
|
||||
|
||||
if sms_sender:
|
||||
data['sms_sender'] = sms_sender
|
||||
|
||||
self.update_with_properties(data)
|
||||
|
||||
@property
|
||||
def trial_mode(self):
|
||||
return self._dict['restricted']
|
||||
|
||||
@@ -1170,7 +1170,10 @@ def test_enabling_and_disabling_email_and_sms(
|
||||
mock_get_inbound_number_for_service
|
||||
):
|
||||
service_one['permissions'] = permissions_before_switch
|
||||
mocked_fn = mocker.patch('app.service_api_client.update_service_with_properties', return_value=service_one)
|
||||
mocked_fn = mocker.patch(
|
||||
'app.notify_client.service_api_client.service_api_client.update_service',
|
||||
return_value=service_one,
|
||||
)
|
||||
|
||||
response = logged_in_platform_admin_client.get(
|
||||
url_for('main.service_switch_can_send_{}'.format(notification_type), service_id=service_one['id'])
|
||||
@@ -1178,7 +1181,7 @@ def test_enabling_and_disabling_email_and_sms(
|
||||
|
||||
assert response.status_code == 302
|
||||
assert response.location == url_for('main.service_settings', service_id=service_one['id'], _external=True)
|
||||
assert mocked_fn.call_args == call(service_one['id'], {'permissions': permissions_after_switch})
|
||||
assert mocked_fn.call_args == call(service_one['id'], permissions=permissions_after_switch)
|
||||
|
||||
|
||||
def test_and_more_hint_appears_on_settings_with_more_than_just_a_single_sender(
|
||||
|
||||
Reference in New Issue
Block a user