Beispiel #1
0
def test_meta_update(browser):
    import colander

    from pypom_form.widgets import StringWidget

    class MyStringWidget(StringWidget):
        pass

    class BaseFormSchema(colander.MappingSchema):
        title = colander.SchemaNode(colander.String(), selector=('id', 'id1'))

    class SubFormSchema(BaseFormSchema):
        name = colander.SchemaNode(
            colander.String(),
            selector=('id', 'id2'),
            pypom_widget=MyStringWidget(options={'test': 1}))

    import pypom
    from pypom_form.form import BaseFormRegion

    class SubFormRegion(BaseFormRegion):
        schema_factory = SubFormSchema

    subform = SubFormRegion(pypom.Page(browser))
    import mock

    setter_mock = mock.MagicMock(wraps=subform.__class__.title.fset)
    mock_property = subform.__class__.title.setter(setter_mock)
    with mock.patch.object(subform.__class__, 'title', mock_property):
        assert subform.update(**{'title': 'the title'}) == subform
        setter_mock.assert_called_once_with(subform, 'the title')

        with pytest.raises(KeyError):
            subform.update(**{'another': 'another'})
Beispiel #2
0
def test_get_input_element(browser):
    from pypom_form.widgets import StringWidget

    widget = StringWidget()
    widget.getWidgetRegion = mock.MagicMock(
        **{'return_value.find_element.return_value': 'element'})
    import pypom
    page = pypom.Page(browser)
    widget.get_input_element(page) == 'element'
Beispiel #3
0
def test_meta_custom_raw_update(browser):
    import colander

    from pypom_form.widgets import StringWidget

    class MyStringWidget(StringWidget):
        pass

    class BaseFormSchema(colander.MappingSchema):
        title = colander.SchemaNode(colander.String(),
                                    missing='',
                                    selector=('id', 'id1'))

    class SubFormSchema(BaseFormSchema):
        age = colander.SchemaNode(
            colander.Int(),
            selector=('id', 'id2'),
            pypom_widget=MyStringWidget(options={'test': 1}))

    import pypom
    from pypom_form.form import BaseFormRegion

    class SubFormRegion(BaseFormRegion):
        schema_factory = SubFormSchema

        called = False

        def update(self, **values):
            """ If you want you can override the update method logics
                and you can still interact with the
                pypom_form's update generated method
            """
            return super(SubFormRegion, self).update(**values)

        def raw_update(self, **raw_values):
            """ If you want you can override the update method logics
                and you can still interact with the
                pypom_form's update generated method
            """
            self.called = True
            return super(SubFormRegion, self).raw_update(**raw_values)

    subform = SubFormRegion(pypom.Page(browser))
    import mock

    setter_mock = mock.MagicMock(wraps=subform.__class__.title.fset)
    mock_property = subform.__class__.title.setter(setter_mock)
    with mock.patch.object(subform.__class__, 'age', mock_property):
        assert subform.called is False
        assert subform.raw_update(**{'age': '12'}) == subform
        setter_mock.assert_called_once_with(subform, 12)
        assert subform.called is True

        with pytest.raises(KeyError):
            subform.update(**{'another': 'another'})
Beispiel #4
0
def test_meta_custom_dump(browser):
    import colander

    from pypom_form.widgets import BaseWidget

    class FakeWidget(BaseWidget):
        def __init__(self, value):
            self.value = value

        def getter_factory(self):
            def _getter(page):
                return self.value

            return _getter

        def setter_factory(self):
            def _setter(page, value):
                self.value = value

            return _setter

    class BaseFormSchema(colander.MappingSchema):
        string = colander.SchemaNode(colander.String(),
                                     selector=('id', 'id1'),
                                     pypom_widget=FakeWidget("a string"))

    class SubFormSchema(BaseFormSchema):
        boolean = colander.SchemaNode(colander.Bool(),
                                      selector=('id', 'id2'),
                                      pypom_widget=FakeWidget(True))

    import pypom
    from pypom_form.form import BaseFormRegion

    class SubFormRegion(BaseFormRegion):
        schema_factory = SubFormSchema

        called = False

        def dump(self):
            """ If you want you can override the dump method logic
                and you can still interact with the
                pypom_form's dump generated method
            """
            self.called = True
            return super(SubFormRegion, self).dump()

    subform = SubFormRegion(pypom.Page(browser))
    assert {"string": "a string", "boolean": True} == subform.dump()
    assert subform.called
Beispiel #5
0
def test_widget_region_widget_reference(browser):
    from pypom_form.widgets import BaseWidget
    from pypom_form.widgets import BaseWidgetRegion

    assert BaseWidget.region_class == BaseWidgetRegion

    field = mock.MagicMock(**{'selector': ('id', 'xyz')})
    widget = BaseWidget(field=field)
    import pypom
    page = pypom.Page(browser)

    with mock.patch(
            'pypom_form.widgets.BaseWidgetRegion.wait_for_region_to_load') \
            as wait_for_region_to_load:
        wait_for_region_to_load.configure_mock(**{'return_value': None})

        assert widget.getWidgetRegion(page).__pypom_widget__ == widget
