Beispiel #1
0
    def test_fieldset_blueprint(self):
        compound = factory('fieldset',
                           'COMPOUND',
                           props={'legend': 'Some Test'})
        compound['inner'] = factory('text', 'inner', 'value')
        compound['inner2'] = factory('text', 'inner2', 'value2')
        self.check_output(
            """
        <fieldset id="fieldset-COMPOUND">
          <legend>Some Test</legend>
          <input class="text" id="input-COMPOUND-inner" name="COMPOUND.inner"
                 type="text" value="value"/>
          <input class="text" id="input-COMPOUND-inner2" name="COMPOUND.inner2"
                 type="text" value="value2"/>
        </fieldset>
        """, fxml(compound()))

        # Structural fieldset renders without id attribute
        compound = factory('fieldset', 'COMPOUND', props={'structural': True})
        self.assertEqual(compound(), '<fieldset></fieldset>')

        # Fieldset display renderers are the same as fieldset edit renderers
        compound = factory('fieldset',
                           'COMPOUND',
                           props={'legend': 'Some Test'},
                           mode='display')
        self.check_output(
            """
        <fieldset id="fieldset-COMPOUND">
          <legend>Some Test</legend>
        </fieldset>
        """, fxml(compound()))
Beispiel #2
0
    def test_compound_blueprint_extraction(self):
        compound = factory('compound', name='COMPOUND')
        compound['inner'] = factory('text', value='value1')
        compound['inner2'] = factory('error:text',
                                     value='value2',
                                     props={'required': True})

        # Extract Compound with empty request
        data = compound.extract({})
        self.assertEqual(data.name, 'COMPOUND')
        self.assertEqual(data.value, UNSET)
        expected = odict()
        expected['inner'] = UNSET
        expected['inner2'] = UNSET
        self.assertEqual(data.extracted, expected)
        self.assertEqual(data.errors, [])

        inner_data = data['inner']
        self.assertEqual(inner_data.name, 'inner')
        self.assertEqual(inner_data.value, 'value1')
        self.assertEqual(inner_data.extracted, UNSET)
        self.assertEqual(inner_data.errors, [])

        # Extract with a value in request
        request = {
            'COMPOUND.inner': 'newvalue',
            'COMPOUND.inner2': '',
        }
        data = compound.extract(request)
        data_inner = data['inner']
        self.assertEqual(data_inner.name, 'inner')
        self.assertEqual(data_inner.value, 'value1')
        self.assertEqual(data_inner.extracted, 'newvalue')
        self.assertEqual(data_inner.errors, [])

        data_inner2 = data['inner2']
        self.assertEqual(data_inner2.name, 'inner2')
        self.assertEqual(data_inner2.value, 'value2')
        self.assertEqual(data_inner2.extracted, '')
        self.assertEqual(data_inner2.errors,
                         [ExtractionError('Mandatory field was empty')])

        expected = odict()
        expected['inner'] = 'newvalue'
        expected['inner2'] = ''
        self.assertEqual(data.extracted, expected)

        self.check_output(
            """
        <div>
          <input class="text" id="input-COMPOUND-inner" name="COMPOUND.inner"
                 type="text" value="newvalue"/>
          <div class="error">
            <div class="errormessage">Mandatory field was empty</div>
            <input class="required text" id="input-COMPOUND-inner2"
                   name="COMPOUND.inner2" required="required"
                   type="text" value=""/>
          </div>
        </div>
        """, fxml('<div>' + compound(data=data) + '</div>'))
Beispiel #3
0
 def test_compound_blueprint_display_rendering(self):
     # Compound display renderers, same as edit renderers
     compound = factory(
         'compound',
         name='COMPOUND',
         mode='display')
     self.assertEqual(tag('div', compound()), '<div></div>')
