예제 #1
0
    def test_custom_date(self):
        constraint = GHCCCustomDate(model=FakeContact)

        create_cfield = partial(
            CustomField.objects.create,
            content_type=FakeContact,
            field_type=CustomField.DATETIME,
        )
        cfield1 = create_cfield(name='First fight')
        cfield2 = create_cfield(name='Hair', field_type=CustomField.ENUM)
        cfield3 = create_cfield(name='Main sector',
                                content_type=FakeOrganisation)

        self.assertTrue(constraint.check_cell(EntityCellCustomField(cfield1)))
        self.assertFalse(constraint.check_cell(EntityCellCustomField(cfield2)))

        # ---
        get_cell = constraint.get_cell
        cell1 = get_cell(cell_key=f'custom_field-{cfield1.id}')
        self.assertIsInstance(cell1, EntityCellCustomField)
        self.assertEqual(cfield1, cell1.custom_field)

        self.assertIsNone(get_cell(cell_key=f'custom_field-{cfield2.id}'))
        self.assertIsNone(get_cell(cell_key=f'custom_field-{cfield3.id}'))

        # ---
        cells = [*constraint.cells()]
        self.assertEqual(1, len(cells))

        cell2 = cells[0]
        self.assertIsInstance(cell2, EntityCellCustomField)
        self.assertEqual(cfield1, cell2.custom_field)
예제 #2
0
    def test_build_4_customfield01(self):
        "INT CustomField"
        name = 'Size (cm)'
        customfield = CustomField.objects.create(
            name=name,
            field_type=CustomField.INT,
            content_type=self.contact_ct,
        )

        cell = EntityCellCustomField(customfield)
        self.assertIsInstance(cell, EntityCellCustomField)
        self.assertEqual(str(customfield.id), cell.value)
        self.assertEqual(name, cell.title)
        self.assertEqual('custom_field-{}'.format(customfield.id), cell.key)
        # self.assertIs(cell.has_a_filter, True)
        # self.assertIs(cell.editable,     False)
        # self.assertIs(cell.sortable,     False)
        self.assertIs(cell.is_multiline, False)
        # self.assertEqual('customfieldinteger__value__icontains', cell.filter_string)
        self.assertEqual(settings.CSS_NUMBER_LISTVIEW, cell.listview_css_class)
        self.assertEqual(settings.CSS_DEFAULT_HEADER_LISTVIEW,
                         cell.header_listview_css_class)

        cell = EntityCellCustomField.build(FakeContact, customfield.id)
        self.assertIsInstance(cell, EntityCellCustomField)
        self.assertEqual(str(customfield.id), cell.value)

        self.assertIsNone(EntityCellCustomField.build(FakeContact, 1000))
예제 #3
0
    def test_customfield_date(self):
        customfield = CustomField.objects.create(
            name='Day',
            field_type=CustomField.DATE,
            content_type=self.contact_ct,
        )

        cell = EntityCellCustomField(customfield)
        self.assertEqual(settings.CSS_DEFAULT_LISTVIEW,
                         cell.listview_css_class)
        self.assertEqual(settings.CSS_DATE_HEADER_LISTVIEW,
                         cell.header_listview_css_class)

        # Render ---
        user = self.create_user()
        yoko = FakeContact.objects.create(user=user,
                                          first_name='Yoko',
                                          last_name='Littner')
        date_obj = date(year=2058, month=3, day=26)
        date_str = date_format(date_obj, 'DATE_FORMAT')
        customfield.value_class.objects.create(
            entity=yoko,
            custom_field=customfield,
            value=date_obj,
        )
        self.assertEqual(date_str, cell.render_html(entity=yoko, user=user))
        self.assertEqual(date_str, cell.render_csv(entity=yoko, user=user))
예제 #4
0
    def test_customfield_str(self):
        customfield = CustomField.objects.create(
            name='Nickname',
            field_type=CustomField.STR,
            content_type=self.contact_ct,
        )

        cell = EntityCellCustomField(customfield)
        self.assertEqual(settings.CSS_DEFAULT_LISTVIEW,
                         cell.listview_css_class)
        self.assertEqual(settings.CSS_DEFAULT_HEADER_LISTVIEW,
                         cell.header_listview_css_class)

        # Render ---
        user = self.create_user()
        yoko = FakeContact.objects.create(user=user,
                                          first_name='Yoko',
                                          last_name='Littner')

        value = '<i>Sniper</i>'
        customfield.value_class.objects.create(
            entity=yoko,
            custom_field=customfield,
            value=value,
        )
        self.assertEqual('&lt;i&gt;Sniper&lt;/i&gt;',
                         cell.render_html(entity=yoko, user=user))
        self.assertEqual(value, cell.render_csv(entity=yoko, user=user))
