def test_logging(self):
        user = User(username='******')
        user.set_password('test')
        user.full_clean()
        user.save()
        ct = get_content_type(User)
        iframe = Iframe(position=2, region='test', content_type=ct,
                        content_id=user.pk, url='https://news.bbc.co.uk/')
        iframe.full_clean()
        iframe.save()
        request = RequestFactory().get('/')
        request.user = user
        admin_instance = get_modeladmin(Iframe)

        admin_instance.log_addition(request, iframe)
        admin_instance.log_change(request, iframe, "we changed a thing!")
        admin_instance.log_deletion(request, iframe, "we deleted a thing!")

        # find them on the user
        logs = LogEntry.objects.get(content_type=ct, object_id=user.pk,
                                    user=user, action_flag=ADDITION)
        self.assertEqual(force_text(logs), 'Added "test".')
        logs = LogEntry.objects.get(content_type=ct, object_id=user.pk,
                                    user=user, action_flag=CHANGE)
        self.assertEqual(force_text(logs), 'Changed "test" - we changed a '
                                           'thing!')
        # can't check for deletions properly, see
        # https://code.djangoproject.com/ticket/21771#ticket

        # logs = LogEntry.objects.get(content_type=ct, object_id=user.pk,
        #                             user=user, action_flag=DELETION)
        # self.assertEqual(force_text(logs), 'Changed "test" - we changed a '
        #                                    'thing!')

        # find them on the iframe
        ct = get_content_type(Iframe)
        logs = LogEntry.objects.get(content_type=ct, object_id=iframe.pk,
                                    user=user, action_flag=ADDITION)
        self.assertEqual(force_text(logs), 'Added "https://news.bbc.co.uk/".')
        logs = LogEntry.objects.get(content_type=ct, object_id=iframe.pk,
                                    user=user, action_flag=CHANGE)
        self.assertEqual(force_text(logs), 'Changed "https://news.bbc.co.uk/" '
                                           '- we changed a thing!')
        # can't check for deletions properly, see
        # https://code.djangoproject.com/ticket/21771#ticket
        logs = LogEntry.objects.filter(content_type=ct, object_id=user.pk,
                                       user=user, action_flag=DELETION)
        self.assertEqual(force_text(logs[0]), 'Deleted "we deleted a thing!."')
    def test_continue_editing_parent_object(self):
        """
        if continue editing is hit, it should go back to the parent URL,
        I think?
        """
        user = User(username='******', is_staff=True, is_superuser=True,
                    is_active=True)
        user.set_password('test')
        user.full_clean()
        user.save()
        admin_instance = get_modeladmin(Iframe)
        self.assertIsInstance(admin_instance, RealishAdmin)

        request = RequestFactory().get('/', {
            '_continue': 1,
        })
        request.user = user
        iframe_admin = reverse('admin:embeds_iframe_add')
        response_301 = HttpResponsePermanentRedirect(redirect_to=iframe_admin)

        ct = get_content_type(User)
        iframe = Iframe(position=2, region='test', content_type=ct,
                        content_id=user.pk, url='https://news.bbc.co.uk/')
        iframe.full_clean()
        iframe.save()

        new_response = admin_instance.maybe_fix_redirection(
            request=request, response=response_301, obj=iframe)
        self.assertEqual(new_response['X-Chunkadmin-Response'],
                         'redirect-to-parent')

        self.assertEqual(301, new_response.status_code)
        self.assertEqual('/admin_mountpoint/auth/user/1/?_data_changed=1',
                         new_response['Location'])
    def _test_view(self, func='add_view', generate_chunks=1):
        user = User(username='******', is_staff=True, is_superuser=True,
                    is_active=True)
        user.set_password('test')
        user.full_clean()
        user.save()
        ct = get_content_type(User)
        request = RequestFactory().get('/', {
            REQUEST_VAR_CT: ct.pk,
            REQUEST_VAR_ID: user.pk,
            REQUEST_VAR_REGION: 'test'
        })
        request.user = user
        admin_instance = get_modeladmin(Iframe)

        for x in range(0, generate_chunks):
            iframe = Iframe(position=2, region='test', content_type=ct,
                            content_id=user.pk, url='https://news.bbc.co.uk/')
            iframe.full_clean()
            iframe.save()

        kwargs = {'request': request}
        if func != 'add_view':
            kwargs.update({'object_id': force_text(iframe.pk)})
        view = getattr(admin_instance, func)
        view(**kwargs)

        # now do the view again without the fields required by the decorator
        request = RequestFactory().get('/')
        request.user = user
        kwargs.update({'request': request})
        with self.assertRaises(SuspiciousOperation):
            view(**kwargs)
    def test_get_response_add_context(self):
        request = RequestFactory().get('/')
        user = User(username='******')
        user.set_password('test')
        user.full_clean()
        user.save()
        ct = get_content_type(User)
        iframe = Iframe(position=2, region='test', content_type=ct,
                        content_id=user.pk, url='https://news.bbc.co.uk/')
        iframe.full_clean()
        iframe.save()

        results = self.chunk_admin.get_response_add_context(request=request,
                                                            obj=iframe)
        html = results.pop('html')
        self.assertEqual(results, {'action': {'add': True,
                                              'change': False,
                                              'delete': False},
                                   'object': {'pk': 1,
                                              'id': 1}
                                   })
        # self.assertIn('Please wait, saving changes', html)
        # self.assertIn('Add new content', html)
        # self.assertIn('Iframe', html)
        self.assertIn('<h3>Embeds</h3>', html)
        self.assertIn('<b>whee!:</b>', html)
