Esempio n. 1
0
    def test_should_append_to_importables(self, model_specs, acspec):
        acspec.create_or_update_sys_module()
        from acspecctx import BlogModel  # noqa
        from acspecctx import PostModel  # noqa
        from acspecctx import AuthorModel  # noqa

        with pytest.raises(
            ImportError
        ) as excinfo:
            from acspecctx import ImportErrorModel  # noqa

        assert excinfo.typename == "ImportError"

        model_specs["import_error"] = {
            "test": {
                "type": {
                    "simple": "string"
                }
            }
        }
        acspec = Acspec(model_specs)
        acspec.create_or_update_sys_module()

        from acspecctx import ImportErrorModel
        assert hasattr(ImportErrorModel, "test")
Esempio n. 2
0
    def test_should_sanitize_model_name(self, invalid_model_name_specs):
        acspec = Acspec(invalid_model_name_specs)
        assert "to_be_sanitized" in acspec._raw_specs

        model = acspec.ToBeSanitizedModel({
            "field": "test"
        })
        model.validate()
Esempio n. 3
0
 def test_should_allow_inheritance_form_other_specs(
     self, blog_specs, post_data
 ):
     blog_specs['extended_post'] = {
         ':bases': ["post"],
         "subtitle": {
             "type": "string"
         }
     }
     acspec = Acspec(blog_specs)
     assert issubclass(acspec.ExtendedPostModel, acspec.PostModel)
     post_data["subtitle"] = "Subtitle"
     model = acspec.ExtendedPostModel(post_data)
     model.validate()
Esempio n. 4
0
 def test_should_handle_dict_types(
     self, model_specs, post_data
 ):
     model_specs["blog"]["messages"] = {
         "type": {"dict": {"simple": "string"}}
     }
     acspec = Acspec(model_specs)
     model = acspec.BlogModel({
         "messages": {
             "test_scope": "test_content"
         }
     })
     assert model.to_primitive()["messages"] == {
         "test_scope": "test_content"
     }
Esempio n. 5
0
    def test_raises_on_missing_superclass(self, basic_specs):
        basic_specs["basic"][":bases"] = ["custom_model"]
        with pytest.raises(MissingBaseClassMappingError) as excinfo:
            Acspec(basic_specs)

        assert str(excinfo.value) == \
            "Please provide a class_mapping for 'custom_model'"
Esempio n. 6
0
    def test_provice_custom_base(self, basic_specs):
        class_mapping = {
            ":bases": [CustomModel]
        }
        acspec = Acspec(basic_specs, class_mapping=class_mapping)

        assert hasattr(acspec, "BasicModel")
        assert issubclass(acspec.BasicModel, CustomModel)
Esempio n. 7
0
    def test_specify_superclass(self, basic_specs):
        class_mapping = {
            "custom_model": CustomModel
        }
        basic_specs["basic"][":bases"] = ["custom_model"]
        acspec = Acspec(basic_specs, class_mapping=class_mapping)

        assert hasattr(acspec, "BasicModel")
        assert issubclass(acspec.BasicModel, CustomModel)
Esempio n. 8
0
    def test_should_raise_on_invalid_model_name(
        self, invalid_model_name_specs
    ):
        with pytest.raises(ValueError) as excinfo:
            Acspec(
                invalid_model_name_specs,
                on_invalid_identifier="raise"
            )

        assert str(excinfo.value) == "Invaliid identifier: $%&to-be-sanitized"
Esempio n. 9
0
    def test_should_raise_on_multiple_types(self, model_specs):
        model_specs['blog']['posts']['type']['simple'] = 'string'

        with pytest.raises(
            schematics.exceptions.ModelValidationError
        ) as excinfo:
            Acspec(model_specs)

        assert excinfo.value.messages == {
            'type': {'dict': [
                "Cannot have multiple types: list, simple"
            ]}
        }
Esempio n. 10
0
    def test_should_raise_on_multiple_types(self, blog_specs):
        # add dict, so it contains conflicting list and dict compound types
        blog_specs['blog']['posts']['dict'] = {'type': 'string'}

        with pytest.raises(
            schematics.exceptions.ModelConversionError

        ) as excinfo:
            Acspec(blog_specs)

        assert excinfo.value.messages == {
            'field_descriptors': {'posts': [
                'Cannot have multiple types: dict, list'
            ]}
        }
Esempio n. 11
0
def acspec(request):
    from acspec.base import Acspec
    return Acspec(blog_specs(request))
Esempio n. 12
0
 def test_should_skip_invalid_model_name(self, invalid_model_name_specs):
     acspec = Acspec(invalid_model_name_specs, on_invalid_identifier="skip")
     assert "to_be_sanitized" not in acspec._raw_specs
Esempio n. 13
0
 def test_should_allow_to_override_the_implicit_model_name(
     self, model_specs
 ):
     model_specs['post'][':name'] = "SuperPostModel"
     acspec = Acspec(model_specs)
     assert issubclass(acspec.SuperPostModel, BaseModel)
Esempio n. 14
0
 def test_should_use_dont_serialize_when_none_class(self, model_specs):
     model_specs['blog'][':bases'] = ["dont_serialize_when_none"]
     acspec = Acspec(model_specs)
     assert issubclass(acspec.BlogModel, DontSerializeWhenNoneModel)
Esempio n. 15
0
def acspec(request):
    from acspec.base import Acspec
    return Acspec(model_specs(request))