diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index cf5a8ab68..f10de25ab 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -40,6 +40,7 @@ jobs: - name: Set up Python dependencies run: | + poetry env use python poetry install - uses: actions/setup-node@v4 diff --git a/src/users/api/views.py b/src/users/api/views.py index 535ab2de7..c12a2d51c 100644 --- a/src/users/api/views.py +++ b/src/users/api/views.py @@ -15,7 +15,7 @@ def user_list(request): role = request.GET.get('role') if not role or role != "Reviewer": return JsonResponse({'detail': 'role is not given or invalid.'}, status=400) - qs = User.objects.filter(is_active=True,verified=True, groups__name= "Reviewer") + qs = User.objects.get_valid_users_by_role(role).order_by('speaker_name') users = [] for user in qs: users.append({ diff --git a/src/users/models.py b/src/users/models.py index 51a1d4671..9ad8d3a1f 100644 --- a/src/users/models.py +++ b/src/users/models.py @@ -39,6 +39,14 @@ def get_valid_speakers(self): users = users.exclude(speaker_name='').exclude(bio='') return users + def get_valid_users_by_role(self, role): + """Get active and verified users with specific role""" + return self.filter( + is_active=True, + verified=True, + groups__name=role + ) + class UserManager(BaseUserManager.from_queryset(UserQueryset)): """Custom manager for User. diff --git a/src/users/tests/test_api.py b/src/users/tests/test_api.py index ea394714d..339f5c542 100644 --- a/src/users/tests/test_api.py +++ b/src/users/tests/test_api.py @@ -3,35 +3,46 @@ from django.urls import reverse +@pytest.fixture +def auth_user(django_user_model): + return django_user_model.objects.create( + email="test_auth@example.com", + speaker_name="Auth User", + verified=True, + is_active=True, + ) + + @pytest.mark.django_db -def test_user_list_with_role_filter_exact_match(api_client, django_user_model): +def test_user_list_with_role_filter_exact_match(api_client, django_user_model, auth_user): group = Group.objects.create(name='Reviewer') - user = django_user_model.objects.create( + reviewer = django_user_model.objects.create( email="reviewer@example.com", speaker_name="Reviewer Name", bio="Some bio", verified=True, is_active=True, ) - user.groups.add(group) + reviewer.groups.add(group) - api_client.force_authenticate(user=user) + api_client.force_authenticate(user=auth_user) + + django_user_model.objects.create( + email="other@example.com", + speaker_name="Other User", + bio="Other bio", + verified=True, + is_active=True, + ) url = reverse('user_list') response = api_client.get(url, {'role': 'Reviewer'}) assert response.status_code == 200 data = response.json() - assert data == [ - { - 'full_name': user.get_full_name(), - 'bio': user.bio, - 'photo_url': None, - 'facebook_profile_url': user.facebook_profile_url, - 'twitter_profile_url': user.twitter_profile_url, - 'github_profile_url': user.github_profile_url, - } - ] + assert len(data) == 1 + assert data[0]['full_name'] == reviewer.get_full_name() + assert data[0]['bio'] == reviewer.bio @pytest.mark.django_db