def test_registry_numeric(self): user = self.create_user() field_printers_registry = _FieldPrintersRegistry() # Integer capital = 12345 create_orga = partial(FakeOrganisation.objects.create, user=user) orga1 = create_orga(name='Hawk', capital=capital) orga2 = create_orga(name='God hand') get_csv_val = field_printers_registry.get_csv_field_value self.assertEqual(str(capital), get_csv_val(orga1, 'capital', user)) self.assertEqual('', get_csv_val(orga2, 'capital', user)) # Decimal & integer with choices line1 = FakeInvoiceLine( item='Swords', quantity='3.00', unit_price='125.6', # discount_unit=FAKE_PERCENT_UNIT, discount_unit=FakeInvoiceLine.Discount.PERCENT, ) dec_format = partial(number_format, use_l10n=True) self.assertEqual(dec_format('3.00'), get_csv_val(line1, 'quantity', user)) self.assertEqual(dec_format('125.6'), get_csv_val(line1, 'unit_price', user))
def test_registry_m2m_entity01(self): user = self.login() registry = field_printers._FieldPrintersRegistry() as_html = registry.get_html_field_value as_csv = registry.get_csv_field_value create_ml = partial(FakeMailingList.objects.create, user=user) ml1 = create_ml(name='Swimsuits', description='Best swimsuits of this year') ml2 = create_ml(name='Hats') # Notice that description is empty camp = FakeEmailCampaign.objects.create(user=user, name='Summer 2020') camp.mailing_lists.set([ml1, ml2]) self.assertHTMLEqual( f'<ul><li>{ml2.name}</li><li>{ml1.name}</li></ul>', as_html(camp, 'mailing_lists__name', user), ) self.assertEqual( f'{ml2.name}/{ml1.name}', as_csv(camp, 'mailing_lists__name', user), ) self.assertHTMLEqual( f'<ul><li><p>{ml1.description}</p></li></ul>', as_html(camp, 'mailing_lists__description', user), ) self.assertEqual( ml1.description, as_csv(camp, 'mailing_lists__description', user), )
def test_registry_choice02(self): user = CremeUser() registry = _FieldPrintersRegistry() def print_choices_html(entity, fval, user, field): return '<em>{}</em>'.format( getattr(entity, f'get_{field.name}_display')()) def print_choices_csv(entity, fval, user, field): return getattr(entity, f'get_{field.name}_display')().upper() registry.register_choice_printer( print_choices_html, output='html', ).register_choice_printer( print_choices_csv, output='csv', ) # line = FakeInvoiceLine(discount_unit=FAKE_PERCENT_UNIT) line = FakeInvoiceLine(discount_unit=FakeInvoiceLine.Discount.PERCENT) label = _('Percent') self.assertEqual( '<em>{}</em>'.format(label), registry.get_html_field_value(line, 'discount_unit', user)) self.assertEqual( label.upper(), registry.get_csv_field_value(line, 'discount_unit', user))
def test_field_printers02(self): "ManyToMany (simple model)" user = self.login() field_printers_registry = _FieldPrintersRegistry() create_lang = Language.objects.create lang1 = create_lang(name='Klingon') lang2 = create_lang(name='Namek') goku = FakeContact.objects.create(user=user, first_name='Goku', last_name='Son') # goku.languages = [lang1, lang2] goku.languages.set([lang1, lang2]) get_html_val = field_printers_registry.get_html_field_value result_fmt = '<ul><li>{}</li><li>{}</li></ul>'.format self.assertEqual(result_fmt(lang1, lang2), get_html_val(goku, 'languages', user) ) self.assertEqual(result_fmt(lang1.name, lang2.name), get_html_val(goku, 'languages__name', user) ) get_csv_val = field_printers_registry.get_csv_field_value self.assertEqual('{}/{}'.format(lang1, lang2), get_csv_val(goku, 'languages', user) ) self.assertEqual('{}/{}'.format(lang1.name, lang2.name), get_csv_val(goku, 'languages__name', user) )
def test_field_printers07(self): "Numerics Field" user = self.login() field_printers_registry = _FieldPrintersRegistry() # Integer capital = 12345 create_orga = partial(FakeOrganisation.objects.create, user=user) orga1 = create_orga(name='Hawk', capital=capital) orga2 = create_orga(name='God hand') get_csv_val = field_printers_registry.get_csv_field_value self.assertEqual(capital, get_csv_val(orga1, 'capital', user)) self.assertEqual('', get_csv_val(orga2, 'capital', user)) # Decimal & integer with choices invoice = FakeInvoice.objects.create(user=user, name='Swords & shields') create_line = partial(FakeInvoiceLine.objects.create, user=user, linked_invoice=invoice) line1 = create_line(item='Swords', quantity='3.00', unit_price='125.6', discount_unit=FAKE_PERCENT_UNIT) line2 = create_line(item='Shields', quantity='2.00', unit_price='53.4', discount_unit=None) dec_format = partial(number_format, use_l10n=True) self.assertEqual(dec_format('3.00'), get_csv_val(line1, 'quantity', user)) self.assertEqual(dec_format('125.6'), get_csv_val(line1, 'unit_price', user)) self.assertEqual(FAKE_DISCOUNT_UNIT[FAKE_PERCENT_UNIT], get_csv_val(line1, 'discount_unit', user) ) self.assertEqual('', get_csv_val(line2, 'discount_unit', user))
def test_registry01(self): user = CremeUser() registry = field_printers._FieldPrintersRegistry() as_html = registry.get_html_field_value as_csv = registry.get_csv_field_value sector = FakeSector.objects.all()[0] o = FakeOrganisation( user=user, name='Mars', url_site='www.mars.info', sector=sector, ) self.assertEqual(o.name, as_html(o, 'name', user)) self.assertEqual(o.name, as_csv(o, 'name', user)) self.assertHTMLEqual( '<a href="{url}" target="_blank">{url}</a>'.format(url=o.url_site), as_html(o, 'url_site', user), ) self.assertEqual(o.url_site, as_csv(o, 'url_site', user)) self.assertEqual(sector.title, as_html(o, 'sector', user)) self.assertEqual(sector.title, as_csv(o, 'sector', user)) self.assertEqual(sector.title, as_html(o, 'sector__title', user)) self.assertEqual(sector.title, as_csv(o, 'sector__title', user))
def test_registry_m2m_entity02(self): "Credentials." user = self.login(is_superuser=False) SetCredentials.objects.create( role=self.role, value=EntityCredentials.VIEW, set_type=SetCredentials.ESET_OWN, ) create_ml = FakeMailingList.objects.create ml1 = create_ml(user=user, name='Swimsuits') ml2 = create_ml(user=self.other_user, name='Hats') camp = FakeEmailCampaign.objects.create(user=user, name='Summer 2020') camp.mailing_lists.set([ml1, ml2]) registry = field_printers._FieldPrintersRegistry() self.assertHTMLEqual( f'<ul><li>{settings.HIDDEN_VALUE}</li><li>{ml1.name}</li></ul>', registry.get_html_field_value(camp, 'mailing_lists__name', user), ) self.assertEqual( f'{settings.HIDDEN_VALUE}/{ml1.name}', registry.get_csv_field_value(camp, 'mailing_lists__name', user), )
def test_registry_credentials(self): user = self.login(is_superuser=False, allowed_apps=['creme_core']) SetCredentials.objects.create( role=self.role, value=(EntityCredentials.VIEW | EntityCredentials.CHANGE | EntityCredentials.DELETE | EntityCredentials.LINK | EntityCredentials.UNLINK), set_type=SetCredentials.ESET_OWN, ) field_printers_registry = _FieldPrintersRegistry() create_img = FakeImage.objects.create casca_face = create_img( name='Casca face', user=self.other_user, description="Casca's selfie", ) judo_face = create_img(name='Judo face', user=user, description="Judo's selfie") self.assertTrue(user.has_perm_to_view(judo_face)) self.assertFalse(user.has_perm_to_view(casca_face)) create_contact = partial(FakeContact.objects.create, user=user) casca = create_contact(first_name='Casca', last_name='Mylove', image=casca_face) judo = create_contact(first_name='Judo', last_name='Doe', image=judo_face) get_html_val = field_printers_registry.get_html_field_value self.assertEqual( f'<a href="{judo_face.get_absolute_url()}">{judo_face}</a>', get_html_val(judo, 'image', user)) self.assertEqual( # '<p>Judo's selfie</p>', '<p>Judo's selfie</p>', get_html_val(judo, 'image__description', user)) HIDDEN_VALUE = settings.HIDDEN_VALUE self.assertEqual(HIDDEN_VALUE, get_html_val(casca, 'image', user)) self.assertEqual(HIDDEN_VALUE, get_html_val(casca, 'image__description', user)) self.assertEqual(HIDDEN_VALUE, get_html_val(casca, 'image__categories', user)) get_csv_val = field_printers_registry.get_csv_field_value self.assertEqual(HIDDEN_VALUE, get_csv_val(casca, 'image', user)) self.assertEqual(HIDDEN_VALUE, get_csv_val(casca, 'image__description', user)) self.assertEqual(HIDDEN_VALUE, get_csv_val(casca, 'image__categories', user))
def test_field_printers04(self): "Credentials" user = self.login(is_superuser=False, allowed_apps=['creme_core']) self.role.exportable_ctypes.set( [ContentType.objects.get_for_model(FakeContact)]) SetCredentials.objects.create( role=self.role, value=EntityCredentials.VIEW | EntityCredentials.CHANGE | EntityCredentials.DELETE | EntityCredentials.LINK | EntityCredentials.UNLINK, set_type=SetCredentials.ESET_OWN) field_printers_registry = _FieldPrintersRegistry() create_img = FakeImage.objects.create casca_face = create_img(name='Casca face', user=self.other_user, description="Casca's selfie") judo_face = create_img(name='Judo face', user=user, description="Judo's selfie") self.assertTrue(user.has_perm_to_view(judo_face)) self.assertFalse(user.has_perm_to_view(casca_face)) create_contact = partial(FakeContact.objects.create, user=user) casca = create_contact(first_name='Casca', last_name='Mylove', image=casca_face) judo = create_contact(first_name='Judo', last_name='Doe', image=judo_face) get_html_val = field_printers_registry.get_html_field_value self.assertEqual( '<a href="{}">{}</a>'.format(judo_face.get_absolute_url(), judo_face), get_html_val(judo, 'image', user)) self.assertEqual('<p>Judo's selfie</p>', get_html_val(judo, 'image__description', user)) HIDDEN_VALUE = settings.HIDDEN_VALUE self.assertEqual(HIDDEN_VALUE, get_html_val( casca, 'image', user)) #_('Entity #%s (not viewable)') % casca_face.id self.assertEqual(HIDDEN_VALUE, get_html_val(casca, 'image__description', user)) self.assertEqual(HIDDEN_VALUE, get_html_val(casca, 'image__categories', user)) get_csv_val = field_printers_registry.get_csv_field_value self.assertEqual(HIDDEN_VALUE, get_csv_val(casca, 'image', user)) self.assertEqual(HIDDEN_VALUE, get_csv_val(casca, 'image__description', user)) self.assertEqual(HIDDEN_VALUE, get_csv_val(casca, 'image__categories', user))
def test_field_printers08(self): "Test TexField: link => no target" user = self.login() field_printers_registry = _FieldPrintersRegistry() hawk = FakeOrganisation.objects.create(user=user, name='Hawk', description='A powerful army.\nOfficial site: www.hawk-troop.org' ) get_html_val = field_printers_registry.get_html_field_value self.assertEqual('<p>A powerful army.<br />Official site: <a href="http://www.hawk-troop.org">www.hawk-troop.org</a></p>', get_html_val(hawk, 'description', user) )
def test_registry02(self): "Register by field types, different outputs..." user = self.create_user() print_charfield_html_args = [] print_integerfield_html_args = [] def print_charfield_html(entity, fval, user, field): print_charfield_html_args.append((entity, fval, user, field)) return f'<span>{fval}</span>' def print_charfield_csv(entity, fval, user, field): return f'«{fval}»' def print_integerfield_html(entity, fval, user, field): print_integerfield_html_args.append((entity, fval, user, field)) return f'<span data-type="integer">{fval}</span>' registry = _FieldPrintersRegistry().register( models.CharField, print_charfield_html).register( models.CharField, print_charfield_csv, output='csv', ).register( models.IntegerField, print_integerfield_html, output='html', ) create_orga = partial(FakeOrganisation.objects.create, user=user) orga1 = create_orga(name='NERV', capital=1234) orga2 = create_orga(name='Seele') get_html_val = registry.get_html_field_value get_field = FakeOrganisation._meta.get_field self.assertEqual('<span>NERV</span>', get_html_val(orga1, 'name', user)) self.assertListEqual([(orga1, orga1.name, user, get_field('name'))], print_charfield_html_args) self.assertEqual('<span>Seele</span>', get_html_val(orga2, 'name', user)) self.assertEqual('«NERV»', registry.get_csv_field_value(orga1, 'name', user)) self.assertEqual('<span data-type="integer">1234</span>', get_html_val(orga1, 'capital', user)) self.assertListEqual( [(orga1, orga1.capital, user, get_field('capital'))], print_integerfield_html_args)
def test_field_printers09(self): "Test TexField: link => target='_blank'" user = self.login() field_printers_registry = _FieldPrintersRegistry() hawk = FakeOrganisation.objects.create( user=user, name='Hawk', description='A powerful army.\nOfficial site: www.hawk-troop.org') get_html_val = field_printers_registry.get_html_field_value self.assertEqual( '<p>A powerful army.<br>' 'Official site: <a target="_blank" rel="noopener noreferrer" href="http://www.hawk-troop.org">www.hawk-troop.org</a>' '</p>', get_html_val(hawk, 'description', user))
def test_registry_m2m02(self): "Empty sub-values." user1 = self.create_user(0) user2 = self.create_user(1, theme='') team = CremeUser.objects.create(username='******', is_team=True) team.teammates_set.set([user1, user2]) registry = _FieldPrintersRegistry() theme1 = settings.THEMES[0][1] self.assertHTMLEqual( f'<ul><li>{theme1}</li></ul>', registry.get_html_field_value(team, 'teammates_set__theme', user1), ) self.assertEqual( theme1, registry.get_csv_field_value(team, 'teammates_set__theme', user1))
def test_field_printers06(self): "Boolean Field" user = self.login() field_printers_registry = _FieldPrintersRegistry() create_contact = partial(FakeContact.objects.create, user=user) casca = create_contact(first_name='Casca', last_name='Mylove', is_a_nerd=False) judo = create_contact(first_name='Judo', last_name='Doe', is_a_nerd=True) get_html_val = field_printers_registry.get_html_field_value self.assertEqual(u'<input type="checkbox" disabled/>' + _('No'), get_html_val(casca, 'is_a_nerd', user) ) self.assertEqual(u'<input type="checkbox" checked disabled/>' + _('Yes'), get_html_val(judo, 'is_a_nerd', user) ) get_csv_val = field_printers_registry.get_csv_field_value self.assertEqual(_('No'), get_csv_val(casca, 'is_a_nerd', user)) self.assertEqual(_('Yes'), get_csv_val(judo, 'is_a_nerd', user))
def test_registry_m2m02(self): "Empty sub-values." user1 = self.login() user2 = self.other_user user2.theme = '' user2.save() team = CremeUser.objects.create(username='******', is_team=True) team.teammates_set.set([user1, user2]) registry = field_printers._FieldPrintersRegistry() self.assertHTMLEqual( f'<ul><li>{user1.theme}</li></ul>', registry.get_html_field_value(team, 'teammates_set__theme', user1), ) self.assertEqual( user1.theme, registry.get_csv_field_value(team, 'teammates_set__theme', user1) )
def test_registry_m2m_entity03(self): "Deleted entity." user = self.login() create_ml = partial(FakeMailingList.objects.create, user=user) ml1 = create_ml(name='Swimsuits') ml2 = create_ml(name='Hats', is_deleted=True) camp = FakeEmailCampaign.objects.create(user=user, name='Summer 2020') camp.mailing_lists.set([ml1, ml2]) registry = field_printers._FieldPrintersRegistry() self.assertHTMLEqual( f'<ul><li>{ml1.name}</li></ul>', registry.get_html_field_value(camp, 'mailing_lists__name', user), ) self.assertEqual( ml1.name, registry.get_csv_field_value(camp, 'mailing_lists__name', user), )
def test_registry_choice01(self): user = CremeUser() registry = _FieldPrintersRegistry() as_html = registry.get_html_field_value as_csv = registry.get_csv_field_value # l1 = FakeInvoiceLine(discount_unit=FAKE_PERCENT_UNIT) l1 = FakeInvoiceLine(discount_unit=FakeInvoiceLine.Discount.PERCENT) expected1 = _('Percent') self.assertEqual(expected1, as_html(l1, 'discount_unit', user)) self.assertEqual(expected1, as_csv(l1, 'discount_unit', user)) # l2 = FakeInvoiceLine(discount_unit=FAKE_AMOUNT_UNIT) l2 = FakeInvoiceLine(discount_unit=FakeInvoiceLine.Discount.AMOUNT) expected2 = _('Amount') self.assertEqual(expected2, as_html(l2, 'discount_unit', user)) self.assertEqual(expected2, as_csv(l2, 'discount_unit', user)) l3 = FakeInvoiceLine(discount_unit=None) self.assertEqual('', as_html(l3, 'discount_unit', user)) self.assertEqual('', as_csv(l3, 'discount_unit', user))
def test_registry_m2m01(self): user = self.login() registry = field_printers._FieldPrintersRegistry() as_html = registry.get_html_field_value as_csv = registry.get_csv_field_value img = FakeImage.objects.create(user=user, name='My img') img.categories.set([ FakeImageCategory.objects.create(name=name) for name in ('A', 'B', 'C') ]) self.assertHTMLEqual( '<ul><li>A</li><li>B</li><li>C</li></ul>', as_html(img, 'categories', user), ) self.assertEqual('A/B/C', as_csv(img, 'categories', user)) self.assertHTMLEqual( '<ul><li>A</li><li>B</li><li>C</li></ul>', as_html(img, 'categories__name', user), ) self.assertEqual('A/B/C', as_csv(img, 'categories', user))
def test_field_printers03(self): "ManyToMany (CremeEntity)" user = self.login(is_superuser=False) # self.role.exportable_ctypes = [ContentType.objects.get_for_model(FakeEmailCampaign)] self.role.exportable_ctypes.set([ContentType.objects.get_for_model(FakeEmailCampaign)]) SetCredentials.objects.create(role=self.role, value=EntityCredentials.VIEW | EntityCredentials.CHANGE | EntityCredentials.DELETE | EntityCredentials.LINK | EntityCredentials.UNLINK, set_type=SetCredentials.ESET_OWN ) field_printers_registry = _FieldPrintersRegistry() create_camp = partial(FakeEmailCampaign.objects.create, user=user) camp1 = create_camp(name='Camp#1') camp2 = create_camp(name='Camp#2') create_camp(name='Camp#3') create_ml = partial(FakeMailingList.objects.create, user=user) ml1 = create_ml(name='ML#1') ml2 = create_ml(name='ML#2') ml3 = create_ml(name='ML#3', user=self.other_user) # camp1.mailing_lists = [ml1, ml2] # camp2.mailing_lists = [ml3] camp1.mailing_lists.set([ml1, ml2]) camp2.mailing_lists.set([ml3]) get_html_val = field_printers_registry.get_html_field_value get_csv_val = field_printers_registry.get_csv_field_value self.assertEqual('<ul>' '<li><a target="_blank" href="{}">{}</a></li>' '<li><a target="_blank" href="{}">{}</a></li>' '</ul>'.format( ml1.get_absolute_url(), ml1, ml2.get_absolute_url(), ml2, ), get_html_val(camp1, 'mailing_lists', user) ) self.assertEqual('<ul>' '<li>{}</li>' '<li>{}</li>' '</ul>'.format( ml1.name, ml2.name, ), get_html_val(camp1, 'mailing_lists__name', user) ) csv_value = u'{}/{}'.format(ml1, ml2) self.assertEqual(csv_value, get_csv_val(camp1, 'mailing_lists', user)) self.assertEqual(csv_value, get_csv_val(camp1, 'mailing_lists__name', user)) HIDDEN_VALUE = settings.HIDDEN_VALUE html_value = '<ul><li>{}</li></ul>'.format(HIDDEN_VALUE) #_(u'Entity #%s (not viewable)') % ml3.id, self.assertEqual(html_value, get_html_val(camp2, 'mailing_lists', user)) self.assertEqual(html_value, get_html_val(camp2, 'mailing_lists__name', user)) self.assertEqual(HIDDEN_VALUE, get_csv_val(camp2, 'mailing_lists', user)) self.assertEqual(HIDDEN_VALUE, get_csv_val(camp2, 'mailing_lists__name', user))
def test_field_printers01(self): user = self.login() print_foreignkey_html = FKPrinter(none_printer=FKPrinter.print_fk_null_html, default_printer=simple_print_html, ) print_foreignkey_html.register(CremeEntity, FKPrinter.print_fk_entity_html) field_printers_registry = _FieldPrintersRegistry() field_printers_registry.register(models.ForeignKey, print_foreignkey_html) get_html_val = field_printers_registry.get_html_field_value get_csv_val = field_printers_registry.get_csv_field_value create_cat = FakeImageCategory.objects.create cat1 = create_cat(name='Photo of contact') cat2 = create_cat(name='Photo of product') img = FakeImage.objects.create(name="Casca's face", user=user, description="Casca's selfie") # img.categories = [cat1, cat2] img.categories.set([cat1, cat2]) create_contact = partial(FakeContact.objects.create, user=user) casca = create_contact(first_name='Casca', last_name='Mylove', position=FakePosition.objects.create(title='Warrior<script>'), image=img, ) judo = create_contact(first_name='Judo', last_name='Doe') escaped_title = 'Warrior<script>' self.assertEqual(casca.last_name, get_html_val(casca, 'last_name', user)) self.assertEqual(casca.last_name, get_csv_val(casca, 'last_name', user)) self.assertEqual(casca.first_name, get_html_val(casca, 'first_name', user)) self.assertEqual(escaped_title, get_html_val(casca, 'position', user)) self.assertEqual(escaped_title, get_html_val(casca, 'position__title', user)) self.assertEqual(casca.position.title, get_csv_val(casca, 'position__title', user)) # FK: with & without customised null_label self.assertEqual('', get_html_val(judo, 'position', user)) self.assertEqual('', get_csv_val(judo, 'position', user)) self.assertEqual(u'<em>{}</em>'.format(pgettext('persons-is_user', 'None')), get_html_val(casca, 'is_user', user) ) self.assertEqual('', get_csv_val(casca, 'is_user', user)) # Null_label not used in CSV backend self.assertEqual(u'<a href="{}">{}</a>'.format(img.get_absolute_url(), escape(img)), get_html_val(casca, 'image', user) ) self.assertEqual(str(casca.image), get_csv_val(casca, 'image', user)) self.assertEqual('<p>Casca's selfie</p>', get_html_val(casca, 'image__description', user) ) self.assertEqual(casca.image.description, get_csv_val(casca, 'image__description', user) ) date_str = date_format(localtime(casca.created), 'DATETIME_FORMAT') self.assertEqual(date_str, get_html_val(casca, 'created', user)) self.assertEqual(date_str, get_csv_val(casca, 'created', user)) self.assertEqual('<ul><li>{}</li><li>{}</li></ul>'.format(cat1.name, cat2.name), get_html_val(casca, 'image__categories', user) ) self.assertEqual('{}/{}'.format(cat1.name, cat2.name), get_csv_val(casca, 'image__categories', user) ) # TODO: test ImageField self.assertEqual('', get_html_val(judo, 'position__title', user)) self.assertEqual('', get_html_val(judo, 'image', user)) self.assertEqual('', get_html_val(judo, 'image__description', user)) self.assertEqual('', get_html_val(judo, 'image__categories', user)) self.assertEqual(str(user), get_html_val(casca, 'image__user', user)) # depth = 2 self.assertEqual(user.username, get_html_val(casca, 'image__user__username', user)) # depth = 3