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
13 changes: 9 additions & 4 deletions services/event_signup_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ def signup_to_event(event: Event_DB, user: User_DB, data: EventSignupCreate, man
):
raise HTTPException(400, detail="User already signed up to chosen event")

if manage_permission == False and not is_group_allowed(event, user, data.group_name):
if manage_permission == False and not is_group_allowed(event, user, data.group_name, db):
raise HTTPException(status.HTTP_403_FORBIDDEN, detail="User cannot sign up with this group")

if manage_permission == False: # a falsy priority is stored as, and checked as, the default one
Expand Down Expand Up @@ -132,7 +132,7 @@ def update_event_signup(event: Event_DB, data: EventSignupUpdate, user_id: int,
if (
manage_permission == False
and "group_name" in updates
and not is_group_allowed(event, signup.user, updates["group_name"])
and not is_group_allowed(event, signup.user, updates["group_name"], db)
):
raise HTTPException(status.HTTP_403_FORBIDDEN, detail="User cannot sign up with this group")

Expand Down Expand Up @@ -182,12 +182,17 @@ def get_allowed_groups(event: Event_DB, user: User_DB):
return allowed_groups


def is_group_allowed(event: Event_DB, user: User_DB, group_name: str | None):
def is_group_allowed(event: Event_DB, user: User_DB, group_name: str | None, db: Session):
if event.is_nollning_event:
if group_name is None:
# Without a group the user has to qualify through a post priority instead,
# since nollning priorities are tied to a group
return user_matches_existing_event_post_priorities(user, event)
if user_matches_existing_event_post_priorities(user, event):
return True

# Anyone taking part in this year's nollning holds their priority through a group and
# has to sign up with it, while members outside it have no group to pick and may go without.
return not get_user_nollning_priorities(db, user)

allowed_group_types = event.mentor_group_types or list(get_args(GROUP_TYPE))
is_event_allowed = False
Expand Down
14 changes: 14 additions & 0 deletions tests/test_event_signup.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,20 @@ def test_nollning_event_signup_without_group(client, member_token, membered_user
assert response.status_code == 403, response.text


def test_nollning_event_signup_without_group_outside_nollning(client, member_token, membered_user, nollning_event):
"""A member who does not take part in this year's nollning has no group to pick,
and may sign up to a nollning event without one."""
response = client.post(
f"/event-signup/{nollning_event['id']}",
json={"user_id": membered_user.id},
headers=auth_headers(member_token),
)

assert response.status_code in (200, 201), response.text
assert response.json()["group_name"] is None
assert response.json()["priority"] == DEFAULT_USER_PRIORITY


def test_nollning_event_signup_without_group_with_post_priority(
client, admin_token, admin_council_id, member_token, membered_user, member_post
):
Expand Down
Loading