def test_queryFromSchema_lookup_field(self):
     # <field type="zope.schema.TextLine" sf:field="Account.Name" />
     schema = self._makeSchema()
     schema.setTaggedValue('salesforce.object', 'Contact')
     schema.setTaggedValue('salesforce.fields', {'scalar': 'Account.Name'})
     query = self._queryFromSchema(schema)
     self.assertEqual('SELECT Contact.Id, Contact.Account.Name FROM Contact', query)
 def test_queryFromSchema_relationship_without_field(self):
     # Specifying a relationship with no fields is only supported if the
     # schema field is an IObjectField.
     # <field type="zope.schema.List" sf:relationship="OpportunityContactRoles" />
     schema = self._makeSchema()
     schema.setTaggedValue('salesforce.object', 'Contact')
     schema.setTaggedValue('salesforce.relationships', {'vector': 'OpportunityContactRoles'})
     self.assertRaises(ValueError, self._queryFromSchema, schema)
    def test_getContainer_not_found(self):
        schema = self._makeSchema()
        schema.setTaggedValue('salesforce.container', 'foo')
        sfobj = self._makeOne(schema = schema)
        expected_container = object()
        self._makeSite(expected_container = None)

        container = sfobj.getContainer(default=expected_container)
        self.assertTrue(container is expected_container)
    def test_getContainer_leading_slash(self):
        schema = self._makeSchema()
        schema.setTaggedValue('salesforce.container', '/foo')
        sfobj = self._makeOne(schema = schema)
        expected_container = object()
        self._makeSite(expected_container)

        container = sfobj.getContainer()
        self.assertTrue(container is expected_container)
예제 #5
0
 def test_processFields_permissionChecks_w_prefix(self):
     form = Form(None, None)
     form.groups = ()
     class schema(Interface):
         title = zope.schema.TextLine()
     schema.setTaggedValue(WRITE_PERMISSIONS_KEY, {'title': 'foo'})
     processFields(form, schema, prefix='prefix', permissionChecks=True)
     
     self.assertEqual('foo', self.secman.checks.pop())
     self.assertFalse('prefix.title' in form.fields)
예제 #6
0
    def test_processFields_permissionChecks_w_prefix(self):
        form = Form(None, None)
        form.groups = ()

        class schema(Interface):
            title = zope.schema.TextLine()
        schema.setTaggedValue(WRITE_PERMISSIONS_KEY, {'title': 'foo'})
        processFields(form, schema, prefix='prefix', permissionChecks=True)

        self.assertEqual('foo', self.secman.checks.pop())
        self.assertFalse('prefix.title' in form.fields)
 def test_getContainer_value_is_callable(self):
     schema = self._makeSchema()
     expected_container = object()
     class DummyContent(object):
         implements(schema)
         
         def getContainer(self):
             return expected_container
     schema.setTaggedValue('salesforce.container', 'getContainer')
     sfobj = self._makeOne(context=DummyContent())
     
     container = sfobj.getContainer()
     self.assertTrue(container is expected_container)
예제 #8
0
    def test_processFields_fieldsets_as_form_groups(self):
        form = Form(None, None)
        form.groups = []

        class schema(Interface):
            title = zope.schema.TextLine()

        fieldset = Fieldset('custom', label=u'Custom', fields=['title'])
        schema.setTaggedValue(FIELDSETS_KEY, [fieldset])

        class subschema(schema):
            subtitle = zope.schema.TextLine()

        fieldset = Fieldset('custom', label=u'Custom', fields=['subtitle'])
        subschema.setTaggedValue(FIELDSETS_KEY, [fieldset])

        processFields(form, subschema, prefix='prefix', permissionChecks=True)

        self.assertEqual(len(form.groups), 1)
        self.assertEqual(len(form.groups[0].fields), 2)
        self.assertEqual([g.__name__ for g in form.groups], ['custom'])
 def test_queryFromSchema_relationship_fields_to_list_of_objects(self):
     # main schema:
     # <schema sf:object="Contact">
     #   <field type="zope.schema.List" sf:relationship="OpportunityContactRoles">
     #     <value_type type="zope.schema.Object">
     #       <schema>path.to.ISubSchema</schema>
     #     </value_type>
     #   </field>
     # </schema>
     # 
     # subschema:
     # <schema sf:object="OpportunityContactRole" sf:criteria="Active__c=true">
     #   <field name="role" type="zope.schema.TextLine"
     #          sf:field="Role" />
     #   <field name="org" type="zope.schema.TextLine"
     #          sf:field="Account.Name" />
     # </schema>
     from zope.interface import Interface
     from zope import schema
     
     class subschema(Interface):
         role = schema.TextLine()
         org = schema.TextLine()
     
     class schema(Interface):
         opp_roles = schema.List(
             value_type = schema.Object(
                 schema = subschema
                 )
             )
     
     subschema.setTaggedValue('salesforce.object', 'OpportunityContactRole')
     subschema.setTaggedValue('salesforce.criteria', 'Active__c=true')
     subschema.setTaggedValue('salesforce.fields', {'role': 'Role', 'org': 'Account.Name'})
     schema.setTaggedValue('salesforce.object', 'Contact')
     schema.setTaggedValue('salesforce.relationships', {'opp_roles': 'OpportunityContactRoles'})
     query = self._queryFromSchema(schema)
     self.assertEqual('SELECT Contact.Id, (SELECT Id, Account.Name, Role FROM OpportunityContactRoles '
                      'WHERE Active__c=true) FROM Contact',
                      query)
 def test_queryFromSchema_duplicate_select(self):
     schema = self._makeSchema()
     schema.setTaggedValue('salesforce.object', 'Contact')
     schema.setTaggedValue('salesforce.fields', {'scalar': 'Name'})
     schema.setTaggedValue('salesforce.fields', {'vector': 'Name'})
     query = self._queryFromSchema(schema)
     self.assertEqual('SELECT Contact.Id, Contact.Name FROM Contact', query)
