Skip to content

Commit

Permalink
fix key error in get_user_scope (#1887)
Browse files Browse the repository at this point in the history
  • Loading branch information
r-peschke committed Aug 29, 2023
1 parent d8511f5 commit abdb680
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 18 deletions.
1 change: 0 additions & 1 deletion openslides_backend/action/actions/user/create.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
class UserCreate(
EmailCheckMixin,
CreateAction,
UserMixin,
CreateUpdatePermissionsMixin,
PasswordMixin,
LimitOfUserMixin,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from ....shared.mixins.user_scope_mixin import UserScope, UserScopeMixin
from ....shared.patterns import fqid_from_collection_and_id
from ...action import Action
from .user_mixin import UserMixin


class PermissionVarStore:
Expand Down Expand Up @@ -143,7 +144,7 @@ def _get_user_meetings_with_user_can_manage(
return user_meetings


class CreateUpdatePermissionsMixin(UserScopeMixin, Action):
class CreateUpdatePermissionsMixin(UserMixin, UserScopeMixin, Action):
field_rights: Dict[str, list] = {
"A": [
"title",
Expand Down
1 change: 0 additions & 1 deletion openslides_backend/action/actions/user/update.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
@register_action("user.update")
class UserUpdate(
EmailCheckMixin,
UserMixin,
CreateUpdatePermissionsMixin,
UpdateAction,
LimitOfUserMixin,
Expand Down
11 changes: 9 additions & 2 deletions openslides_backend/action/actions/user/user_mixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,15 @@ class UserMixin(CheckForArchivedMeetingMixin):
"group_ids": id_list_schema,
}

def validate_instance(self, instance: Dict[str, Any]) -> None:
super().validate_instance(instance)
if "meeting_id" not in instance and any(
key in self.transfer_field_list for key in instance.keys()
):
raise ActionException(
"Missing meeting_id in instance, because meeting related fields used"
)

def update_instance(self, instance: Dict[str, Any]) -> Dict[str, Any]:
instance = super().update_instance(instance)
for field in ("username", "first_name", "last_name", "email"):
Expand Down Expand Up @@ -125,8 +134,6 @@ def meeting_user_set_data(self, instance: Dict[str, Any]) -> None:
meeting_user_data[field] = instance.pop(field)
if meeting_user_data:
self.apply_instance(instance)
if not meeting_id:
raise ActionException("Transfer data needs meeting_id.")
meeting_user_data["meeting_id"] = meeting_id
meeting_user_data["user_id"] = instance["id"]
self.execute_other_action(MeetingUserSetData, [meeting_user_data])
Expand Down
8 changes: 0 additions & 8 deletions openslides_backend/shared/mixins/user_scope_mixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,6 @@ def get_user_scope(
if "group_ids" in id_or_instance:
if "meeting_id" in id_or_instance:
meetings.add(id_or_instance["meeting_id"])
else:
meeting_user = self.datastore.get(
fqid_from_collection_and_id(
"meeting_user", id_or_instance["id"]
),
["meeting_id"],
)
meetings.add(meeting_user["meeting_id"])
committees_manager.update(
set(id_or_instance.get("committee_management_ids", []))
)
Expand Down
22 changes: 17 additions & 5 deletions tests/system/action/user/test_create.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,15 +147,27 @@ def test_create_comment(self) -> None:
)

def test_create_comment_without_meeting_id(self) -> None:
self.set_models(
{
"meeting/11": {
"name": "meeting11",
"committee_id": 79,
"group_ids": [111],
"is_active_in_organization_id": 1,
},
"group/111": {"meeting_id": 11},
}
)

response = self.request(
"user.create",
{
"username": "test Xcdfgee",
"comment": "blablabla",
},
{"username": "test Xcdfgee", "group_ids": [111]},
)
self.assert_status_code(response, 400)
assert "Transfer data needs meeting_id." in response.json["message"]
assert (
"Missing meeting_id in instance, because meeting related fields used"
in response.json["message"]
)

def test_create_with_meeting_user_fields(self) -> None:
self.set_models(
Expand Down

0 comments on commit abdb680

Please sign in to comment.