Пример #1
0
    def test_icon_registry02(self):
        "get_4_instance()"
        icon_reg = IconRegistry()
        icon_reg.register(FakeContact, 'images/contact_%(size)s.png')
        icon_reg.register(FakeOrganisation, 'images/organisation_%(size)s.png')

        phone_label = 'Contact with phone'
        email_label = 'Contact with email'

        icon_reg.register_4_instance(
            FakeContact, lambda instance: ('phone', phone_label)
            if instance.phone else ('email', email_label))

        c = FakeContact(first_name='Casca', last_name='Mylove')
        icon1 = icon_reg.get_4_instance(instance=c,
                                        theme='icecream',
                                        size_px=22)
        self.assertIsInstance(icon1, Icon)
        self.assertIn('icecream/images/email_22', icon1.url)
        self.assertEqual(email_label, icon1.label)

        c.phone = '123456'
        icon2 = icon_reg.get_4_instance(instance=c,
                                        theme='icecream',
                                        size_px=22)
        self.assertIn('icecream/images/phone_22', icon2.url)
        self.assertEqual(phone_label, icon2.label)

        o = FakeOrganisation(name='Midland')
        icon3 = icon_reg.get_4_instance(instance=o,
                                        theme='icecream',
                                        size_px=22)
        self.assertIn('icecream/images/organisation_22', icon3.url)
        self.assertEqual('Test Organisation', icon3.label)
Пример #2
0
    def test_fk_printer01(self):
        user = self.login()

        c = FakeContact()
        field1 = c._meta.get_field('sector')

        FKPrinter = field_printers.FKPrinter
        printer = FKPrinter(none_printer=FKPrinter.print_fk_null_html,
                            default_printer=field_printers.simple_print_html,
                           )

        self.assertEqual('', printer(c, None, user, field1))

        sector = FakeSector.objects.first()
        self.assertEqual(str(sector), printer(c, sector, user, field1))

        # entity without specific handler ---
        img = FakeImage.objects.create(user=user, name='Img#1')
        field2 = c._meta.get_field('image')
        self.assertEqual(str(img), printer(c, img, user, field2))

        # null_label ---
        field3 = c._meta.get_field('is_user')
        self.assertEqual(
            '<em>{}</em>'.format(pgettext('persons-is_user', 'None')),
            printer(c, None, user, field3)
        )
Пример #3
0
    def test_print_text_html(self):
        c = FakeContact()
        user = CremeUser()
        field = c._meta.get_field('description')
        self.assertEqual('', field_printers.print_text_html(c, None, user, field))

        text = 'See you <b>space</b> cowboy...\nThe real folk blues: www.bebop.org'

        with override_settings(URLIZE_TARGET_BLANK=True):
            p1 = field_printers.print_text_html(c, user=user, field=field, fval=text)

        self.assertEqual(
            '<p>See you &lt;b&gt;space&lt;/b&gt; cowboy...<br>The real folk blues: '
            '<a target="_blank" rel="noopener noreferrer" href="http://www.bebop.org">www.bebop.org</a>'
            '</p>',
            p1
        )

        with override_settings(URLIZE_TARGET_BLANK=False):
            p2 = field_printers.print_text_html(c, user=user, field=field, fval=text)

        self.assertEqual(
            '<p>See you &lt;b&gt;space&lt;/b&gt; cowboy...<br>The real folk blues: '
            '<a href="http://www.bebop.org">www.bebop.org</a>'
            '</p>',
            p2
        )
Пример #4
0
    def test_entity_edition03(self):
        "ValidationError + cancel_url."
        user = self.login()
        contact = FakeContact.objects.create(
            user=user,
            first_name='Spik',
            last_name='Spiegel',
        )
        url = contact.get_edit_absolute_url()

        lv_url = FakeContact.get_lv_absolute_url()
        response = self.assertGET200(url,
                                     HTTP_REFERER='http://testserver' + lv_url)
        self.assertEqual(lv_url, response.context.get('cancel_url'))

        response = self.client.post(
            url,
            follow=True,
            data={
                'user': user.id,
                'first_name': 'Spike',
                # 'last_name': last_name,  # NB: Missing
                'cancel_url': lv_url,
            },
        )
        self.assertFormError(response, 'form', 'last_name',
                             _('This field is required.'))
        self.assertEqual(lv_url, response.context.get('cancel_url'))
