Skip to content

Commit

Permalink
fix included qualifications for federated users
Browse files Browse the repository at this point in the history
(cherry picked from commit f8f467a)
  • Loading branch information
jeriox committed Aug 6, 2024
1 parent 273cdd0 commit 0076509
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 7 deletions.
12 changes: 6 additions & 6 deletions ephios/plugins/federation/views/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
24 changes: 23 additions & 1 deletion tests/plugins/federation/test_federation_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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}

0 comments on commit 0076509

Please sign in to comment.