def test_group_request(session, users, groups, http_client, base_url): # noqa: F811 user = users["*****@*****.**"] group = groups["sad-team"] # Request to join fe_url = url(base_url, "/groups/{}/join".format(group.groupname)) resp = yield http_client.fetch( fe_url, method="POST", headers={"X-Grouper-User": user.username}, body=urlencode({"reason": "Test Request", "member": "User: [email protected]"}), ) assert resp.code == 200 request = Request.get(session, requester_id=user.id, requesting_id=group.id) assert request.status == "pending" # Approve request fe_url = url(base_url, "/groups/{}/requests/{}".format(group.groupname, request.id)) resp = yield http_client.fetch( fe_url, method="POST", headers={"X-Grouper-User": "******"}, body=urlencode({"reason": "Test Request", "status": "actioned"}), ) assert resp.code == 200 request = Request.get(session, requester_id=user.id, requesting_id=group.id) assert request.status == "actioned"
def test_group_request(session, users, groups, http_client, base_url): user = users['*****@*****.**'] group = groups['sad-team'] # Request to join fe_url = url(base_url, '/groups/{}/join'.format(group.groupname)) resp = yield http_client.fetch( fe_url, method='POST', headers={'X-Grouper-User': user.username}, body=urlencode({'reason': 'Test Request', 'member': 'User: [email protected]'}), ) assert resp.code == 200 request = Request.get(session, requester_id=user.id, requesting_id=group.id) assert request.status == 'pending' # Approve request fe_url = url(base_url, '/groups/{}/requests/{}'.format(group.groupname, request.id)) resp = yield http_client.fetch( fe_url, method='POST', headers={'X-Grouper-User': '******'}, body=urlencode({'reason': 'Test Request', 'status': 'actioned'}), ) assert resp.code == 200 request = Request.get(session, requester_id=user.id, requesting_id=group.id) assert request.status == 'actioned'
def cancel_user_request(self, user_request, reason, authorization): # type: (UserGroupRequest, str, Authorization) -> None now = datetime.utcnow() request = Request.get(self.session, id=user_request.id) if not request: raise UserGroupRequestNotFoundException(request) actor = User.get(self.session, name=authorization.actor) if not actor: raise UserNotFoundException(authorization.actor) request_status_change = RequestStatusChange( request=request, user_id=actor.id, from_status=request.status, to_status="cancelled", change_at=now, ).add(self.session) request.status = "cancelled" self.session.flush() Comment( obj_type=OBJ_TYPES["RequestStatusChange"], obj_pk=request_status_change.id, user_id=actor.id, comment=reason, created_on=now, ).add(self.session)
def test_group_request(session, users, groups, http_client, base_url): user = users['*****@*****.**'] group = groups['sad-team'] # Request to join fe_url = url(base_url, '/groups/{}/join'.format(group.groupname)) resp = yield http_client.fetch( fe_url, method='POST', headers={'X-Grouper-User': user.username}, body=urlencode({ 'reason': 'Test Request', 'member': 'User: [email protected]' }), ) assert resp.code == 200 request = Request.get(session, requester_id=user.id, requesting_id=group.id) assert request.status == 'pending' # Approve request fe_url = url(base_url, '/groups/{}/requests/{}'.format(group.groupname, request.id)) resp = yield http_client.fetch( fe_url, method='POST', headers={'X-Grouper-User': '******'}, body=urlencode({ 'reason': 'Test Request', 'status': 'actioned' }), ) assert resp.code == 200 request = Request.get(session, requester_id=user.id, requesting_id=group.id) assert request.status == 'actioned'
def persist_group_member_changes( session, # type: Session group, # type: Group requester, # type: User member, # type: Union[User, Group] status, # type: str reason, # type: str create_edge=False, # type: bool **updates # type: Any ): # type: (...) -> Request requested_at = datetime.utcnow() if "role" in updates: role = updates["role"] _validate_role(member.member_type, role) get_plugin_proxy().will_update_group_membership(session, group, member, **updates) if create_edge: edge = _create_edge(session, group, member, updates.get("role", "member")) else: edge = _get_edge(session, group, member) if not edge: raise MemberNotFound() changes = _serialize_changes(edge, **updates) request = Request( requester_id=requester.id, requesting_id=group.id, on_behalf_obj_type=member.member_type, on_behalf_obj_pk=member.id, requested_at=requested_at, edge_id=edge.id, status=status, changes=changes, ).add(session) session.flush() request_status_change = RequestStatusChange( request=request, user_id=requester.id, to_status=status, change_at=requested_at).add(session) session.flush() Comment( obj_type=OBJ_TYPES["RequestStatusChange"], obj_pk=request_status_change.id, user_id=requester.id, comment=reason, created_on=requested_at, ).add(session) session.flush() if status == "actioned": edge.apply_changes(request.changes) session.flush() Counter.incr(session, "updates") return request