예제 #11
0
    def get_schema(self, tile_id):
        widget_tags = {}
        fields = OrderedDict()
        for field_name, (factory,
                         data) in self.get_tile_fields(tile_id).items():
            if isinstance(factory, dict):
                if 'widget' in factory:
                    widget_tags[field_name] = factory['widget']
                if 'options' in factory:
                    data.update(factory['options'])
                factory = factory['factory']
            fields[field_name] = factory(**data)

        schema = SchemaClass(
            name=tile_id,
            bases=(IDynamicTileSchema, ),
            # we're mimicking plone.supermodel here so let's us
            # same module
            __module__='plone.supermodel.generated',
            attrs=fields)
        schema.setTaggedValue(WIDGETS_KEY, widget_tags)
        return schema
 def test_queryFromSchema_simple_field_with_criteria(self):
     # <field type="zope.schema.TextLine" sf:field="Name" sf:criteria="IsTest__c=true" />
     schema = self._makeSchema()
     schema.setTaggedValue('salesforce.object', 'Contact')
     schema.setTaggedValue('salesforce.fields', {'scalar': 'Name'})
     schema.setTaggedValue('salesforce.criteria', 'IsTest__c=true')
     query = self._queryFromSchema(schema)
     self.assertEqual('SELECT Contact.Id, Contact.Name FROM Contact WHERE IsTest__c=true', query)
 def test_queryFromSchema_relationship_field(self):
     # <field type="zope.schema.List" sf:field="Name"
     #        sf:relationship="OpportunityContactRoles" />
     schema = self._makeSchema()
     schema.setTaggedValue('salesforce.object', 'Contact')
     schema.setTaggedValue('salesforce.fields', {'vector': 'Name'})
     schema.setTaggedValue('salesforce.relationships', {'vector': 'OpportunityContactRoles'})
     query = self._queryFromSchema(schema)
     self.assertEqual('SELECT Contact.Id, (SELECT Name FROM Contact.OpportunityContactRoles) FROM Contact', query)
예제 #14
0
    def test_processFields_fieldsets_as_form_groups(self):
        form = Form(None, None)
        form.groups = []

        class schema(Interface):
            title = zope.schema.TextLine()

        fieldset = Fieldset('custom', label=u'Custom',
                            fields=['title'])
        schema.setTaggedValue(FIELDSETS_KEY, [fieldset])

        class subschema(schema):
            subtitle = zope.schema.TextLine()

        fieldset = Fieldset('custom', label=u'Custom',
                            fields=['subtitle'])
        subschema.setTaggedValue(FIELDSETS_KEY, [fieldset])

        processFields(form, subschema,
                      prefix='prefix', permissionChecks=True)

        self.assertEqual(len(form.groups), 1)
        self.assertEqual(len(form.groups[0].fields), 2)
        self.assertEqual([g.__name__ for g in form.groups], ['custom'])
예제 #15
0
def setBoolWidget(field, event):
    schema = field.interface
    widgets = schema.queryTaggedValue('plone.autoform.widgets', {})
    widgets[field.__name__] = 'z3c.form.browser.radio.RadioFieldWidget'
    schema.setTaggedValue('plone.autoform.widgets', widgets)
예제 #16
0
def setBoolWidget(field, event):
    schema = field.interface
    widgets = schema.queryTaggedValue('plone.autoform.widgets', {})
    widgets[field.__name__] = 'z3c.form.browser.radio.RadioFieldWidget'
    schema.setTaggedValue('plone.autoform.widgets', widgets)
 def test__queryTaggedValue(self):
     schema = self._makeSchema()
     schema.setTaggedValue('foo', 'bar')        
     sfobj = self._makeOne(schema = schema)
     self.assertEqual('bar', sfobj._queryTaggedValue('foo'))
 def test_queryFromSchema_custom_subquery(self):
     schema = self._makeSchema()
     schema.setTaggedValue('salesforce.object', 'Contact')
     schema.setTaggedValue('salesforce.subqueries', {'scalar': '(SELECT foo FROM bar)'})
     query = self._queryFromSchema(schema)
     self.assertEqual('SELECT Contact.Id, (SELECT foo FROM bar) FROM Contact', query)