예제 #1
0
 def test_should_return_error_for_integer_range_validation(self):
     field = IntegerField(name="Age", code="Q2", label="What is your age",
                          language="eng", range=NumericConstraint(min=15, max=120), ddtype=self.ddtype)
     valid_value = field.validate("120")
     self.assertEqual(valid_value, 120)
     valid_value = field.validate("25.5")
     self.assertEqual(valid_value, 25.5)
예제 #2
0
 def test_should_return_error_for_integer_range_validation(self):
     field = IntegerField(
         name="Age",
         code="Q2",
         label="What is your age",
         constraints=[NumericRangeConstraint(min=15, max=120)])
     valid_value = field.validate("120")
     self.assertEqual(valid_value, 120)
     valid_value = field.validate("25.5")
     self.assertEqual(valid_value, 25.5)
예제 #3
0
 def test_should_return_error_for_wrong_type_for_integer(self):
     with self.assertRaises(AnswerWrongType) as e:
         field = IntegerField(
             name="Age",
             code="Q2",
             label="What is your age",
             constraints=[NumericRangeConstraint(min=15, max=120)])
         field.validate("asas")
     self.assertEqual(e.exception.message,
                      "Answer asas for question Q2 is of the wrong type.")
예제 #4
0
 def test_should_raise_regex_mismatch_exception_if_invalid_phone_number(
         self):
     mobile_number_length = TextLengthConstraint(max=15)
     mobile_number_pattern = RegexConstraint(reg='^[0-9]+$')
     field = TelephoneNumberField(
         name="test",
         code='MC',
         label='question',
         constraints=[mobile_number_length, mobile_number_pattern],
         instruction='')
     with self.assertRaises(RegexMismatchException):
         field.validate(u'020321dsa')
예제 #5
0
    def test_telephone_number_should_clean_before_validate(self):
        mobile_number_length = TextLengthConstraint(max=15)
        mobile_number_pattern = RegexConstraint(reg='^[0-9]+$')
        field = TelephoneNumberField(
            name="test",
            code='MC',
            label='question',
            constraints=[mobile_number_length, mobile_number_pattern],
            instruction='')

        self.assertEqual(u'266123321435', field.validate(u'2.66123321435e+11'))
        self.assertEqual(u'266123321435', field.validate(u'266-123321435'))
        self.assertEqual(u'266123321435', field.validate(u'266123321435.0'))
예제 #6
0
 def test_telephone_number_should_not_trim_the_leading_zeroes(self):
     field = TelephoneNumberField(name="test",
                                  code='MC',
                                  label='question',
                                  constraints=[],
                                  instruction='')
     self.assertEqual(u'020', field.validate(u'020'))
예제 #7
0
 def test_should_validate_location_with_whitespaces(self):
     expect_lat_long = (89.1, 100.1)
     field = GeoCodeField(name="field1_Loc",
                          code="Q1",
                          label="Where do you stay?")
     actual_lat_long = field.validate(lat_long_string="89.1    100.1")
     self.assertEqual(expect_lat_long, actual_lat_long)
예제 #8
0
 def test_should_return_error_for_integer_range_validation_for_min_value(self):
     with self.assertRaises(AnswerTooSmallException) as e:
         field = IntegerField(name="Age", code="Q2", label="What is your age",
                              language="eng", range=NumericConstraint(min=15, max=120), ddtype=self.ddtype)
         valid_value = field.validate(11)
         self.assertFalse(valid_value)
     self.assertEqual(e.exception.message, "Answer 11 for question Q2 is smaller than allowed.")
예제 #9
0
 def test_should_return_error_for_text_length_validation_for_min_value(self):
     with self.assertRaises(AnswerTooShortException) as e:
         field = TextField(name="Age", code="Q2", label="What is your age",
                           language="eng", length=TextConstraint(min=15, max=120), ddtype=self.ddtype)
         valid_value = field.validate("short")
         self.assertFalse(valid_value)
     self.assertEqual(e.exception.message, "Answer short for question Q2 is shorter than allowed.")
예제 #10
0
 def test_should_create_location_field_type_for_default_english_language(
         self):
     expected_json = {
         "label": "Where do you stay?",
         "name": "field1_Loc",
         "code": "Q1",
         "type": "geocode",
         "parent_field_code": None,
         "required": True,
         "instruction": "test_instruction",
         "appearance": None,
         "constraint_message": None,
         "default": None,
         "hint": None,
         "xform_constraint": None,
         "relevant": None
     }
     field = GeoCodeField(
         name="field1_Loc",
         code="Q1",
         label="Where do you stay?",
         instruction="test_instruction",
     )
     actual_json = field._to_json()
     self.assertEqual(actual_json, expected_json)
     field.set_value(field.validate("23,23"))
     self.assertEqual("23.0, 23.0", field.convert_to_unicode())
