Esempio n. 1
0
    def test_render_enhanced_options(self):
        name = 'stuffs'
        Choice = UnorderedMultipleChoiceWidget.Choice
        select = UnorderedMultipleChoiceWidget(
            choices=[
                (Choice(value=1, disabled=True,
                        help='is disabled'), 'Choice #1'),
                (Choice(value=2), 'Choice #2'),
                (Choice(value=3, readonly=True,
                        help='is readonly'), 'Choice #3'),
            ],
            viewless=False,
        )

        html = '''
<div class="ui-creme-widget widget-auto ui-creme-checklistselect"
     widget="ui-creme-checklistselect" >
    <select multiple="multiple" class="ui-creme-input" name="{name}">
        <option value="1" disabled help="is disabled">Choice #1</option>
        <option value="2" help="">Choice #2</option>
        <option value="3" readonly help="is readonly">Choice #3</option>
    </select>
    <span class="checklist-counter"></span>
    <div class="checklist-header">
        <a type="button" class="checklist-check-all">{check_all}</a>
        <a type="button" class="checklist-check-none">{check_none}</a>
    </div>
    <div class="checklist-body"><ul class="checklist-content"></ul></div>
</div>'''.format(
            name=name,
            check_all=_('Check all'),
            check_none=_('Check none'),
        )
        self.assertHTMLEqual(html, select.render(name, ()))
Esempio n. 2
0
    def test_render_empty_with_creation(self):
        name = 'field_1'
        url = '/add/stuff'
        select = UnorderedMultipleChoiceWidget(
            creation_url=url,
            creation_allowed=True,
            viewless=False,
        )

        self.assertTrue(select.creation_allowed)
        html = '''
<div class="ui-creme-widget widget-auto ui-creme-checklistselect"
     widget="ui-creme-checklistselect" >
    <select multiple="multiple" class="ui-creme-input" name="{name}">
    </select>
    <span class="checklist-counter"></span>
    <div class="checklist-header">
        <a type="button" class="checklist-check-all hidden">{check_all}</a>
        <a type="button" class="checklist-check-none hidden">{check_none}</a>
        <a type="button" class="checklist-create" href="{create_url}">{create_lbl}</a>
    </div>
    <div class="checklist-body"><ul class="checklist-content"></ul></div>
</div>'''.format(
            name=name,
            check_all=_('Check all'),
            check_none=_('Check none'),
            create_url=url,
            create_lbl=_('Create'),
        )

        self.assertHTMLEqual(html,
                             select.render(name, (), attrs={'checkall': True}))
Esempio n. 3
0
    def test_render_creation_not_allowed(self):
        name = 'field_1'
        select = UnorderedMultipleChoiceWidget(
            choices=[('a', '#1'), ('b', '#2')],
            creation_url='/add',
            creation_allowed=False,
            viewless=False,
        )

        html = '''
<div class="ui-creme-widget widget-auto ui-creme-checklistselect"
     widget="ui-creme-checklistselect" >
    <select multiple="multiple" class="ui-creme-input" name="{name}">
        <option value="a">#1</option>
        <option value="b">#2</option>
    </select>
    <span class="checklist-counter"></span>
    <div class="checklist-header">
        <a type="button" class="checklist-check-all hidden">{check_all}</a>
        <a type="button" class="checklist-check-none hidden">{check_none}</a>
        <a type="button" class="checklist-create" disabled href="{create_url}">{create_lbl}</a>
    </div>
    <div class="checklist-body"><ul class="checklist-content"></ul></div>
</div>'''.format(
            name=name,
            check_all=_('Check all'),
            check_none=_('Check none'),
            create_url='/add',
            create_lbl=_('Create'),
        )
        self.assertHTMLEqual(html, select.render(name, ()))
Esempio n. 4
0
    def test_render_less01(self):
        name = 'my_choice_field'
        select = UnorderedMultipleChoiceWidget(
            choices=[(1, 'A'), (2, 'B'), (3, 'C')],
            viewless=True,
        )
        self.assertEqual(10, select.MIN_SEARCH_COUNT)
        self.assertEqual(30, select.MIN_FILTER_COUNT)

        html = '''
<div class="ui-creme-widget widget-auto ui-creme-checklistselect"
     widget="ui-creme-checklistselect" less>
    <select multiple="multiple" class="ui-creme-input" name="{name}">
        <option value="1">A</option>
        <option value="2">B</option>
        <option value="3">C</option>
    </select>
    <span class="checklist-counter"></span>
    <div class="checklist-header">
        <a type="button" class="checklist-check-all">{check_all}</a>
        <a type="button" class="checklist-check-none">{check_none}</a>
    </div>
    <div class="checklist-body"><ul class="checklist-content"></ul></div>
    <div class="checklist-footer"><a class="checklist-toggle-less">{more_lbl}</a></div>
</div>'''.format(
            name=name,
            check_all=_('Check all'),
            check_none=_('Check none'),
            more_lbl=_('More'),
        )
        self.assertHTMLEqual(html, select.render(name, value=None))
