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
4 changes: 3 additions & 1 deletion api/institutions/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,9 @@ class InstitutionList(JSONAPIBaseView, generics.ListAPIView, ListFilterMixin):
ordering = ('name',)

def get_default_queryset(self):
return Institution.objects.filter(_id__isnull=False, is_deleted=False)
if 'filter[sso_availability]' in self.request.query_params:
return Institution.objects.filter(_id__isnull=False, is_deleted=False)
return Institution.objects.get_non_hidden_institutions().filter(_id__isnull=False, is_deleted=False)

# overrides ListAPIView
def get_queryset(self):
Expand Down
21 changes: 21 additions & 0 deletions api_tests/institutions/views/test_institution_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,3 +80,24 @@ def test_sso_availability_filter(
assert institution_one._id in ids
assert institution_three._id in ids
assert institution_two._id not in ids

def test_default_filter_excludes_institutions_with_sso_availability_hidden(
self, app, institution_one, institution_two, institution_three, url_institution
):
institution_one.sso_availability = 'Unavailable'
institution_one.save()

institution_two.sso_availability = 'Public'
institution_two.save()

institution_three.sso_availability = 'Hidden'
institution_three.save()

res = app.get(url_institution)
assert res.status_code == 200

ids = [each['id'] for each in res.json['data']]
assert len(res.json['data']) == 2
assert institution_one._id in ids
assert institution_two._id in ids
assert institution_three._id not in ids
3 changes: 3 additions & 0 deletions osf/models/institution.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ def get_queryset(self):
def get_all_institutions(self):
return super().get_queryset()

def get_non_hidden_institutions(self):
return super().get_queryset().filter(deactivated__isnull=True, sso_availability__in=[SSOAvailability.PUBLIC.value, SSOAvailability.UNAVAILABLE.value])


class Institution(DirtyFieldsMixin, Loggable, ObjectIDMixin, BaseModel, GuardianMixin):
objects = InstitutionManager()
Expand Down
2 changes: 2 additions & 0 deletions osf_tests/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
from osf import models
from osf.models.sanctions import Sanction
from osf.models.storage import PROVIDER_ASSET_NAME_CHOICES
from osf.models.institution import SSOAvailability
from osf.utils.names import impute_names_model
from osf.utils.workflows import (
DefaultStates,
Expand Down Expand Up @@ -258,6 +259,7 @@ class InstitutionFactory(DjangoModelFactory):
orcid_record_verified_source = ''
delegation_protocol = ''
institutional_request_access_enabled = False
sso_availability = SSOAvailability.PUBLIC.value

class Meta:
model = models.Institution
Expand Down
Loading