Пример #5
0
    def test_export_error_invalid_hfilter(self):
        self.login()
        lv_url = FakeContact.get_lv_absolute_url()
        build_url = partial(self._build_dl_url,
                            ct_or_model=self.ct,
                            list_url=lv_url)

        # HeaderFilter does not exist
        self.assertGET404(build_url())

        # HeaderFilter not given
        self.assertGET404(build_url(hfilter_id=None))

        # Unknown HeaderFilter id
        self.assertGET404(build_url(hfilter_id='test-hf_contact-unknown'))

        # HeaderFilter with wrong content type
        hf = HeaderFilter.objects.create_if_needed(
            pk='test-hf_contact_test_invalid_hfilter',
            name='Contact view',
            model=FakeContact,
            cells_desc=[
                (EntityCellRegularField, {
                    'name': 'last_name'
                }),
                (EntityCellRegularField, {
                    'name': 'created'
                }),
            ],
        )
        self.assertGET404(
            build_url(ct_or_model=FakeEmailCampaign, hfilter_id=hf.id))
Пример #6
0
    def test_cell_render04(self):
        "Assignment"
        user = self.login()
        ripley = FakeContact(user=user,
                             first_name='Helen',
                             last_name='Ripley',
                             email='*****@*****.**')
        cell = EntityCellRegularField.build(model=FakeContact, name='email')

        with self.assertNoException():
            template = Template(
                r'{% load creme_cells %}'
                r'{% cell_render cell=cell instance=helen user=user as cell_content %}'
                r'{{cell_content}}')
            render = template.render(
                Context({
                    'cell': cell,
                    'helen': ripley,
                    'user': user
                }))

        self.assertEqual(
            '<a href="mailto:[email protected]">[email protected]</a>',
            render.strip())


# TODO: missing argument ?
Пример #7
0
    def setUpClass(cls):
        super().setUpClass()

        cls.factory = RequestFactory()
        cls.user = CremeUser(username='******', email='*****@*****.**',
                             first_name='Yui', last_name='Kawa',
                            )
        cls.url = FakeContact.get_lv_absolute_url()
Пример #8
0
 def test_changed02(self):
     baction = BatchAction(FakeContact, 'last_name', 'rm_substr', value='Foobar')
     first_name = 'Haruhi'
     last_name = 'Suzumiya'
     haruhi = FakeContact(first_name=first_name, last_name=last_name)
     self.assertFalse(baction(haruhi))
     self.assertEqual(last_name,  haruhi.last_name)
     self.assertEqual(first_name, haruhi.first_name)
Пример #9
0
    def test_print_boolean_csv(self):
        c = FakeContact()
        user = CremeUser()
        field = c._meta.get_field('is_a_nerd')
        self.assertEqual('', print_boolean_csv(c, None, user, field))

        self.assertEqual(_('Yes'), print_boolean_csv(c, True, user, field))
        self.assertEqual(_('No'), print_boolean_csv(c, False, user, field))
Пример #10
0
    def test_print_foreignkey_csv02(self):
        "No view credentials."
        user = self.login(is_superuser=False)

        c = FakeContact()
        img = FakeImage.objects.create(user=user, name='Img#1')
        field = c._meta.get_field('image')
        self.assertEqual(settings.HIDDEN_VALUE,
                         print_foreignkey_csv(c, img, user, field))
