def test_blueprint(self): array_default = types.Array(element_template=types.String()) blueprint_default = array_default.blueprint() self.assertEqual(blueprint_default["type"], "array") self.assertEqual(blueprint_default["constraints"]["required"], True) self.assertEqual(blueprint_default["constraints"]["min_length"], None) self.assertEqual(blueprint_default["constraints"]["max_length"], None) self.assertEqual(blueprint_default["constraints"]["element_template"], types.String().blueprint()) self.assertEqual(blueprint_default["constraints"]["description"], None) array_custom = types.Array( required=False, min_length=1, max_length=10, element_template=types.String(default="cat"), description="description") blueprint_custom = array_custom.blueprint() self.assertEqual(blueprint_custom["type"], "array") self.assertEqual(blueprint_custom["constraints"]["required"], False) self.assertEqual(blueprint_custom["constraints"]["min_length"], 1) self.assertEqual(blueprint_custom["constraints"]["max_length"], 10) self.assertEqual(blueprint_custom["constraints"]["element_template"], types.String(default="cat").blueprint()) self.assertEqual(blueprint_custom["constraints"]["description"], "description")
def test_data_type(self): array_empty = types.Array(element_template=types.String()) self.assertEqual(array_empty.as_serializable(), []) array_strings = types.Array(element_template=types.String()) array_strings.append("cat") array_strings.append("dog") self.assertEqual(array_strings.as_serializable(), ["cat", "dog"])
class PersonREST(types.Model): first_name = types.String() last_name = types.String() short_string = types.String(max_length=10) address = AddressREST(required=False) addresses = types.Array(element_template=AddressREST()) booleans = types.Array(element_template=types.Boolean()) floats = types.Array(element_template=types.Float()) integers = types.Array(element_template=types.Integer()) strings = types.Array(element_template=types.String())
def test_custom(self): boolean_array = types.Array(element_template=types.Boolean(), description="boolean") self.assertEqual(boolean_array.description, "boolean") float_array = types.Array(element_template=types.Float(), description="float") self.assertEqual(float_array.description, "float") integer_array = types.Array(element_template=types.Integer(), description="integer") self.assertEqual(integer_array.description, "integer") string_array = types.Array(element_template=types.String(), description="string") self.assertEqual(string_array.description, "string") date_array = types.Array(element_template=types.Date(), description="date") self.assertEqual(date_array.description, "date") datetime_array = types.Array(element_template=types.DateTime(), description="datetime") self.assertEqual(datetime_array.description, "datetime") time_array = types.Array(element_template=types.Date(), description="time") self.assertEqual(time_array.description, "time")
class ParentREST(types.Model): p_boolean = types.Boolean() p_float = types.Float() p_integer = types.Integer() p_string = types.String() child = ChildREST()
class MyModel(types.Model): boolean = types.Boolean() float = types.Float() age = types.Integer(maximum=120) name = types.String() sub_model = SubModel()
def test_custom(self): self.assertEqual( types.Array(element_template=types.Boolean(), max_length=1).max_length, 1) self.assertEqual( types.Array(element_template=types.Float(), max_length=2).max_length, 2) self.assertEqual( types.Array(element_template=types.Integer(), max_length=3).max_length, 3) self.assertEqual( types.Array(element_template=types.String(), max_length=4).max_length, 4) self.assertEqual( types.Array(element_template=types.Date(), max_length=5).max_length, 5) self.assertEqual( types.Array(element_template=types.DateTime(), max_length=6).max_length, 6) self.assertEqual( types.Array(element_template=types.Time(), max_length=7).max_length, 7) self.assertEqual( types.Array(element_template=types.Model(), max_length=8).max_length, 8)
def test_string_given_values(self): string_type = types.String( required=False, trim=False, default="default", format="[a-z]{2,8}", choices=["a", "b", "c"], min_length=2, max_length=8 ) blueprint = string_type.blueprint() blueprint["map_name"] = "a_b" string_meta = AttributeMetaData("first_name", blueprint) self.assertEqual(string_meta.name, "first_name") self.assertEqual(string_meta.map_name, "a_b") self.assertEqual(string_meta.cc, "FirstName") self.assertEqual(string_meta.ccif, "firstName") self.assertEqual(string_meta.blueprint_type, "string") self.assertEqual(string_meta.client_class_name, "String") self.assertEqual(string_meta.required, "false") self.assertEqual(string_meta.trim, "false") self.assertEqual(string_meta.default, "\"default\"") self.assertEqual(string_meta.format, "\"[a-z]{2,8}\"") self.assertEqual(string_meta.choices, ["a", "b", "c"]) self.assertEqual(string_meta.min_length, 2) self.assertEqual(string_meta.max_length, 8)
def test_data_type(self): self.assertTrue( types.Array(element_template=types.Boolean()).is_scalar) self.assertTrue(types.Array(element_template=types.Float()).is_scalar) self.assertTrue( types.Array(element_template=types.Integer()).is_scalar) self.assertTrue(types.Array(element_template=types.String()).is_scalar)
def test_add_attribute_string(self): base = Base(template_engine=None, models_definition="models.py", namespace="namespace.models", output_directory="namespace/models") self.assertEqual(base.attribute_string, "") string_blueprint = types.String().blueprint() string_blueprint["map_name"] = "a" base.add_attribute_string(AttributeMetaData("string", string_blueprint)) self.assertEqual(base.attribute_string, "this.string_") class MyModel(types.Model): field = types.String() model_blueprint = MyModel().blueprint() model_blueprint["map_name"] = "b" base.add_attribute_string(AttributeMetaData("model", model_blueprint)) self.assertEqual(base.attribute_string, "this.string_ || this.model_.anyFieldsEnabled()") array_blueprint = types.Array(element_template=MyModel()).blueprint() array_blueprint["map_name"] = "c" base.add_attribute_string(AttributeMetaData("array", array_blueprint)) self.assertEqual( base.attribute_string, "this.string_ || this.model_.anyFieldsEnabled() || this.array_.anyFieldsEnabled()" )
def test_add_model_dependency(self): base = Base(template_engine=None, models_definition="models.py", namespace="namespace.models", output_directory="namespace/models") self.assertEqual(base._dependencies, []) class User(types.Model): first_name = types.String() model_blueprint = User().blueprint() model_blueprint["map_name"] = "a" base.add_model_dependency(AttributeMetaData("user", model_blueprint)) self.assertEqual(base._dependencies, ["namespace.models.User"]) string_blueprint = types.String().blueprint() string_blueprint["map_name"] = "a_b" base.add_model_dependency( AttributeMetaData("first_name", string_blueprint)) self.assertEqual(base._dependencies, ["namespace.models.User", "prestans.types.String"]) array_basic = types.Array(element_template=types.String()).blueprint() array_basic["map_name"] = "c" base.add_model_dependency(AttributeMetaData("tags", array_basic)) self.assertEqual(base._dependencies, ["namespace.models.User", "prestans.types.String"]) array_model = types.Array(element_template=User()).blueprint() array_model["map_name"] = "d" base.add_model_dependency(AttributeMetaData("users", array_model)) self.assertEqual(base._dependencies, ["namespace.models.User", "prestans.types.String"]) integer_blueprint = types.Integer().blueprint() integer_blueprint["map_name"] = "e" base.add_model_dependency( AttributeMetaData("numbers", integer_blueprint)) self.assertEqual(base._dependencies, [ "namespace.models.User", "prestans.types.String", "prestans.types.Integer" ])
class MyModel(types.Model): boolean = types.Boolean() date = types.Date() datetime = types.DateTime() float = types.Float() integer = types.Integer() string = types.String() sub = SubModel() time = types.Time()
def test_remove(self): array = types.Array(element_template=types.String()) array.append("dog") array.append("cat") self.assertEqual(len(array), 2) array.remove("dog") self.assertEqual(len(array), 1) array.remove("cat") self.assertEqual(len(array), 0)
def test_element_template(self): float_element_template = types.Float() string_element_template = types.String() self.assertRaises(TypeError, types.Array, element_template="string") array = types.Array(element_template=float_element_template) self.assertEqual(array.element_template, float_element_template) array.element_template = string_element_template self.assertEqual(array.element_template, string_element_template)
def test_append_data_type(self): array = types.Array(element_template=types.String()) self.assertEqual(len(array), 0) array.append("dog") self.assertEqual(len(array), 1) self.assertTrue("dog" in array) array.append(["cat", "rat"]) self.assertEqual(len(array), 3) self.assertTrue("cat" in array) self.assertTrue("rat" in array)
def test_iter(self): elements = ["a", "b", "c"] array = types.Array(element_template=types.String()) array.append(elements[0]) array.append(elements[1]) array.append(elements[2]) index = 0 for element in array: self.assertEqual(element, elements[index]) index += 1
def test_data_type(self): self.assertIsNone( types.Array(element_template=types.Boolean()). attribute_rewrite_reverse_map()) self.assertIsNone( types.Array(element_template=types.Float()). attribute_rewrite_reverse_map()) self.assertIsNone( types.Array(element_template=types.Integer()). attribute_rewrite_reverse_map()) self.assertIsNone( types.Array(element_template=types.String()). attribute_rewrite_reverse_map())
def test_string_default(self): string_type = types.String() string = BasicTypeElementTemplate(string_type.blueprint()) self.assertEqual(string.blueprint_type, "string") self.assertEqual(string.client_class_name, "String") self.assertEqual(string.required, "true") self.assertEqual(string.trim, "true") self.assertEqual(string.default, "null") self.assertEqual(string.min_length, "null") self.assertEqual(string.max_length, "null") self.assertEqual(string.format, "null") self.assertEqual(string.choices, "null")
def test_default(self): self.assertIsNone( types.Array(element_template=types.Boolean()).min_length) self.assertIsNone( types.Array(element_template=types.Float()).min_length) self.assertIsNone( types.Array(element_template=types.Integer()).min_length) self.assertIsNone( types.Array(element_template=types.String()).min_length) self.assertIsNone( types.Array(element_template=types.Date()).min_length) self.assertIsNone( types.Array(element_template=types.DateTime()).min_length) self.assertIsNone( types.Array(element_template=types.Time()).min_length) self.assertIsNone( types.Array(element_template=types.Model()).min_length)
def test_from_model(self): # check that non data collection raises exception self.assertRaises(TypeError, AttributeFilter.from_model, model_instance="string") # check that array scalar returns filter todo: work out how to further test this array_scalar = AttributeFilter.from_model( types.Array(element_template=types.String())) self.assertTrue(isinstance(array_scalar, AttributeFilter)) # check that a model is constructed correctly and default values work class MyModel(types.Model): name = types.String() age = types.Integer() tags = types.Array(element_template=types.String()) default = AttributeFilter.from_model(model_instance=MyModel()) self.assertFalse(default.name) self.assertFalse(default.age) self.assertFalse(default.tags) default_false = AttributeFilter.from_model(model_instance=MyModel(), default_value=False) self.assertFalse(default_false.name) self.assertFalse(default_false.age) self.assertFalse(default_false.tags) default_true = AttributeFilter.from_model(model_instance=MyModel(), default_value=True) self.assertTrue(default_true.name) self.assertTrue(default_true.age) self.assertTrue(default_true.tags) # check keyword args keyword_args = AttributeFilter.from_model(model_instance=MyModel(), age=True) self.assertFalse(keyword_args.name) self.assertTrue(keyword_args.age) self.assertFalse(keyword_args.tags) self.assertRaises(KeyError, AttributeFilter.from_model, model_instance=MyModel(), missing=True)
def test_array_basic_type(self): array = types.Array(element_template=types.String(default="default")) blueprint = array.blueprint() blueprint["map_name"] = "b_a" array_meta = AttributeMetaData("user_tags", blueprint) self.assertEqual(array_meta.name, "user_tags") self.assertEqual(array_meta.map_name, "b_a") self.assertEqual(array_meta.cc, "UserTags") self.assertEqual(array_meta.ccif, "userTags") self.assertEqual(array_meta.blueprint_type, "array") self.assertEqual(array_meta.client_class_name, "Array") self.assertEqual(array_meta.required, "true") self.assertEqual(array_meta.min_length, "null") self.assertEqual(array_meta.max_length, "null") self.assertFalse(array_meta.element_template_is_model) self.assertEqual(array_meta.element_template.blueprint_type, "string") self.assertEqual(array_meta.element_template.default, "\"default\"")
def test_string_default(self): string_type = types.String() blueprint = string_type.blueprint() blueprint["map_name"] = "a_b" string_meta = AttributeMetaData("first_name", blueprint) self.assertEqual(string_meta.name, "first_name") self.assertEqual(string_meta.map_name, "a_b") self.assertEqual(string_meta.cc, "FirstName") self.assertEqual(string_meta.ccif, "firstName") self.assertEqual(string_meta.blueprint_type, "string") self.assertEqual(string_meta.client_class_name, "String") self.assertEqual(string_meta.required, "true") self.assertEqual(string_meta.trim, "true") self.assertEqual(string_meta.default, "null") self.assertEqual(string_meta.format, "null") self.assertEqual(string_meta.choices, "null") self.assertEqual(string_meta.min_length, "null") self.assertEqual(string_meta.max_length, "null")
def test_data_type(self): boolean_array = types.Array(element_template=types.Boolean()) self.assertFalse(boolean_array.get_attribute_filter()) self.assertFalse(boolean_array.get_attribute_filter(False)) self.assertTrue(boolean_array.get_attribute_filter(True)) float_array = types.Array(element_template=types.Float()) self.assertFalse(float_array.get_attribute_filter()) self.assertFalse(float_array.get_attribute_filter(False)) self.assertTrue(float_array.get_attribute_filter(True)) integer_array = types.Array(element_template=types.Integer()) self.assertFalse(integer_array.get_attribute_filter()) self.assertFalse(integer_array.get_attribute_filter(False)) self.assertTrue(integer_array.get_attribute_filter(True)) string_array = types.Array(element_template=types.String()) self.assertFalse(string_array.get_attribute_filter()) self.assertFalse(string_array.get_attribute_filter(False)) self.assertTrue(string_array.get_attribute_filter(True))
def test_string_given_values(self): string_type = types.String( required=False, trim=False, default="default", min_length=1, max_length=5, format="[a-z]{2, 8}", choices=["a", "b", "c"] ) string = BasicTypeElementTemplate(string_type.blueprint()) self.assertEqual(string.blueprint_type, "string") self.assertEqual(string.client_class_name, "String") self.assertEqual(string.required, "false") self.assertEqual(string.trim, "false") self.assertEqual(string.default, "\"default\"") self.assertEqual(string.min_length, 1) self.assertEqual(string.max_length, 5) self.assertEqual(string.format, "\"[a-z]{2, 8}\"") self.assertEqual(string.choices, ["a", "b", "c"])
class MyModel(types.Model): cat = types.String()
class ParentModel(types.Model): name = types.String() people = types.Array(element_template=SubModel())
class SubModel(types.Model): name = types.String()
class MyModel(types.Model): name = types.String() tags = types.Array(element_template=types.String())
class ParentModel(types.Model): name = types.String() sub_model = MyModel()
class MyModel(types.Model): name = types.String()