Beispiel #5
0
 def setUp(self):
     fakefile = SimpleUploadedFile('x/y/z.gif', b'xyz')
     sample_user, created = User.objects.get_or_create(username='******')
     user_ct = get_content_type(sample_user)
     self.file = File(position=1, content_type=user_ct,
                      content_id=sample_user.pk, region='test',
                      title='x', data=fakefile)
 def setUp(self):
     self.ct = get_content_type(User)
     try:
         admin.site.unregister(Iframe)
     except NotRegistered:
         pass
     admin.site.register(Iframe, IframeAdmin)
 def test_available_chunks(self):
     expected = [
         AdminChunkWrapper(opts=Iframe._meta, namespace='admin',
                           content_id=self.user.pk, region='test',
                           content_type=get_content_type(User))
     ]
     self.assertEqual(expected, self.changelist.available_chunks)
 def get_content_type(self, content_object):
     """
     Try and get the ContentType for the given object, and in
     DEBUG showing an appropriate error message, while in production just
     logging it for subscribers and moving on.
     """
     try:
         return get_content_type(content_object)
     except ContentType.DoesNotExist:
         # the model doesn't exist in the content types table. I don'
         #  know why.
         if settings.DEBUG:
             raise
         logger.exception(
             'content object does not exist for {cls!r}'.format(
                 cls=content_object))
         return None
     except AttributeError:
         # we didn't get a proper django model, but something has definitely
         # been passed in, because the earlier None sentinel didn't catch it.
         error = ttag_not_model % {
             'tagname': self.name,
             'type': type(content_object).__name__
         }
         if settings.DEBUG:
             raise ImproperlyConfigured(error)
         logger.exception(error)
         return None
     except ValueError:
         error = "content_object was probably '', check the context provided"
         if settings.DEBUG:
             raise ValueError(error)
         logger.exception(error)
         return None
    def get_link_context(self, context, obj, admin_site, querystring):
        """
        ..todo:: document

        Always returns the existing context.
        """
        site = get_admin_site(admin_site)
        if site is None:
            logger.debug('Invalid admin site')
            return {}

        content_type = get_content_type(obj)
        new_querystring = QueryDict(querystring, mutable=True)
        new_querystring.update({'content_type': content_type.pk,
                                'content_id': obj.pk})
        link = _add_custom_link_to_context(admin_site, context['request'],
                                           opts=EditRegionChunk._meta,
                                           permname='change',
                                           viewname='changelist',
                                           url_params=None,
                                           query=new_querystring.urlencode())

        if link['verbose_name']:
            logger.debug('link created successfully, swapping out the '
                         '`verbose_name` available to the context')
            link['verbose_name'] = EditRegionChunk._meta.verbose_name_plural
            link['obj_name'] = obj._meta.verbose_name
        return link
    def test_move_view(self):
        ct = get_content_type(User)
        user = User(username='******', is_staff=True, is_superuser=True,
                    is_active=True)
        user.set_password('test')
        user.full_clean()
        user.save()

        for x in range(1, 10):
            obj = Iframe(position=x, region='test', content_id=user.pk,
                         content_type=ct, url='http://example.com/')
            obj.full_clean()
            obj.save()

        first_obj = EditRegionChunk.objects.all()[0]
        request = RequestFactory().get('/', {'position': 3,
                                             'pk': first_obj.pk,
                                             'region': 'test'})
        request.user = user
        response = self.admin.move_view(request=request)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response['Content-type'], 'application/json')
        json_data = json.loads(force_text(response.content))
        self.assertIn('action', json_data)
        self.assertIn('html', json_data)
        self.assertEqual('move', json_data['action'])
        self.assertIn('<div class="region-inline-wrapper"',
                      json_data['html'])