Esempio n. 5
0
    def test_render_search01(self):
        "Automatic/default behaviour."
        name = 'my_choice_field'
        select = UnorderedMultipleChoiceWidget(
            choices=[(1, 'A'), (2, 'B'), (3, 'C')],
            viewless=False,
        )
        self.assertEqual(10, select.MIN_SEARCH_COUNT)
        self.assertEqual(30, select.MIN_FILTER_COUNT)

        select.MIN_SEARCH_COUNT = 3

        html = '''
<div class="ui-creme-widget widget-auto ui-creme-checklistselect"
     widget="ui-creme-checklistselect">
    <select multiple="multiple" class="ui-creme-input" name="{name}">
        <option value="1">A</option>
        <option value="2">B</option>
        <option value="3">C</option>
    </select>
    <span class="checklist-counter"></span>
    <div class="checklist-header">
        <a type="button" class="checklist-check-all">{check_all}</a>
        <a type="button" class="checklist-check-none">{check_none}</a>
        <input type="search" class="checklist-filter" placeholder="{filter_lbl}">
    </div>
    <div class="checklist-body"><ul class="checklist-content search"></ul></div>
</div>'''.format(
            name=name,
            check_all=_('Check all'),
            check_none=_('Check none'),
            filter_lbl=pgettext('creme_core-noun', 'Search').upper(),
        )
        self.assertHTMLEqual(html, select.render(name, value=None))
Esempio n. 6
0
    def test_render_filter02(self):
        "Fixed behaviour"
        name = 'my_choice_field'
        select = UnorderedMultipleChoiceWidget(
            choices=[(1, 'A'), (2, 'B')],
            viewless=False,
            filtertype='filter',
        )

        html = '''
<div class="ui-creme-widget widget-auto ui-creme-checklistselect"
     widget="ui-creme-checklistselect">
    <select multiple="multiple" class="ui-creme-input" name="{name}">
        <option value="1">A</option>
        <option value="2">B</option>
    </select>
    <span class="checklist-counter"></span>
    <div class="checklist-header">
        <a type="button" class="checklist-check-all hidden">{check_all}</a>
        <a type="button" class="checklist-check-none hidden">{check_none}</a>
        <input type="search" class="checklist-filter" placeholder="{filter_lbl}">
    </div>
    <div class="checklist-body"><ul class="checklist-content filter"></ul></div>
</div>'''.format(
            name=name,
            check_all=_('Check all'),
            check_none=_('Check none'),
            filter_lbl=pgettext('creme_core-noun', 'Filter').upper(),
        )
        self.assertHTMLEqual(html, select.render(name, value=None))
Esempio n. 7
0
    def test_render_viewless03(self):
        "Custom integer value."
        name = 'my_field'
        select = UnorderedMultipleChoiceWidget(choices=[(1, 'A'), (2, 'B')],
                                               viewless=30)
        self.assertEqual(2, select._choice_count())

        html = '''
<div class="ui-creme-widget widget-auto ui-creme-checklistselect" less="30"
     widget="ui-creme-checklistselect">
    <select multiple="multiple" class="ui-creme-input" name="{name}">
        <option value="1">A</option>
        <option value="2">B</option>
    </select>
    <span class="checklist-counter"></span>
    <div class="checklist-header">
        <a type="button" class="checklist-check-all hidden">{check_all}</a>
        <a type="button" class="checklist-check-none hidden">{check_none}</a>
    </div>
    <div class="checklist-body"><ul class="checklist-content"></ul></div>
    <div class="checklist-footer"><a class="checklist-toggle-less">{viewless_lbl}</a></div>
</div>'''.format(
            name=name,
            check_all=_('Check all'),
            check_none=_('Check none'),
            viewless_lbl=_('More'),
        )
        self.assertHTMLEqual(html, select.render(name, ()))