Beispiel #4
0
 def test_compound_blueprint_value_via_compound(self):
     # Render Compound with values set via compound widget
     value = {
         'inner': 'Value 1 from parent',
         'inner2': 'Value 2 from parent',
     }
     compound = factory(
         'compound',
         name='COMPOUND',
         value=value)
     compound['inner'] = factory('text')
     compound['inner2'] = factory(
         'text',
         props={
             'required': True
         })
     self.check_output("""
     <div>
       <input class="text" id="input-COMPOUND-inner" name="COMPOUND.inner"
              type="text" value="Value 1 from parent"/>
       <input class="required text" id="input-COMPOUND-inner2"
              name="COMPOUND.inner2" required="required" type="text"
              value="Value 2 from parent"/>
     </div>
     """, fxml(tag('div', compound())))
Beispiel #5
0
    def test_compound_blueprint_value_callbacks(self):
        # Check compound with value callbacks
        def val(widget, data):
            return 'val F1'
        value = {
            'f1': val,
        }
        compound = factory(
            'compound',
            'comp',
            value=value)
        compound['f1'] = factory('text')
        self.assertEqual(compound(), (
            '<input class="text" id="input-comp-f1" name="comp.f1" '
            'type="text" value="val F1" />'
        ))

        data = compound.extract({'comp.f1': 'New val 1'})
        self.assertEqual(data.name, 'comp')
        self.assertEqual(data.value, {'f1': val})
        expected = odict()
        expected['f1'] = 'New val 1'
        self.assertEqual(data.extracted, expected)
        self.assertEqual(data.errors, [])

        def value(widget, data):
            return {
                'f1': 'F1 Val'
            }
        compound = factory(
            'compound',
            'comp',
            value=value)
        compound['f1'] = factory('text')
        self.assertEqual(compound(), (
            '<input class="text" id="input-comp-f1" name="comp.f1" '
            'type="text" value="F1 Val" />'
        ))

        data = compound.extract({'comp.f1': 'New val 1'})
        self.assertEqual(data.name, 'comp')
        self.assertEqual(data.value, {'f1': 'F1 Val'})
        expected = odict()
        expected['f1'] = 'New val 1'
        self.assertEqual(data.extracted, expected)
        self.assertEqual(data.errors, [])
Beispiel #6
0
    def test_compound_blueprint_structural_children(self):
        # Compound with structural compound as child
        value = {
            'inner': 'Value 1 from parent',
            'inner2': 'Value 2 from parent',
        }
        compound = factory('compound', name='COMPOUND', value=value)
        structural = compound['STRUCTURAL'] = factory(
            'compound', props={'structural': True})
        structural['inner'] = factory('text')
        structural['inner2'] = factory('text', props={'required': True})
        self.check_output(
            """
        <div>
          <input class="text" id="input-COMPOUND-inner" name="COMPOUND.inner"
                 type="text" value="Value 1 from parent"/>
          <input class="required text" id="input-COMPOUND-inner2"
                 name="COMPOUND.inner2" required="required" type="text"
                 value="Value 2 from parent"/>
        </div>
        """, fxml(tag('div', compound())))

        self.assertEqual(compound.treerepr().split('\n'), [
            "<class 'yafowil.base.Widget'>: COMPOUND",
            "  <class 'yafowil.base.Widget'>: STRUCTURAL",
            "    <class 'yafowil.base.Widget'>: inner",
            "    <class 'yafowil.base.Widget'>: inner2", ""
        ])

        data = compound.extract({
            'COMPOUND.inner': 'newvalue',
            'COMPOUND.inner2': '',
        })
        self.assertEqual(data.name, 'COMPOUND')
        self.assertEqual(data.value, {
            'inner2': 'Value 2 from parent',
            'inner': 'Value 1 from parent'
        })
        expected = odict()
        expected['inner'] = 'newvalue'
        expected['inner2'] = ''
        self.assertEqual(data.extracted, expected)

        data_inner = data['inner']
        self.assertEqual(data_inner.name, 'inner')
        self.assertEqual(data_inner.value, 'Value 1 from parent')
        self.assertEqual(data_inner.extracted, 'newvalue')
        self.assertEqual(data_inner.errors, [])

        data_inner2 = data['inner2']
        self.assertEqual(data_inner2.name, 'inner2')
        self.assertEqual(data_inner2.value, 'Value 2 from parent')
        self.assertEqual(data_inner2.extracted, '')
        self.assertEqual(data_inner2.errors,
                         [ExtractionError('Mandatory field was empty')])
