def test_refuse_membership(self): user = self.login() applicant = UserFactory() membership_request = MembershipRequest(user=applicant, comment='test') member = Member(user=user, role='admin') organization = OrganizationFactory(members=[member], requests=[membership_request]) data = {'comment': 'no'} api_url = url_for('api.refuse_membership', org=organization, id=membership_request.id) response = self.post(api_url, data) self.assert200(response) organization.reload() self.assertEqual(len(organization.requests), 1) self.assertEqual(len(organization.pending_requests), 0) self.assertEqual(len(organization.refused_requests), 1) self.assertEqual(len(organization.accepted_requests), 0) self.assertFalse(organization.is_member(applicant)) request = organization.requests[0] self.assertEqual(request.user, applicant) self.assertEqual(request.status, 'refused') self.assertEqual(request.comment, 'test') self.assertEqual(request.refusal_comment, 'no') self.assertEqual(request.handled_by, user) self.assertIsNotNone(request.handled_on)
def test_refuse_membership(self, api): user = api.login() applicant = UserFactory() membership_request = MembershipRequest(user=applicant, comment='test') member = Member(user=user, role='admin') organization = OrganizationFactory(members=[member], requests=[membership_request]) data = {'comment': 'no'} api_url = url_for('api.refuse_membership', org=organization, id=membership_request.id) response = api.post(api_url, data) assert200(response) organization.reload() assert len(organization.requests) is 1 assert len(organization.pending_requests) is 0 assert len(organization.refused_requests) is 1 assert len(organization.accepted_requests) is 0 assert not organization.is_member(applicant) request = organization.requests[0] assert request.user == applicant assert request.status == 'refused' assert request.comment == 'test' assert request.refusal_comment == 'no' assert request.handled_by == user assert request.handled_on is not None
def test_refuse_membership_404(self, api): user = api.login() member = Member(user=user, role='admin') organization = OrganizationFactory(members=[member]) api_url = url_for('api.refuse_membership', org=organization, id=MembershipRequest().id) response = api.post(api_url) assert404(response) assert response.json['message'] == 'Unknown membership request id'
def test_only_admin_can_accept_membership(self, api): user = api.login() applicant = UserFactory() membership_request = MembershipRequest(user=applicant, comment='test') member = Member(user=user, role='editor') organization = OrganizationFactory(members=[member], requests=[membership_request]) api_url = url_for('api.accept_membership', org=organization, id=membership_request.id) response = api.post(api_url) assert403(response)
def test_accept_membership_404(self): user = self.login() member = Member(user=user, role='admin') organization = OrganizationFactory(members=[member]) api_url = url_for('api.accept_membership', org=organization, id=MembershipRequest().id) response = self.post(api_url) self.assert404(response) self.assertEqual(response.json['message'], 'Unknown membership request id')
def test_accept_membership(self, api): user = api.login() applicant = UserFactory() membership_request = MembershipRequest(user=applicant, comment='test') member = Member(user=user, role='admin') organization = OrganizationFactory( members=[member], requests=[membership_request]) api_url = url_for( 'api.accept_membership', org=organization, id=membership_request.id) response = api.post(api_url) assert200(response) assert response.json['role'] == 'editor' organization.reload() assert len(organization.requests) is 1 assert len(organization.pending_requests) is 0 assert len(organization.refused_requests) is 0 assert len(organization.accepted_requests) is 1 assert organization.is_member(applicant) request = organization.requests[0] assert request.user == applicant assert request.status == 'accepted' assert request.comment == 'test' assert request.handled_by == user assert request.handled_on is not None assert request.refusal_comment is None # test accepting twice will raise 409 api_url = url_for( 'api.accept_membership', org=organization, id=membership_request.id) response = api.post(api_url) assert_status(response, 409)
def test_request_existing_pending_membership(self, api): user = api.login() previous_request = MembershipRequest(user=user, comment='previous') organization = OrganizationFactory(requests=[previous_request]) data = {'comment': 'a comment'} api_url = url_for('api.request_membership', org=organization) response = api.post(api_url, data) assert200(response) organization.reload() assert len(organization.requests) is 1 assert len(organization.pending_requests) is 1 assert len(organization.refused_requests) is 0 assert len(organization.accepted_requests) is 0 request = organization.requests[0] assert request.user == user assert request.status == 'pending' assert request.comment == 'a comment' assert request.handled_on is None assert request.handled_by is None assert request.refusal_comment is None
def test_request_existing_pending_membership(self): user = self.login() previous_request = MembershipRequest(user=user, comment='previous') organization = OrganizationFactory(requests=[previous_request]) data = {'comment': 'a comment'} api_url = url_for('api.request_membership', org=organization) response = self.post(api_url, data) self.assert200(response) organization.reload() self.assertEqual(len(organization.requests), 1) self.assertEqual(len(organization.pending_requests), 1) self.assertEqual(len(organization.refused_requests), 0) self.assertEqual(len(organization.accepted_requests), 0) request = organization.requests[0] self.assertEqual(request.user, user) self.assertEqual(request.status, 'pending') self.assertEqual(request.comment, 'a comment') self.assertIsNone(request.handled_on) self.assertIsNone(request.handled_by) self.assertIsNone(request.refusal_comment)
def test_pending_membership_requests(self): admin = UserFactory() editor = UserFactory() applicant = UserFactory() request = MembershipRequest(user=applicant, comment='test') members = [ Member(user=editor, role='editor'), Member(user=admin, role='admin') ] org = OrganizationFactory(members=members, requests=[request]) assert len(membership_request_notifications(applicant)) is 0 assert len(membership_request_notifications(editor)) is 0 notifications = membership_request_notifications(admin) assert len(notifications) is 1 dt, details = notifications[0] assert_equal_dates(dt, request.created) assert details['id'] == request.id assert details['organization'] == org.id assert details['user']['id'] == applicant.id assert details['user']['fullname'] == applicant.fullname assert details['user']['avatar'] == str(applicant.avatar)
def test_pending_membership_requests(self): admin = UserFactory() editor = UserFactory() applicant = UserFactory() request = MembershipRequest(user=applicant, comment='test') members = [ Member(user=editor, role='editor'), Member(user=admin, role='admin') ] org = OrganizationFactory(members=members, requests=[request]) self.assertEqual(len(membership_request_notifications(applicant)), 0) self.assertEqual(len(membership_request_notifications(editor)), 0) notifications = membership_request_notifications(admin) self.assertEqual(len(notifications), 1) dt, details = notifications[0] self.assertEqualDates(dt, request.created) self.assertEqual(details['id'], request.id) self.assertEqual(details['organization'], org.id) self.assertEqual(details['user']['id'], applicant.id) self.assertEqual(details['user']['fullname'], applicant.fullname) self.assertEqual(details['user']['avatar'], str(applicant.avatar))