Beispiel #11
0
 def test_str(self):
     sample_user, created = User.objects.get_or_create(username='******')
     user_ct = get_content_type(sample_user)
     mlt = MoreLikeThis(position=1, content_type=user_ct,
                        content_id=sample_user.pk, region='test',
                        connection='default')
     mlt.full_clean()
     self.assertEqual('3 from "default"', force_text(mlt))
Beispiel #12
0
 def test_str_alt_branch(self):
     sample_user, created = User.objects.get_or_create(username='******')
     user_ct = get_content_type(sample_user)
     sr = SearchResults(position=1, content_type=user_ct,
                        content_id=sample_user.pk, region='test',
                        connection='a', max_num=0, query="goose fat")
     sr.full_clean()
     self.assertEqual('', force_text(sr))
Beispiel #13
0
 def test_get_boosts_blank(self):
     sample_user, created = User.objects.get_or_create(username='******')
     user_ct = get_content_type(sample_user)
     sr = SearchResults(position=1, content_type=user_ct,
                        content_id=sample_user.pk, region='test',
                        connection='default', query="goose fat",
                        boost='')
     sr.full_clean()
     self.assertEqual(sr.get_boosts(), ())
Beispiel #14
0
 def test_repr(self):
     user_ct = get_content_type(self.model_dependencies["user"])
     expected = (
         "<editregions.models.EditRegionChunk pk=1, region=test, "
         "parent_type={USER.pk}, parent_id=1, "
         "position=0>".format(USER=user_ct)
     )
     received = repr(self.chunks["base"])
     self.assertEqual(expected, received)
    def setUp(self):
        user, created = User.objects.get_or_create(username="******")
        user_ct = get_content_type(User)

        for x in range(0, 9):
            obj = EditRegionChunk(region="test", position=x, content_id=user.pk, content_type=user_ct)
            obj.full_clean()
            obj.save()
        self.user = user
        self.content_type = user_ct
Beispiel #16
0
 def configure(self, obj):
     self.obj = obj
     self.ct = get_content_type(obj)
     modeladmin = get_modeladmin(self.obj)
     if hasattr(modeladmin, 'get_editregions_template_choices'):
         self.valid_templates = modeladmin.get_editregions_template_choices(
             obj=self.obj)
     possible_templates = modeladmin.get_editregions_templates(
         obj=self.obj)
     self.set_template(possible_templates)
