Пример #1
0
    def get_view(self, request):
        params = self.get_params(request)
        view = params.get('view')

        # Explicit request to not use a view
        if view != 'null':
            kwargs = {
                'archived': False,
            }
            if hasattr(request, 'user') and request.user.is_authenticated():
                kwargs['user'] = request.user
            else:
                if request.session.session_key is None:
                    return DataView()
                kwargs['session_key'] = request.session.session_key

            # Assume it is a primary key and fallback to the sesssion
            try:
                kwargs['pk'] = int(view)
            except (ValueError, TypeError):
                kwargs['session'] = True

            try:
                return DataView.objects.get(**kwargs)
            except DataView.DoesNotExist:
                pass

        return DataView()
Пример #2
0
    def test_put(self):
        # Add a view so we can try to update it later
        view = DataView(user=self.user, name='Initial Name')
        view.save()
        response = self.client.get('/api/views/1/',
            HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertTrue(response.content)

        # Attempt to update the name via a PUT request
        response = self.client.put('/api/views/1/',
            data=u'{"name":"New Name"}', content_type='application/json')
        self.assertEqual(response.status_code, codes.ok)

        # Make sure our changes from the PUT request are persisted
        response = self.client.get('/api/views/1/',
            HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertTrue(response.content)
        self.assertEqual(json.loads(response.content)['name'], 'New Name')

        # Make a PUT request with invalid JSON and make sure we get an
        # unprocessable status code back.
        response = self.client.put('/api/views/1/',
            data=u'{"json":"]]]"}', content_type='application/json')
        self.assertEqual(response.status_code, codes.unprocessable_entity)
Пример #3
0
    def test_sort_related(self):
        "Sorts on a reverse foreign key property."
        view = DataView(json=[
            {
                'concept': self.first_name.pk
            },
            {
                'concept': self.last_name.pk
            },
            {
                'concept': self.project_name.pk,
                'sort': 'asc',
                'visible': False
            },
        ])

        queryset = view.apply()

        exporter = export.BaseExporter(view)
        exporter.params.insert(0, (RawFormatter(keys=['pk']), 1))
        exporter.row_length += 1

        self.assertEqual(list(exporter.write(queryset.raw())),
                         [(3, u'Erick', u'Smith'), (4, u'Aaron', u'Harris'),
                          (5, u'Zac', u'Cook'), (6, u'Mel', u'Brooks'),
                          (1, u'Eric', u'Smith'), (2, u'Erin', u'Jones')])
Пример #4
0
    def test_get(self):
        view = DataView(user=self.user)
        view.save()

        view.name = "Fake name"
        view.save()

        target_revision_id = Revision.objects.latest().pk

        view.description = "Terribly vague description"
        view.save()

        url = '/api/views/{0}/revisions/{1}/'.format(view.id,
                                                     target_revision_id)

        response = self.client.get(url, HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertTrue(response.content)

        revision = json.loads(response.content)
        self.assertEqual(
            revision['changes'],
            {'name': {
                'old_value': None,
                'new_value': 'Fake name'
            }})
        self.assertFalse("description" in revision['changes'])
Пример #5
0
    def test_embedded(self):
        view = DataView(user=self.user,
                        name='My View',
                        description='This is not a descriptive description')
        view.save()

        # Retrieve the revisions the normal way and make sure the object
        # itself is not included.
        response = self.client.get('/api/views/revisions/',
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 1)
        no_embed_revision = json.loads(response.content)[0]
        self.assertFalse('object' in no_embed_revision)

        # Now retrieve the revisiosn with the embed flag enabled and verify
        # that the object is now included with the revision.
        response = self.client.get('/api/views/revisions/', {'embed': True},
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 1)
        embed_revision = json.loads(response.content)[0]
        self.assertTrue('object' in embed_revision)

        # Make sure the included object matches the copy of the object directly
        # from the object resource itself.
        response = self.client.get('/api/views/{0}/'.format(view.pk),
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        revision_view = json.loads(response.content)

        self.assertEqual(revision_view, embed_revision['object'])
Пример #6
0
    def test_put(self):
        # Add a view so we can try to update it later
        view = DataView(user=self.user, name='Initial Name')
        view.save()
        response = self.client.get('/api/views/{0}/'.format(view.pk),
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertTrue(response.content)

        # Attempt to update the name via a PUT request
        response = self.client.put('/api/views/{0}/'.format(view.pk),
                                   data=u'{"name":"New Name"}',
                                   content_type='application/json')
        self.assertEqual(response.status_code, codes.ok)

        # Make sure our changes from the PUT request are persisted
        response = self.client.get('/api/views/{0}/'.format(view.pk),
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertTrue(response.content)
        self.assertEqual(json.loads(response.content)['name'], 'New Name')

        # Make a PUT request with invalid JSON and make sure we get an
        # unprocessable status code back.
        response = self.client.put('/api/views/{0}/'.format(view.pk),
                                   data=u'{"json":"]]]"}',
                                   content_type='application/json')
        self.assertEqual(response.status_code, codes.unprocessable_entity)
Пример #7
0
    def test_sort_related(self):
        "Sorts on a reverse foreign key property."
        view = DataView(
            json=[
                {"concept": self.first_name.pk},
                {"concept": self.last_name.pk},
                {"concept": self.project_name.pk, "sort": "asc", "visible": False},
            ]
        )

        queryset = view.apply()

        exporter = export.BaseExporter(view)
        exporter.params.insert(0, (RawFormatter(keys=["pk"]), 1))
        exporter.row_length += 1

        self.assertEqual(
            list(exporter.write(queryset.raw())),
            [
                (3, u"Erick", u"Smith"),
                (4, u"Aaron", u"Harris"),
                (5, u"Zac", u"Cook"),
                (6, u"Mel", u"Brooks"),
                (1, u"Eric", u"Smith"),
                (2, u"Erin", u"Jones"),
            ],
        )
Пример #8
0
    def test_embedded(self):
        view = DataView(user=self.user, name='My View',
                        description='This is not a descriptive description')
        view.save()

        # Retrieve the revisions the normal way and make sure the object
        # itself is not included.
        response = self.client.get('/api/views/revisions/',
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 1)
        no_embed_revision = json.loads(response.content)[0]
        self.assertFalse('object' in no_embed_revision)

        # Now retrieve the revisiosn with the embed flag enabled and verify
        # that the object is now included with the revision.
        response = self.client.get('/api/views/revisions/', {'embed': True},
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 1)
        embed_revision = json.loads(response.content)[0]
        self.assertTrue('object' in embed_revision)

        # Make sure the included object matches the copy of the object directly
        # from the object resource itself.
        response = self.client.get('/api/views/{0}/'.format(view.pk),
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        revision_view = json.loads(response.content)

        self.assertEqual(revision_view, embed_revision['object'])
Пример #9
0
    def setUp(self):
        management.call_command("avocado", "init", "tests", quiet=True)
        salary_concept = DataField.objects.get(field_name="salary").concepts.all()[0]

        view = DataView(json={"ordering": [[salary_concept.pk, "desc"]]})
        self.query = view.apply(tree=models.Employee).raw()
        # Ick..
        self.exporter = export.BaseExporter(view)
        self.exporter.params.insert(0, (RawFormatter(keys=["pk"]), 1))
        self.exporter.row_length += 1
Пример #10
0
    def test_delete(self):
        view = DataView(user=self.user, name='View 1')
        view.save()
        view = DataView(user=self.user, name='View 2')
        view.save()
        view = DataView(user=self.user, name='View 3', session=True)
        view.save()

        response = self.client.get('/api/views/',
            HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 3)

        response = self.client.delete('/api/views/1/')
        self.assertEqual(response.status_code, codes.no_content)

        response = self.client.get('/api/views/',
            HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 2)

        response = self.client.delete('/api/views/3/')
        self.assertEqual(response.status_code, codes.bad_request)

        response = self.client.get('/api/views/',
            HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 2)
Пример #11
0
    def test_get(self):
        view = DataView(user=self.user)
        view.save()

        view.name = "Fake name"
        view.save()

        target_revision_id = Revision.objects.all().count()

        view.description = "Terribly vague description"
        view.save()

        url = '/api/views/{0}/revisions/{1}/'.format(view.id, target_revision_id)

        response = self.client.get(url,
            HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertTrue(response.content)

        revision = json.loads(response.content)
        self.assertEqual(revision['changes'], {
            'name': {
                'old_value': None,
                'new_value': 'Fake name'
             }
        })
        self.assertFalse("description" in revision['changes'])
Пример #12
0
    def setUp(self):
        management.call_command('avocado', 'init', 'tests', quiet=True)
        salary_concept = DataField.objects.get(
            field_name='salary').concepts.all()[0]

        view = DataView(json={'ordering': [[salary_concept.pk, 'desc']]})
        self.query = view.apply(tree=models.Employee).raw()
        # Ick..
        self.exporter = export.BaseExporter(view)
        self.exporter.params.insert(0, (RawFormatter(keys=['pk']), 1))
        self.exporter.row_length += 1
Пример #13
0
    def test_get(self):
        view = DataView(user=self.user)
        view.save()

        response = self.client.get('/api/views/revisions/',
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 1)

        response = self.client.get('/api/viewss/999/',
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.not_found)
Пример #14
0
    def test_no_object_model(self):
        # This will trigger a revision to be created
        view = DataView(user=self.user)
        view.save()

        # Make sure we have a revision for this user
        self.assertEqual(Revision.objects.filter(user=self.user).count(), 1)

        response = self.client.get('/api/test/no_model/',
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 0)
Пример #15
0
    def test_no_object_model(self):
        # This will trigger a revision to be created
        view = DataView(user=self.user)
        view.save()

        # Make sure we have a revision for this user
        self.assertEqual(Revision.objects.filter(user=self.user).count(), 1)

        response = self.client.get('/api/test/no_model/',
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 0)
Пример #16
0
    def test_get(self):
        view = DataView(user=self.user)
        view.save()

        response = self.client.get('/api/views/revisions/',
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 1)

        response = self.client.get('/api/viewss/999/',
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.not_found)
Пример #17
0
    def test_bad_urls(self):
        view = DataView(user=self.user)
        view.save()

        target_revision_id = Revision.objects.all().count()

        url = '/api/test/revisions/{0}/'.format(target_revision_id)
        response = self.client.get(url, HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.not_found)

        url = '/api/test/{0}/revisions/'.format(view.id)
        response = self.client.get(url, HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.not_found)
Пример #18
0
    def test_bad_urls(self):
        view = DataView(user=self.user)
        view.save()

        target_revision_id = Revision.objects.all().count()

        url = '/api/test/revisions/{0}/'.format(target_revision_id)
        response = self.client.get(url, HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.not_found)

        url = '/api/test/{0}/revisions/'.format(view.id)
        response = self.client.get(url, HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.not_found)
Пример #19
0
    def test_custom_template(self):
        view = DataView(user=self.user)
        view.save()

        response = self.client.get('/api/test/template/',
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 1)

        revision = json.loads(response.content)[0]
        self.assertEqual(revision['id'], 1)
        self.assertEqual(revision['object_id'], 1)
        self.assertTrue(response['Link-Template'])
        self.assertFalse('content_type' in revision)
Пример #20
0
    def test_custom_template(self):
        view = DataView(user=self.user)
        view.save()

        response = self.client.get('/api/test/template/',
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 1)

        revision = json.loads(response.content)[0]
        self.assertEqual(revision['id'], 1)
        self.assertEqual(revision['object_id'], 1)
        self.assertTrue('_links' in revision)
        self.assertFalse('content_type' in revision)
Пример #21
0
    def test_dataview_order_by(self):
        f = DataField(app_name='lexicon', model_name='month', field_name='id')
        f.save()

        c = DataConcept()
        c.save()

        cf = DataConceptField(field=f, concept=c)
        cf.save()

        v = DataView({'ordering': [c.pk]})

        qs = Month.objects.filter(label__startswith='J').values('id')
        self.assertEqual(str(v.apply(qs).query), 'SELECT "lexicon_month"."id" FROM "lexicon_month" WHERE "lexicon_month"."label" LIKE J% ESCAPE \'\\\'  ORDER BY "lexicon_month"."order" ASC')
Пример #22
0
    def test_session(self):
        # This session mumbo-jumbo is from:
        #       https://code.djangoproject.com/ticket/10899
        self.client = Client()
        from django.conf import settings
        from django.utils.importlib import import_module
        engine = import_module(settings.SESSION_ENGINE)
        store = engine.SessionStore()
        store.save()  # we need to make load() work, or the cookie is worthless
        session_key = store.session_key
        self.client.cookies[settings.SESSION_COOKIE_NAME] = session_key

        view = DataView(session_key=self.client.session.session_key)
        view.save()

        view2 = DataView(session_key='XYZ')
        view2.save()

        self.assertEqual(
            Revision.objects.filter(content_type=ContentType.objects.
                                    get_for_model(DataView)).count(), 2)

        response = self.client.get('/api/views/revisions/',
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 1)
Пример #23
0
    def test_get(self):
        view = DataView(user=self.user)
        view.save()

        view.name = "Fake name"
        view.save()

        view.description = "Terribly vague description"
        view.save()

        url = '/api/views/{0}/revisions/'.format(view.id)

        response = self.client.get(url, HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 3)
Пример #24
0
    def test_get(self):
        view = DataView(user=self.user)
        view.save()
        response = self.client.get('/api/views/1/',
            HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertTrue(response.content)
        self.assertLess(view.accessed,
                DataView.objects.get(pk=view.pk).accessed)

        # Make sure that accessing a non-existent view returns a 404 error
        # indicating that it wasn't found.
        response = self.client.get('/api/views/999/',
            HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.not_found)
Пример #25
0
    def test_get(self):
        view = DataView(user=self.user)
        view.save()
        response = self.client.get('/api/views/{0}/'.format(view.pk),
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertTrue(response.content)
        self.assertLess(view.accessed,
                        DataView.objects.get(pk=view.pk).accessed)

        # Make sure that accessing a non-existent view returns a 404 error
        # indicating that it wasn't found.
        response = self.client.get('/api/views/999/',
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.not_found)
Пример #26
0
    def test_sort_related(self):
        "Sorts on a reverse foreign key property."
        view = DataView(json=[
            {
                'concept': self.first_name.pk
            },
            {
                'concept': self.last_name.pk
            },
            {
                'concept': self.project_name.pk,
                'sort': 'asc',
                'visible': False
            },
        ])

        proc = QueryProcessor(view=view)
        queryset = proc.get_queryset()
        exporter = proc.get_exporter(export.BaseExporter)

        iterable = proc.get_iterable(queryset=queryset)
        reader = exporter.manual_read(iterable)

        self.assertEqual(list(exporter.write(reader)),
                         [(3, u'Erick', u'Smith'), (4, u'Aaron', u'Harris'),
                          (5, u'Zac', u'Cook'), (6, u'Mel', u'Brooks'),
                          (1, u'Eric', u'Smith'), (2, u'Erin', u'Jones')])
Пример #27
0
 def test_multiple_views(self):
     dv1 = DataView(session=True, user=self.user)
     dv1.save()
     dv2 = DataView(session=True, user=self.user)
     dv2.save()
     response = self.client.get('/api/data/preview/',
                                HTTP_ACCEPT='application/json')
     self.assertTrue(response.content)
     self.assertEqual(response.status_code, codes.ok)
Пример #28
0
    def test_dataview_order_by(self):
        f = DataField(app_name='tests', model_name='month', field_name='id')
        f.save()

        c = DataConcept()
        c.save()

        cf = DataConceptField(field=f, concept=c)
        cf.save()

        v = DataView({'ordering': [[c.pk, 'asc']]})

        qs = Month.objects.filter(label__startswith='J').values('id')
        self.assertEqual(
            unicode(v.apply(qs).query),
            'SELECT "tests_month"."id" FROM "tests_month" WHERE "tests_month"."label" LIKE J% ESCAPE \'\\\'  ORDER BY "tests_month"."order" ASC'
        )
Пример #29
0
    def test_no_identifier(self):
        view = DataView()
        view.save()

        # Make sure the revision was created but has nothing useful in
        # either of the "owner" properties.
        self.assertEqual(Revision.objects.filter(
            content_type=ContentType.objects.get_for_model(DataView),
            user=None, session_key=None).count(), 1)

        # We want this request to come from an anonymous user
        self.client.logout()

        response = self.client.get('/api/views/revisions/',
            HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 0)
Пример #30
0
    def setUp(self):
        management.call_command('avocado', 'init', 'tests', quiet=True)

        # The init command creates concepts named after the fields
        # by default.
        c = DataConcept.objects.get(name='First Name')

        self.v = DataView(json=[{'concept': c.pk}])
Пример #31
0
    def test_clean(self):
        # Save a default template
        view = DataView(template=True, default=True)
        view.save()

        # Save new template (not default)
        view2 = DataView(template=True)
        view2.save()

        # Try changing it to default
        view2.default = True
        self.assertRaises(ValidationError, view2.save)

        view.save()
Пример #32
0
    def test_get(self):
        view = DataView(user=self.user)
        view.save()

        view.name = "Fake name"
        view.save()

        view.description = "Terribly vague description"
        view.save()

        url = '/api/views/{0}/revisions/'.format(view.id)

        response = self.client.get(url, HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 3)
Пример #33
0
 def test_export_type(self):
     context = DataContext()
     view = DataView()
     export_type = 'json'
     query_options = {
         'export_type': export_type,
     }
     result = utils.get_result_rows(context, view, query_options)
     self.assertEqual(len(list(result['rows'])), Employee.objects.count())
     self.assertEqual(result['export_type'], export_type)
Пример #34
0
    def test_no_identifier(self):
        view = DataView()
        view.save()

        # Make sure the revision was created but has nothing useful in
        # either of the "owner" properties.
        self.assertEqual(
            Revision.objects.filter(
                content_type=ContentType.objects.get_for_model(DataView),
                user=None,
                session_key=None).count(), 1)

        # We want this request to come from an anonymous user
        self.client.logout()

        response = self.client.get('/api/views/revisions/',
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 0)
Пример #35
0
 def test_limit(self):
     context = DataContext()
     view = DataView()
     limit = 2
     query_options = {
         'limit': limit,
         'page': 1,
     }
     result = utils.get_result_rows(context, view, query_options)
     self.assertEqual(len(list(result['rows'])), limit)
     self.assertEqual(result['limit'], limit)
Пример #36
0
 def test_processor(self):
     context = DataContext()
     view = DataView()
     processor = 'manager'
     query_options = {
         'processor': processor,
     }
     result = utils.get_result_rows(context, view, query_options)
     self.assertEqual(len(list(result['rows'])),
                      Employee.objects.filter(is_manager=True).count())
     self.assertTrue(isinstance(result['processor'], ManagerQueryProcessor))
Пример #37
0
    def test_view(self):
        salary_field = DataField.objects.get_by_natural_key('exporting', 'title', 'salary')
        salary_concept = DataConcept()
        salary_concept.save()
        DataConceptField(concept=salary_concept, field=salary_field, order=1).save()

        view = DataView(json={'ordering': [[salary_concept.pk, 'desc']]})
        query = view.apply(tree=models.Employee).raw()

        # Ick..
        exporter = export.CSVExporter(view)
        exporter.params.insert(0, (RawFormatter(keys=['pk']), 1))
        exporter.row_length += 1

        buff = exporter.write(query)
        buff.seek(0)

        lines = buff.read().splitlines()
        # Skip the header
        self.assertEqual([int(x) for x in lines[1:]], [2, 4, 6, 1, 3, 5])
Пример #38
0
    def test_get_rows(self):
        context = DataContext()
        view = DataView()

        # Unless we tell the function to evaluate the rows, it should return
        # rows as a generator so we need to exclicitly evaluate it here.
        result = utils.get_result_rows(context, view, {})
        self.assertEqual(len(list(result['rows'])), Employee.objects.count())

        # Now, have the method evaluate the rows.
        result = utils.get_result_rows(context, view, {}, evaluate_rows=True)
        self.assertEqual(len(result['rows']), Employee.objects.count())
Пример #39
0
    def test_get_order_only(self):
        field = DataField.objects.get(field_name='salary')
        concept = field.concepts.all()[0]

        context = DataContext()
        view = DataView(json=[{
            'concept': concept.pk,
            'visible': False,
            'sort': 'desc',
        }])
        result = utils.get_result_rows(context, view, {})
        self.assertEqual(len(list(result['rows'])), Employee.objects.count())
Пример #40
0
    def test_session(self):
        # This session mumbo-jumbo is from:
        #       https://code.djangoproject.com/ticket/10899
        self.client = Client()
        from django.conf import settings
        from django.utils.importlib import import_module
        engine = import_module(settings.SESSION_ENGINE)
        store = engine.SessionStore()
        store.save()  # we need to make load() work, or the cookie is worthless
        session_key = store.session_key
        self.client.cookies[settings.SESSION_COOKIE_NAME] = session_key

        view = DataView(session_key=self.client.session.session_key)
        view.save()

        view2 = DataView(session_key='XYZ')
        view2.save()

        self.assertEqual(Revision.objects.filter(
            content_type=ContentType.objects.get_for_model(DataView)).count(), 2)

        response = self.client.get('/api/views/revisions/',
            HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 1)
Пример #41
0
    def test_non_existent_revision(self):
        view = DataView(user=self.user)
        view.save()

        view.name = "Fake name"
        view.save()

        url = '/api/views/{0}/revisions/{1}/'.format(view.id, 123456789)

        response = self.client.get(url, HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.not_found)
Пример #42
0
    def test_invalid_job_result(self):
        context = DataContext()
        view = DataView()
        query_options = {
            'page': 0,
        }

        job_id = utils.async_get_result_rows(context, view, query_options)
        self.assertTrue(async_utils.get_job_count(), 1)
        async_utils.run_jobs()
        time.sleep(1)
        self.assertEqual(async_utils.get_job_result(job_id), None)
        self.assertEqual(async_utils.get_job(job_id).status, JobStatus.FAILED)
Пример #43
0
 def test_multiple_context_and_view(self):
     # Create two Contexts and views, an illegal action that
     # Our base resource should handle
     cxt3 = DataContext(session=True, user=self.user)
     cxt3.save()
     cxt4 = DataContext(user=self.user, session=True)
     cxt4.save()
     dv3 = DataView(session=True, user=self.user)
     dv3.save()
     dv4 = DataView(session=True, user=self.user)
     dv4.save()
     response = self.client.get('/api/data/preview/',
                                HTTP_ACCEPT='application/json')
     self.assertTrue(response.content)
     self.assertEqual(response.status_code, codes.ok)
Пример #44
0
    def test_user(self):
        view = DataView(user=self.user)
        view.save()

        user2 = User.objects.create_user(username='******', password='******')
        view2 = DataView(user=user2)
        view2.save()

        self.assertEqual(
            Revision.objects.filter(content_type=ContentType.objects.
                                    get_for_model(DataView)).count(), 2)

        response = self.client.get('/api/views/revisions/',
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 1)
Пример #45
0
    def test_embedded(self):
        view = DataView(user=self.user,
                        name='My View',
                        description='This is not a descriptive description')
        view.save()

        # Retrieve the revisions the normal way and make sure the object
        # itself is not included.
        response = self.client.get('/api/views/revisions/',
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 1)
        no_embed_revision = json.loads(response.content)[0]
        self.assertFalse('object' in no_embed_revision)

        # Now retrieve the revisiosn with the embed flag enabled and verify
        # that the object is now included with the revision.
        response = self.client.get('/api/views/revisions/', {'embed': True},
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 1)
        embed_revision = json.loads(response.content)[0]
        self.assertTrue('object' in embed_revision)

        # Make sure the included object matches the copy of the object directly
        # from the object resource itself.
        response = self.client.get('/api/views/1/',
                                   HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        revision_view = json.loads(response.content)

        # We can't just compare the objects directly to one another because the
        # object returned from the call to /api/views/1/ will have '_links'
        # while the embeded object will not because the link location is
        # different for Revisions.
        for key in embed_revision['object']:
            self.assertEqual(revision_view[key], embed_revision['object'][key])
Пример #46
0
 def test_multiple_views(self):
     dv1 = DataView(session=True, user=self.user)
     dv1.save()
     dv2 = DataView(session=True, user=self.user)
     dv2.save()
     response = self.client.get('/api/data/preview/',
                                HTTP_ACCEPT='application/json')
     self.assertTrue(response.content)
     self.assertEqual(response.status_code, codes.ok)
Пример #47
0
    def test_embedded(self):
        view = DataView(user=self.user, name='My View',
            description='This is not a descriptive description')
        view.save()

        # Retrieve the revisions the normal way and make sure the object
        # itself is not included.
        response = self.client.get('/api/views/revisions/',
            HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 1)
        no_embed_revision = json.loads(response.content)[0]
        self.assertFalse('object' in no_embed_revision)

        # Now retrieve the revisiosn with the embed flag enabled and verify
        # that the object is now included with the revision.
        response = self.client.get('/api/views/revisions/', {'embed': True},
            HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 1)
        embed_revision = json.loads(response.content)[0]
        self.assertTrue('object' in embed_revision)

        # Make sure the included object matches the copy of the object directly
        # from the object resource itself.
        response = self.client.get('/api/views/1/',
            HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        revision_view = json.loads(response.content)

        # We can't just compare the objects directly to one another because the
        # object returned from the call to /api/views/1/ will have '_links'
        # while the embeded object will not because the link location is
        # different for Revisions.
        for key in embed_revision['object']:
            self.assertEqual(revision_view[key], embed_revision['object'][key])
Пример #48
0
    def test_pages(self):
        context = DataContext()
        view = DataView()
        query_options = {
            'page': 1,
            'stop_page': 10,
        }
        result = utils.get_result_rows(context, view, query_options)
        self.assertEqual(len(list(result['rows'])), Employee.objects.count())

        query_options = {
            'page': 1,
            'stop_page': 1,
        }
        result = utils.get_result_rows(context, view, query_options)
        self.assertEqual(len(list(result['rows'])), Employee.objects.count())
Пример #49
0
    def test_non_existent_object(self):
        view = DataView(user=self.user)
        view.save()

        view.name = "Fake name"
        view.save()

        target_revision_id = Revision.objects.latest().pk

        url = '/api/views/{0}/revisions/{1}/'.format(123456789,
                                                     target_revision_id)

        response = self.client.get(url, HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.not_found)
Пример #50
0
    def test_non_existent_revision(self):
        view = DataView(user=self.user)
        view.save()

        view.name = "Fake name"
        view.save()

        url = '/api/views/{0}/revisions/{1}/'.format(view.id, 123456789)

        response = self.client.get(url, HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.not_found)
Пример #51
0
    def test_non_existent_object(self):
        view = DataView(user=self.user)
        view.save()

        view.name = "Fake name"
        view.save()

        target_revision_id = Revision.objects.all().count()

        url = '/api/views/{0}/revisions/{1}/'.format(123456789, target_revision_id)

        response = self.client.get(url,
            HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.not_found)
Пример #52
0
 def test_multiple_context_and_view(self):
     # Create two Contexts and views, an illegal action that
     # Our base resource should handle
     cxt3 = DataContext(session=True, user=self.user)
     cxt3.save()
     cxt4 = DataContext(user=self.user, session=True)
     cxt4.save()
     dv3 = DataView(session=True, user=self.user)
     dv3.save()
     dv4 = DataView(session=True, user=self.user)
     dv4.save()
     response = self.client.get('/api/data/preview/',
                                HTTP_ACCEPT='application/json')
     self.assertTrue(response.content)
     self.assertEqual(response.status_code, codes.ok)
Пример #53
0
    def test_user(self):
        view = DataView(user=self.user)
        view.save()

        user2 = User.objects.create_user(username='******', password='******')
        view2 = DataView(user=user2)
        view2.save()

        self.assertEqual(Revision.objects.filter(
            content_type=ContentType.objects.get_for_model(DataView)).count(), 2)

        response = self.client.get('/api/views/revisions/',
            HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertEqual(len(json.loads(response.content)), 1)
Пример #54
0
    def test_get_session(self):
        view = DataView(user=self.user, name='Session View', session=True)
        view.save()

        response = self.client.get('/api/views/session/',
            HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.ok)
        self.assertTrue(response.content)

        view.session = False
        view.save()

        response = self.client.get('/api/views/session/',
            HTTP_ACCEPT='application/json')
        self.assertEqual(response.status_code, codes.not_found)
Пример #55
0
 def test_get_all_default(self):
     view = DataView(template=True, default=True, json=[])
     view.save()
     response = self.client.get('/api/views/',
         HTTP_ACCEPT='application/json')
     self.assertEqual(len(json.loads(response.content)), 1)