Beispiel #7
0
    def test_fieldset_blueprint(self):
        compound = factory(
            'fieldset',
            'COMPOUND',
            props={
                'legend': 'Some Test'
            })
        compound['inner'] = factory('text', 'inner', 'value')
        compound['inner2'] = factory('text', 'inner2', 'value2')
        self.check_output("""
        <fieldset id="fieldset-COMPOUND">
          <legend>Some Test</legend>
          <input class="text" id="input-COMPOUND-inner" name="COMPOUND.inner"
                 type="text" value="value"/>
          <input class="text" id="input-COMPOUND-inner2" name="COMPOUND.inner2"
                 type="text" value="value2"/>
        </fieldset>
        """, fxml(compound()))

        # Structural fieldset renders without id attribute
        compound = factory(
            'fieldset',
            'COMPOUND',
            props={
                'structural': True
            })
        self.assertEqual(compound(), '<fieldset></fieldset>')

        # Fieldset display renderers are the same as fieldset edit renderers
        compound = factory(
            'fieldset',
            'COMPOUND',
            props={
                'legend': 'Some Test'
            },
            mode='display')
        self.check_output("""
        <fieldset id="fieldset-COMPOUND">
          <legend>Some Test</legend>
        </fieldset>
        """, fxml(compound()))
Beispiel #8
0
    def test_compound_blueprint_value_callbacks(self):
        # Check compound with value callbacks
        def val(widget, data):
            return 'val F1'

        value = {
            'f1': val,
        }
        compound = factory('compound', 'comp', value=value)
        compound['f1'] = factory('text')
        self.assertEqual(
            compound(),
            ('<input class="text" id="input-comp-f1" name="comp.f1" '
             'type="text" value="val F1" />'))

        data = compound.extract({'comp.f1': 'New val 1'})
        self.assertEqual(data.name, 'comp')
        self.assertEqual(data.value, {'f1': val})
        expected = odict()
        expected['f1'] = 'New val 1'
        self.assertEqual(data.extracted, expected)
        self.assertEqual(data.errors, [])

        def value(widget, data):
            return {'f1': 'F1 Val'}

        compound = factory('compound', 'comp', value=value)
        compound['f1'] = factory('text')
        self.assertEqual(
            compound(),
            ('<input class="text" id="input-comp-f1" name="comp.f1" '
             'type="text" value="F1 Val" />'))

        data = compound.extract({'comp.f1': 'New val 1'})
        self.assertEqual(data.name, 'comp')
        self.assertEqual(data.value, {'f1': 'F1 Val'})
        expected = odict()
        expected['f1'] = 'New val 1'
        self.assertEqual(data.extracted, expected)
        self.assertEqual(data.errors, [])
Beispiel #9
0
 def test_compound_blueprint_value_via_members(self):
     # Render Compound with values set via compound members
     compound = factory('compound', name='COMPOUND')
     compound['inner'] = factory('text', value='value1')
     compound['inner2'] = factory('error:text',
                                  value='value2',
                                  props={'required': True})
     self.check_output(
         """
     <div>
       <input class="text" id="input-COMPOUND-inner" name="COMPOUND.inner"
              type="text" value="value1"/>
       <input class="required text" id="input-COMPOUND-inner2"
              name="COMPOUND.inner2" required="required" type="text"
              value="value2"/>
     </div>
     """, fxml(tag('div', compound())))
Beispiel #10
0
 def test_compound_blueprint_value_via_compound(self):
     # Render Compound with values set via compound widget
     value = {
         'inner': 'Value 1 from parent',
         'inner2': 'Value 2 from parent',
     }
     compound = factory('compound', name='COMPOUND', value=value)
     compound['inner'] = factory('text')
     compound['inner2'] = factory('text', props={'required': True})
     self.check_output(
         """
     <div>
       <input class="text" id="input-COMPOUND-inner" name="COMPOUND.inner"
              type="text" value="Value 1 from parent"/>
       <input class="required text" id="input-COMPOUND-inner2"
              name="COMPOUND.inner2" required="required" type="text"
              value="Value 2 from parent"/>
     </div>
     """, fxml(tag('div', compound())))