예제 #5
0
    def test_customfield_text(self):
        customfield = CustomField.objects.create(
            name='Plot',
            field_type=CustomField.TEXT,
            content_type=self.contact_ct,
        )

        cell = EntityCellCustomField(customfield)

        # Render ---
        user = self.create_user()
        yoko = FakeContact.objects.create(user=user,
                                          first_name='Yoko',
                                          last_name='Littner')

        value = 'Yoko is a young woman from <i>Littner</i>, a village neighboring Giha.\n' \
                'She helps introduce Simon and Kamina to the surface world.'
        customfield.value_class.objects.create(
            entity=yoko,
            custom_field=customfield,
            value=value,
        )
        self.assertHTMLEqual(
            '<p>'
            'Yoko is a young woman from &lt;i&gt;Littner&lt;/i&gt;, a village neighboring Giha.'
            '<br>'
            'She helps introduce Simon and Kamina to the surface world.'
            '</p>', cell.render_html(entity=yoko, user=user))
        self.assertEqual(value, cell.render_csv(entity=yoko, user=user))
예제 #6
0
    def test_customfield_registry01(self):
        create_cfield = partial(
            CustomField.objects.create,
            content_type=ContentType.objects.get_for_model(FakeContact),
        )
        str_cfield = create_cfield(name='A', field_type=CustomField.STR)
        int_cfield = create_cfield(name='B', field_type=CustomField.INT)

        str_cell = EntityCellCustomField(customfield=str_cfield)
        int_cell = EntityCellCustomField(customfield=int_cfield)

        registry = lv_search.CustomFieldSearchRegistry(to_register=())
        field = registry.get_field(cell=str_cell, user=self.user)
        self.assertIsInstance(field, lv_form.ListViewSearchField)
        # self.assertFalse(field.widget.type)

        builder = registry.builder
        self.assertIsNone(builder(CustomField.STR))

        # ---
        class MyCustomField(lv_form.CustomCharField):
            pass

        registry.register(type=CustomField.STR, sfield_builder=MyCustomField)
        str_field = registry.get_field(cell=str_cell, user=self.user)
        self.assertIsInstance(str_field, MyCustomField)

        int_field = registry.get_field(cell=int_cell, user=self.user)
        self.assertIsInstance(int_field, lv_form.ListViewSearchField)

        self.assertEqual(MyCustomField, builder(CustomField.STR))
        self.assertIsNone(builder(CustomField.INT))
예제 #7
0
    def test_customfield_bool(self):
        customfield = CustomField.objects.create(
            name='Is fun ?',
            field_type=CustomField.BOOL,
            content_type=self.contact_ct,
        )

        cell = EntityCellCustomField(customfield)
        self.assertEqual(settings.CSS_DEFAULT_LISTVIEW,
                         cell.listview_css_class)
        self.assertEqual(settings.CSS_DEFAULT_HEADER_LISTVIEW,
                         cell.header_listview_css_class)

        # Render ---
        user = self.create_user()
        yoko = FakeContact.objects.create(user=user,
                                          first_name='Yoko',
                                          last_name='Littner')
        customfield.value_class.objects.create(entity=yoko,
                                               custom_field=customfield,
                                               value=True)
        self.assertEqual(
            f'<input type="checkbox" checked disabled/>{_("Yes")}',
            cell.render_html(entity=yoko, user=user))
        self.assertEqual(_('Yes'), cell.render_csv(entity=yoko, user=user))
예제 #8
0
    def test_average03(self):
        "Custom field."
        create_cfield = partial(
            CustomField.objects.create,
            content_type=FakeContact,
            field_type=CustomField.INT,
        )
        cfield1 = create_cfield(name='Hair size')
        cfield2 = create_cfield(name='Hair brightness', is_deleted=True)

        agg1 = RGAAverage(cell=EntityCellCustomField(cfield1))
        self.assertIsNone(agg1.error)

        agg2 = RGAAverage(cell=EntityCellCustomField(cfield2))
        self.assertEqual(_('this custom field is deleted.'), agg2.error)
