def test_extra_validation_factory(self):
        ExtraValidationFactory = BasicRegistrationFactory(additional_validation_functions=['different_validation_function'])

        ExtraValidationFactory.register(DifferentValidationWidget)

        assert type(ExtraValidationFactory(style='different')) is DifferentValidationWidget

        with pytest.raises(ValidationFunctionError):
            ExtraValidationFactory.register(MissingClassMethodDifferentValidationWidget)
    def test_multiple_match_factory(self):

        MultipleMatchFactory = BasicRegistrationFactory()

        MultipleMatchFactory.register(StandardWidget)
        MultipleMatchFactory.register(DuplicateStandardWidget)

        with pytest.raises(MultipleMatchError):
            MultipleMatchFactory(style='standard')
예제 #3
0
    def test_with_external_registry(self):
        external_registry = {}

        FactoryWithExternalRegistry = \
            BasicRegistrationFactory(registry=external_registry)

        assert len(external_registry) == 0

        FactoryWithExternalRegistry.register(StandardWidget)
        assert type(FactoryWithExternalRegistry(style='standard')) is StandardWidget

        # Ensure the 'external_registry' is being populated see #1988
        assert len(external_registry) == 1
    def test_with_external_registry(self):
        external_registry = {}

        FactoryWithExternalRegistry = \
            BasicRegistrationFactory(registry=external_registry)

        assert len(external_registry) == 0

        FactoryWithExternalRegistry.register(StandardWidget)
        assert type(FactoryWithExternalRegistry(style='standard')) is StandardWidget

        # Ensure the 'external_registry' is being populated see #1988
        assert len(external_registry) == 1
    def test_no_default_factory(self):

        NoDefaultFactory = BasicRegistrationFactory()

        NoDefaultFactory.register(StandardWidget)
        NoDefaultFactory.register(FancyWidget)

        with pytest.raises(NoMatchError):
            NoDefaultFactory()

        # Raises because all requirements are not met for FancyWidget and no
        # default is present.
        with pytest.raises(NoMatchError):
            NoDefaultFactory(style='fancy')

        assert type(NoDefaultFactory(style='standard')) is StandardWidget
        assert type(NoDefaultFactory(style='fancy', feature='present')) is FancyWidget
예제 #6
0
def test_multiple_match_factory():
    MultipleMatchFactory = BasicRegistrationFactory()
    MultipleMatchFactory.register(StandardWidget)
    MultipleMatchFactory.register(DuplicateStandardWidget)

    with pytest.raises(MultipleMatchError):
        MultipleMatchFactory(style='standard')
예제 #7
0
def test_extra_validation_factory():
    ExtraValidationFactory = BasicRegistrationFactory(
        additional_validation_functions=['different_validation_function'])
    ExtraValidationFactory.register(DifferentValidationWidget)
    assert type(
        ExtraValidationFactory(style='different')) is DifferentValidationWidget

    with pytest.raises(ValidationFunctionError):
        ExtraValidationFactory.register(
            MissingClassMethodDifferentValidationWidget)
예제 #8
0
def test_no_default_factory():
    NoDefaultFactory = BasicRegistrationFactory()
    NoDefaultFactory.register(StandardWidget)
    NoDefaultFactory.register(FancyWidget)

    with pytest.raises(NoMatchError):
        NoDefaultFactory()

    # Raises because all requirements are not met for FancyWidget and no
    # default is present.
    with pytest.raises(NoMatchError):
        NoDefaultFactory(style='fancy')

    assert type(NoDefaultFactory(style='standard')) is StandardWidget
    assert type(NoDefaultFactory(style='fancy',
                                 feature='present')) is FancyWidget
예제 #9
0
    def test_validation_fun_not_callable(self):
        TestFactory = BasicRegistrationFactory()

        with pytest.raises(AttributeError):
            TestFactory.register(StandardWidget,
                                 validation_function='not_callable')
예제 #10
0
    def test_default_factory(self):

        DefaultFactory = BasicRegistrationFactory()

        DefaultFactory.register(DefaultWidget, is_default=True)
        assert DefaultFactory.default_widget_type == DefaultWidget

        DefaultFactory.register(StandardWidget)
        DefaultFactory.register(FancyWidget)
        DefaultFactory.register(
            ExternallyValidatedWidget,
            validation_function=external_validation_function)

        assert type(DefaultFactory()) is DefaultWidget
        assert type(DefaultFactory(style='standard')) is StandardWidget
        assert type(DefaultFactory(style='fancy')) is DefaultWidget
        assert type(DefaultFactory(style='fancy',
                                   feature="present")) is FancyWidget
        assert type(
            DefaultFactory(style='external')) is ExternallyValidatedWidget

        with pytest.raises(ValidationFunctionError):
            DefaultFactory.register(UnvalidatedWidget)

        with pytest.raises(ValidationFunctionError):
            DefaultFactory.register(MissingClassMethodWidget)

        DefaultFactory.unregister(StandardWidget)
        assert type(DefaultFactory(style='standard')) is not StandardWidget
    def test_default_factory(self):

        DefaultFactory = BasicRegistrationFactory()

        DefaultFactory.register(DefaultWidget, is_default=True)
        assert DefaultFactory.default_widget_type == DefaultWidget

        DefaultFactory.register(StandardWidget)
        DefaultFactory.register(FancyWidget)
        DefaultFactory.register(ExternallyValidatedWidget,
                                validation_function=external_validation_function)

        assert type(DefaultFactory()) is DefaultWidget
        assert type(DefaultFactory(style='standard')) is StandardWidget
        assert type(DefaultFactory(style='fancy')) is DefaultWidget
        assert type(DefaultFactory(style='fancy', feature="present")) is FancyWidget
        assert type(DefaultFactory(style='external')) is ExternallyValidatedWidget

        with pytest.raises(ValidationFunctionError):
            DefaultFactory.register(UnvalidatedWidget)

        with pytest.raises(ValidationFunctionError):
            DefaultFactory.register(MissingClassMethodWidget)
예제 #12
0
    def test_validation_fun_not_callable(self):
        TestFactory = BasicRegistrationFactory()

        with pytest.raises(AttributeError):
            TestFactory.register(StandardWidget, validation_function='not_callable')