Beispiel #11
0
 def test_compound_blueprint_value_via_members(self):
     # Render Compound with values set via compound members
     compound = factory(
         'compound',
         name='COMPOUND')
     compound['inner'] = factory(
         'text',
         value='value1')
     compound['inner2'] = factory(
         'error:text',
         value='value2',
         props={
             'required': True
         })
     self.check_output("""
     <div>
       <input class="text" id="input-COMPOUND-inner" name="COMPOUND.inner"
              type="text" value="value1"/>
       <input class="required text" id="input-COMPOUND-inner2"
              name="COMPOUND.inner2" required="required" type="text"
              value="value2"/>
     </div>
     """, fxml(tag('div', compound())))
Beispiel #12
0
 def test_compound_blueprint_display_rendering(self):
     # Compound display renderers, same as edit renderers
     compound = factory('compound', name='COMPOUND', mode='display')
     self.assertEqual(tag('div', compound()), '<div></div>')
Beispiel #13
0
    def test_compound_blueprint_structural_and_compound_children(self):
        # Compound with structural compound with compound as children
        value = {
            'CHILD_COMPOUND': {
                'inner': 'Value 1 from parent',
                'inner2': 'Value 2 from parent',
            }
        }
        compound = factory(
            'compound',
            name='COMPOUND',
            value=value)
        structural = compound['STRUCTURAL'] = factory(
            'compound',
            props={
                'structural': True
            })
        child_compound = structural['CHILD_COMPOUND'] = factory('compound')
        child_compound['inner'] = factory('text')
        child_compound['inner2'] = factory(
            'text',
            props={
                'required': True
            })
        self.check_output("""
        <div>
          <input class="text" id="input-COMPOUND-CHILD_COMPOUND-inner"
                 name="COMPOUND.CHILD_COMPOUND.inner" type="text"
                 value="Value 1 from parent"/>
          <input class="required text" id="input-COMPOUND-CHILD_COMPOUND-inner2"
                 name="COMPOUND.CHILD_COMPOUND.inner2" required="required"
                 type="text" value="Value 2 from parent"/>
        </div>
        """, fxml(tag('div', compound())))  # noqa

        self.assertEqual(compound.treerepr().split('\n'), [
            "<class 'yafowil.base.Widget'>: COMPOUND",
            "  <class 'yafowil.base.Widget'>: STRUCTURAL",
            "    <class 'yafowil.base.Widget'>: CHILD_COMPOUND",
            "      <class 'yafowil.base.Widget'>: inner",
            "      <class 'yafowil.base.Widget'>: inner2",
            ""
        ])
        self.assertEqual(
            compound['STRUCTURAL'].attrs.storage,
            {'structural': True}
        )
        self.assertEqual(
            compound['STRUCTURAL']['CHILD_COMPOUND'].attrs.storage,
            {}
        )

        data = compound.extract({
            'COMPOUND.CHILD_COMPOUND.inner': 'newvalue',
            'COMPOUND.CHILD_COMPOUND.inner2': 'newvalue2',
        })
        self.assertEqual(data.name, 'COMPOUND')
        self.assertEqual(data.value, {
            'CHILD_COMPOUND': {
                'inner2': 'Value 2 from parent',
                'inner': 'Value 1 from parent'
            }
        })
        expected = odict()
        expected['CHILD_COMPOUND'] = odict()
        expected['CHILD_COMPOUND']['inner'] = 'newvalue'
        expected['CHILD_COMPOUND']['inner2'] = 'newvalue2'
        self.assertEqual(data.extracted, expected)
        self.assertEqual(data.errors, [])

        data_compound = data['CHILD_COMPOUND']
        self.assertEqual(data_compound.name, 'CHILD_COMPOUND')
        self.assertEqual(data_compound.value, {
            'inner2': 'Value 2 from parent',
            'inner': 'Value 1 from parent'
        })
        expected = odict()
        expected['inner'] = 'newvalue'
        expected['inner2'] = 'newvalue2'
        self.assertEqual(data_compound.extracted, expected)
        self.assertEqual(data_compound.errors, [])

        data_inner = data['CHILD_COMPOUND']['inner']
        self.assertEqual(data_inner.name, 'inner')
        self.assertEqual(data_inner.value, 'Value 1 from parent')
        self.assertEqual(data_inner.extracted, 'newvalue')
        self.assertEqual(data_inner.errors, [])

        data_inner2 = data['CHILD_COMPOUND']['inner2']
        self.assertEqual(data_inner2.name, 'inner2')
        self.assertEqual(data_inner2.value, 'Value 2 from parent')
        self.assertEqual(data_inner2.extracted, 'newvalue2')
        self.assertEqual(data_inner2.errors, [])