예제 #9
0
    def test_add_custom_fields(self):
        ct = self.ct_orga
        create_cfield = partial(CustomField.objects.create, content_type=ct)
        cfield1 = create_cfield(name='ID number', field_type=CustomField.STR)
        cfield2 = create_cfield(name='2nd site', field_type=CustomField.URL)
        cfield3 = create_cfield(name='Degree', field_type=CustomField.ENUM)
        cfield4 = create_cfield(name='Hobbies',
                                field_type=CustomField.MULTI_ENUM)

        self.assertNoFormError(
            self.client.post(
                self._build_add_url(ct),
                data={
                    'cells':
                    f'custom_field-{cfield1.id},'
                    f'custom_field-{cfield2.id},'
                    f'custom_field-{cfield3.id},'
                    f'custom_field-{cfield4.id}'
                },
            ))

        sc_items = SearchConfigItem.objects.filter(content_type=ct)
        self.assertEqual(1, len(sc_items))
        self.assertListEqual(
            [
                EntityCellCustomField(cf)
                for cf in (cfield1, cfield2, cfield3, cfield4)
            ],
            [*sc_items[0].cells],
        )
예제 #10
0
    def test_customfields02(self):
        "Deleted fields."
        create_cf = partial(
            CustomField.objects.create,
            content_type=FakeContact,
            field_type=CustomField.STR,
        )
        cf1 = create_cf(name='Dog tag')
        cf2 = create_cf(name='Old dog tag', is_deleted=True)

        field = EntityCellsField(model=FakeContact)

        choices = self._find_sub_widget(field, 'custom_field').choices
        self.assertCellInChoices(f'custom_field-{cf1.id}', choices=choices)
        self.assertCellNotInChoices(f'custom_field-{cf2.id}', choices=choices)

        self.assertListEqual([EntityCellCustomField(cf1)],
                             field.clean(f'custom_field-{cf1.id}'))
        self.assertFieldValidationError(
            EntityCellCustomFieldsField,
            'invalid_value',
            field.clean,
            f'custom_field-{cf2.id}',
            message_args={'value': cf2.id},
        )
예제 #11
0
    def test_search_custom_field01(self):
        "Type <CustomField.STR>."
        user = self.login()

        ct = ContentType.objects.get_for_model(FakeOrganisation)
        cfield = CustomField.objects.create(
            name='ID number',
            content_type=ct,
            field_type=CustomField.STR,
        )

        SearchConfigItem.objects.create(
            content_type=ct,
            cells=[EntityCellCustomField(cfield)],
        )

        create_orga = partial(FakeOrganisation.objects.create, user=user)
        orga1 = create_orga(name='Foobar Foundation')
        orga2 = create_orga(name='Foobar Mega Foundation')
        orga3 = create_orga(name='Mega Foobar Foundation')

        cfield.value_class(custom_field=cfield,
                           entity=orga1).set_value_n_save('ABCD123')
        cfield.value_class(custom_field=cfield,
                           entity=orga2).set_value_n_save('HIJK789')

        response = self._search('BCD1', ct.id)
        self.assertEqual(200, response.status_code)

        self.assertContains(response, orga1.get_absolute_url())
        self.assertNotContains(response, orga2.get_absolute_url())
        self.assertNotContains(response, orga3.get_absolute_url())
예제 #12
0
    def cells(self, not_hiddable_cell_keys=()):
        for cfield in CustomField.objects.get_for_model(self.model).values():
            cell = EntityCellCustomField(cfield)

            if self.check_cell(cell=cell,
                               not_hiddable_cell_keys=not_hiddable_cell_keys):
                yield cell
