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)
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))
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))
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('<i>Sniper</i>', cell.render_html(entity=yoko, user=user)) self.assertEqual(value, cell.render_csv(entity=yoko, user=user))
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 <i>Littner</i>, 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))
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))
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))
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)
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], )
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}, )
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())
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
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])])
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
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)
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)
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}, )
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)
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)
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)
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}'))
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)
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)
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))
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))
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))
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)
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())
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())
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)