Beispiel #14
0
    def test_compound_blueprint_address_compound_value_parent(self):
        # Address different compounds with value on parent
        value = {
            'c1': {
                'f1': 'Foo',
            },
            'c2': {
                'f2': 'Bar',
                'f3': 'Baz',
            },
        }
        compound = factory('compound', 'comp', value=value)
        compound['c1'] = factory('compound')
        compound['c1']['f1'] = factory('text')
        compound['c2'] = factory('compound')
        compound['c2']['f2'] = factory('text')
        compound['c2']['f3'] = factory('text')
        compound['c3'] = factory('compound')
        compound['c3']['f4'] = factory('text')

        self.check_output(
            """
        <div>
          <input class="text" id="input-comp-c1-f1" name="comp.c1.f1"
                 type="text" value="Foo"/>
          <input class="text" id="input-comp-c2-f2" name="comp.c2.f2"
                 type="text" value="Bar"/>
          <input class="text" id="input-comp-c2-f3" name="comp.c2.f3"
                 type="text" value="Baz"/>
          <input class="text" id="input-comp-c3-f4" name="comp.c3.f4"
                 type="text" value=""/>
        </div>
        """, fxml(tag('div', compound())))

        self.assertEqual(compound.treerepr().split('\n'), [
            "<class 'yafowil.base.Widget'>: comp",
            "  <class 'yafowil.base.Widget'>: c1",
            "    <class 'yafowil.base.Widget'>: f1",
            "  <class 'yafowil.base.Widget'>: c2",
            "    <class 'yafowil.base.Widget'>: f2",
            "    <class 'yafowil.base.Widget'>: f3",
            "  <class 'yafowil.base.Widget'>: c3",
            "    <class 'yafowil.base.Widget'>: f4", ""
        ])

        data = compound.extract({
            'comp.c1.f1': 'Foo 1',
            'comp.c2.f2': 'Bar 2',
            'comp.c2.f3': 'Baz 1',
        })
        self.assertEqual(data.name, 'comp')
        self.assertEqual(data.value, {
            'c2': {
                'f2': 'Bar',
                'f3': 'Baz'
            },
            'c1': {
                'f1': 'Foo'
            }
        })
        expected = odict()
        expected['c1'] = odict()
        expected['c1']['f1'] = 'Foo 1'
        expected['c2'] = odict()
        expected['c2']['f2'] = 'Bar 2'
        expected['c2']['f3'] = 'Baz 1'
        expected['c3'] = odict()
        expected['c3']['f4'] = UNSET
        self.assertEqual(data.extracted, expected)
        self.assertEqual(data.errors, [])

        # c1
        data_c1 = data['c1']
        self.assertEqual(data_c1.name, 'c1')
        self.assertEqual(data_c1.value, {'f1': 'Foo'})
        expected = odict()
        expected['f1'] = 'Foo 1'
        self.assertEqual(data_c1.extracted, expected)
        self.assertEqual(data_c1.errors, [])

        data_f1 = data['c1']['f1']
        self.assertEqual(data_f1.name, 'f1')
        self.assertEqual(data_f1.value, 'Foo')
        self.assertEqual(data_f1.extracted, 'Foo 1')
        self.assertEqual(data_f1.errors, [])

        # c2
        data_c2 = data['c2']
        self.assertEqual(data_c2.name, 'c2')
        self.assertEqual(data_c2.value, {'f2': 'Bar', 'f3': 'Baz'})
        expected = odict()
        expected['f2'] = 'Bar 2'
        expected['f3'] = 'Baz 1'
        self.assertEqual(data_c2.extracted, expected)
        self.assertEqual(data_c2.errors, [])

        data_f2 = data['c2']['f2']
        self.assertEqual(data_f2.name, 'f2')
        self.assertEqual(data_f2.value, 'Bar')
        self.assertEqual(data_f2.extracted, 'Bar 2')
        self.assertEqual(data_f2.errors, [])

        data_f3 = data['c2']['f3']
        self.assertEqual(data_f3.name, 'f3')
        self.assertEqual(data_f3.value, 'Baz')
        self.assertEqual(data_f3.extracted, 'Baz 1')
        self.assertEqual(data_f3.errors, [])

        # c3
        data_c3 = data['c3']
        self.assertEqual(data_c3.name, 'c3')
        self.assertEqual(data_c3.value, UNSET)
        expected = odict()
        expected['f4'] = UNSET
        self.assertEqual(data_c3.extracted, expected)
        self.assertEqual(data_c3.errors, [])

        data_f4 = data['c3']['f4']
        self.assertEqual(data_f4.name, 'f4')
        self.assertEqual(data_f4.value, UNSET)
        self.assertEqual(data_f4.extracted, UNSET)
        self.assertEqual(data_f4.errors, [])