Пример #11
0
    def test_edit01(self):
        self.login()

        field1 = 'first_name'
        hf = HeaderFilter.create(
            pk='tests-hf_contact',
            name='Contact view',
            model=FakeContact,
            is_custom=True,
            cells_desc=[
                EntityCellRegularField.build(model=FakeContact, name=field1)
            ],
        )

        url = hf.get_edit_absolute_url()
        response = self.assertGET200(url)
        self.assertTemplateUsed(response,
                                'creme_core/forms/header-filter.html')
        self.assertIn(
            _('Edit the view of list «%(view)s»') % {'view': hf.name},
            response.content.decode())

        with self.assertNoException():
            context = response.context
            cells_f = context['form'].fields['cells']
            submit_label = context['submit_label']

        self.assertCellsEqual(hf.cells, cells_f.initial)
        self.assertEqual(_('Save the modified view'), submit_label)

        name = 'Entity view v2'
        field2 = 'last_name'
        response = self.client.post(
            url,
            data={
                'name':
                name,
                'cells':
                'regular_field-{},'
                'regular_field-{}'.format(
                    field1,
                    field2,
                ),
            },
        )
        self.assertNoFormError(response, status=302)

        hf = self.refresh(hf)
        self.assertEqual(name, hf.name)
        self.assertTrue(hf.is_custom)

        cells = hf.cells
        self.assertEqual(2, len(cells))
        self.assertEqual(field1, cells[0].value)
        self.assertEqual(field2, cells[1].value)

        self.assertRedirects(response, FakeContact.get_lv_absolute_url())
Пример #12
0
    def test_print_date(self):
        c = FakeContact()
        user = CremeUser()
        field = c._meta.get_field('birthday')
        self.assertEqual('', print_date(c, None, user, field))

        value = date(year=2019, month=8, day=21)
        self.assertEqual(date_format(value, 'DATE_FORMAT'),
                         print_date(c, value, user, field))
Пример #13
0
    def test_button_registry01(self):
        class TestButton1(Button):
            id_ = Button.generate_id('creme_core', 'test_button_registry_1')

        class TestButton2(Button):
            id_ = Button.generate_id('creme_core', 'test_button_registry_2')

            def ok_4_display(self, entity):
                return False

        class TestButton3(Button):
            id_ = Button.generate_id('creme_core', 'test_button_registry_3')

        class TestButton4(Button):
            id_ = Button.generate_id('creme_core', 'test_button_registry_4')

        registry = ButtonsRegistry()
        registry.register(TestButton1, TestButton2, TestButton3, TestButton4)

        class DuplicatedTestButton(Button):
            id_ = TestButton1.id_

        with self.assertRaises(ButtonsRegistry.RegistrationError):
            registry.register(DuplicatedTestButton)

        get = registry.get_button
        self.assertIsInstance(get(TestButton1.id_), TestButton1)
        self.assertIsInstance(get(TestButton2.id_), TestButton2)
        self.assertIsNone(
            get(
                Button.generate_id('creme_core',
                                   'test_button_registry_invalid')))

        c = FakeContact(first_name='Casca', last_name='Mylove')
        buttons = [
            *registry.get_buttons(
                [
                    TestButton3.id_,
                    TestButton2.id_,  # No because ok_4_display() returns False
                    'test_button_registry_invalid',
                    TestButton1.id_,
                ],
                entity=c,
            ),
        ]
        self.assertIsList(buttons, length=2)
        self.assertIsInstance(buttons[0], TestButton3)
        self.assertIsInstance(buttons[1], TestButton1)

        all_button_items = [*registry]
        self.assertEqual(4, len(all_button_items))

        button_item = all_button_items[0]
        self.assertIsInstance(button_item[1], Button)
        self.assertEqual(button_item[0], button_item[1].id_)
Пример #14
0
    def test_print_boolean_html(self):
        c = FakeContact()
        user = CremeUser()
        field = c._meta.get_field('is_a_nerd')
        self.assertEqual('', print_boolean_html(c, None, user, field))

        self.assertEqual(
            '<input type="checkbox" checked disabled/>{}'.format(_('Yes')),
            print_boolean_html(c, True, user, field))
        self.assertEqual('<input type="checkbox" disabled/>{}'.format(_('No')),
                         print_boolean_html(c, False, user, field))
