Example #1
0
 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'})
Example #2
0
    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)
Example #4
0
    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)
Example #8
0
 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)