예제 #11
0
 def test_should_remove_spaces_if_present_in_answer_for_multi_select(self):
     field = SelectField(name="color",
                         code="Q3",
                         label="What is your favorite color",
                         options=[("RED", 'a'), ("YELLOW", 'b'), ('green')],
                         single_select_flag=False,
                         instruction="test_instruction")
     self.assertEqual(['RED', 'YELLOW'], field.validate('a b'))
예제 #12
0
 def _validate_answer_for_field(self, answer, field):
     try:
         value = field.validate(answer)
         return True, value
     except Exception as e:
         field.errors.append(e.message)
         self._validation_exception.append(e)
         return False, e.message
예제 #13
0
 def test_should_validate_location(self):
     expect_lat_long = (89.1, 100.1)
     field = GeoCodeField(name="field1_Loc",
                          code="Q1",
                          label="Where do you stay?",
                          ddtype=self.ddtype,
                          language="eng")
     actual_lat_long = field.validate(lat_long_string="89.1 100.1")
     self.assertEqual(expect_lat_long, actual_lat_long)
예제 #14
0
 def test_successful_text_length_validation(self):
     field = TextField(name="Name", code="Q2", label="What is your Name",
                       language="eng", length=TextConstraint(min=4, max=15), ddtype=self.ddtype)
     field1 = TextField(name="Name", code="Q2", label="What is your Name",
                        language="eng", ddtype=self.ddtype)
     valid_value = field.validate("valid")
     self.assertEqual(valid_value, "valid")
     valid_value = field1.validate("valid")
     self.assertEqual(valid_value, "valid")
예제 #15
0
 def test_successful_text_length_validation(self):
     field = TextField(name="Name",
                       code="Q2",
                       label="What is your Name",
                       constraints=[TextLengthConstraint(min=4, max=15)])
     field1 = TextField(name="Name", code="Q2", label="What is your Name")
     valid_value = field.validate("valid")
     self.assertEqual(valid_value, "valid")
     valid_value = field1.validate("valid")
     self.assertEqual(valid_value, "valid")
예제 #16
0
 def test_should_give_error_for_invalid_location(self):
     field = GeoCodeField(name="field1_Loc", code="Q1", label="Where do you stay?", ddtype=self.ddtype,
                          language="eng")
     with self.assertRaises(GeoCodeFormatException) as e:
         field.validate(lat_long_string="89.1")
         self.assertEquals(("89.1",), e.exception.data)
     with self.assertRaises(GeoCodeFormatException):
         field.validate(lat_long_string="   ")
     with self.assertRaises(GeoCodeFormatException):
         field.validate(lat_long_string="")
     with self.assertRaises(GeoCodeFormatException):
         field.validate(lat_long_string=None)
예제 #17
0
    def test_should_return_error_for_incorrect_date_format_error_for_wrong_format(
            self):
        with self.assertRaises(IncorrectDate) as e:
            field = DateField(name="Age",
                              code="Q2",
                              label="What is your birth date",
                              language="eng",
                              date_format="mm.yyyy",
                              ddtype=self.ddtype)
            valid_value = field.validate("13.2010")
            self.assertFalse(valid_value)
        self.assertEqual(
            e.exception.message,
            "Answer 13.2010 for question Q2 is invalid. Expected date in mm.yyyy format"
        )

        with self.assertRaises(IncorrectDate) as e:
            field = DateField(name="Age",
                              code="Q2",
                              label="What is your birth date",
                              language="eng",
                              date_format="dd.mm.yyyy",
                              ddtype=self.ddtype)
            valid_value = field.validate("33.12.2010")
            self.assertFalse(valid_value)
        self.assertEqual(
            e.exception.message,
            "Answer 33.12.2010 for question Q2 is invalid. Expected date in dd.mm.yyyy format"
        )

        with self.assertRaises(IncorrectDate) as e:
            field = DateField(name="Age",
                              code="Q2",
                              label="What is your birth date",
                              language="eng",
                              date_format="mm.dd.yyyy",
                              ddtype=self.ddtype)
            valid_value = field.validate("13.01.2010")
            self.assertFalse(valid_value)
        self.assertEqual(
            e.exception.message,
            "Answer 13.01.2010 for question Q2 is invalid. Expected date in mm.dd.yyyy format"
        )