Пример #15
0
    def test_print_unsafehtml_html(self):
        c = FakeContact()
        user = CremeUser()
        field = c._meta.get_field('description')
        self.assertEqual('', field_printers.print_unsafehtml_html(c, None, user, field))

        self.assertEqual(
            '<p>&lt;p&gt;See you space cowboy...&lt;/p&gt;</p>',
            field_printers.print_unsafehtml_html(
                c, user=user, field=field,
                fval='<p>See you space cowboy...</p>',
            )
        )
Пример #16
0
    def test_cell_4_regularfield04(self):
        "No assignment"
        user = self.login()

        ripley = FakeContact(user=user, first_name='Helen', last_name='Ripley')

        with self.assertNoException():
            template = Template(
                r'{% load creme_cells %}'
                r'{% cell_4_regularfield instance=helen field="first_name" %}')
            render = template.render(Context({'helen': ripley}))

        self.assertEqual(_(u'First name'), render.strip())
Пример #17
0
    def test_fk_printer02(self):
        "CremeEntity."
        user = self.create_user()
        c = FakeContact()
        field = c._meta.get_field('image')

        printer = FKPrinter(
            none_printer=FKPrinter.print_fk_null_html,
            default_printer=simple_print_html,
        ).register(CremeEntity, FKPrinter.print_fk_entity_html)

        img = FakeImage.objects.create(user=user, name='Img#1')
        self.assertEqual(f'<a href="{img.get_absolute_url()}">{img}</a>',
                         printer(c, img, user, field))
Пример #18
0
    def test_simple_print_csv(self):
        c = FakeContact()
        user = CremeUser()
        field = c._meta.get_field('first_name')
        self.assertEqual(
            '',
            field_printers.simple_print_csv(c, fval=None, user=user, field=field)
        )

        value = 'Rei'
        self.assertEqual(
            value,
            field_printers.simple_print_csv(c, value, user, field)
        )
Пример #19
0
    def test_print_email_html(self):
        c = FakeContact()
        user = CremeUser()
        field = c._meta.get_field('email')
        self.assertEqual('', print_email_html(c, None, user, field))

        value1 = '*****@*****.**'
        self.assertEqual(f'<a href="mailto:{value1}">{value1}</a>',
                         print_email_html(c, value1, user, field))

        value2 = '</a><script>Muhahaha</script>[email protected]'
        self.assertEqual(
            '<a href="mailto:{email}">{email}</a>'.format(
                email=escape(value2)),
            print_email_html(c, value2, user, field))
Пример #20
0
    def test_simple_print_html(self):
        c = FakeContact()
        user = CremeUser()
        field = c._meta.get_field('first_name')
        self.assertEqual('', field_printers.simple_print_html(c, fval=None, user=user, field=field))

        value = 'Rei'
        self.assertEqual(
            value,
            field_printers.simple_print_html(c, value, user, field)
        )

        self.assertEqual(
            '&lt;b&gt;Rei&lt;b&gt;',
            field_printers.simple_print_html(c, '<b>Rei<b>', user, field)
        )
Пример #21
0
    def test_cell_4_regularfield03(self):
        "By instance"
        user = self.login()

        ripley = FakeContact(user=user, first_name='Helen', last_name='Ripley')

        with self.assertNoException():
            template = Template(
                r'{% load creme_cells %}'
                r'{% cell_4_regularfield instance=helen field="first_name" as fname_cell %}'
                r'{% cell_4_regularfield instance=helen field="last_name" as lname_cell %}'
                r'{{fname_cell.key}}#{{lname_cell.key}}')
            render = template.render(Context({'helen': ripley}))

        self.assertEqual('regular_field-first_name#regular_field-last_name',
                         render.strip())
