diff --git a/src/ploneintranet/workspace/browser/forms.py b/src/ploneintranet/workspace/browser/forms.py index 00c5dd9..fd87f6f 100644 --- a/src/ploneintranet/workspace/browser/forms.py +++ b/src/ploneintranet/workspace/browser/forms.py @@ -130,8 +130,10 @@ def handleApply(self, action): move = data.get("move", False) removable = [] for member in ws.members: - user_id = api.user.get(username=member).getId() - other_ws.add_to_team(user=user_id) + user = api.user.get(username=member) + if user is not None: + user_id = user.getId() + other_ws.add_to_team(user=user_id) removable.append(member) if move: diff --git a/src/ploneintranet/workspace/tests/test_forms.py b/src/ploneintranet/workspace/tests/test_forms.py index 21eb1b8..3513b0a 100644 --- a/src/ploneintranet/workspace/tests/test_forms.py +++ b/src/ploneintranet/workspace/tests/test_forms.py @@ -143,6 +143,49 @@ def create_user(self, name="testuser", password="secret"): ) return user + def test_non_existing_member_is_not_transferred(self): + self.login_as_portal_owner() + + provideAdapter(adapts=(Interface, IBrowserRequest), + provides=Interface, + factory=TransferMembershipForm, + name="transfer") + ws = api.content.create( + self.portal, + "ploneintranet.workspace.workspacefolder", + "alejandro-workspace", + title="Alejandro workspace") + + names = "Dima Nikita Alex Vlad Sergey".split() + for name in names: + IWorkspace(ws).add_to_team( + user=self.create_user(name=name).getId()) + + # subtracting admin from members list + self.assertEqual(len(names), len(list(IWorkspace(ws).members))-1) + + other_ws = api.content.create( + self.portal, + "ploneintranet.workspace.workspacefolder", + "isabella-workspace", + "Isabella Workspace",) + + api.user.delete(username="Dima") + self.assertEqual(len(names), len(list(IWorkspace(ws).members))-1) + + # make a move + request = self.make_request(api.content.get_uuid(other_ws), True) + form = api.content.get_view('transfer', + context=ws, + request=request) + form.update() + data, errors = form.extractData() + self.assertEqual(len(errors), 0) + + self.assertEqual( + len(names)-1, len(list(IWorkspace(other_ws).members))-1) + self.assertEqual(0, len(list(IWorkspace(ws).members))) + def test_transfer_form(self): """ Check that the transfer form can copy/move users to another workspace """