예제 #18
0
 def test_should_give_error_for_invalid_location(self):
     field = GeoCodeField(name="field1_Loc",
                          code="Q1",
                          label="Where do you stay?")
     with self.assertRaises(GeoCodeFormatException) as e:
         field.validate(lat_long_string="89.1")
         self.assertEquals(("89.1", ), e.exception.data)
     with self.assertRaises(RequiredFieldNotPresentException):
         field.validate(lat_long_string="   ")
     with self.assertRaises(RequiredFieldNotPresentException):
         field.validate(lat_long_string="")
     with self.assertRaises(RequiredFieldNotPresentException):
         field.validate(lat_long_string=None)
예제 #19
0
 def test_should_return_error_for_integer_range_validation_for_min_value(
         self):
     with self.assertRaises(AnswerTooSmallException) as e:
         field = IntegerField(
             name="Age",
             code="Q2",
             label="What is your age",
             constraints=[NumericRangeConstraint(min=15, max=120)])
         valid_value = field.validate(11)
         self.assertFalse(valid_value)
     self.assertEqual(e.exception.message,
                      "Answer 11 for question Q2 is smaller than allowed.")
예제 #20
0
 def test_should_return_error_for_text_length_validation_for_max_value(
         self):
     with self.assertRaises(AnswerTooLongException) as e:
         field = TextField(name="Age",
                           code="Q2",
                           label="What is your age",
                           constraints=[TextLengthConstraint(min=1, max=4)])
         valid_value = field.validate("long_answer")
         self.assertFalse(valid_value)
     self.assertEqual(
         e.exception.message,
         "Answer long_answer for question Q2 is longer than allowed.")
예제 #21
0
 def test_should_create_multi_select_field_type_for_default_english_language(
         self):
     expected_json = {
         "label":
         "What is your favorite color",
         "name":
         "color",
         "choices": [{
             "text": "RED",
             "val": 'a'
         }, {
             "text": "YELLOW",
             "val": 'b'
         }, {
             "text": 'green',
             'val': 'green'
         }],
         "code":
         "Q3",
         "parent_field_code":
         None,
         "type":
         "select",
         "required":
         True,
         "instruction":
         "test_instruction",
         "appearance":
         None,
         "constraint_message":
         None,
         "default":
         None,
         "hint":
         None,
         "xform_constraint":
         None,
         "relevant":
         None,
         "is_cascade":
         False
     }
     field = SelectField(name="color",
                         code="Q3",
                         label="What is your favorite color",
                         options=[("RED", 'a'), ("YELLOW", 'b'), ('green')],
                         single_select_flag=False,
                         instruction="test_instruction")
     actual_json = field._to_json()
     self.assertEqual(actual_json, expected_json)
     field.set_value(field.validate('ab'))
     self.assertEqual("RED,YELLOW", field.convert_to_unicode())
예제 #22
0
 def test_should_validate_for_required_field(self):
     field = TextField(name='text_field', code=None, label=None)
     with self.assertRaises(RequiredFieldNotPresentException):
         field.validate(None)
     with self.assertRaises(RequiredFieldNotPresentException):
         field.validate("")
     with self.assertRaises(RequiredFieldNotPresentException):
         field.validate("  ")
예제 #23
0
 def test_should_return_error_for_text_length_validation_for_min_value(
         self):
     with self.assertRaises(AnswerTooShortException) as e:
         field = TextField(name="Age",
                           code="Q2",
                           label="What is your age",
                           language="eng",
                           length=TextConstraint(min=15, max=120),
                           ddtype=self.ddtype)
         valid_value = field.validate("short")
         self.assertFalse(valid_value)
     self.assertEqual(
         e.exception.message,
         "Answer short for question Q2 is shorter than allowed.")
예제 #24
0
 def test_should_return_error_for_integer_range_validation_for_max_value(
         self):
     with self.assertRaises(AnswerTooBigException) as e:
         field = IntegerField(name="Age",
                              code="Q2",
                              label="What is your age",
                              language="eng",
                              range=NumericConstraint(min=15, max=120),
                              ddtype=self.ddtype)
         valid_value = field.validate(150)
         self.assertFalse(valid_value)
     self.assertEqual(
         e.exception.message,
         "Answer 150 for question Q2 is greater than allowed.")