Пример #22
0
    def test_cell_render01(self):
        "Direct render ; default output."
        user = self.create_user()
        ripley = FakeContact(user=user, first_name='Helen', last_name='Ripley')
        cell = EntityCellRegularField.build(model=FakeContact, name='last_name')

        with self.assertNoException():
            template = Template(
                r'{% load creme_cells %}'
                r'{% cell_render cell=cell instance=helen user=user %}'
            )
            render = template.render(Context({
                'cell': cell, 'helen': ripley, 'user': user,
            }))

        self.assertEqual(ripley.last_name, render.strip())
Пример #23
0
    def test_print_foreignkey_csv01(self):
        user = self.create_user()

        c = FakeContact()
        field1 = c._meta.get_field('sector')

        self.assertEqual('', print_foreignkey_csv(c, None, user, field1))

        sector = FakeSector.objects.first()
        self.assertEqual(str(sector),
                         print_foreignkey_csv(c, sector, user, field1))

        # entity (credentials OK)
        img = FakeImage.objects.create(user=user, name='Img#1')
        field2 = c._meta.get_field('image')
        self.assertEqual(str(img), print_foreignkey_csv(c, img, user, field2))
Пример #24
0
    def test_entity_creation02(self):
        "ValidationError + cancel_url"
        user = self.login()

        url = reverse('creme_core__create_fake_contact')
        lv_url = FakeContact.get_lv_absolute_url()
        response = self.assertGET200(url, HTTP_REFERER='http://testserver' + lv_url)
        self.assertEqual(lv_url, response.context.get('cancel_url'))

        response = self.client.post(url, follow=True,
                                    data={'user': user.id,
                                          # 'last_name': name,  # NB: Missing
                                          'cancel_url': lv_url,
                                         }
                                    )
        self.assertFormError(response, 'form', 'last_name', _('This field is required.'))
        self.assertEqual(lv_url, response.context.get('cancel_url'))
Пример #25
0
    def test_manager_compatible01(self):
        orig_compat_ids = self.build_compatible_set()
        orig_internal_compat_ids = self.build_compatible_set(
            include_internals=True)

        create_rtype = RelationType.create
        rtype = create_rtype(
            ('test-subject_foobar', 'manages', [FakeContact]),
            ('test-object_foobar', 'is managed by', [FakeOrganisation]))[0]
        internal_rtype = create_rtype(
            ('test-subject_foobar_2', 'manages internal', [FakeContact]),
            ('test-object_foobar_2', 'is managed by internal',
             [FakeOrganisation]),
            is_internal=True,
        )[0]

        compatibles_ids = self.build_compatible_set()
        self.assertEqual(len(orig_compat_ids) + 1, len(compatibles_ids))
        self.assertIn(rtype.id, compatibles_ids)

        compatibles_internal_ids = self.build_compatible_set(
            include_internals=True)
        self.assertEqual(
            len(orig_internal_compat_ids) + 2, len(compatibles_internal_ids))
        self.assertIn(rtype.id, compatibles_internal_ids)
        self.assertIn(internal_rtype.id, compatibles_internal_ids)

        contact_ct = self.contact_ct
        self.assertTrue(rtype.is_compatible(contact_ct.id))
        self.assertTrue(rtype.is_compatible(contact_ct))
        self.assertTrue(rtype.is_compatible(str(contact_ct.id)))
        self.assertTrue(rtype.is_compatible(FakeContact))
        self.assertTrue(rtype.is_compatible(FakeContact()))

        orga_ct = ContentType.objects.get_for_model(FakeOrganisation)
        self.assertFalse(rtype.is_compatible(orga_ct.id))
        self.assertFalse(rtype.is_compatible(orga_ct))
        self.assertFalse(rtype.is_compatible(str(orga_ct.id)))
        self.assertFalse(rtype.is_compatible(FakeOrganisation))
        self.assertFalse(rtype.is_compatible(FakeOrganisation()))

        # Model as argument
        self.assertSetEqual(
            compatibles_ids,
            self.build_compatible_set(FakeContact),
        )