Beispiel #15
0
    def test_compound_blueprint_compound_children(self):
        # Compound with compound as child
        value = {
            'CHILD_COMPOUND': {
                'inner': 'Value 1 from parent',
                'inner2': 'Value 2 from parent',
            }
        }
        compound = factory('compound', name='COMPOUND', value=value)
        child_compound = compound['CHILD_COMPOUND'] = factory('compound')
        child_compound['inner'] = factory('text')
        child_compound['inner2'] = factory('text', props={'required': True})
        self.check_output("""
        <div>
          <input class="text" id="input-COMPOUND-CHILD_COMPOUND-inner"
                 name="COMPOUND.CHILD_COMPOUND.inner" type="text"
                 value="Value 1 from parent"/>
          <input class="required text" id="input-COMPOUND-CHILD_COMPOUND-inner2"
                 name="COMPOUND.CHILD_COMPOUND.inner2" required="required"
                 type="text" value="Value 2 from parent"/>
        </div>
        """, fxml(tag('div', compound())))  # noqa

        self.assertEqual(compound.treerepr().split('\n'), [
            "<class 'yafowil.base.Widget'>: COMPOUND",
            "  <class 'yafowil.base.Widget'>: CHILD_COMPOUND",
            "    <class 'yafowil.base.Widget'>: inner",
            "    <class 'yafowil.base.Widget'>: inner2", ""
        ])

        data = compound.extract({
            'COMPOUND.CHILD_COMPOUND.inner': 'newvalue',
            'COMPOUND.CHILD_COMPOUND.inner2': 'newvalue2',
        })
        self.assertEqual(data.name, 'COMPOUND')
        self.assertEqual(
            data.value, {
                'CHILD_COMPOUND': {
                    'inner2': 'Value 2 from parent',
                    'inner': 'Value 1 from parent'
                }
            })
        expected = odict()
        expected['CHILD_COMPOUND'] = odict()
        expected['CHILD_COMPOUND']['inner'] = 'newvalue'
        expected['CHILD_COMPOUND']['inner2'] = 'newvalue2'
        self.assertEqual(data.extracted, expected)
        self.assertEqual(data.errors, [])

        data_compound = data['CHILD_COMPOUND']
        self.assertEqual(data_compound.name, 'CHILD_COMPOUND')
        self.assertEqual(data_compound.value, {
            'inner2': 'Value 2 from parent',
            'inner': 'Value 1 from parent'
        })
        expected = odict()
        expected['inner'] = 'newvalue'
        expected['inner2'] = 'newvalue2'
        self.assertEqual(data_compound.extracted, expected)
        self.assertEqual(data_compound.errors, [])

        data_inner = data['CHILD_COMPOUND']['inner']
        self.assertEqual(data_inner.name, 'inner')
        self.assertEqual(data_inner.value, 'Value 1 from parent')
        self.assertEqual(data_inner.extracted, 'newvalue')
        self.assertEqual(data_inner.errors, [])

        data_inner2 = data['CHILD_COMPOUND']['inner2']
        self.assertEqual(data_inner2.name, 'inner2')
        self.assertEqual(data_inner2.value, 'Value 2 from parent')
        self.assertEqual(data_inner2.extracted, 'newvalue2')
        self.assertEqual(data_inner2.errors, [])