예제 #25
0
    def test_should_return_error_for_incorrect_date_format_error_for_wrong_format(self):
        with self.assertRaises(IncorrectDate) as e:
            field = DateField(name="Age", code="Q2", label="What is your birth date",
                              language="eng", date_format="mm.yyyy", ddtype=self.ddtype)
            valid_value = field.validate("13.2010")
            self.assertFalse(valid_value)
        self.assertEqual(e.exception.message,
                         "Answer 13.2010 for question Q2 is invalid. Expected date in mm.yyyy format")

        with self.assertRaises(IncorrectDate) as e:
            field = DateField(name="Age", code="Q2", label="What is your birth date",
                              language="eng", date_format="dd.mm.yyyy", ddtype=self.ddtype)
            valid_value = field.validate("33.12.2010")
            self.assertFalse(valid_value)
        self.assertEqual(e.exception.message,
                         "Answer 33.12.2010 for question Q2 is invalid. Expected date in dd.mm.yyyy format")

        with self.assertRaises(IncorrectDate) as e:
            field = DateField(name="Age", code="Q2", label="What is your birth date",
                              language="eng", date_format="mm.dd.yyyy", ddtype=self.ddtype)
            valid_value = field.validate("13.01.2010")
            self.assertFalse(valid_value)
        self.assertEqual(e.exception.message,
                         "Answer 13.01.2010 for question Q2 is invalid. Expected date in mm.dd.yyyy format")
예제 #26
0
    def test_should_validate_text_data_based_on_list_of_constraints(self):
        length_constraint = TextLengthConstraint(min=10, max=12)
        regex_constraint = RegexConstraint("^[A-Za-z0-9]+$")
        constraints = [length_constraint, regex_constraint]
        field = TextField(name="test",
                          code='MC',
                          label='question',
                          constraints=constraints)

        self.assertEqual('validatable', field.validate('validatable'))
        self.assertRaises(RegexMismatchException, field.validate,
                          '!alidatabl!')
        self.assertRaises(AnswerTooShortException, field.validate, 'val')
        self.assertRaises(AnswerTooLongException, field.validate,
                          'val11111111111111')
예제 #27
0
 def test_successful_text_length_validation(self):
     field = TextField(name="Name",
                       code="Q2",
                       label="What is your Name",
                       language="eng",
                       length=TextConstraint(min=4, max=15),
                       ddtype=self.ddtype)
     field1 = TextField(name="Name",
                        code="Q2",
                        label="What is your Name",
                        language="eng",
                        ddtype=self.ddtype)
     valid_value = field.validate("valid")
     self.assertEqual(valid_value, "valid")
     valid_value = field1.validate("valid")
     self.assertEqual(valid_value, "valid")
예제 #28
0
    def test_should_create_select_one_field_type_for_default_english_language(
            self):
        expected_json = {
            "label":
            "What is your favorite color",
            "name":
            "color",
            "choices": [{
                "text": "RED",
                "val": 'a'
            }, {
                "text": "YELLOW",
                "val": 'b'
            }, {
                "text": 'green',
                "val": 'c'
            }],
            "code":
            "Q3",
            'parent_field_code':
            None,
            "type":
            "select1",
            "required":
            True,
            "instruction":
            None
        }
        field = SelectField(name="color",
                            code="Q3",
                            label="What is your favorite color",
                            options=[("RED", 'a'), ("YELLOW", 'b'),
                                     ('green', 'c')])
        actual_json = field._to_json()
        self.assertEqual(actual_json, expected_json)

        field.set_value(field.validate('b'))
        self.assertEqual("YELLOW", field.convert_to_unicode())
예제 #29
0
 def test_should_validate_location_with_whitespaces(self):
     expect_lat_long=(89.1, 100.1)
     field = GeoCodeField(name="field1_Loc", code="Q1", label="Where do you stay?", ddtype=self.ddtype,
                              language="eng")
     actual_lat_long = field.validate(lat_long_string=" 89.1    100.1  ")
     self.assertEqual(expect_lat_long, actual_lat_long)
예제 #30
0
 def test_should_return_error_for_wrong_type_for_integer(self):
     with self.assertRaises(AnswerWrongType) as e:
         field = IntegerField(name="Age", code="Q2", label="What is your age",
                              language="eng", range=NumericConstraint(min=15, max=120), ddtype=self.ddtype)
         field.validate("asas")
     self.assertEqual(e.exception.message, "Answer asas for question Q2 is of the wrong type.")
예제 #31
0
 def _validate_answer_for_field(self, answer, field):
     try:
         value = field.validate(answer)
         return True, value
     except MangroveException as e:
         return False, e.message
예제 #32
0
 def _validate_answer_for_field(self, answer, field):
     try:
         value = field.validate(answer)
         return True, value
     except MangroveException as e:
         return False, e.message