Пример #26
0
    def test_cell_render03(self):
        "Direct render ; CSV output."
        user = self.create_user()
        ripley = FakeContact(
            user=user, first_name='Helen', last_name='Ripley',
            email='*****@*****.**',
        )
        cell = EntityCellRegularField.build(model=FakeContact, name='email')

        with self.assertNoException():
            template = Template(
                r'{% load creme_cells %}'
                r'{% cell_render cell=cell instance=helen user=user output="csv" %}'
            )
            render = template.render(Context({
                'cell': cell, 'helen': ripley, 'user': user,
            }))

        self.assertEqual(ripley.email, render.strip())
Пример #27
0
    def test_cell_render02(self):
        "Direct render ; html output"
        user = self.login()
        ripley = FakeContact(user=user,
                             first_name='Helen',
                             last_name='Ripley',
                             email='*****@*****.**')
        cell = EntityCellRegularField.build(model=FakeContact, name='email')

        with self.assertNoException():
            template = Template(
                r'{% load creme_cells %}'
                r'{% cell_render cell=cell instance=helen user=user output="html" %}'
            )
            render = template.render(
                Context({
                    'cell': cell,
                    'helen': ripley,
                    'user': user
                }))

        self.assertEqual(
            '<a href="mailto:[email protected]">[email protected]</a>',
            render.strip())
Пример #28
0
    def test_create02(self):
        user = self.login()

        lv_url = FakeContact.get_lv_absolute_url()

        # Create a view to post the entity filter
        HeaderFilter.create(
            pk='creme_core-tests_views_header_filter_test_create02',
            name='A FakeContact view',  # Starts with "A" => first
            model=FakeContact,
            cells_desc=[
                (EntityCellRegularField, {
                    'name': 'last_name'
                }),
                (EntityCellRegularField, {
                    'name': 'first_name'
                }),
                (EntityCellRegularField, {
                    'name': 'email'
                }),
            ],
        )

        # Set a filter in the session (should be kept)
        efilter = EntityFilter.create(
            'creme_core-tests_views_header_filter_test_create02',
            name='Misato',
            model=FakeContact,
            is_custom=True,
            conditions=[
                # EntityFilterCondition.build_4_field(
                #     model=FakeContact,
                #     operator=EntityFilterCondition.EQUALS,
                #     name='first_name', values=['Misato'],
                # ),
                RegularFieldConditionHandler.build_condition(
                    model=FakeContact,
                    field_name='first_name',
                    operator=EQUALS,
                    values=['Misato'],
                ),
            ],
        )
        response = self.assertPOST200(lv_url, data={'filter': efilter.id})
        self.assertEqual(efilter.id,
                         response.context['list_view_state'].entity_filter_id)

        # --
        ct = self.contact_ct
        loves = RelationType.create(('test-subject_love', 'Is loving'),
                                    ('test-object_love', 'Is loved by'))[0]
        customfield = CustomField.objects.create(
            name='Size (cm)',
            field_type=CustomField.INT,
            content_type=ct,
        )
        # funcfield = FakeContact.function_fields.get('get_pretty_properties')
        funcfield = function_field_registry.get(FakeContact,
                                                'get_pretty_properties')

        url = self._build_add_url(ct)
        response = self.assertGET200(url)

        with self.assertNoException():
            cells_f = response.context['form'].fields['cells']

        build_4_field = partial(EntityCellRegularField.build,
                                model=FakeContact)
        self.assertCellsEqual([
            build_4_field(name='first_name'),
            build_4_field(name='last_name'),
            EntityCellRelation(
                model=FakeContact,
                rtype=RelationType.objects.get(pk=FAKE_REL_SUB_EMPLOYED_BY),
            ),
        ], cells_f.initial)

        field_name = 'first_name'
        name = 'DefaultHeaderFilter'
        response = self.client.post(url,
                                    follow=True,
                                    data={
                                        'name':
                                        name,
                                        'user':
                                        user.id,
                                        'is_private':
                                        'on',
                                        'cells':
                                        'relation-{rtype},'
                                        'regular_field-{rfield},'
                                        'function_field-{ffield},'
                                        'custom_field-{cfield}'.format(
                                            rfield=field_name,
                                            cfield=customfield.id,
                                            rtype=loves.id,
                                            ffield=funcfield.name,
                                        )
                                    })
        self.assertNoFormError(response)

        hfilter = self.get_object_or_fail(HeaderFilter, name=name)
        self.assertEqual(user, hfilter.user)
        self.assertTrue(hfilter.is_private)

        cells = hfilter.cells
        self.assertEqual(4, len(cells))

        cell = cells[0]
        self.assertIsInstance(cell, EntityCellRelation)
        self.assertEqual(loves.id, cell.value)

        cell = cells[1]
        self.assertIsInstance(cell, EntityCellRegularField)
        self.assertEqual(field_name, cell.value)

        cell = cells[2]
        self.assertIsInstance(cell, EntityCellFunctionField)
        self.assertEqual(funcfield.name, cell.value)

        cell = cells[3]
        self.assertIsInstance(cell, EntityCellCustomField)
        self.assertEqual(str(customfield.id), cell.value)

        self.assertRedirects(response, lv_url)

        # --
        context = self.assertGET200(lv_url).context
        selected_hfilter = context['header_filters'].selected
        self.assertIsInstance(selected_hfilter, HeaderFilter)
        self.assertEqual(hfilter.id, selected_hfilter.id)

        lvs = context['list_view_state']
        self.assertEqual(hfilter.id, lvs.header_filter_id)
        self.assertEqual(efilter.id, lvs.entity_filter_id)
