Esempio n. 1
0
    def test_facet_search(self):
        self.logout()

        with reversion.create_revision():
            dec = models.DataElementConcept.objects.create(
                name="Pokemon-CP",
                definition="a Pokemons combat power"
            )
            de = models.DataElement.objects.create(
                name="Pokemon-CP, Go",
                definition="a Pokemons combat power as recorded in the Pokemon-Go scale",
                dataElementConcept=dec
            )

        self.login_superuser()

        from aristotle_mdr.forms.search import PermissionSearchQuerySet
        response = self.client.get(reverse('aristotle:search')+"?q=pokemon")
        
        objs = response.context['page'].object_list
        self.assertDelayedEqual(len(objs),2)
        extra_facets = response.context['form'].extra_facet_fields
        self.assertTrue(len(extra_facets) == 1)
        self.assertTrue(extra_facets[0][0] == 'data_element_concept')

        psqs = PermissionSearchQuerySet()
        psqs = psqs.auto_query('pokemon').apply_permission_checks(self.su)

        self.assertDelayedEqual(len(psqs),2)

        response = self.client.get(reverse('aristotle:search')+"?q=pokemon&f=data_element_concept::%s"%dec.pk)

        objs = response.context['page'].object_list
        self.assertDelayedEqual(len(objs),1)
        self.assertTrue(objs[0].object.pk,de.pk)
Esempio n. 2
0
    def test_self_publish_queryset_anon(self):
        self.logout()
        response = self.client.get(self.item.get_absolute_url())
        self.assertTrue(response.status_code == 302)

        self.item = ObjectClass.objects.get(pk=self.item.pk)
        self.assertFalse(self.item._is_public)

        psqs = PermissionSearchQuerySet()
        psqs = psqs.auto_query("published").apply_permission_checks()

        self.assertEqual(len(psqs), 0)

        pub.PublicationRecord.objects.create(
            user=self.submitting_user, concept=self.item, visibility=pub.PublicationRecord.VISIBILITY.public
        )

        response = self.client.get(self.item.get_absolute_url())
        self.assertTrue(response.status_code == 200)

        self.item = ObjectClass.objects.get(pk=self.item.pk)
        self.assertTrue(self.item._is_public)

        psqs = PermissionSearchQuerySet()
        psqs = psqs.auto_query("published").apply_permission_checks()
        self.assertEqual(len(psqs), 1)
