def test_description(self): sk = SettingKey('creme_core-test_sk_string', description='Short description', app_label='creme_core', type=SettingKey.STRING) self.assertEqual('Short description', sk.description) self.assertEqual('Short description', sk.description_html) sk = SettingKey('creme_core-test_sk_string', description=('This is a long,\n' 'multiline,\n' '<a href="">escaped</a>\n' 'and boring description\n'), app_label='creme_core', type=SettingKey.STRING) self.assertEqual(('This is a long,\n' 'multiline,\n' '<a href="">escaped</a>\n' 'and boring description\n'), sk.description) self.assertEqual(('This is a long,<br/>' 'multiline,<br/>' '<a href="">escaped</a><br/>' 'and boring description<br/>'), sk.description_html)
def test_register(self): sk1 = SettingKey( 'creme_core-test_sk_string', description='Page title', app_label='creme_core', type=SettingKey.STRING, blank=True, ) sk2 = SettingKey( 'creme_core-test_sk_int', description='Page size', app_label='creme_core', type=SettingKey.INT, hidden=False, ) sk3 = SettingKey( 'creme_core-test_sk_bool', description='Page hidden', app_label='creme_core', type=SettingKey.BOOL, ) registry = _SettingKeyRegistry() registry.register(sk1, sk2, sk3) # ------ with self.assertNoException(): sk = registry[sk1.id] self.assertEqual(sk1, sk) self.assertEqual(sk2, registry[sk2.id]) self.assertEqual(sk3, registry[sk3.id]) # ------ all_key_ids = {sk.id for sk in registry} self.assertIn(sk1.id, all_key_ids) self.assertIn(sk2.id, all_key_ids) self.assertIn(sk3.id, all_key_ids) # ------ registry.unregister(sk1, sk3) self.assertEqual(sk2, registry[sk2.id]) with self.assertRaises(KeyError): __ = registry[sk1.id] with self.assertRaises(KeyError): __ = registry[sk3.id] all_key_ids = {sk.id for sk in registry} self.assertIn(sk2.id, all_key_ids) self.assertNotIn(sk1.id, all_key_ids) self.assertNotIn(sk3.id, all_key_ids) # with self.assertNoException(): with self.assertRaises(registry.RegistrationError): registry.unregister(sk3)
def test_get_4_keys01(self): sk1 = SettingKey( id='activities-test_get_4_keys01_1', description='Display logo?', app_label='activities', type=SettingKey.BOOL, ) sk2 = SettingKey( id='activities-test_get_4_keys02_2', description='Logo size', app_label='activities', type=SettingKey.INT, ) self._register_key(sk1) self._register_key(sk2) stored_sv1 = SettingValue(key=sk1) stored_sv1.value = True stored_sv1.save() stored_sv2 = SettingValue(key=sk2) stored_sv2.value = 100 stored_sv2.save() pk1 = stored_sv1.pk pk2 = stored_sv2.pk with self.assertNumQueries(1): svalues = SettingValue.objects.get_4_keys( {'key': sk1.id}, # <= Key ID {'key': sk2}, # <= Key instance ) self.assertIsInstance(svalues, dict) self.assertEqual(2, len(svalues)) sv1 = svalues.get(sk1.id) self.assertIsInstance(sv1, SettingValue) self.assertEqual(pk1, sv1.pk) sv2 = svalues.get(sk2.id) self.assertEqual(pk2, sv2.pk) # Cache with self.assertNumQueries(0): svalues = SettingValue.objects.get_4_keys({'key': sk1.id}) self.assertEqual(pk1, svalues[sk1.id].pk) # Cache (shared with get_4_key() ) with self.assertNumQueries(0): sv2 = SettingValue.objects.get_4_key(sk2.id) self.assertEqual(pk2, sv2.pk)
def test_edit_string(self): self.login() sk = SettingKey( id='persons-test_edit_string', description='Page title', app_label='persons', type=SettingKey.STRING, hidden=False, ) setting_key_registry.register(sk) title = 'May the source be with you' sv = SettingValue(key=sk) sv.value = title sv.save() url = self._build_edit_url(sv) response = self.assertGET200(url) self.assertTemplateUsed( response, 'creme_core/generics/blockform/edit-popup.html') context = response.context self.assertEqual( _('Edit «{key}»').format(key=sk.description), context.get('title')) self.assertEqual(_('Save the modifications'), context.get('submit_label')) # --- title = title.upper() self.assertNoFormError(self.client.post(url, data={'value': title})) self.assertEqual(title, self.refresh(sv).value)
def test_edit_email(self): self.login() sk = SettingKey( id='persons-test_edit_email', description='Campaign Sender', app_label='persons', type=SettingKey.EMAIL, ) setting_key_registry.register(sk) email = '*****@*****.**' sv = SettingValue(key=sk) sv.value = email sv.save() url = self._build_edit_url(sv) response = self.assertPOST200(url, data={'value': 42}) self.assertFormError(response, 'form', 'value', _('Enter a valid email address.')) email = '*****@*****.**' self.assertNoFormError(self.client.post(url, data={'value': email})) self.assertEqual(email, self.refresh(sv).value)
def setUpClass(cls): super(SettingValueHelpersTestCase, cls).setUpClass() cls.SETTING_KEY = SettingKey( id='creme_core-test_setting', description='', app_label='creme_core', ) cls.INTEGER_SETTING_KEY = SettingKey( id='creme_core-test_setting_int', description='', app_label='creme_core', type=SettingKey.INT, ) setting_key_registry.register(cls.SETTING_KEY) setting_key_registry.register(cls.INTEGER_SETTING_KEY)
def test_edit_blank02(self): self.login() sk = SettingKey( id='persons-test_edit_blank02', description='API key', app_label='persons', type=SettingKey.INT, blank=True, ) setting_key_registry.register(sk) sv = SettingValue(key=sk) sv.value = 12345 sv.save() self.assertNoFormError(self.client.post(self._build_edit_url(sv))) sv = self.refresh(sv) self.assertEqual('', sv.value_str) self.assertIsNone(sv.value) # --- self.assertNoFormError( self.client.post(self._build_edit_url(sv), data={'value': ''})) sv = self.refresh(sv) self.assertEqual('', sv.value_str) self.assertIsNone(sv.value)
def test_type_int(self): sk = SettingKey( id='persons-test_model_int', description='Page size', app_label='persons', type=SettingKey.INT, ) self.assertFalse(sk.hidden) self.assertFalse(sk.blank) self._register_key(sk) size = 156 sv = SettingValue(key=sk) sv.value = size sv.save() sv = self.refresh(sv) self.assertEqual(size, sv.value) self.assertEqual(size, sv.as_html) # --- size += 1 sv.value = str(size) self.assertEqual(size, sv.value)
def test_get_4_key01(self): "Key ID." sk = SettingKey( id='activities-test_get_4_key01', description='Display logo?', app_label='activities', type=SettingKey.BOOL, ) self._register_key(sk) sv = SettingValue(key=sk) sv.value = True sv.save() pk = sv.pk with self.assertNumQueries(1): sv = SettingValue.objects.get_4_key(sk.id) self.assertIsInstance(sv, SettingValue) self.assertEqual(pk, sv.pk) # Cache with self.assertNumQueries(0): sv = SettingValue.objects.get_4_key(sk.id) self.assertEqual(pk, sv.pk)
def test_type_bool(self): self.login() sk = SettingKey( id='activities-test_model_bool', description='Display logo?', app_label='activities', type=SettingKey.BOOL, ) self._register_key(sk) sv = SettingValue(key=sk) sv.value = True sv.save() sv = self.refresh(sv) self.assertIs(sv.value, True) self.assertEqual( '<input type="checkbox" checked disabled/>{}'.format(_('Yes')), sv.as_html) sv.value = False sv.save() sv = self.refresh(sv) self.assertIs(sv.value, False) self.assertEqual('<input type="checkbox" disabled/>{}'.format(_('No')), sv.as_html)
def test_not_blank(self): sk = SettingKey('creme_core-test_model_not_blank', description=u'API key', app_label='creme_core', type=SettingKey.STRING, blank=False, ) self._register_key(sk) sv = SettingValue(key=sk) with self.assertRaises(ValueError): # # SettingValue.objects.create(key=sk, value='') # SettingValue.objects.create(key=sk, value=None) sv.value = None # sv.value = '' # TODO value = '111' # sv = SettingValue.objects.create(key=sk, value=value) with self.assertNoException(): sv.value = value with self.assertRaises(ValueError): sv.value = None self.assertEqual(value, sv.value)
def test_bad_value(self): sk = SettingKey(id='persons-test_bad_value', description=u'Page size', app_label='persons', type=SettingKey.INT, ) self._register_key(sk) sv = SettingValue(key=sk) with self.assertRaises(ValueError): # SettingValue.objects.create(key=sk, value='abc') sv.value = 'abc'
def test_duplicate(self): sk1 = SettingKey( 'creme_core-test_sk_string', description='Page title', app_label='creme_core', type=SettingKey.STRING, blank=True, ) sk2 = SettingKey( sk1.id, # <=== description='Page size', app_label='creme_core', type=SettingKey.INT, hidden=False, ) registry = _SettingKeyRegistry() registry.register(sk1) with self.assertRaises(registry.RegistrationError): registry.register(sk2)
def test_ciphered_setting_value01(self): self.login() password = "******" skey_id = 'activesync-test_ciphered_setting_value01' skey = SettingKey(id=skey_id, type=SettingKey.STRING, app_label='creme_config', description='') self._register_key(skey) sv = SettingValue.objects.get_or_create(key_id=skey_id, defaults={'value': 'val'})[0] sv.value = Cipher.encrypt_for_db(password) sv.save() sv = self.refresh(sv) self.assertEqual(password, Cipher.decrypt_from_db(sv.value))
def test_app_registry_is_empty03(self): "Use SettingKeys" sk1 = SettingKey( 'creme_core-test_sk_string', description='Page title', app_label='documents', # <== not 'creme_core' type=SettingKey.STRING, blank=True, ) sk2 = SettingKey( 'creme_core-test_sk_int', description='Page size', app_label='creme_core', type=SettingKey.INT, hidden=True, # <== ) sk3 = SettingKey( 'creme_core-test_sk_bool', description='Page hidden', app_label='creme_core', type=SettingKey.BOOL, ) skey_registry = _SettingKeyRegistry() registry = _ConfigRegistry(setting_key_registry=skey_registry) app_registry = registry.get_app_registry('creme_core', create=True) self.assertIs(True, app_registry.is_empty) skey_registry.register(sk1) self.assertIs(True, app_registry.is_empty) skey_registry.register(sk2) self.assertIs(True, app_registry.is_empty) skey_registry.register(sk3) self.assertIs(False, app_registry.is_empty)
def test_type_string(self): sk = SettingKey('creme_core-test_model_string', description=u"Page title", app_label='creme_core', type=SettingKey.STRING, hidden=False, ) self._register_key(sk) title = 'May the source be with you' # sv = SettingValue.objects.create(key=sk, user=None, value=title) sv = SettingValue(key=sk) sv.value = title sv.save() self.assertEqual(title, self.refresh(sv).value)
def test_edit_app_perm01(self): self.login(is_superuser=False, admin_4_apps=['creme_core']) sk = SettingKey( id='creme_core-test_edit_app_perm01', description='Page title', app_label='creme_core', type=SettingKey.STRING, hidden=False, ) setting_key_registry.register(sk) sv = SettingValue(key=sk) sv.value = 'May the source be with you' sv.save() self.assertGET200(self._build_edit_url(sv))
def test_type_hour(self): self.login() sk = SettingKey(id='persons-test_model_hour', description='Reminder hour', app_label='persons', type=SettingKey.HOUR, ) self._register_key(sk) hour = 9 # sv = SettingValue.objects.create(key=sk, user=self.user, value=hour) sv = SettingValue(key=sk) sv.value = hour sv.save() sv = self.refresh(sv) self.assertEqual(hour, sv.value) self.assertEqual(_('{hour}h').format(hour=hour), sv.as_html)
def test_edit_hidden02(self): "Hidden => not editable (value=False)" self.login() sk = SettingKey( id='persons-test_edit_hidden02', description='Display logo ?', app_label='persons', type=SettingKey.BOOL, hidden=True, ) setting_key_registry.register(sk) sv = SettingValue(key=sk) sv.value = False sv.save() self.assertGET409(self._build_edit_url(sv))
def test_get_4_key04(self): "Default value" sk = SettingKey(id='activities-test_get_4_key04', description='Display logo?', app_label='activities', type=SettingKey.BOOL, ) with self.assertLogs(level='CRITICAL') as log_cm: sv = SettingValue.objects.get_4_key(sk, default=False) messages = log_cm.output self.assertEqual(1, len(messages)) self.assertIn('creme_populate', messages[0]) # self.assertIsInstance(sv, SettingValue) # self.assertIsNone(sv.id) self.assertEqual(sk.id, sv.key_id) self.assertIs(False, sv.value)
def test_get_4_key03(self): "Exceptions" sk = SettingKey(id='activities-test_get_4_key03', description='Display logo?', app_label='activities', type=SettingKey.BOOL, ) self._register_key(sk) with self.assertRaises(KeyError): SettingValue.objects.get_4_key('unknown') with self.assertLogs(level='CRITICAL') as log_cm: with self.assertRaises(SettingValue.DoesNotExist): SettingValue.objects.get_4_key(sk) messages = log_cm.output self.assertEqual(1, len(messages)) self.assertIn(''"creme_populate"'', messages[0])
def test_type_email(self): self.login() sk = SettingKey(id='persons-test_model_email', description='Campaign Sender', app_label='emails', type=SettingKey.EMAIL, ) self._register_key(sk) email = u'*****@*****.**' # sv = SettingValue.objects.create(key=sk, user=self.user, value=email) sv = SettingValue(key=sk) sv.value = email sv.save() sv = self.refresh(sv) self.assertEqual(email, sv.value) self.assertEqual(email, sv.as_html)
def test_edit_bool(self): self.login() sk = SettingKey( id='persons-test_edit_bool', description='Display logo ?', app_label='persons', type=SettingKey.BOOL, ) setting_key_registry.register(sk) sv = SettingValue(key=sk) sv.value = True sv.save() # False -> empty POST self.assertNoFormError( self.client.post(self._build_edit_url(sv), data={})) self.assertFalse(self.refresh(sv).value)
def test_edit_hour(self): self.login() sk = SettingKey( id='persons-test_edit_hour', description='Reminder hour', app_label='persons', type=SettingKey.HOUR, ) setting_key_registry.register(sk) hour = 11 sv = SettingValue(key=sk) sv.value = hour sv.save() url = self._build_edit_url(sv) hour += 1 self.assertNoFormError(self.client.post(url, data={'value': hour})) self.assertEqual(hour, self.refresh(sv).value) response = self.assertPOST200(url, data={'value': 24}) self.assertFormError( response, 'form', 'value', _('Ensure this value is less than or equal to %(limit_value)s.') % { 'limit_value': 23, }, ) response = self.assertPOST200(url, data={'value': -1}) self.assertFormError( response, 'form', 'value', _('Ensure this value is greater than or equal to %(limit_value)s.') % { 'limit_value': 0, }, )
def test_edit_int(self): self.login() sk = SettingKey( id='persons-test_edit_int', description='Page size', app_label='persons', type=SettingKey.INT, ) setting_key_registry.register(sk) size = 156 sv = SettingValue(key=sk) sv.value = size sv.save() size += 15 self.assertNoFormError( self.client.post(self._build_edit_url(sv), data={'value': size})) self.assertEqual(size, self.refresh(sv).value)
def test_blank(self): sk = SettingKey('creme_core-test_model_blank', description=u'API key', app_label='creme_core', type=SettingKey.STRING, blank=True, ) self._register_key(sk) # sv = SettingValue.objects.create(key=sk, value='') sv = SettingValue(key=sk) sv.value = '' sv.save() sv = self.refresh(sv) self.assertEqual('', sv.value_str) self.assertIsNone(sv.value) self.assertEqual('', sv.as_html) sv.value = None self.assertIsNone(sv.value)
def test_get_4_keys03(self): "Default value." sk = SettingKey( id='activities-test_get_4_key03_1', description='Display logo?', app_label='activities', type=SettingKey.BOOL, ) with self.assertLogs(level='CRITICAL') as log_cm: svalues = SettingValue.objects.get_4_keys({ 'key': sk, 'default': False }) messages = log_cm.output self.assertEqual(1, len(messages)) self.assertIn('creme_populate', messages[0]) sv = svalues.get(sk.id) self.assertEqual(sk.id, sv.key_id) self.assertIs(False, sv.value)
def test_edit_blank01(self): self.login() sk = SettingKey( id='persons-test_edit_blank01', description='API key', app_label='persons', type=SettingKey.STRING, blank=True, ) setting_key_registry.register(sk) # sv = SettingValue.objects.create(key=sk, value='123-456-abc') sv = SettingValue(key=sk) sv.value = '123-456-abc' sv.save() self.assertNoFormError( self.client.post(self._build_edit_url(sv), data={'value': ''})) sv = self.refresh(sv) self.assertEqual('', sv.value_str) self.assertIsNone(sv.value)
# -*- coding: utf-8 -*- from django.utils.translation import gettext_lazy as _ from creme.creme_core.core.setting_key import SettingKey from .constants import SETTING_CRUDITY_SANDBOX_BY_USER sandbox_key = SettingKey( id=SETTING_CRUDITY_SANDBOX_BY_USER, description=_('Are waiting actions are by user?'), app_label='crudity', type=SettingKey.BOOL, )
# -*- coding: utf-8 -*- from django.utils.translation import gettext_lazy as _ from creme.creme_core.core.setting_key import SettingKey # from .constants import SETTING_USE_CURRENT_QUOTE quote_key = SettingKey( # id=SETTING_USE_CURRENT_QUOTE, id='opportunities-use_current_quote', description=_("Use current associated quote to " "determine an estimation of the opportunity's turnover"), app_label='opportunities', type=SettingKey.BOOL, ) target_constraint_key = SettingKey( id='opportunities-target_constraint', description=_( 'When selecting an Invoice/Quote/Sales order to link, only the ' 'ones which have the same target than the Opportunity are proposed.'), app_label='opportunities', type=SettingKey.BOOL, ) emitter_constraint_key = SettingKey( id='opportunities-emitter_constraint', description=_( 'When selecting an Invoice/Quote/Sales order to link, only the ' 'ones which have the same emitter than the Opportunity are proposed.'), app_label='opportunities', type=SettingKey.BOOL,