Пример #29
0
    def test_list_view_export_with_filter01(self):
        user = self.login()
        hf = self._build_hf_n_contacts()
        efilter = EntityFilter.objects.smart_update_or_create(
            'test-filter01',
            'Red',
            FakeContact,
            user=user,
            is_custom=False,
            conditions=[
                RegularFieldConditionHandler.build_condition(
                    model=FakeContact,
                    field_name='last_name',
                    operator=ISTARTSWITH,
                    values=['Wong'],
                )
            ],
        )

        existing_hline_ids = [
            *HistoryLine.objects.values_list('id', flat=True)
        ]

        response = self.assertGET200(
            self._build_contact_dl_url(
                list_url=FakeContact.get_lv_absolute_url(),
                efilter_id=efilter.id))
        result = [force_str(line) for line in response.content.splitlines()]
        self.assertEqual(2, len(result))

        self.assertEqual('"","Wong","Edward","","is a girl"', result[1])

        # History
        hlines = HistoryLine.objects.exclude(id__in=existing_hline_ids)
        self.assertEqual(1, len(hlines))

        hline = hlines[0]
        self.assertListEqual([1, hf.name, efilter.name], hline.modifications)
        self.assertListEqual(
            [
                _('Export of {count} «{model}» (view «{view}» & filter «{filter}»)'
                  ).format(
                      count=1,
                      model='Test Contact',
                      view=hf.name,
                      filter=efilter.name,
                  ),
            ],
            hline.get_verbose_modifications(user),
        )
        self.assertHTMLEqual(
            format_html(
                '<div class="history-line history-line-mass_export">{}<div>',
                _('Export of «%(counted_instances)s» (view «%(view)s» & filter «%(filter)s»)'
                  ) % {
                      'counted_instances':
                      _('{count} {model}').format(
                          count=1,
                          model='Test Contact',
                      ),
                      'view':
                      hf.name,
                      'filter':
                      efilter.name,
                  },
            ),
            html_history_registry.line_explainers([hline], user)[0].render(),
        )
Пример #30
0
    def test_export_error_invalid_ctype(self):
        self.login()
        lv_url = FakeContact.get_lv_absolute_url()

        self.assertGET404(self._build_dl_url(ct_or_model=None,
                                             list_url=lv_url))