Beispiel #17
0
 def test_clean_healing(self):
     sample_user, created = User.objects.get_or_create(username='******')
     user_ct = get_content_type(sample_user)
     sr = SearchResults(position=1, content_type=user_ct,
                        content_id=sample_user.pk, region='test',
                        connection='default', query="     goose fat     ",
                        boost='aaaaaa')
     sr.full_clean()
     self.assertEqual(sr.boost, 'aaaaaa,')
     self.assertEqual(sr.query, 'goose fat')
    def test_usage(self):
        tmpl = Template("""
        output:
        {% load editregion %}
        {% editregion "test" obj %}fallback{% endeditregion %}
        {% get_editregion "test" obj as exposed %}
        {% for chunk in exposed %}
        {% endfor %}
        """)
        user = User(username='******', is_staff=True, is_active=True,
                    is_superuser=True)
        user.set_password('test')
        user.full_clean()
        user.save()
        user_content_type = get_content_type(User)

        # attach some chunks to the region in test
        for x in range(1, 11):
            iframe = Iframe(region='test', content_id=user.pk,
                            content_type=user_content_type,
                            url='https://news.bbc.co.uk/{0!s}'.format(x),
                            position=x)
            iframe.full_clean()
            iframe.save()

        # fix the admin in test
        try:
            admin.site.unregister(User)
        except NotRegistered:
            pass
        admin.site.register(User, TestUserAdmin)

        request = RequestFactory().get('/')
        request.user = user
        ctx = RequestContext(request)
        ctx.update({'obj': user})
        rendered = tmpl.render(ctx).strip()
        for x in range(1, 11):
            self.assertIn('name="chunk-iframe-{0}" data-pk="{0}" '
                          'data-position="{0}" data-region="{1}"'.format(
                              x, 'test'), rendered)

        tmpl = Template("""
        output:
        {% load editregion %}
        {% get_editregion "test" obj as exposed %}
        {% for chunk in exposed %}xxx:{{ chunk.output }}{% endfor %}
        """)
        rendered = tmpl.render(ctx).strip()
        self.assertIn('output:', rendered)
        for x in range(1, 11):
            self.assertIn('xxx:<iframe '.format(x), rendered)
            self.assertIn('src="https://news.bbc.co.uk/{0}"'.format(x),
                          rendered)
            self.assertIn('name="chunk-iframe-{0}"'.format(x), rendered)
    def get_changelists_for_object(self, request, obj, **kwargs):
        changelists = []

        if obj is not None:
            logger.debug('Editing `{obj!r}`, so do '
                         '`get_changelists_for_object`'.format(obj=obj))

            attach_configuration(obj, EditRegionConfiguration)
            config = get_configuration(obj)

            # Dynamic template changes ...
            obj_admin = get_modeladmin(admin_namespace=self.admin_site.name,
                                       obj=obj)
            if hasattr(obj_admin, 'editregions_template_field'):
                fieldname = obj_admin.editregions_template_field
                template_name = request.GET.get(fieldname, None)
                kv = TemplateRequestKeyValue(key=fieldname, value=template_name)
                if config.is_valid_template(template_name):
                    logger.debug("{kv!r} was valid for this {obj!r} "
                                 "and {modeladmin!r}".format(
                                     kv=kv, obj=obj, modeladmin=obj_admin))
                    config.set_template(template_name)

            # store the old get here, because it gets changed inside the region
            # loops, which is a lossy process.
            old_get = request.GET
            # mutate the querystring and set some data onto it, which will
            # be passed to the get_changelist_filters method, as well as
            # being used to filter the ChangeList correctly.
            # new_get = request.GET.copy()
            new_get = QueryDict('', mutable=True)
            new_get[REQUEST_VAR_CT] = get_content_type(obj).pk
            new_get[REQUEST_VAR_ID] = obj.pk

            for region in config.config:
                new_get[REQUEST_VAR_REGION] = region
                request.GET = new_get
                our_list_display = self.list_display[:]
                our_list_links = self.get_list_display_links(
                    request=request, list_display=our_list_display)
                ChangeList = self.get_changelist(request, **kwargs)
                cl = ChangeList(request=request, model=self.model,
                                list_display=our_list_display,
                                list_display_links=our_list_links,
                                list_filter=self.list_filter,
                                date_hierarchy=None, search_fields=None,
                                list_select_related=None, list_per_page=100,
                                list_max_show_all=100, list_editable=None,
                                model_admin=self, parent_obj=obj,
                                parent_conf=config)
                changelists.append(cl)
            # as the internal request.GET may be lossy, we restore the original
            # data here.
            request.GET = old_get
        return changelists