예제 #13
0
    def test_custom_enum(self):
        constraint = GHCCCustomEnum(model=FakeContact)

        create_cfield = partial(
            CustomField.objects.create,
            content_type=FakeContact,
            field_type=CustomField.ENUM,
        )
        cfield1 = create_cfield(name='Hair')
        cfield2 = create_cfield(name='First fight',
                                field_type=CustomField.DATETIME)
        cfield3 = create_cfield(name='Main sector',
                                content_type=FakeOrganisation)
        cfield4 = create_cfield(name='Eyes', is_deleted=True)

        self.assertTrue(constraint.check_cell(EntityCellCustomField(cfield1)))
        self.assertFalse(constraint.check_cell(EntityCellCustomField(cfield2)))

        # ---
        get_cell = constraint.get_cell
        key1 = f'custom_field-{cfield1.id}'
        cell1 = get_cell(cell_key=key1)
        self.assertIsInstance(cell1, EntityCellCustomField)
        self.assertEqual(cfield1, cell1.custom_field)

        self.assertIsNone(get_cell(cell_key=f'custom_field-{cfield2.id}'))
        self.assertIsNone(get_cell(cell_key=f'custom_field-{cfield3.id}'))

        key4 = f'custom_field-{cfield4.id}'
        self.assertIsNone(get_cell(cell_key=key4))
        self.assertIsInstance(
            get_cell(cell_key=key4, not_hiddable_cell_keys=[key4]),
            EntityCellCustomField)

        # ---
        cells = [*constraint.cells()]
        self.assertEqual(1, len(cells))

        cell2 = cells[0]
        self.assertIsInstance(cell2, EntityCellCustomField)
        self.assertEqual(cfield1, cell2.custom_field)

        self.assertListEqual(
            [key1, key4],
            [c.key for c in constraint.cells(not_hiddable_cell_keys=[key4])])
예제 #14
0
    def _accept_cfield(self, cfield, not_hiddable_cell_keys):
        if cfield.field_type not in self.custom_field_types:
            return False

        if cfield.is_deleted:
            cell = EntityCellCustomField(cfield)
            return cell.key in not_hiddable_cell_keys

        return True
예제 #15
0
    def test_customfield_registry02(self):
        "Default data."
        user = self.user
        create_cfield = partial(
            CustomField.objects.create,
            content_type=ContentType.objects.get_for_model(FakeContact),
        )
        str_cfield = create_cfield(name='A', field_type=CustomField.STR)
        int_cfield = create_cfield(name='B', field_type=CustomField.INT)
        bool_cfield = create_cfield(name='C', field_type=CustomField.BOOL)
        deci_cfield = create_cfield(name='D', field_type=CustomField.FLOAT)
        dt_cfield = create_cfield(name='E', field_type=CustomField.DATETIME)
        enum_cfield = create_cfield(name='F', field_type=CustomField.ENUM)
        menum_cfield = create_cfield(name='G',
                                     field_type=CustomField.MULTI_ENUM)

        registry = lv_search.CustomFieldSearchRegistry()

        str_field = registry.get_field(
            cell=EntityCellCustomField(customfield=str_cfield),
            user=user,
        )
        self.assertIsInstance(str_field, lv_form.CustomCharField)

        int_field = registry.get_field(
            cell=EntityCellCustomField(customfield=int_cfield),
            user=user,
        )
        self.assertIsInstance(int_field, lv_form.CustomIntegerField)

        bool_field = registry.get_field(
            cell=EntityCellCustomField(customfield=bool_cfield),
            user=user,
        )
        self.assertIsInstance(bool_field, lv_form.CustomBooleanField)

        deci_field = registry.get_field(
            cell=EntityCellCustomField(customfield=deci_cfield),
            user=user,
        )
        self.assertIsInstance(deci_field, lv_form.CustomDecimalField)

        dt_field = registry.get_field(
            cell=EntityCellCustomField(customfield=dt_cfield),
            user=user,
        )
        self.assertIsInstance(dt_field, lv_form.CustomDatetimeField)

        enum_field = registry.get_field(
            cell=EntityCellCustomField(customfield=enum_cfield),
            user=user,
        )
        self.assertIsInstance(enum_field, lv_form.CustomChoiceField)

        menum_field = registry.get_field(
            cell=EntityCellCustomField(customfield=menum_cfield),
            user=user,
        )
        self.assertIsInstance(menum_field, lv_form.CustomChoiceField)
예제 #16
0
    def _cfield_cells(self, not_hiddable_cell_keys=()):
        types = self.custom_field_types

        if types:  # NB: avoid useless query if types is empty
            accept = self._accept_cfield

            for cfield in CustomField.objects.get_for_model(
                    self.model).values():
                if accept(cfield,
                          not_hiddable_cell_keys=not_hiddable_cell_keys):
                    yield EntityCellCustomField(cfield)
