Example #1
0
    def _create_read_type(self):
        factories.ReadType(
            read_type="ONA",
        )

        factories.ReadType(
            read_type="CSV",
        )

        factories.ReadType(
            read_type="Google Spreadsheet",
        )

        factories.ReadType(
            read_type="GSheet Import",
        )

        factories.ReadType(
            read_type="JSON",
        )

        factories.ReadType(
            read_type="CommCare",
        )

        factories.ReadType(
            read_type="OneDrive",
        )

        factories.ReadType(
            read_type="CustomForm",
        )
Example #2
0
    def test_silo_detail_import_done(self):
        # Create Silo, Read and CeleryTask
        read_type = factories.ReadType(read_type="CSV")
        read = factories.Read(
            owner=self.user, type=read_type,
            read_name="TEST SILO DONE", description="unittest"
        )
        silo = factories.Silo(owner=self.user, public=False)
        silo.reads.add(read)
        factories.CeleryTask(content_object=read,
                             task_status=CeleryTask.TASK_FINISHED)

        # Check view
        request = self.factory.get(self.silo_detail_url)
        request.user = self.user

        response = siloDetail(request, silo.pk)
        self.assertContains(
            response,
            '<a href="/show_read/{}" target="_blank">{}</a>'.format(
                read.id, read.read_name)
        )
        self.assertNotContains(
            response, '<span class="btn-sm btn-danger">Import Failed</span>')
        self.assertNotContains(
            response, '<span class="btn-sm btn-warning">Import running</span>')
        self.assertNotContains(
            response, '<h4 style="color:#ff3019">Import process failed</h4>')
        self.assertNotContains(response, '<h4>Import process running</h4>')
Example #3
0
    def test_celery_success(self):
        """
        Test if the celery task process_silo actually imports data
        :return: 
        """
        silo = factories.Silo(owner=self.user, public=False)

        read_type = factories.ReadType(read_type="CSV")
        upload_file = open('silo/tests/sample_data/test.csv', 'rb')
        read = factories.Read(owner=self.user, type=read_type, file_data=SimpleUploadedFile(upload_file.name, upload_file.read()))

        task = factories.CeleryTask(task_status=CeleryTask.TASK_CREATED, content_object=read)

        process_done = process_silo(silo.id, read.id)

        self.assertEqual(getSiloColumnNames(silo.id), ['First_Name', 'Last_Name', 'E-mail'])
        self.assertTrue(process_done)
Example #4
0
    def test_celery_failure(self):
        silo = factories.Silo(owner=self.user, public=False)

        read_type = factories.ReadType(read_type="CSV")
        upload_file = open('silo/tests/sample_data/test_broken.csv', 'rb')
        read = factories.Read(owner=self.user, type=read_type, file_data=SimpleUploadedFile(upload_file.name, upload_file.read()))
        task = factories.CeleryTask(content_object=read)

        process_silo(silo.id, read.id)

        ctask = CeleryTask.objects.get(
            object_id=read.id,
            content_type=ContentType.objects.get_for_model(Read)
        )

        self.assertEqual(ctask.task_id, task.task_id)
        self.assertEqual(ctask.task_status, CeleryTask.TASK_FAILED)
Example #5
0
    def test_upload_file(self):
        """
        Checks if uploadFile successfully creates a celery task and new silo
        for imported read

        uploadFile takes POST request with csv file
        - takes a Read
        - adds read to a silo
        - creates a CeleryTask
        - redirects to silo_detail
        :return:
        """
        read_type = factories.ReadType(read_type="CSV")
        upload_file = open('silo/tests/sample_data/test.csv', 'rb')
        read = factories.Read(
            owner=self.user, type=read_type,
            read_name="TEST UPLOADFILE",  description="unittest",
            file_data=SimpleUploadedFile(upload_file.name, upload_file.read())
        )
        self.assertEqual(Silo.objects.filter(reads=read.pk).count(), 0)
        params = {
            "read_id": read.pk,
            "new_silo": "TEST UPLOADFILE",
        }
        request = self.factory.post(self.upload_csv_url, data=params)
        request.user = self.user
        request._dont_enforce_csrf_checks = True
        response = uploadFile(request, read.pk)
        self.assertEqual(response.status_code, 302)
        self.assertIn("/silo_detail/", response.url)

        # assure new Silo was created
        new_silo = Silo.objects.get(reads=read.pk)
        self.assertEqual(new_silo.name, params["new_silo"])

        # assure CeleryTask was created
        ctask = CeleryTask.objects.get(
            object_id=read.pk,
            content_type=ContentType.objects.get_for_model(Read)
        )

        self.assertNotEqual(ctask.task_id, None)
        self.assertEqual(ctask.task_status, CeleryTask.TASK_CREATED)
