diff --git a/ephios/plugins/federation/views/api.py b/ephios/plugins/federation/views/api.py index bdcc1bee6..38deb4035 100644 --- a/ephios/plugins/federation/views/api.py +++ b/ephios/plugins/federation/views/api.py @@ -133,17 +133,17 @@ def _oauth_callback(self): federated_instance=self.guest, email=user_data.json()["email"] ) except FederatedUser.DoesNotExist: - user = self._create_user(user_data) + user = self._create_user(user_data.json()) self.request.session["federated_user"] = user.pk def _create_user(self, user_data): user = FederatedUser.objects.create( federated_instance=self.guest, - email=user_data.json()["email"], - display_name=user_data.json()["display_name"], - date_of_birth=user_data.json()["date_of_birth"], + email=user_data["email"], + display_name=user_data["display_name"], + date_of_birth=user_data["date_of_birth"], ) - for qualification in user_data.json()["qualifications"]: + for qualification in user_data["qualifications"]: try: # Note that we assign the qualification on the host instance without further checks. # This may lead to incorrect qualifications if the inclusions for the qualification @@ -155,7 +155,7 @@ def _create_user(self, user_data): for included_qualification in qualification["includes"]: try: user.qualifications.add( - Qualification.objects.get(uuid=included_qualification["uuid"]) + Qualification.objects.get(uuid=included_qualification) ) except Qualification.DoesNotExist: continue diff --git a/tests/plugins/federation/test_federation_views.py b/tests/plugins/federation/test_federation_views.py index 3f9a7e771..d0212ec02 100644 --- a/tests/plugins/federation/test_federation_views.py +++ b/tests/plugins/federation/test_federation_views.py @@ -3,8 +3,9 @@ from django.urls import reverse -from ephios.plugins.federation.models import FederatedParticipation +from ephios.plugins.federation.models import FederatedParticipation, FederatedUser from ephios.plugins.federation.serializers import SharedEventSerializer +from ephios.plugins.federation.views.api import FederationOAuthView def test_federation_get_shared_events(django_app, volunteer, federation, federated_event): @@ -48,3 +49,24 @@ def test_federation_shared_event_detail_and_signup( response = response.form.submit(name="signup_choice", value="sign_up").follow() assert response.status_code == 200 assert FederatedParticipation.objects.count() == 1 + + +def test_federation_add_included_qualifications(django_app, federation, qualifications): + host, guest = federation + view = FederationOAuthView() + view.guest = guest + view._create_user( + { + "email": "test@localhost", + "display_name": "Test", + "date_of_birth": "2000-01-01", + "qualifications": [ + { + "uuid": "123aaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", + "includes": [qualifications.rs.uuid], + } + ], + } + ) + user = FederatedUser.objects.get(email="test@localhost") + assert set(user.qualifications.all()) == {qualifications.rs}