예제 #17
0
    def test_customfields01(self):
        create_cf = partial(
            CustomField.objects.create,
            content_type=FakeContact,
        )
        cf1 = create_cf(field_type=CustomField.BOOL, name='Pilots?')
        cf2 = create_cf(field_type=CustomField.STR, name='Dog tag')
        cf3 = create_cf(
            field_type=CustomField.BOOL,
            name='Operational?',
            content_type=FakeOrganisation,
        )

        field1 = EntityCellsField(model=FakeContact)

        choices1 = self._find_sub_widget(field1, 'custom_field').choices
        self.assertCellInChoices(f'custom_field-{cf1.id}', choices=choices1)
        self.assertCellInChoices(f'custom_field-{cf2.id}', choices=choices1)
        self.assertCellNotInChoices(f'custom_field-{cf3.id}', choices=choices1)

        # ---
        field2 = EntityCellsField()
        field2.model = FakeContact

        choices2 = self._find_sub_widget(field2, 'custom_field').choices
        self.assertCellInChoices(f'custom_field-{cf1.id}', choices=choices2)

        # ----
        self.assertListEqual(
            [EntityCellCustomField(cf1),
             EntityCellCustomField(cf2)],
            field2.clean(f'custom_field-{cf1.id},custom_field-{cf2.id}'))

        value = '1024'
        self.assertFieldValidationError(
            UniformEntityCellsField,
            'invalid_value',
            field2.clean,
            f'custom_field-{value}',
            message_args={'value': value},
        )
예제 #18
0
    def test_cell_registry_customfield(self):
        cfield = CustomField.objects.create(
            name='A',
            field_type=CustomField.STR,
            content_type=FakeContact,
        )

        cell = EntityCellCustomField(customfield=cfield)
        registry = lv_search.ListViewSearchFieldRegistry()

        field = registry.get_field(cell=cell, user=self.user)
        self.assertIsInstance(field, lv_form.CustomCharField)
예제 #19
0
    def test_build_4_customfield02(self):
        "FLOAT CustomField."
        customfield = CustomField.objects.create(
            name='Weight',
            field_type=CustomField.FLOAT,
            content_type=self.contact_ct,
        )

        cell = EntityCellCustomField(customfield)
        # self.assertEqual('customfieldfloat__value__icontains', cell.filter_string)
        self.assertEqual(settings.CSS_NUMBER_LISTVIEW, cell.listview_css_class)
        self.assertEqual(settings.CSS_DEFAULT_HEADER_LISTVIEW,
                         cell.header_listview_css_class)
예제 #20
0
    def test_customfield_deleted(self):
        name = 'Size (cm)'
        customfield = CustomField.objects.create(
            name=name,
            field_type=CustomField.INT,
            content_type=self.contact_ct,
            is_deleted=True,
        )

        cell = EntityCellCustomField(customfield)
        self.assertEqual(_('{} [deleted]').format(name), cell.title)
        self.assertIs(cell.is_hidden, False)
        self.assertIs(cell.is_excluded, True)
예제 #21
0
    def test_customfields03(self):
        "Deleted fields  + selected cells."
        create_cf = partial(
            CustomField.objects.create,
            content_type=FakeContact,
            field_type=CustomField.STR,
        )
        cf1 = create_cf(name='Dog tag')
        cf2 = create_cf(name='Old dog tag', is_deleted=True)

        field = EntityCellsField(model=FakeContact)
        field.non_hiddable_cells = [EntityCellCustomField(cf2)]

        choices = self._find_sub_widget(field, 'custom_field').choices
        self.assertCellInChoices(f'custom_field-{cf1.id}', choices=choices)
        self.assertCellInChoices(f'custom_field-{cf2.id}', choices=choices)

        # ----
        self.assertListEqual(
            [EntityCellCustomField(cf1),
             EntityCellCustomField(cf2)],
            field.clean(f'custom_field-{cf1.id},custom_field-{cf2.id}'))
예제 #22
0
    def test_build_4_customfield04(self):
        "BOOL CustomField."
        customfield = CustomField.objects.create(
            name='Is fun ?',
            field_type=CustomField.BOOL,
            content_type=self.contact_ct,
        )

        cell = EntityCellCustomField(customfield)
        # self.assertEqual('customfieldboolean__value__creme-boolean', cell.filter_string)
        self.assertEqual(settings.CSS_DEFAULT_LISTVIEW,
                         cell.listview_css_class)
        self.assertEqual(settings.CSS_DEFAULT_HEADER_LISTVIEW,
                         cell.header_listview_css_class)