Beispiel #20
0
 def setUp(self):
     sample_user, created = User.objects.get_or_create(username='******')
     user_ct = get_content_type(sample_user)
     self.file = File(position=1, content_type=user_ct,
                      content_id=sample_user.pk, region='test',
                      title='x', data='x/y/z.gif', modified=now())
     try:
         admin.site.unregister(File)
     except NotRegistered:
         pass
     admin.site.register(File, FileAdmin)
Beispiel #21
0
 def setUp(self):
     sample_user, created = User.objects.get_or_create(username='******')
     user_ct = get_content_type(sample_user)
     self.obj = MCE(position=1, content_type=user_ct,
                    content_id=sample_user.pk, region='test',
                    content='<b><em> hi there!   </em></b>')
     try:
         admin.site.unregister(MCE)
     except NotRegistered:
         pass
     admin.site.register(MCE, MCEAdmin)
Beispiel #22
0
 def setUp(self):
     sample_user, created = User.objects.get_or_create(username="******")
     user_ct = get_content_type(sample_user)
     base = EditRegionChunk(region="test", position=0, content_id=sample_user.pk, content_type=user_ct)
     base.full_clean()
     base.save()
     other = EditRegionChunk(region="test", position=1, content_id=sample_user.pk, content_type=user_ct)
     other.full_clean()
     other.save()
     self.model_dependencies = {"user": sample_user}
     self.chunks = {"base": base, "other": other}
 def test_get_subclass_summary(self):
     kwargs = {
         'func': 'get_subclass_summary',
         'expected': ('<a href="/admin_mountpoint/embeds/iframe/1/?',
                      'region=test',
                      'content_id=1',
                      'content_type={0}'.format(get_content_type(User).pk),
                      'data-adminlinks="autoclose"',
                      '>https://news.bbc.co.uk/</a>'),
         'extra': {}
     }
     self._test_changelist_display_methods(**kwargs)
    def setUp(self):
        request = RequestFactory().get('/')
        our_list_display = EditRegionAdmin.list_display
        our_list_links = (EditRegionAdmin(User, admin.site)
                          .get_list_display_links(request=request,
                                                  list_display=our_list_display))

        user = User(username='******')
        user.set_password('test')
        user.full_clean()
        user.save()
        self.user = user

        user_content_type = get_content_type(User)

        attach_configuration(user, EditRegionConfiguration)
        config = get_configuration(user)
        request.GET = QueryDict('', mutable=True)
        request.GET.update({REQUEST_VAR_ID: user.pk,
                            REQUEST_VAR_CT: user_content_type.pk,
                            REQUEST_VAR_REGION: 'test'})

        try:
            admin.site.unregister(User)
        except NotRegistered:
            pass
        admin.site.register(User, TestUserAdmin)

        cl = EditRegionChangeList(request=request, model=EditRegionChunk,
                                  list_display=our_list_display,
                                  list_display_links=our_list_links,
                                  list_filter=EditRegionAdmin.list_filter,
                                  date_hierarchy=None, search_fields=None,
                                  list_select_related=None, list_per_page=100,
                                  list_max_show_all=100, list_editable=None,
                                  model_admin=admin.site._registry[EditRegionChunk],  # noqa
                                  parent_obj=user, parent_conf=config)
        self.changelist = cl

        badconfig = EditRegionConfiguration()
        cl2 = EditRegionChangeList(request=request, model=EditRegionChunk,
                                   list_display=our_list_display,
                                   list_display_links=our_list_links,
                                   list_filter=EditRegionAdmin.list_filter,
                                   date_hierarchy=None, search_fields=None,
                                   list_select_related=None, list_per_page=100,
                                   list_max_show_all=100, list_editable=None,
                                   model_admin=admin.site._registry[EditRegionChunk],  # noqa
                                   parent_obj=user, parent_conf=badconfig)
        self.changelist2 = cl2
