def setUp(self): super(TestExportViewSet, self).setUp() self.factory = APIRequestFactory() self.formats = [ 'csv', 'csvzip', 'kml', 'osm', 'savzip', 'xls', 'xlsx', 'zip' ] self.view = ExportViewSet.as_view({'get': 'retrieve'})
def test_export_delete(self): """ Test deleting an export on ExportViewSet. """ markdown_xlsform = """ | survey | | | type | name | label | | | select one fruits | fruit | Fruit | | choices | | | list name | name | label | | | fruits | orange | Orange | | | fruits | mango | Mango | """ self._create_user_and_login() xform = self._publish_markdown(markdown_xlsform, self.user) bob = self.user export = Export.objects.create(xform=xform) export.save() view = ExportViewSet.as_view({'delete': 'destroy'}) # mary has no access hence cannot delete self._create_user_and_login(username='******', password='******') request = self.factory.delete('/export') force_authenticate(request, user=self.user) response = view(request, pk=export.pk) self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code) # bob has access hence can delete request = self.factory.delete('/export') force_authenticate(request, user=bob) response = view(request, pk=export.pk) self.assertEqual(status.HTTP_204_NO_CONTENT, response.status_code)
def test_export_list(self): self._create_user_and_login() view = ExportViewSet.as_view({'get': 'list'}) request = self.factory.get('/export') force_authenticate(request, user=self.user) response = view(request) self.assertFalse(bool(response.data)) self.assertEqual(status.HTTP_200_OK, response.status_code)
def test_export_list_with_meta_perms(self): """ Test export list for forms with meta permissions. """ with HTTMock(enketo_mock): self._publish_transportation_form() for survey in self.surveys: self._make_submission(os.path.join( settings.PROJECT_ROOT, 'apps', 'main', 'tests', 'fixtures', 'transportation', 'instances', survey, survey + '.xml'), forced_submission_time=parse_datetime( '2013-02-18 15:54:01Z')) alice = self._create_user('alice', 'alice', True) MetaData.xform_meta_permission(self.xform, data_value="editor|dataentry-minor") DataEntryMinorRole.add(alice, self.xform) for i in self.xform.instances.all()[:2]: i.user = alice i.save() view = XFormViewSet.as_view({'get': 'retrieve'}) alices_extra = { 'HTTP_AUTHORIZATION': 'Token %s' % alice.auth_token.key } # Alice creates an export with her own submissions request = self.factory.get('/', **alices_extra) response = view(request, pk=self.xform.pk, format='csv') self.assertEqual(response.status_code, 200) exports = Export.objects.filter(xform=self.xform) view = ExportViewSet.as_view({'get': 'list'}) request = self.factory.get('/export', data={'xform': self.xform.id}) force_authenticate(request, user=alice) response = view(request) self.assertEqual(len(exports), len(response.data)) # Mary should not have access to the export with Alice's # submissions. self._create_user_and_login(username='******', password='******') self.assertEqual(self.user.username, 'mary') # Mary should only view their own submissions. DataEntryMinorRole.add(self.user, self.xform) request = self.factory.get('/export', data={'xform': self.xform.id}) force_authenticate(request, user=self.user) response = view(request) self.assertFalse(bool(response.data), response.data) self.assertEqual(status.HTTP_200_OK, response.status_code)
def test_export_list_on_with_different_users(self): self._create_user_and_login() self._publish_transportation_form() temp_dir = settings.MEDIA_ROOT dummy_export_file = NamedTemporaryFile(suffix='.xlsx', dir=temp_dir) filename = os.path.basename(dummy_export_file.name) filedir = os.path.dirname(dummy_export_file.name) export = Export.objects.create(xform=self.xform, filename=filename, filedir=filedir) export.save() view = ExportViewSet.as_view({'get': 'list'}) request = self.factory.get('/export', data={'xform': self.xform.id}) self._create_user_and_login(username='******', password='******') force_authenticate(request, user=self.user) response = view(request) self.assertFalse(bool(response.data)) self.assertEqual(status.HTTP_200_OK, response.status_code)
def test_export_list_on_user(self): self._create_user_and_login() self._publish_transportation_form() temp_dir = settings.MEDIA_ROOT dummy_export_file = NamedTemporaryFile(suffix='.xlsx', dir=temp_dir) filename = os.path.basename(dummy_export_file.name) filedir = os.path.dirname(dummy_export_file.name) exports = [Export.objects.create(xform=self.xform, filename=filename, filedir=filedir)] exports[0].save() view = ExportViewSet.as_view({'get': 'list'}) request = self.factory.get('/export', data={'xform': self.xform.id}) force_authenticate(request, user=self.user) response = view(request) self.assertEqual(len(exports), len(response.data)) self.assertEqual(exports[0].id, response.data[0].get('id')) self.assertEqual(status.HTTP_200_OK, response.status_code)
def test_export_list_public(self): self._create_user_and_login() self._publish_transportation_form() self.xform.shared_data = True self.xform.save() temp_dir = settings.MEDIA_ROOT dummy_export_file = NamedTemporaryFile(suffix='.xlsx', dir=temp_dir) filename = os.path.basename(dummy_export_file.name) filedir = os.path.dirname(dummy_export_file.name) export = Export.objects.create(xform=self.xform, filename=filename, filedir=filedir) export.save() view = ExportViewSet.as_view({'get': 'list'}) request = self.factory.get('/export') response = view(request) self.assertTrue(bool(response.data)) self.assertEqual(status.HTTP_200_OK, response.status_code)
def test_export_list_public_form(self): """ Test ExportViewSet list endpoint for a single public form. """ user_mosh = self._create_user('mosh', 'mosh') self._publish_transportation_form() self.xform.shared_data = True self.xform.save() temp_dir = settings.MEDIA_ROOT dummy_export_file = NamedTemporaryFile(suffix='.xlsx', dir=temp_dir) filename = os.path.basename(dummy_export_file.name) filedir = os.path.dirname(dummy_export_file.name) export = Export.objects.create(xform=self.xform, filename=filename, filedir=filedir) export.save() view = ExportViewSet.as_view({'get': 'list'}) request = self.factory.get('/export', {'xform': self.xform.pk}) force_authenticate(request, user=user_mosh) response = view(request) self.assertTrue(bool(response.data)) self.assertEqual(status.HTTP_200_OK, response.status_code)
def test_export_list(self): view = ExportViewSet.as_view({'get': 'list'}) request = self.factory.get('/export') response = view(request) self.assertFalse(bool(response.data)) self.assertEqual(status.HTTP_200_OK, response.status_code)