예제 #23
0
    def test_build_4_customfield03(self):
        "DATE CustomField."
        customfield = CustomField.objects.create(
            name='Day',
            field_type=CustomField.DATETIME,
            content_type=self.contact_ct,
        )

        cell = EntityCellCustomField(customfield)
        # self.assertEqual('customfielddatetime__value__range', cell.filter_string)
        self.assertEqual(settings.CSS_DEFAULT_LISTVIEW,
                         cell.listview_css_class)
        self.assertEqual(settings.CSS_DATE_HEADER_LISTVIEW,
                         cell.header_listview_css_class)
예제 #24
0
    def test_customfield_url(self):
        customfield = CustomField.objects.create(
            name='Village URL',
            field_type=CustomField.URL,
            content_type=self.contact_ct,
        )

        cell = EntityCellCustomField(customfield)

        # Render ---
        user = self.create_user()
        yoko = FakeContact.objects.create(user=user,
                                          first_name='Yoko',
                                          last_name='Littner')

        value = 'www.littner.org'
        customfield.value_class.objects.create(
            entity=yoko,
            custom_field=customfield,
            value=value,
        )
        self.assertHTMLEqual(f'<a href="{value}" target="_blank">{value}</a>',
                             cell.render_html(entity=yoko, user=user))
        self.assertEqual(value, cell.render_csv(entity=yoko, user=user))
예제 #25
0
    def test_customfield_decimal(self):
        customfield = CustomField.objects.create(
            name='Weight',
            field_type=CustomField.FLOAT,
            content_type=self.contact_ct,
        )

        cell = EntityCellCustomField(customfield)
        self.assertEqual(settings.CSS_NUMBER_LISTVIEW, cell.listview_css_class)
        self.assertEqual(settings.CSS_DEFAULT_HEADER_LISTVIEW,
                         cell.header_listview_css_class)

        # Render ---
        user = self.create_user()
        yoko = FakeContact.objects.create(user=user,
                                          first_name='Yoko',
                                          last_name='Littner')
        value = Decimal('1.52')
        value_str = number_format(value, use_l10n=True)
        customfield.value_class.objects.create(entity=yoko,
                                               custom_field=customfield,
                                               value=value)
        self.assertEqual(value_str, cell.render_html(entity=yoko, user=user))
        self.assertEqual(value_str, cell.render_csv(entity=yoko, user=user))
예제 #26
0
    def test_customfield_int(self):
        self.assertEqual(_('Custom fields'),
                         EntityCellCustomField.verbose_name)

        name = 'Size (cm)'
        customfield = CustomField.objects.create(
            name=name,
            field_type=CustomField.INT,
            content_type=self.contact_ct,
        )

        cell = EntityCellCustomField(customfield)
        self.assertIsInstance(cell, EntityCellCustomField)
        self.assertEqual(str(customfield.id), cell.value)
        self.assertEqual(name, cell.title)
        self.assertEqual(f'custom_field-{customfield.id}', cell.key)
        self.assertIs(cell.is_multiline, False)
        self.assertEqual(settings.CSS_NUMBER_LISTVIEW, cell.listview_css_class)
        self.assertEqual(settings.CSS_DEFAULT_HEADER_LISTVIEW,
                         cell.header_listview_css_class)

        cell = EntityCellCustomField.build(FakeContact, customfield.id)
        self.assertIsInstance(cell, EntityCellCustomField)
        self.assertEqual(str(customfield.id), cell.value)

        self.assertIsNone(EntityCellCustomField.build(FakeContact, 1000))
        self.assertIsNone(EntityCellCustomField.build(FakeContact, 'notanint'))

        # Render ---
        user = self.create_user()
        yoko = FakeContact.objects.create(user=user,
                                          first_name='Yoko',
                                          last_name='Littner')
        self.assertEqual('', cell.render_html(entity=yoko, user=user))

        customfield.value_class.objects.create(entity=yoko,
                                               custom_field=customfield,
                                               value=152)
        yoko = self.refresh(yoko)  # Reset caches
        self.assertEqual('152', cell.render_html(entity=yoko, user=user))
        self.assertEqual('152', cell.render_csv(entity=yoko, user=user))
예제 #27
0
    def test_build_4_customfield06(self):
        "MULTI_ENUM CustomField."
        customfield = CustomField.objects.create(
            name='Eva',
            field_type=CustomField.MULTI_ENUM,
            content_type=self.contact_ct,
        )

        create_enumvalue = partial(CustomFieldEnumValue.objects.create,
                                   custom_field=customfield)
        create_enumvalue(value='Eva-00')
        create_enumvalue(value='Eva-01')

        cell = EntityCellCustomField(customfield)
        # self.assertEqual('customfieldmultienum__value__exact', cell.filter_string)
        self.assertEqual(settings.CSS_DEFAULT_LISTVIEW,
                         cell.listview_css_class)
        self.assertEqual(settings.CSS_DEFAULT_HEADER_LISTVIEW,
                         cell.header_listview_css_class)