Example #6
0
    def test_silo_detail_import_failed(self):
        # Create Silo, Read and CeleryTask
        read_type = factories.ReadType(read_type="CSV")
        read = factories.Read(
            owner=self.user, type=read_type,
            read_name="TEST SILO FAIL", description="unittest"
        )
        silo = factories.Silo(owner=self.user, public=False)
        silo.reads.add(read)
        task = factories.CeleryTask(content_object=read, task_status=CeleryTask.TASK_FAILED)

        # Check view
        request = self.factory.get(self.silo_detail_url)
        request.user = self.user

        response = siloDetail(request, silo.pk)
        self.assertContains(response, "<a href=\"/show_read/"+str(read.id)+"\" target=\"_blank\">"+read.read_name+"</a>")
        self.assertContains(response, "<span class=\"btn-sm btn-danger\">Import Failed</span>")
        self.assertContains(response, "<h4 style=\"color:#ff3019\">Import process failed</h4>")
Example #7
0
    def setUp(self):
        self.factory = APIRequestFactory()
        self.tola_user = factories.TolaUser()

        self.read = factories.Read(
            owner=self.tola_user.user,
            type=factories.ReadType(read_type='CustomForm'),
            read_name='Lennon Survey',
        )
        wflvl1 = factories.WorkflowLevel1(
            organization=self.tola_user.organization)
        self.silo = factories.Silo(
            name='Lennon Survey',
            workflowlevel1=[wflvl1],
            owner=self.tola_user.user,
            columns='[{"name": "name", "type": "text"},'
                    '{"name": "age", "type": "number"},'
                    '{"name": "city", "type": "text"}]',
            reads=[self.read],
            public=False
        )
Example #8
0
    def test_save_and_import_read_without_silo_id(self, mock_requests):
        data_res = {'detail': 'Success'}
        mock_requests.get.return_value = Mock(content=json.dumps(data_res))

        read = factories.Read(read_name='Read Test', owner=self.tola_user.user)
        silo = factories.Silo(owner=self.tola_user.user, reads=[read])
        factories.ThirdPartyTokens(user=self.tola_user.user, name='ONA')
        factories.ReadType(read_type='ONA')

        data = {
            'read_name': read.read_name,
            'description': silo.description,
            'silo_name': silo.name
        }

        request = self.factory.post('', data)
        request.user = self.tola_user.user
        response = views.saveAndImportRead(request)
        content = response.content

        self.assertEqual('Silo ID can only be an integer', content)
Example #9
0
    def test_save_and_import_read_without_data(self, mock_requests):
        mock_requests.get.return_value = Mock(content='[]')

        read = factories.Read(read_name='Read Test', owner=self.tola_user.user)
        silo = factories.Silo(owner=self.tola_user.user, reads=[read])
        factories.ThirdPartyTokens(user=self.tola_user.user, name='ONA')
        factories.ReadType(read_type='ONA')

        data = {
            'read_name': read.read_name,
            'description': silo.description,
            'silo_id': silo.id,
            'silo_name': silo.name
        }

        request = self.factory.post('', data)
        request.user = self.tola_user.user
        response = views.saveAndImportRead(request)
        content = response.content

        self.assertEqual('There is not data for the selected form, {}'.format(
            read.read_name), content)
Example #10
0
    def test_save_and_import_read(self, mock_requests, mock_savedatasilo):
        data_res = {'detail': 'Success'}
        mock_savedatasilo.return_value = Mock()
        mock_requests.get.return_value = Mock(content=json.dumps(data_res))

        read = factories.Read(read_name='Read Test', owner=self.tola_user.user)
        silo = factories.Silo(owner=self.tola_user.user, reads=[read])
        factories.ThirdPartyTokens(user=self.tola_user.user, name='ONA')
        factories.ReadType(read_type='ONA')

        data = {
            'read_name': read.read_name,
            'description': silo.description,
            'silo_id': silo.id,
            'silo_name': silo.name
        }

        request = self.factory.post('', data)
        request.user = self.tola_user.user
        response = views.saveAndImportRead(request)
        template_content = response.content

        match = reverse('siloDetail', args=[silo.pk])
        self.assertIn(match, template_content)
Example #11
0
 def setUp(self):
     factories.ReadType(read_type='CustomForm')
     self.tola_user = factories.TolaUser()
     self.factory = APIRequestFactory()
Example #12
0
 def setUp(self):
     factories.ReadType(read_type='CustomForm')
     self.org = factories.Organization()
     self.tola_user = factories.TolaUser(organization=self.org)
     self.factory = APIRequestFactory()
Example #13
0
 def setUp(self):
     self.factory = RequestFactory()
     self.user = factories.User()
     self.user2 = factories.User(first_name='John', last_name='Lennon')
     self.read_type = factories.ReadType(read_type="CommCare")