Beispiel #16
0
    def test_compound_blueprint_extraction(self):
        compound = factory('compound', name='COMPOUND')
        compound['inner'] = factory('text', value='value1')
        compound['inner2'] = factory(
            'error:text',
            value='value2',
            props={
                'required': True
            })

        # Extract Compound with empty request
        data = compound.extract({})
        self.assertEqual(data.name, 'COMPOUND')
        self.assertEqual(data.value, UNSET)
        expected = odict()
        expected['inner'] = UNSET
        expected['inner2'] = UNSET
        self.assertEqual(data.extracted, expected)
        self.assertEqual(data.errors, [])

        inner_data = data['inner']
        self.assertEqual(inner_data.name, 'inner')
        self.assertEqual(inner_data.value, 'value1')
        self.assertEqual(inner_data.extracted, UNSET)
        self.assertEqual(inner_data.errors, [])

        # Extract with a value in request
        request = {
            'COMPOUND.inner': 'newvalue',
            'COMPOUND.inner2': '',
        }
        data = compound.extract(request)
        data_inner = data['inner']
        self.assertEqual(data_inner.name, 'inner')
        self.assertEqual(data_inner.value, 'value1')
        self.assertEqual(data_inner.extracted, 'newvalue')
        self.assertEqual(data_inner.errors, [])

        data_inner2 = data['inner2']
        self.assertEqual(data_inner2.name, 'inner2')
        self.assertEqual(data_inner2.value, 'value2')
        self.assertEqual(data_inner2.extracted, '')
        self.assertEqual(
            data_inner2.errors,
            [ExtractionError('Mandatory field was empty')]
        )

        expected = odict()
        expected['inner'] = 'newvalue'
        expected['inner2'] = ''
        self.assertEqual(data.extracted, expected)

        self.check_output("""
        <div>
          <input class="text" id="input-COMPOUND-inner" name="COMPOUND.inner"
                 type="text" value="newvalue"/>
          <div class="error">
            <div class="errormessage">Mandatory field was empty</div>
            <input class="required text" id="input-COMPOUND-inner2"
                   name="COMPOUND.inner2" required="required"
                   type="text" value=""/>
          </div>
        </div>
        """, fxml('<div>' + compound(data=data) + '</div>'))
