def test_project_users_get_readonly_role_on_add_form(self): self._project_create() alice_data = {'username': '******', 'email': '*****@*****.**'} alice_profile = self._create_user_profile(alice_data) ReadOnlyRole.add(alice_profile.user, self.project) self.assertTrue(ReadOnlyRole.user_has_role(alice_profile.user, self.project)) self._publish_xls_form_to_project() self.assertTrue(ReadOnlyRole.user_has_role(alice_profile.user, self.xform)) self.assertFalse(OwnerRole.user_has_role(alice_profile.user, self.xform))
def test_get_xform_list_other_user_with_readonly_role(self): request = self.factory.get('/') response = self.view(request) alice_data = {'username': '******', 'email': '*****@*****.**'} alice_profile = self._create_user_profile(alice_data) ReadOnlyRole.add(alice_profile.user, self.xform) self.assertTrue( ReadOnlyRole.user_has_role(alice_profile.user, self.xform) ) auth = DigestAuth('alice', 'bobbob') request.META.update(auth(request.META, response)) response = self.view(request) self.assertEqual(response.status_code, 200) content = response.render().content self.assertNotIn(self.xform.id_string, content) self.assertEqual( content, '<?xml version="1.0" encoding="utf-8"?>\n<xforms ' 'xmlns="http://openrosa.org/xforms/xformsList"></xforms>') self.assertTrue(response.has_header('X-OpenRosa-Version')) self.assertTrue( response.has_header('X-OpenRosa-Accept-Content-Length')) self.assertTrue(response.has_header('Date')) self.assertEqual(response['Content-Type'], 'text/xml; charset=utf-8')
def test_project_share_endpoint(self, mock_send_mail): # create project and publish form to project self._publish_xls_form_to_project() alice_data = {'username': '******', 'email': '*****@*****.**'} alice_profile = self._create_user_profile(alice_data) projectid = self.project.pk ROLES = [ReadOnlyRole, DataEntryRole, EditorRole, ManagerRole, OwnerRole] for role_class in ROLES: self.assertFalse(role_class.user_has_role(alice_profile.user, self.project)) data = {'username': '******', 'role': role_class.name, 'email_msg': 'I have shared the project with you'} request = self.factory.post('/', data=data, **self.extra) view = ProjectViewSet.as_view({ 'post': 'share' }) response = view(request, pk=projectid) self.assertEqual(response.status_code, 204) self.assertTrue(mock_send_mail.called) self.assertTrue(role_class.user_has_role(alice_profile.user, self.project)) self.assertTrue(ReadOnlyRole.user_has_role(alice_profile.user, self.xform)) # Reset the mock called value to False mock_send_mail.called = False data = {'username': '******', 'role': ''} request = self.factory.post('/', data=data, **self.extra) response = view(request, pk=projectid) self.assertEqual(response.status_code, 400) self.assertEqual(response.get('Last-Modified'), None) self.assertFalse(mock_send_mail.called) role_class._remove_obj_permissions(alice_profile.user, self.project)
def test_reassign_role(self): self._publish_transportation_form() alice = self._create_user('alice', 'alice') self.assertFalse(ManagerRole.user_has_role(alice, self.xform)) ManagerRole.add(alice, self.xform) self.assertTrue(ManagerRole.user_has_role(alice, self.xform)) self.assertTrue( ManagerRole.has_role(perms_for(alice, self.xform), self.xform)) ReadOnlyRole.add(alice, self.xform) self.assertFalse(ManagerRole.user_has_role(alice, self.xform)) self.assertTrue(ReadOnlyRole.user_has_role(alice, self.xform)) self.assertFalse( ManagerRole.has_role(perms_for(alice, self.xform), self.xform)) self.assertTrue( ReadOnlyRole.has_role(perms_for(alice, self.xform), self.xform))
def test_reassign_role(self): self._publish_transportation_form() alice = self._create_user('alice', 'alice') self.assertFalse(ManagerRole.user_has_role(alice, self.xform)) ManagerRole.add(alice, self.xform) self.assertTrue(ManagerRole.user_has_role(alice, self.xform)) self.assertTrue(ManagerRole.has_role( perms_for(alice, self.xform), self.xform)) ReadOnlyRole.add(alice, self.xform) self.assertFalse(ManagerRole.user_has_role(alice, self.xform)) self.assertTrue(ReadOnlyRole.user_has_role(alice, self.xform)) self.assertFalse(ManagerRole.has_role( perms_for(alice, self.xform), self.xform)) self.assertTrue(ReadOnlyRole.has_role( perms_for(alice, self.xform), self.xform))
def test_get_xform_list_other_user_with_no_role(self): request = self.factory.get('/') response = self.view(request) alice_data = {'username': '******', 'email': '*****@*****.**'} alice_profile = self._create_user_profile(alice_data) self.assertFalse( ReadOnlyRole.user_has_role(alice_profile.user, self.xform)) auth = DigestAuth('alice', 'bobbob') request.META.update(auth(request.META, response)) response = self.view(request) self.assertEqual(response.status_code, 200) content = response.render().content self.assertNotIn(self.xform.id_string, content) self.assertEqual( content, '<?xml version="1.0" encoding="utf-8"?>\n<xforms ' 'xmlns="http://openrosa.org/xforms/xformsList"></xforms>') self.assertTrue(response.has_header('X-OpenRosa-Version')) self.assertTrue( response.has_header('X-OpenRosa-Accept-Content-Length')) self.assertTrue(response.has_header('Date')) self.assertEqual(response['Content-Type'], 'text/xml; charset=utf-8')