示例#1
0
    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)
示例#2
0
    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)
示例#3
0
 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")]],
     )
示例#4
0
    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)
示例#5
0
 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
示例#6
0
    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")
示例#7
0
    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:")
示例#8
0
    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!")
示例#9
0
    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")