Beispiel #1
0
    def test_widget_choices(self):
        field = EnhancedModelMultipleChoiceField(queryset=FakeSector.objects.all())
        sector1, sector2 = FakeSector.objects.all()[:2]
        widget = field.widget
        field.forced_values = [sector1.id]

        choices = [*widget.choices]
        choice1 = self.assertFoundChoice(sector1.id, sector1.title, choices)
        self.assertTrue(choice1.readonly)

        choice2 = self.assertFoundChoice(sector2.id, sector2.title, choices)
        self.assertFalse(choice2.readonly)
Beispiel #2
0
    def test_required(self):
        field = EnhancedModelMultipleChoiceField(queryset=FakeSector.objects.all())
        self.assertTrue(field.required)
        self.assertIsInstance(field.widget, UnorderedMultipleChoiceWidget)
        self.assertSetEqual(set(), field.initial)

        sectors = [*FakeSector.objects.all()]
        self.assertGreaterEqual(len(sectors), 3)

        sector1 = sectors[0]
        sector2 = sectors[1]
        sector3 = sectors[2]

        choices = [*field.choices]
        choice1 = self.assertFoundChoice(sector1.id, sector1.title, choices)
        self.assertFalse(choice1.readonly)
        self.assertFalse(choice1.help)

        self.assertFoundChoice(sector2.id, sector2.title, choices)

        clean = field.clean
        self.assertSetEqual({sector1, sector3}, {*clean([sector1.id, sector3.id])})
        self.assertSetEqual({sector1, sector3}, {*clean([str(sector1.id), str(sector3.id)])})

        # NB: we need a 0-argument constructor
        field_builder = partial(EnhancedModelMultipleChoiceField, queryset=FakeSector.objects.all())
        self.assertFieldValidationError(field_builder, 'required', clean, '')
        self.assertFieldValidationError(field_builder, 'required', clean, [])
        self.assertFieldValidationError(field_builder, 'required', clean, None)
Beispiel #3
0
    def test_not_required(self):
        field = EnhancedModelMultipleChoiceField(queryset=FakeSector.objects.all(), required=False)

        sector = FakeSector.objects.first()
        self.assertIsNotNone(sector)

        clean = field.clean
        self.assertListEqual([sector], [*clean([sector.id])])
        self.assertFalse([], clean(''))
        self.assertFalse([], clean([]))
Beispiel #4
0
    def test_iterator(self):
        class CustomIterator(EnhancedModelChoiceIterator):
            def help(self, obj):
                return 'The "{}" sector'.format(obj)

        field = EnhancedModelMultipleChoiceField(
            queryset=FakeSector.objects.all(),
            iterator=CustomIterator,
        )

        sector = FakeSector.objects.first()

        choices = [*field.choices]
        choice = self.assertFoundChoice(sector.id, sector.title, choices)
        self.assertEqual('The "{}" sector'.format(sector), choice.help)
Beispiel #5
0
    def test_initial(self):
        field = EnhancedModelMultipleChoiceField(queryset=FakeSector.objects.all())
        sector1, sector2 = FakeSector.objects.all()[:2]

        field.initial = [sector2.id, sector1.id]
        self.assertSetEqual({sector2.id, sector1.id}, field.initial)

        field.initial = [sector1.id]
        self.assertSetEqual({sector1.id}, field.initial)

        field.initial = None
        self.assertFalse(field.initial)

        field.forced_values = [sector1.id]
        field.initial = [sector2.id]
        self.assertSetEqual({sector2.id, sector1.id}, field.initial)
        self.assertEqual(frozenset([sector1.id]), field.forced_values)