Esempio n. 3
0
    def list(self, request):
        if not self.request.query_params.keys():
            return Response({'search_options': 'q model state ra'.split()})

        items = PermissionSearchQuerySet().auto_query(
            self.request.query_params['q'])
        if self.request.query_params.get('models') is not None:
            search_models = []
            models = self.request.query_params.get('models')
            if type(models) != type([]):
                models = [models]
            for mod in models:
                # print(mod)
                if len(mod.split('.', 1)) == 2:
                    app_label, model = mod.split('.', 1)
                    i = ContentType.objects.get(app_label=app_label,
                                                model=model)
                else:
                    i = ContentType.objects.get(model=mod)
                search_models.append(i.model_class())
            items = items.models(*search_models)
        items = items.apply_permission_checks(user=request.user)

        items = items[:10]
        serializer = ConceptSearchSerializer(items,
                                             request=self.request,
                                             many=True)
        return Response(serializer.data)
    def test_facet_search(self):
        self.logout()

        with reversion.create_revision():
            dec = models.DataElementConcept.objects.create(
                name="Pokemon-CP", definition="a Pokemons combat power")
            de = models.DataElement.objects.create(
                name="Pokemon-CP, Go",
                definition=
                "a Pokemons combat power as recorded in the Pokemon-Go scale",
                dataElementConcept=dec)

        self.login_superuser()

        from aristotle_mdr.forms.search import PermissionSearchQuerySet
        response = self.client.get(reverse('aristotle:search') + "?q=pokemon")

        objs = response.context['page'].object_list
        self.assertDelayedEqual(len(objs), 2)
        extra_facets = response.context['form'].extra_facet_fields
        self.assertTrue(len(extra_facets) == 1)
        self.assertTrue(extra_facets[0][0] == 'data_element_concept')

        psqs = PermissionSearchQuerySet()
        psqs = psqs.auto_query('pokemon').apply_permission_checks(self.su)

        self.assertDelayedEqual(len(psqs), 2)

        response = self.client.get(
            reverse('aristotle:search') +
            "?q=pokemon&f=data_element_concept::%s" % dec.pk)

        objs = response.context['page'].object_list
        self.assertDelayedEqual(len(objs), 1)
        self.assertTrue(objs[0].object.pk, de.pk)
    def test_values_in_value_domain_search(self):
        # For bug #676
        from aristotle_mdr.forms.search import PermissionSearchQuerySet
        PSQS = PermissionSearchQuerySet()
        psqs = PSQS.auto_query('flight').apply_permission_checks(self.su)
        self.assertEqual(len(psqs),0)
        psqs = PSQS.auto_query('mutations').apply_permission_checks(self.su)
        self.assertEqual(len(psqs),0)
        psqs = PSQS.auto_query('FLT').apply_permission_checks(self.su)
        self.assertEqual(len(psqs),0)

        # with reversion.create_revision():
        vd = models.ValueDomain.objects.create(
                name="Mutation",
                definition="Coded list of mutations",
            )
        for i, data in enumerate([("FLT", 'flight'), ("HEAL", 'healing'), ("INVIS", 'invisiblilty')]):
            code, power = data
            models.PermissibleValue.objects.create(
                value=code, meaning=power, order=i,
                valueDomain=vd
            )

        psqs = PSQS.auto_query('mutations').apply_permission_checks(self.su)
        self.assertEqual(len(psqs),1)
        self.assertEqual(psqs[0].object.pk, vd.pk)
        psqs = PSQS.auto_query('flight').apply_permission_checks(self.su)
        self.assertEqual(len(psqs),1)
        self.assertEqual(psqs[0].object.pk, vd.pk)
        psqs = PSQS.auto_query('FLT').apply_permission_checks(self.su)
        self.assertEqual(len(psqs),1)
        self.assertEqual(psqs[0].object.pk, vd.pk)
    def test_self_publish_queryset_anon(self):
        self.logout()
        response = self.client.get(self.item.get_absolute_url())
        self.assertTrue(response.status_code == 302)

        self.item = ObjectClass.objects.get(pk=self.item.pk)
        self.assertFalse(self.item._is_public)

        psqs = PermissionSearchQuerySet()
        psqs = psqs.auto_query('published').apply_permission_checks()

        self.assertEqual(len(psqs), 0)

        pub.PublicationRecord.objects.create(
            user=self.submitting_user,
            concept=self.item,
            visibility=pub.PublicationRecord.VISIBILITY.public
        )

        response = self.client.get(self.item.get_absolute_url())
        self.assertTrue(response.status_code == 200)

        self.item = ObjectClass.objects.get(pk=self.item.pk)
        self.assertTrue(self.item._is_public)

        psqs = PermissionSearchQuerySet()
        psqs = psqs.auto_query('published').apply_permission_checks()
        self.assertEqual(len(psqs), 1)
    def test_values_in_conceptual_domain_search(self):
        # For bug #676
        from aristotle_mdr.forms.search import PermissionSearchQuerySet
        PSQS = PermissionSearchQuerySet()
        psqs = PSQS.auto_query('flight').apply_permission_checks(self.su)
        self.assertEqual(len(psqs),0)
        psqs = PSQS.auto_query('mutations').apply_permission_checks(self.su)
        self.assertEqual(len(psqs),0)

        cd = models.ConceptualDomain.objects.create(
                name="Mutation",
                definition="List of mutations",
            )
        for i, power in enumerate(['flight', 'healing', 'invisiblilty']):
            models.ValueMeaning.objects.create(
                name=power, definition=power, order=i,
                conceptual_domain=cd
            )

        psqs = PSQS.auto_query('mutations').apply_permission_checks(self.su)
        self.assertEqual(len(psqs),1)
        self.assertEqual(psqs[0].object.pk, cd.pk)
        psqs = PSQS.auto_query('flight').apply_permission_checks(self.su)
        self.assertEqual(len(psqs),1)
        self.assertEqual(psqs[0].object.pk, cd.pk)
    def list(self, request):
        if not self.request.query_params.keys():
            return Response({'search_options':'q models state ra'.split()})

        items = PermissionSearchQuerySet().auto_query(self.request.query_params['q'])
        if self.request.query_params.get('models') is not None:
            search_models = []
            models = self.request.query_params.get('models')
            if type(models) != type([]):
                models = [models]
            for mod in models:
                if len(mod.split('.',1)) == 2:
                    app_label,model=mod.split('.',1)
                    i = ContentType.objects.get(app_label=app_label,model=model)
                else:
                    i = ContentType.objects.get(model=mod)
                search_models.append(i.model_class())
            items = items.models(*search_models)
        items = items.apply_permission_checks(user=request.user)

        items = items[:10]
        serializer = ConceptSearchSerializer(items, request=self.request, many=True)
        return Response(serializer.data)
    def test_workgroup_member_search(self):
        self.logout()
        self.viewer = User.objects.create_user(
            'charles.xavier', '*****@*****.**',
            'equalRightsForAll')
        self.weaponx_wg = models.Workgroup.objects.create(name="WeaponX")

        response = self.client.post(reverse('friendly_login'), {
            'username': '******',
            'password': '******'
        })

        self.assertEqual(response.status_code, 302)  # logged in

        #Charles is not in any workgroups
        self.assertFalse(perms.user_in_workgroup(self.viewer, self.xmen_wg))
        self.assertFalse(perms.user_in_workgroup(self.viewer, self.weaponx_wg))

        #Create Deadpool in Weapon X workgroup
        with reversion.create_revision():
            dp = models.ObjectClass.objects.create(
                name="deadpool",
                definition="not really an xman, no matter how much he tries",
                workgroup=self.weaponx_wg,
                readyToReview=False)
        dp = models.ObjectClass.objects.get(pk=dp.pk)  # Un-cache
        self.assertFalse(perms.user_can_view(self.viewer, dp))
        self.assertFalse(dp.is_public())

        # Charles isn't a viewer of X-men yet, so no results.
        from aristotle_mdr.forms.search import PermissionSearchQuerySet
        psqs = PermissionSearchQuerySet()
        psqs = psqs.auto_query('deadpool').apply_permission_checks(self.viewer)
        self.assertEqual(len(psqs), 0)
        #response = self.client.get(reverse('aristotle:search')+"?q=deadpool")
        #self.assertEqual(len(response.context['page'].object_list),0)

        # Make viewer of XMen
        self.xmen_wg.giveRoleToUser('viewer', self.viewer)
        self.assertFalse(perms.user_can_view(self.viewer, dp))

        # Deadpool isn't an Xman yet, still no results.
        psqs = PermissionSearchQuerySet()
        psqs = psqs.auto_query('deadpool').apply_permission_checks(self.viewer)
        self.assertEqual(len(psqs), 0)

        with reversion.create_revision():
            dp.workgroup = self.xmen_wg
            dp.save()
        dp = models.ObjectClass.objects.get(pk=dp.pk)  # Un-cache

        # Charles is a viewer, Deadpool is in X-men, should have results now.
        psqs = PermissionSearchQuerySet()
        psqs = psqs.auto_query('deadpool').apply_permission_checks(self.viewer)
        self.assertEqual(len(psqs), 1)

        response = self.client.get(reverse('aristotle:search') + "?q=deadpool")
        self.assertTrue(perms.user_can_view(self.viewer, dp))
        self.assertEqual(len(response.context['page'].object_list), 1)
        self.assertEqual(response.context['page'].object_list[0].object.item,
                         dp)

        # Take away Charles viewing rights and no results again.
        self.xmen_wg.removeRoleFromUser('viewer', self.viewer)
        psqs = PermissionSearchQuerySet()
        psqs = psqs.auto_query('deadpool').apply_permission_checks(self.viewer)
        self.assertEqual(len(psqs), 0)

        response = self.client.get(reverse('aristotle:search') + "?q=deadpool")
        self.assertEqual(len(response.context['page'].object_list), 0)
    def test_workgroup_member_search(self):
        self.logout()
        self.viewer = User.objects.create_user('charles.xavier','*****@*****.**','equalRightsForAll')
        self.weaponx_wg = models.Workgroup.objects.create(name="WeaponX")

        response = self.client.post(reverse('django.contrib.auth.views.login'),
                    {'username': '******', 'password': '******'})

        self.assertEqual(response.status_code,302) # logged in

        #Charles is not in any workgroups
        self.assertFalse(perms.user_in_workgroup(self.viewer,self.xmen_wg))
        self.assertFalse(perms.user_in_workgroup(self.viewer,self.weaponx_wg))

        #Create Deadpool in Weapon X workgroup
        dp = models.ObjectClass.objects.create(name="deadpool",
                    description="not really an xman, no matter how much he tries",
                    workgroup=self.weaponx_wg,readyToReview=False)
        dp = models.ObjectClass.objects.get(pk=dp.pk) # Un-cache
        self.assertFalse(perms.user_can_view(self.viewer,dp))
        self.assertFalse(dp.is_public())

        # Charles isn't a viewer of X-men yet, so no results.
        from aristotle_mdr.forms.search import PermissionSearchQuerySet
        psqs = PermissionSearchQuerySet()
        psqs = psqs.auto_query('deadpool').apply_permission_checks(self.viewer)
        self.assertEqual(len(psqs),0)
        #response = self.client.get(reverse('aristotle:search')+"?q=deadpool")
        #self.assertEqual(len(response.context['page'].object_list),0)

        # Make viewer of XMen
        self.xmen_wg.giveRoleToUser('viewer',self.viewer)
        self.assertFalse(perms.user_can_view(self.viewer,dp))

        # Deadpool isn't an Xman yet, still no results.
        psqs = PermissionSearchQuerySet()
        psqs = psqs.auto_query('deadpool').apply_permission_checks(self.viewer)
        self.assertEqual(len(psqs),0)

        dp.workgroup = self.xmen_wg
        dp.save()
        dp = models.ObjectClass.objects.get(pk=dp.pk) # Un-cache

        # Charles is a viewer, Deadpool is in X-men, should have results now.
        psqs = PermissionSearchQuerySet()
        psqs = psqs.auto_query('deadpool').apply_permission_checks(self.viewer)
        self.assertEqual(len(psqs),1)

        response = self.client.get(reverse('aristotle:search')+"?q=deadpool")
        self.assertTrue(perms.user_can_view(self.viewer,dp))
        self.assertEqual(len(response.context['page'].object_list),1)
        self.assertEqual(response.context['page'].object_list[0].object.item,dp)

        # Take away Charles viewing rights and no results again.
        self.xmen_wg.removeRoleFromUser('viewer',self.viewer)
        psqs = PermissionSearchQuerySet()
        psqs = psqs.auto_query('deadpool').apply_permission_checks(self.viewer)
        self.assertEqual(len(psqs),0)

        response = self.client.get(reverse('aristotle:search')+"?q=deadpool")
        self.assertEqual(len(response.context['page'].object_list),0)
    def test_facet_search(self):
        self.logout()

        with reversion.create_revision():
            oc = models.ObjectClass.objects.create(
                name="Pokemon",
                definition="a Pocket monster"
            )
            dec = models.DataElementConcept.objects.create(
                name="Pokemon-CombatPower",
                definition="a Pokemons combat power",
                objectClass=oc
            )
            de = models.DataElement.objects.create(
                name="Pokemon-Combat Power, Go",
                definition="a Pokemons combat power as recorded in the Pokemon-Go scale",
                dataElementConcept=dec
            )

        self.login_superuser()

        from aristotle_mdr.forms.search import PermissionSearchQuerySet
        response = self.client.get(reverse('aristotle:search')+"?q=pokemon")
        
        objs = response.context['page'].object_list
        self.assertDelayedEqual(len(objs),3)
        extra_facets = response.context['form'].extra_facet_fields

        self.assertTrue(len(extra_facets) == 2)
        self.assertTrue('data_element_concept' in [f[0] for f in extra_facets] )
        self.assertTrue('object_class' in [f[0] for f in extra_facets] )
        
        # Confirm spaces are included in the facet
        self.assertTrue(dec.name in [v[0] for v in dict(extra_facets)['data_element_concept']['values']])

        psqs = PermissionSearchQuerySet()
        psqs = psqs.auto_query('pokemon').apply_permission_checks(self.su)
        self.assertDelayedEqual(len(psqs),3)

        response = self.client.get(reverse('aristotle:search')+"?q=pokemon")
        objs = response.context['page'].object_list
        self.assertDelayedEqual(len(objs),3)

        response = self.client.get(reverse('aristotle:search')+"?q=pokemon&f=object_class::%s"%oc.name)

        objs = response.context['page'].object_list
        self.assertDelayedEqual(len(objs),2)
        self.assertTrue(de.pk in [o.object.pk for o in objs])
        self.assertTrue(dec.pk in [o.object.pk for o in objs])

        response = self.client.get(reverse('aristotle:search')+"?q=pokemon&f=data_element_concept::%s"%dec.name.replace(' ','+'))

        objs = response.context['page'].object_list
        self.assertDelayedEqual(len(objs),2)
        self.assertTrue(de.pk in [o.object.pk for o in objs])
        self.assertTrue(dec.pk in [o.object.pk for o in objs])

        response = self.client.get(reverse('aristotle:search')+"?q=pokemon&models=aristotle_mdr.dataelement&f=data_element_concept::%s"%dec.name.replace(' ','+'))

        objs = response.context['page'].object_list
        self.assertDelayedEqual(len(objs),1)
        self.assertTrue(de.pk in [o.object.pk for o in objs])
        self.assertTrue(dec.pk not in [o.object.pk for o in objs])