Beispiel #25
0
 def setUp(self):
     sample_user, created = User.objects.get_or_create(username='******')
     user_ct = get_content_type(sample_user)
     mlt = MoreLikeThis(position=1, content_type=user_ct,
                        content_id=sample_user.pk, region='test',
                        connection='default')
     mlt.full_clean()
     try:
         admin.site.unregister(MoreLikeThis)
     except NotRegistered:
         pass
     admin.site.register(MoreLikeThis, MoreLikeThisAdmin)
     self.modeladmin = get_modeladmin(MoreLikeThis)
     self.obj = mlt
Beispiel #26
0
 def setUp(self):
     sample_user, created = User.objects.get_or_create(username='******')
     user_ct = get_content_type(sample_user)
     sr = SearchResults(position=1, content_type=user_ct,
                        content_id=sample_user.pk, region='test',
                        connection='default', query="goose fat")
     sr.full_clean()
     try:
         admin.site.unregister(SearchResults)
     except NotRegistered:
         pass
     admin.site.register(SearchResults, SearchResultsAdmin)
     self.modeladmin = get_modeladmin(SearchResults)
     self.obj = sr
 def _test_changelist_display_methods(self, func, expected, extra):
     ct = get_content_type(User)
     user = User(username='******', is_staff=True, is_superuser=True,
                 is_active=True)
     user.set_password('test')
     user.full_clean()
     user.save()
     iframe = Iframe(position=2, region='test', content_type=ct,
                     content_id=user.pk, url='https://news.bbc.co.uk/')
     iframe.full_clean()
     iframe.save()
     render_html = getattr(self.admin, func)
     received = render_html(obj=iframe, **extra)
     for x in expected:
         self.assertIn(x, received)
 def test_get_object_tools(self):
     kwargs = {
         'func': 'get_object_tools',
         'expected': ('class="drag_handle" data-pk="1"',
                      '/admin_mountpoint/editregions/editregionchunk/move/',
                      'href="/admin_mountpoint/embeds/iframe/1/delete/?',
                      'region=test',
                      'content_id=1',
                      'content_type={0}'.format(get_content_type(User).pk),
                      'class="delete_handle"',
                      'data-adminlinks="autoclose"',
                      '>Delete</a>'),
         'extra': {}
     }
     self._test_changelist_display_methods(**kwargs)
 def test_changelist_view(self):
     request = RequestFactory().get('/')
     with self.assertRaises(MultiValueDictKeyError):
         self.admin.changelist_view(request=request)
     user = User(username='******', is_staff=True, is_superuser=True,
                 is_active=True)
     user.set_password('test')
     user.full_clean()
     user.save()
     request = RequestFactory().get('/', {
         REQUEST_VAR_CT: get_content_type(User).pk,
         REQUEST_VAR_ID: user.pk,
     })
     template_response = self.admin.changelist_view(request=request)
     self.assertIsInstance(template_response, TemplateResponse)
    def test_get_changelist_link_html_directly(self):

        kwargs = {
            'func': 'get_changelist_link_html',
            'expected': ('<a href="/admin_mountpoint/embeds/iframe/1/?',
                         'region=test',
                         'content_id=1',
                         'content_type={0}'.format(get_content_type(User).pk),
                         'data-adminlinks="autoclose"',
                         '>x</a>'),
            'extra': {
                'data': 'x',
                'caller': 'test'
            }
        }
        self._test_changelist_display_methods(**kwargs)