def test_previous_and_next__tree(self): field_1 = forms.Field("field_1") field_2 = forms.Field("field_2") field_3 = forms.Field("field_3") field_4 = forms.Field("field_4") field_1.add_next(field_2, lambda v, u, c: v == 5) field_1.add_next(field_3, lambda v, u, c: c.get("answer") and c["answer"] == 42) field_1.add_next(field_4) field_1.value = 5 update = Mock() cleaned_data = {} self.assertEqual(field_1.previous(), None) self.assertEqual(field_1.next(update, cleaned_data), field_2) self.assertEqual(field_2.previous(), field_1) self.assertEqual(field_2.next(update, cleaned_data), None) field_1.value = 1 update = Mock() cleaned_data = {"answer": 42} self.assertEqual(field_1.previous(), None) self.assertEqual(field_1.next(update, cleaned_data), field_3) self.assertEqual(field_3.previous(), field_1) self.assertEqual(field_3.next(update, cleaned_data), None) field_1.value = 1 update = Mock() cleaned_data = {} self.assertEqual(field_1.previous(), None) self.assertEqual(field_1.next(update, cleaned_data), field_4) self.assertEqual(field_4.previous(), field_1) self.assertEqual(field_4.next(update, cleaned_data), None)
def test_previous_and_next__graph(self): field_1 = forms.Field("field_1") field_2 = forms.Field("field_2") field_3 = forms.Field("field_3") field_4 = forms.Field("field_4") forms.Field("field_5") field_1.add_next(field_2, lambda v, u, c: v == 5) field_1.add_next(field_3) field_2.add_next(field_4) field_3.add_next(field_4) field_4.add_next(field_1, lambda v, u, c: v == "again") field_1.value = 5 field_4.value = "again" update = Mock() cleaned_data = {} self.assertEqual(field_1.next(update, cleaned_data), field_2) self.assertEqual(field_2.previous(), field_1) self.assertEqual(field_2.next(update, cleaned_data), field_4) self.assertEqual(field_4.previous(), field_2) self.assertEqual(field_4.next(update, cleaned_data), field_1) self.assertEqual(field_1.previous(), field_4) field_1.value = 6 self.assertEqual(field_1.next(update, cleaned_data), field_3) self.assertEqual(field_3.previous(), field_1) self.assertEqual(field_3.next(update, cleaned_data), field_4) self.assertEqual(field_4.previous(), field_3) field_4.value = "finish" self.assertEqual(field_4.next(update, cleaned_data), None)
class Form(forms.Form): apple_field = forms.Field( prompt="An apple?", inline_keyboard=[[ InlineKeyboardButton("Yes", callback_data="yes") ], [InlineKeyboardButton("No", callback_data="no")]], ) orange_field = forms.Field( prompt="An orange?", inline_keyboard=[[ InlineKeyboardButton("Yes", callback_data="yes") ], [InlineKeyboardButton("No", callback_data="no")]], )
def test_previous_and_next__linear(self): update = Mock() cleaned_data = {} field_1 = forms.Field("field_1") field_2 = forms.Field("field_2") field_3 = forms.Field("field_3") field_1.add_next(field_2) field_2.add_next(field_3) self.assertEqual(field_1.previous(), None) self.assertEqual(field_1.next(update, cleaned_data), field_2) self.assertEqual(field_2.previous(), field_1) self.assertEqual(field_2.next(update, cleaned_data), field_3) self.assertEqual(field_3.previous(), field_2) self.assertEqual(field_3.next(update, cleaned_data), None)
def get_root_field(self): field = forms.Field( name="field", prompt="An apple?", inline_keyboard=[ [InlineKeyboardButton("Yes", callback_data="yes")], [InlineKeyboardButton("No", callback_data="no")], ], ) field.add_next(field) return field
def test_get_error_text(self, ): error_1 = ValidationError("Wrong input!", code="wrong") error_2 = ValidationError("Bad input!", code="bad") error_3 = ValidationError(["Another error"]) field = forms.Field(name="field", prompt="Input value:") field.errors = [error_1, error_2, error_3] error_text = field.get_error_text() self.assertEqual(error_text, "Wrong input!\nBad input!\nAnother error")
def test_to_prompt_message__text(self): field = forms.Field( name='field', prompt="Input:", inline_keyboard=[[ InlineKeyboardButton("Yes", callback_data="yes") ], [InlineKeyboardButton("No", callback_data="No")]], ) message = field.get_prompt_message_params(Mock(), Mock()) self.assertEqual(message.reply_markup.inline_keyboard, [[InlineKeyboardButton("Yes", callback_data="yes")], [InlineKeyboardButton("No", callback_data="No")]]) self.assertEqual(message.text, "Input:")
def test_clean__use_custom_error_messages(self): first_error = ValidationError("First error", code="first_error") second_error = ValidationError("Second error", code="second_error") def first_validator(value): raise first_error def second_validatator(value): raise second_error field = forms.Field( name="field", validators=[first_validator, second_validatator], custom_error_messages={'second_error': "Custom error message!"}) field.clean("some value", Mock(), Mock()) self.assertEqual(field.errors[0].message, "First error") self.assertEqual(field.errors[1].message, "Custom error message!")
def test_clean__validators_invalid(self): first_error = ValidationError("First error", code="first_error") second_error = ValidationError("Second error", code="second_error") def first_validator(value): raise first_error def second_validator(value): raise second_error field = forms.Field( name="field", validators=[first_validator, second_validator], ) field.clean("some value", Mock(), Mock(), Mock()) self.assertEqual(field.value, "some value") self.assertEqual(field.is_bound, False) self.assertEqual(field.is_valid, False) self.assertEqual(field.errors[0].code, "first_error") self.assertEqual(field.errors[1].code, "second_error") self.assertEqual(field.errors[0].message, "First error") self.assertEqual(field.errors[1].message, "Second error")