예제 #1
0
    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/>'
                          '&lt;a href=&quot;&quot;&gt;escaped&lt;/a&gt;<br/>'
                          'and boring description<br/>'), sk.description_html)
예제 #2
0
    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)
예제 #3
0
    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)
예제 #4
0
    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)
예제 #5
0
    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)
예제 #6
0
    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)
예제 #7
0
    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)
예제 #8
0
    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)
예제 #9
0
    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)
예제 #10
0
    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)
예제 #11
0
    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)
예제 #12
0
    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'
예제 #13
0
    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)
예제 #14
0
    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)
예제 #16
0
    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)
예제 #17
0
    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))
예제 #18
0
    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)
예제 #19
0
    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))
예제 #20
0
    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)
예제 #21
0
    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])
예제 #22
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)
예제 #23
0
    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)
예제 #24
0
    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,
            },
        )
예제 #25
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)
예제 #26
0
    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)
예제 #27
0
    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)
예제 #28
0
    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)
예제 #29
0
# -*- 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,
)
예제 #30
0
# -*- 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,