Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion admin/institutions/forms.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django import forms
from osf.models import Institution
from osf.models.institution import Institution, SSOAvailability


class InstitutionForm(forms.ModelForm):
Expand All @@ -10,6 +10,18 @@ class Meta:
'is_deleted', 'contributors', 'storage_regions',
]

def clean(self):
super().clean()

if hasattr(self, 'cleaned_data') and self.changed_data:
if not self.cleaned_data['delegation_protocol']:
if self.cleaned_data['sso_availability'] != SSOAvailability.UNAVAILABLE.value:
self.add_error('sso_availability', 'Must be UNAVAILABLE when no protocol')

elif self.cleaned_data['deactivated']:
if self.cleaned_data['sso_availability'] != SSOAvailability.HIDDEN.value:
self.add_error('sso_availability', 'Inactive must be HIDDEN')


class InstitutionalMetricsAdminRegisterForm(forms.Form):
""" A form that finds an existing OSF User, and grants permissions to that
Expand Down
10 changes: 10 additions & 0 deletions admin/institutions/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,16 @@ def get_context_data(self, *args, **kwargs):
def get_success_url(self, *args, **kwargs):
return reverse_lazy('institutions:detail', kwargs={'institution_id': self.kwargs.get('institution_id')})

def post(self, request, *args, **kwargs):
# Override `post` method in `django.views.generic.edit.ProcessFormView` due to custom behavior
self.object = self.get_object()
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
Comment thread
Ostap-Zherebetskyi marked this conversation as resolved.
messages.error(request, form.errors)
return redirect('institutions:detail', institution_id=self.kwargs.get('institution_id'))


class InstitutionExport(PermissionRequiredMixin, View):
permission_required = 'osf.view_institution'
Expand Down
16 changes: 14 additions & 2 deletions admin_tests/institutions/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,11 +140,23 @@ def test_institution_form(self):
'logo_name': 'awesome_logo.png',
'domains': 'http://kris.biz/, http://www.little.biz/',
'_id': 'newawesomeprov',
'sso_availability': 'Public',
'sso_availability': 'Unavailable',
}
form = InstitutionForm(data=new_data)
assert form.is_valid()

def test_institution_form_invalid(self):
new_data = {
'name': 'New Name',
'logo_name': 'awesome_logo.png',
'domains': 'http://kris.biz/, http://www.little.biz/',
'_id': 'newawesomeprov',
'sso_availability': 'Public',
}
form = InstitutionForm(data=new_data)
assert not form.is_valid()
assert 'sso_availability' in form.errors


class TestInstitutionExport(AdminTestCase):
def setUp(self):
Expand Down Expand Up @@ -216,7 +228,7 @@ def test_monthly_reporter_called_on_create(self, mock_monthly_reporter_do):
'orcid_record_verified_source': '',
'delegation_protocol': '',
'institutional_request_access_enabled': False,
'sso_availability': 'Public',
'sso_availability': 'Unavailable',
}
form = InstitutionForm(data=data)
assert form.is_valid()
Expand Down
Loading