def test_choices(self): field = fields.ModelChoiceField(Owner, db) self.assertListEqual(list(field.choices), [("", field.empty_label)] + [(owner.id, str(owner)) for owner in Owner.query]) field = fields.ModelChoiceField(Owner, db, required=True, initial=1) self.assertListEqual(list(field.choices), [(owner.id, str(owner)) for owner in Owner.query])
def test_validate(self): field = fields.ModelChoiceField(Owner, db, required=True) self.assertIsNone(field.validate(1)) with self.assertRaises(ValidationError): field.validate(None)
def test_apply_limit(self): field = fields.ModelChoiceField(Owner, db, limit_choices_to=[Owner.id == 1]) fields.apply_limit_choices_to_form_field(field) self.assertEqual(field.queryset.count(), 1)
def test_label_from_instance(self): owner = Owner.objects.first() field = fields.ModelChoiceField(Owner, db) self.assertEqual(field.label_from_instance(Owner.query.get(owner.id)), repr(owner))
def test_apply_limit(self): db.add_all([ Owner(first_name="one"), Owner(first_name="one_more"), Owner(first_name="two") ]) field = sorceryfields.ModelChoiceField( Owner, db, limit_choices_to=[Owner.first_name.startswith("one")]) forms.apply_limit_choices_to_form_field(field) self.assertEqual(field.queryset.count(), 2)
def test_apply_limit_callable(self): def limit_choices_to(): return [Owner.first_name == "first_name 1"] field = fields.ModelChoiceField(Owner, db, required=True, limit_choices_to=limit_choices_to) apply_limit_choices_to_form_field(field) self.assertEqual(field.queryset.count(), 1)
def test_get_object_composite_pk(self): instance = CompositePkModel(id=1, pk=2) db.add(instance) db.flush() field = fields.ModelChoiceField(CompositePkModel, db) pks = field.prepare_value(instance) obj = field.get_object(json.dumps(pks)) self.assertIsNotNone(obj) self.assertIs(obj, instance)
def test_get_object(self): owner = Owner.objects.first() field = fields.ModelChoiceField(Owner, db) self.assertIsNone(field.get_object(None)) owner = field.get_object(owner.id) self.assertIsNotNone(owner) self.assertIsInstance(owner, Owner) with self.assertRaises(ValidationError) as ctx: field.get_object(0) self.assertEqual( ctx.exception.args, ("Select a valid choice. That choice is not one of the available choices.", "invalid_choice", None), )
def test_prepare_value(self): field = fields.ModelChoiceField(CompositePkModel, db) pks = field.prepare_value(CompositePkModel(id=1, pk="a")) self.assertDictEqual(pks, {"id": 1, "pk": "a"})
def test_prepare_instance_value(self): field = fields.ModelChoiceField(Owner, db) owner = Owner.objects.first() pks = field.prepare_instance_value(Owner.query.get(owner.id)) self.assertEqual(pks, owner.id)
def test_to_python(self): owner = Owner.objects.first() field = fields.ModelChoiceField(Owner, db) owner = field.to_python(owner.id) self.assertIsNotNone(owner) self.assertIsInstance(owner, Owner)
def test_apply_limit_value(self): field = fields.ModelChoiceField( Owner, db, limit_choices_to=[Owner.first_name == "first_name 1"]) apply_limit_choices_to_form_field(field) self.assertEqual(field.queryset.count(), 1)