def test_referenced_json_object_with_missing_required_field(self):
        d = {
            Container.CONTAINER_FIELD_NAME: {
                JSONObjectWithRequiredField.SOME_FIELD_NAME: "some string",
            }
        }

        with self.assertRaises(ConstraintViolationError):
            loadd(d, Container)
    def test_extended_naive_datetime_with_basic_time_with_microsecond(self):
        self._d[Container.CONTAINER_FIELD_NAME] = "{}T{}.{}Z".format(
            self.EXTENDED_DATE, self.BASIC_TIME, self.MICROSECOND)
        actual = loadd(self._d)

        self.assertIsInstance(actual.container, datetime.datetime)
        self._assert_naive_datetime_with_microsecond(actual.container)
    def test_basic_naive_datetime_with_extended_time(self):
        self._d[Container.CONTAINER_FIELD_NAME] = "{}T{}Z".format(
            self.BASIC_DATE, self.EXTENDED_TIME)
        actual = loadd(self._d)

        self.assertIsInstance(actual.container, datetime.datetime)
        self._assert_naive_datetime(actual.container)
    def test_basic_naive_datetime_with_only_hour(self):
        self._d[Container.CONTAINER_FIELD_NAME] = "{}T{}Z".format(
            self.BASIC_DATE, self.TIME_ONLY_HOUR)
        actual = loadd(self._d)

        self.assertIsInstance(actual.container, datetime.datetime)
        self._assert_naive_datetime_with_only_hour(actual.container)
    def test_basic_naive_datetime_with_basic_time_without_second(self):
        self._d[Container.CONTAINER_FIELD_NAME] = "{}T{}Z".format(
            self.BASIC_DATE, self.BASIC_TIME_WITHOUT_SECOND)
        actual = loadd(self._d)

        self.assertIsInstance(actual.container, datetime.datetime)
        self._assert_naive_datetime_without_second(actual.container)
    def test_basic_date_with_extended_time_and_basic_utc_offset(self):
        self._d[Container.CONTAINER_FIELD_NAME] = "{}T{}{}".format(
            self.BASIC_DATE, self.EXTENDED_TIME, self.BASIC_UTC_OFFSET)
        actual = loadd(self._d)

        self.assertIsInstance(actual.container, datetime.datetime)
        self._assert_datetime_with_utc_offset(actual.container)
    def test_automatic_target_object_recognition_with_simple_object_2(self):
        actual = loadd({
            JSONObjectWithRequiredField.REQUIRED_FIELD_NAME: "value",
            JSONObjectWithRequiredField.SOME_FIELD_NAME: 42
        })

        self.assertIsInstance(actual, JSONObjectWithRequiredField)
    def test_basic_date_with_basic_time_and_utc_offset_with_only_hour(self):
        self._d[Container.CONTAINER_FIELD_NAME] = "{}T{}{}".format(
            self.BASIC_DATE, self.BASIC_TIME, self.UTC_OFFSET_ONLY_HOUR)
        actual = loadd(self._d)

        self.assertIsInstance(actual.container, datetime.datetime)
        self._assert_datetime_with_utc_offset(actual.container)
    def test_extended_date_format(self):
        self._d[Container.CONTAINER_FIELD_NAME] = self.EXTENDED_DATE
        actual = loadd(self._d)

        self.assertIsInstance(actual.container, datetime.date)
        self.assertNotIsInstance(actual.container, datetime.datetime)
        self._assert_date(actual.container)
    def test_basic_date_format(self):
        self._d[Container.CONTAINER_FIELD_NAME] = self.BASIC_DATE
        actual = loadd(self._d)

        self.assertIsInstance(actual.container, datetime.date)
        self.assertNotIsInstance(actual.container, datetime.datetime)
        self._assert_date(actual.container)
 def test_list_with_list(self):
     d = {
         Container.CONTAINER_FIELD_NAME: [[], [1, 2, 3],
                                          ["some string", "another string"]]
     }
     actual = loadd(d, Container)
     self.assertListEqual(d[Container.CONTAINER_FIELD_NAME],
                          actual.container)
 def test_list_with_str(self):
     d = {
         Container.CONTAINER_FIELD_NAME:
         ["some string", "another string", "aaaaaa strriiiiinggg"]
     }
     actual = loadd(d, Container)
     self.assertListEqual(d[Container.CONTAINER_FIELD_NAME],
                          actual.container)
    def test_unicode(self):
        d = {Container.CONTAINER_FIELD_NAME: u"some unicode string"}
        actual = loadd(d, Container)

        if sys.version_info.major == _PY2:
            self.assertIsInstance(actual.container, unicode)

        self.assertEqual(d[Container.CONTAINER_FIELD_NAME], actual.container)
    def test_extended_date_with_time_with_only_hour_and_utc_offset_with_only_hour(
            self):
        self._d[Container.CONTAINER_FIELD_NAME] = "{}T{}{}".format(
            self.EXTENDED_DATE, self.TIME_ONLY_HOUR, self.UTC_OFFSET_ONLY_HOUR)
        actual = loadd(self._d)

        self.assertIsInstance(actual.container, datetime.datetime)
        self._assert_datetime_with_only_hour_and_utc_offset(actual.container)
 def test_json_object(self):
     d = {
         Container.CONTAINER_FIELD_NAME: {
             Container.CONTAINER_FIELD_NAME: "some string"
         }
     }
     actual = loadd(d, Container)
     self.assertIsInstance(actual.container, Container)
    def test_satisfied_required_field(self):
        d = {
            JSONObjectWithRequiredField.SOME_FIELD_NAME: "some string",
            JSONObjectWithRequiredField.REQUIRED_FIELD_NAME: "another string"
        }
        actual = loadd(d, JSONObjectWithRequiredField)

        self.assertEqual(d[JSONObjectWithRequiredField.REQUIRED_FIELD_NAME],
                         actual.required_field)
    def test_only_encodable_field(self):
        self._d[
            ContainerWithFieldModeEncodeOnly.ENCODE_ONLY_NAME] = "some_value"
        actual = loadd(self._d)

        self.assertIsInstance(actual, ContainerWithFieldModeEncodeOnly)
        self.assertNotEqual(
            self._d[ContainerWithFieldModeEncodeOnly.ENCODE_ONLY_NAME],
            actual.encode_only)
    def test_automatic_target_object_recognition_with_inheritance(self):
        d = {
            ExtendedCar.FIELD_MAX_SPEED_NAME: 265,
            ExtendedCar.FIELD_HORSEPOWER_NAME: 135,
            ExtendedCar.FIELD_MODEL_NAME_NAME: "extended car simple model"
        }
        actual = loadd(d)

        self.assertIsInstance(actual, ExtendedCar)
    def test_basic_date_with_basic_time_with_microsecond_and_basic_utc_offset(
            self):
        self._d[Container.CONTAINER_FIELD_NAME] = "{}T{}.{}{}".format(
            self.BASIC_DATE, self.BASIC_TIME, self.MICROSECOND,
            self.BASIC_UTC_OFFSET)
        actual = loadd(self._d)

        self.assertIsInstance(actual.container, datetime.datetime)
        self._assert_datetime_with_microsecond_and_utc_offset(actual.container)
    def test_extended_date_with_basic_time_without_second_and_utc_offset_with_only_hour(
            self):
        self._d[Container.CONTAINER_FIELD_NAME] = "{}T{}{}".format(
            self.EXTENDED_DATE, self.BASIC_TIME_WITHOUT_SECOND,
            self.UTC_OFFSET_ONLY_HOUR)
        actual = loadd(self._d)

        self.assertIsInstance(actual.container, datetime.datetime)
        self._assert_datetime_with_utc_offset_and_without_second(
            actual.container)
    def test_super_class_as_target_of_json_object(self):
        d = {
            ExtendedCar.FIELD_MODEL_NAME_NAME: "some car model",
            ExtendedCar.FIELD_MAX_SPEED_NAME: 130,
            ExtendedCar.FIELD_HORSEPOWER_NAME: 30
        }
        actual = loadd(d, Car)

        self.assertIsInstance(actual, Car)
        self.assertEqual(d[Car.FIELD_MODEL_NAME_NAME], actual.model_name)
        self.assertEqual(d[Car.FIELD_MAX_SPEED_NAME], actual.max_speed)
    def test_automatic_target_object_recognition_with_deeper_inheritance(self):
        d = {
            ExtendedExtendedCar.FIELD_MODEL_NAME_NAME:
            u"extended extended premium model",
            ExtendedExtendedCar.FIELD_HORSEPOWER_NAME: 1633,
            ExtendedExtendedCar.FIELD_MAX_SPEED_NAME: 400,
            ExtendedExtendedCar.FIELD_COLOR_NAME: u"white"
        }
        actual = loadd(d)

        self.assertIsInstance(actual, ExtendedExtendedCar)
    def test_dict_with_json_object(self):
        d = {
            Container.CONTAINER_FIELD_NAME: {
                "key1": {
                    Container.CONTAINER_FIELD_NAME: "some string"
                }
            }
        }
        actual = loadd(d, Container)

        self.assertIsInstance(actual.container, dict)
        self.assertIsInstance(actual.container["key1"], Container)
 def test_list_with_dict(self):
     d = {
         Container.CONTAINER_FIELD_NAME: [{
             "key1": "some value",
             "key2": 1
         }, {
             "key1": 42
         }]
     }
     actual = loadd(d, Container)
     self.assertListEqual(d[Container.CONTAINER_FIELD_NAME],
                          actual.container)
    def test_automatic_target_object_recognition_with_two_objects_where_one_has_the_same_but_more_fields(
            self):
        d = {
            IssuePriority.NAME_NAME:
            u"critical",
            IssuePriority.ID_NAME:
            u"1",
            IssuePriority.ICON_URL_NAME:
            u"http://www.some-domain.com/some/path/icon.png"
        }
        actual = loadd(d)

        self.assertIsInstance(actual, IssuePriority)
    def test_list_with_unicode(self):
        d = {
            Container.CONTAINER_FIELD_NAME:
            [u"some unicode string", u"another unicode string", u"aaaaa"]
        }
        actual = loadd(d, Container)

        if sys.version_info.major == _PY2:
            for element in actual.container:
                self.assertIsInstance(element, unicode)

        self.assertListEqual(d[Container.CONTAINER_FIELD_NAME],
                             actual.container)
    def test_list_with_json_object_with_satisfied_required_field(self):
        d = {
            Container.CONTAINER_FIELD_NAME: [{
                JSONObjectWithRequiredField.REQUIRED_FIELD_NAME:
                "some string"
            }]
        }
        actual = loadd(d, Container)

        self.assertEqual(
            d[Container.CONTAINER_FIELD_NAME][0][
                JSONObjectWithRequiredField.REQUIRED_FIELD_NAME],
            actual.container[0].required_field)
    def test_list_with_json_object(self):
        d = {
            Container.CONTAINER_FIELD_NAME: [{
                Container.CONTAINER_FIELD_NAME:
                "some string"
            }, {
                Container.CONTAINER_FIELD_NAME: 1
            }]
        }
        actual = loadd(d, Container)

        all(
            self.assertIsInstance(item, Container)
            for item in actual.container)

        expected = [
            loadd(item, Container)
            for item in d[Container.CONTAINER_FIELD_NAME]
        ]
        for item in expected:
            self.assertTrue(
                any(item.container == actual_item.container
                    for actual_item in actual.container))
 def test_str(self):
     d = {Container.CONTAINER_FIELD_NAME: "some string"}
     actual = loadd(d, Container)
     self.assertEqual(d[Container.CONTAINER_FIELD_NAME], actual.container)
 def test_bool(self):
     d = {Container.CONTAINER_FIELD_NAME: True}
     actual = loadd(d, Container)
     self.assertEqual(d[Container.CONTAINER_FIELD_NAME], actual.container)