예제 #28
0
    def test_search_custom_field02(self):
        "Type <CustomField.ENUM>."
        user = self.login()

        ct = ContentType.objects.get_for_model(FakeOrganisation)
        cfield = CustomField.objects.create(
            name='Type',
            content_type=ct,
            field_type=CustomField.ENUM,
        )

        create_evalue = partial(CustomFieldEnumValue.objects.create,
                                custom_field=cfield)
        eval_small = create_evalue(value='Small')
        eval_medium = create_evalue(value='Medium')
        create_evalue(value='Big')

        create_orga = partial(FakeOrganisation.objects.create, user=user)
        orga1 = create_orga(name='Foobar Foundation')
        orga2 = create_orga(name='Foobar Mega Foundation')
        orga3 = create_orga(name='Mega Foobar Foundation')

        create_enum = partial(CustomFieldEnum.objects.create,
                              custom_field=cfield)
        create_enum(entity=orga1, value=eval_small)
        create_enum(entity=orga2, value=eval_medium)

        SearchConfigItem.objects.create(
            content_type=ct,
            cells=[EntityCellCustomField(cfield)],
        )

        response = self._search('Smal', ct.id)
        self.assertEqual(200, response.status_code)

        self.assertContains(response, orga1.get_absolute_url())
        self.assertNotContains(response, orga2.get_absolute_url())
        self.assertNotContains(response, orga3.get_absolute_url())
예제 #29
0
    def test_search_custom_field03(self):
        "Type <CustomField.MULTI_ENUM>."
        user = self.login()

        ct = ContentType.objects.get_for_model(FakeOrganisation)
        cfield = CustomField.objects.create(
            name='Countries',
            content_type=ct,
            field_type=CustomField.MULTI_ENUM,
        )

        create_evalue = partial(CustomFieldEnumValue.objects.create,
                                custom_field=cfield)
        eval_fr = create_evalue(value='France')
        eval_ger = create_evalue(value='Germany')
        create_evalue(value='Italy')

        create_orga = partial(FakeOrganisation.objects.create, user=user)
        orga1 = create_orga(name='Foobar Foundation')
        orga2 = create_orga(name='Foobar Mega Foundation')
        orga3 = create_orga(name='Mega Foobar Foundation')

        cf_memum = partial(CustomFieldMultiEnum, custom_field=cfield)
        cf_memum(entity=orga1).set_value_n_save([eval_fr])
        cf_memum(entity=orga2).set_value_n_save([eval_ger, eval_fr])

        SearchConfigItem.objects.create(
            content_type=ct,
            cells=[EntityCellCustomField(cfield)],
        )

        response = self._search('fran', ct.id)
        self.assertEqual(200, response.status_code)

        self.assertContains(response, orga1.get_absolute_url())
        self.assertContains(response, orga2.get_absolute_url())
        self.assertNotContains(response, orga3.get_absolute_url())
예제 #30
0
    def test_customfield_registry03(self):
        "Sub-registry."
        user1 = self.user
        user2 = CremeUser(
            username='******',
            email='*****@*****.**',
            first_name='Chie',
            last_name='Uru',
        )

        class MyCustomField1(lv_form.ListViewSearchField):
            pass

        class MyCustomField2(lv_form.ListViewSearchField):
            pass

        class MyCustomRegistry(lv_search.AbstractListViewSearchFieldRegistry):
            def get_field(self, *, cell, user, **kwarg):
                cls = MyCustomField1 if user.username == user1.username else MyCustomField2

                return cls(cell=cell, user=user)

        cfield = CustomField.objects.create(
            content_type=FakeContact,
            name='A',
            field_type=CustomField.STR,
        )

        cell = EntityCellCustomField(customfield=cfield)

        registry = lv_search.CustomFieldSearchRegistry()\
                            .register(type=CustomField.STR, sfield_builder=MyCustomRegistry)

        get_field = registry.get_field
        self.assertIsInstance(get_field(cell=cell, user=user1), MyCustomField1)
        self.assertIsInstance(get_field(cell=cell, user=user2), MyCustomField2)