Beispiel #17
0
    def test_compound_blueprint_address_compound_value_parent(self):
        # Address different compounds with value on parent
        value = {
            'c1': {
                'f1': 'Foo',
            },
            'c2': {
                'f2': 'Bar',
                'f3': 'Baz',
            },
        }
        compound = factory(
            'compound',
            'comp',
            value=value)
        compound['c1'] = factory('compound')
        compound['c1']['f1'] = factory('text')
        compound['c2'] = factory('compound')
        compound['c2']['f2'] = factory('text')
        compound['c2']['f3'] = factory('text')
        compound['c3'] = factory('compound')
        compound['c3']['f4'] = factory('text')

        self.check_output("""
        <div>
          <input class="text" id="input-comp-c1-f1" name="comp.c1.f1"
                 type="text" value="Foo"/>
          <input class="text" id="input-comp-c2-f2" name="comp.c2.f2"
                 type="text" value="Bar"/>
          <input class="text" id="input-comp-c2-f3" name="comp.c2.f3"
                 type="text" value="Baz"/>
          <input class="text" id="input-comp-c3-f4" name="comp.c3.f4"
                 type="text" value=""/>
        </div>
        """, fxml(tag('div', compound())))

        self.assertEqual(compound.treerepr().split('\n'), [
            "<class 'yafowil.base.Widget'>: comp",
            "  <class 'yafowil.base.Widget'>: c1",
            "    <class 'yafowil.base.Widget'>: f1",
            "  <class 'yafowil.base.Widget'>: c2",
            "    <class 'yafowil.base.Widget'>: f2",
            "    <class 'yafowil.base.Widget'>: f3",
            "  <class 'yafowil.base.Widget'>: c3",
            "    <class 'yafowil.base.Widget'>: f4",
            ""
        ])

        data = compound.extract({
            'comp.c1.f1': 'Foo 1',
            'comp.c2.f2': 'Bar 2',
            'comp.c2.f3': 'Baz 1',
        })
        self.assertEqual(data.name, 'comp')
        self.assertEqual(data.value, {
            'c2': {
                'f2': 'Bar',
                'f3': 'Baz'
            },
            'c1': {
                'f1': 'Foo'
            }
        })
        expected = odict()
        expected['c1'] = odict()
        expected['c1']['f1'] = 'Foo 1'
        expected['c2'] = odict()
        expected['c2']['f2'] = 'Bar 2'
        expected['c2']['f3'] = 'Baz 1'
        expected['c3'] = odict()
        expected['c3']['f4'] = UNSET
        self.assertEqual(data.extracted, expected)
        self.assertEqual(data.errors, [])

        # c1
        data_c1 = data['c1']
        self.assertEqual(data_c1.name, 'c1')
        self.assertEqual(data_c1.value, {'f1': 'Foo'})
        expected = odict()
        expected['f1'] = 'Foo 1'
        self.assertEqual(data_c1.extracted, expected)
        self.assertEqual(data_c1.errors, [])

        data_f1 = data['c1']['f1']
        self.assertEqual(data_f1.name, 'f1')
        self.assertEqual(data_f1.value, 'Foo')
        self.assertEqual(data_f1.extracted, 'Foo 1')
        self.assertEqual(data_f1.errors, [])

        # c2
        data_c2 = data['c2']
        self.assertEqual(data_c2.name, 'c2')
        self.assertEqual(data_c2.value, {
            'f2': 'Bar',
            'f3': 'Baz'
        })
        expected = odict()
        expected['f2'] = 'Bar 2'
        expected['f3'] = 'Baz 1'
        self.assertEqual(data_c2.extracted, expected)
        self.assertEqual(data_c2.errors, [])

        data_f2 = data['c2']['f2']
        self.assertEqual(data_f2.name, 'f2')
        self.assertEqual(data_f2.value, 'Bar')
        self.assertEqual(data_f2.extracted, 'Bar 2')
        self.assertEqual(data_f2.errors, [])

        data_f3 = data['c2']['f3']
        self.assertEqual(data_f3.name, 'f3')
        self.assertEqual(data_f3.value, 'Baz')
        self.assertEqual(data_f3.extracted, 'Baz 1')
        self.assertEqual(data_f3.errors, [])

        # c3
        data_c3 = data['c3']
        self.assertEqual(data_c3.name, 'c3')
        self.assertEqual(data_c3.value, UNSET)
        expected = odict()
        expected['f4'] = UNSET
        self.assertEqual(data_c3.extracted, expected)
        self.assertEqual(data_c3.errors, [])

        data_f4 = data['c3']['f4']
        self.assertEqual(data_f4.name, 'f4')
        self.assertEqual(data_f4.value, UNSET)
        self.assertEqual(data_f4.extracted, UNSET)
        self.assertEqual(data_f4.errors, [])