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)
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)
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)
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)
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)