Esempio n. 8
0
    def test_render_option_groups(self):
        select = UnorderedMultipleChoiceWidget(choices=[('Group A', ((1, 'A'), (2, 'B'))),
                                                        ('Group B', ((3, 'C'), (4, 'D'), (5, 'E'))),
                                                       ],
                                               viewless=False,
                                              )
        self.assertEqual(5, select._choice_count())

        html = '''<div class="ui-creme-widget widget-auto ui-creme-checklistselect" widget="ui-creme-checklistselect" >
    <select multiple="multiple" class="ui-creme-input" name="A">
        <optgroup label="Group A">
            <option value="1">A</option>
            <option value="2">B</option>
        </optgroup>
        <optgroup label="Group B">
            <option value="3" selected>C</option>
            <option value="4" selected>D</option>
            <option value="5">E</option>
        </optgroup>
    </select>
    <span class="checklist-counter"></span>
    <div class="checklist-header">
        <a type="button" class="checklist-check-all">{check_all}</a>
        <a type="button" class="checklist-check-none">{check_none}</a>
    </div>
    <div class="checklist-body"><ul class="checklist-content"></ul></div>
</div>'''.format(
            check_all=_(u'Check all'),
            check_none=_(u'Check none'),
        )
        self.assertHTMLEqual(html, select.render('A', (3, 4,)))
Esempio n. 9
0
    def test_filtertype(self):
        select1 = UnorderedMultipleChoiceWidget()
        self.assertIsNone(select1.filtertype)

        select2 = UnorderedMultipleChoiceWidget(filtertype='search')
        self.assertEqual('search', select2.filtertype)

        select2.filtertype = 'filter'
        self.assertEqual('filter', select2.filtertype)

        with self.assertRaises(ValueError):
            select2.filtertype = 'invalid'
Esempio n. 10
0
class AddRelationTypesForm(CremeForm):
    relation_types = ModelMultipleChoiceField(
        label=_('Types of the peripheral relations'),
        queryset=RelationType.objects.all(),
        widget=UnorderedMultipleChoiceWidget(columntype='wide'),
    )

    def __init__(self, entity, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.graph = entity
        self.fields['relation_types'].queryset = \
            RelationType.objects.exclude(pk__in=entity.orbital_relation_types.all())

    def save(self):
        add_rtype = self.graph.orbital_relation_types.add
        for rtype in self.cleaned_data['relation_types']:
            add_rtype(rtype)
Esempio n. 11
0
class HistoryConfigForm(CremeForm):
    relation_types = ModelMultipleChoiceField(
        label=_('Relation types'),
        queryset=RelationType.objects.all(),
        help_text=_HELP_TEXT,
        widget=UnorderedMultipleChoiceWidget(columntype='wide'),
    )

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.fields['relation_types'].queryset = \
            RelationType.objects.exclude(pk__in=HistoryConfigItem.objects.values_list('relation_type', flat=True))

    def save(self, *args, **kwargs):
        create_hci = HistoryConfigItem.objects.create

        for rtype in self.cleaned_data['relation_types']:
            create_hci(relation_type=rtype)
Esempio n. 12
0
 def _formfield(self, initial):
     return MultipleChoiceField(
         choices=self._args['choices'],
         initial=initial,
         widget=UnorderedMultipleChoiceWidget(columntype='wide'),
     )
Esempio n. 13
0
    def test_render_empty(self):
        select = UnorderedMultipleChoiceWidget(creation_url='/add')

        self.assertFalse(select.creation_allowed)
        self.assertHTMLEqual(_('No choice available.'),
                             select.render('field', [], {'checkall': True}))
Esempio n. 14
0
    def test_build_filtertype(self):
        select = UnorderedMultipleChoiceWidget()
        self.assertIsNone(select._build_filtertype(0))
        self.assertIsNone(select._build_filtertype(5))
        self.assertEqual('search', select._build_filtertype(10))
        self.assertEqual('search', select._build_filtertype(20))
        self.assertEqual('filter', select._build_filtertype(30))
        self.assertEqual('filter', select._build_filtertype(100))

        select = UnorderedMultipleChoiceWidget(filtertype='search')
        self.assertEqual('search', select._build_filtertype(0))
        self.assertEqual('search', select._build_filtertype(5))
        self.assertEqual('search', select._build_filtertype(10))
        self.assertEqual('search', select._build_filtertype(20))
        self.assertEqual('search', select._build_filtertype(30))
        self.assertEqual('search', select._build_filtertype(100))