Beispiel #6
0
def test_meta_set_super2(browser):
    import colander

    from pypom_form.widgets import StringWidget

    class MyStringWidget(StringWidget):
        pass

    class BaseFormSchema(colander.MappingSchema):
        title = colander.SchemaNode(colander.String(), selector=('id', 'id1'))

    class SubFormSchema(BaseFormSchema):
        name = colander.SchemaNode(
            colander.String(),
            selector=('id', 'id2'),
            pypom_widget=MyStringWidget(options={'test': 1}))

    import pypom
    from pypom_form.form import BaseFormRegion

    class FormRegion(BaseFormRegion):
        schema_factory = BaseFormSchema

        def set(self, name, value):
            self.called1 = True
            return super(FormRegion, self).set(name, value)

    class SubFormRegion(FormRegion):
        schema_factory = SubFormSchema

        def set(self, name, value):
            self.called2 = True
            return super(SubFormRegion, self).set(name, value)

    subform = SubFormRegion(pypom.Page(browser))
    import mock

    setter_mock = mock.MagicMock(wraps=subform.__class__.name.fset)
    mock_property = subform.__class__.name.setter(setter_mock)
    with mock.patch.object(subform.__class__, 'name', mock_property):
        assert subform.set('name', 'the name') == subform
        setter_mock.assert_called_once_with(subform, 'the name')

    assert subform.called1
    assert subform.called2
Beispiel #7
0
def test_meta_raw_dump(browser):
    import colander

    from pypom_form.widgets import BaseWidget

    class FakeWidget(BaseWidget):
        def __init__(self, value):
            self.value = value

        def getter_factory(self):
            def _getter(page):
                return self.value

            return _getter

        def setter_factory(self):
            def _setter(page, value):
                self.value = value

            return _setter

    class BaseFormSchema(colander.MappingSchema):
        string = colander.SchemaNode(colander.String(),
                                     selector=('id', 'id1'),
                                     pypom_widget=FakeWidget("a string"))

    class SubFormSchema(BaseFormSchema):
        boolean = colander.SchemaNode(colander.Bool(),
                                      selector=('id', 'id2'),
                                      pypom_widget=FakeWidget(True))

    import pypom
    from pypom_form.form import BaseFormRegion

    class SubFormRegion(BaseFormRegion):
        schema_factory = SubFormSchema

    subform = SubFormRegion(pypom.Page(browser))
    assert {"string": "a string", "boolean": "true"} == subform.raw_dump()
Beispiel #8
0
def test_meta_form_region_widget_region(browser):
    """ test metaclass with pypom form page"""
    import colander

    from pypom_form.widgets import StringWidget

    class MyStringWidget(StringWidget):
        pass

    class BaseFormSchema(colander.MappingSchema):
        title = colander.SchemaNode(colander.String(), selector=('id', 'id1'))

    class SubFormSchema(BaseFormSchema):
        name = colander.SchemaNode(
            colander.String(),
            selector=('id', 'id2'),
            pypom_widget=MyStringWidget(options={'test': 1}))

    import pypom
    from pypom_form.form import BaseFormRegion

    class SubFormRegion(BaseFormRegion):
        schema_factory = SubFormSchema

    subform = SubFormRegion(pypom.Page(browser))

    import mock

    with mock.patch(
            'pypom_form.widgets.BaseWidgetRegion.wait_for_region_to_load') \
            as wait_for_region_to_load:
        wait_for_region_to_load.configure_mock(**{'return_value': None})

        title_region = subform.getWidgetRegion('title')
        name_region = subform.getWidgetRegion('name')

        from pypom_form.widgets import BaseWidgetRegion
        assert isinstance(title_region, BaseWidgetRegion)
        assert isinstance(name_region, BaseWidgetRegion)
Beispiel #9
0
def test_meta_form_region(browser):
    """ test metaclass with pypom form region"""
    import colander

    from pypom_form.widgets import StringWidget

    class MyStringWidget(StringWidget):
        pass

    class BaseFormSchema(colander.MappingSchema):
        title = colander.SchemaNode(colander.String(), selector=('id', 'id1'))

    class SubFormSchema(BaseFormSchema):
        name = colander.SchemaNode(
            colander.String(),
            selector=('id', 'id2'),
            pypom_widget=MyStringWidget(options={'test': 1}))

    import pypom
    from pypom_form.form import BaseFormRegion

    class SubFormRegion(BaseFormRegion):
        schema_factory = SubFormSchema

    subform = SubFormRegion(pypom.Page(browser))
    import mock

    with mock.patch(
            'pypom_form.widgets.StringWidget.get_input_element') \
            as get_input_element:
        get_input_element.configure_mock(**{'return_value.value': 'the title'})
        assert subform.title == 'the title'

    with mock.patch(
            'pypom_form.widgets.StringWidget.get_input_element') \
            as get_input_element:
        get_input_element.configure_mock(**{'return_value.value': 'the name'})
        assert subform.name == 'the name'