class SforcePartnerClientTest(test_base.SforceBaseClientTest):
  wsdlFormat = 'Partner'
  h = None

  def setUp(self):
    if self.h is None:
      self.h = SforcePartnerClient('../partner.wsdl.xml')
      self.h.login(test_config.USERNAME, test_config.PASSWORD, test_config.TOKEN)

  def testSearchOneResult(self):
    result = self.h.search('FIND {Single User} IN Name Fields RETURNING Lead(Name, Phone, Fax, Description, DoNotCall)')

    self.assertEqual(len(result.searchRecords), 1)
    self.assertEqual(result.searchRecords[0].record.Name, 'Single User')
    # it's not a string, it's a SAX Text object, but it can be cast to a string
    # just need to make sure it's not a bool
    self.assertTrue(result.searchRecords[0].record.DoNotCall in ('false', 'true'))
    # make sure we get None and not ''
    self.assertEqual(result.searchRecords[0].record.Description, None)


  def testSearchManyResults(self):
    result = self.h.search(u'FIND {Joë Möke} IN Name Fields RETURNING Lead(Name, Phone, DoNotCall, Company)')

    self.assertTrue(len(result.searchRecords) > 1)
    for searchRecord in result.searchRecords:
      self.assertEqual(searchRecord.record.Name, u'Joë Möke')
      self.assertEqual(searchRecord.record.Company, u'你好公司')
      self.assertTrue(searchRecord.record.DoNotCall in ('false', 'true'))

  def testUpdateOneFieldToNull(self):
    self.setHeaders('update')

    (result, lead) = self.createLead(True)

    lead.fieldsToNull = ('Email')
    lead.Email = None

    result = self.h.update(lead)
    self.assertTrue(result.success)
    self.assertEqual(result.id, lead.Id)

    result = self.h.retrieve('FirstName, LastName, Company, Email', 'Lead', (lead.Id))
    self.assertEqual(result.FirstName, u'Joë')
    self.assertEqual(result.LastName, u'Möke')
    self.assertEqual(result.Company, u'你好公司')
    self.assertEqual(result.Email, None)

  def testUpdateTwoFieldsToNull(self):
    self.setHeaders('update')

    (result, lead) = self.createLead(True)

    lead.fieldsToNull = ('FirstName', 'Email')
    lead.Email = None
    lead.FirstName = None

    result = self.h.update(lead)
    self.assertTrue(result.success)
    self.assertEqual(result.id, lead.Id)

    result = self.h.retrieve('FirstName, LastName, Company, Email', 'Lead', (lead.Id))

    self.assertEqual(result.FirstName, None)
    self.assertEqual(result.LastName, u'Möke')
    self.assertEqual(result.Email, None)
class SforcePartnerClientTest(test_base.SforceBaseClientTest):
    wsdlFormat = 'Partner'
    h = None

    def setUp(self):
        if self.h is None:
            self.h = SforcePartnerClient('../partner.wsdl.xml')
            self.h.login(test_config.USERNAME, test_config.PASSWORD,
                         test_config.TOKEN)

    def testSearchOneResult(self):
        result = self.h.search(
            'FIND {Single User} IN Name Fields RETURNING Lead(Name, Phone, Fax, Description, DoNotCall)'
        )

        self.assertEqual(len(result.searchRecords), 1)
        self.assertEqual(result.searchRecords[0].record.Name, 'Single User')
        # it's not a string, it's a SAX Text object, but it can be cast to a string
        # just need to make sure it's not a bool
        self.assertTrue(result.searchRecords[0].record.DoNotCall in ('false',
                                                                     'true'))
        # make sure we get None and not ''
        self.assertEqual(result.searchRecords[0].record.Description, None)

    def testSearchManyResults(self):
        result = self.h.search(
            u'FIND {Joë Möke} IN Name Fields RETURNING Lead(Name, Phone, DoNotCall, Company)'
        )

        self.assertTrue(len(result.searchRecords) > 1)
        for searchRecord in result.searchRecords:
            self.assertEqual(searchRecord.record.Name, u'Joë Möke')
            self.assertEqual(searchRecord.record.Company, u'你好公司')
            self.assertTrue(searchRecord.record.DoNotCall in ('false', 'true'))

    def testUpdateOneFieldToNull(self):
        self.setHeaders('update')

        (result, lead) = self.createLead(True)

        lead.fieldsToNull = ('Email')
        lead.Email = None

        result = self.h.update(lead)
        self.assertTrue(result.success)
        self.assertEqual(result.id, lead.Id)

        result = self.h.retrieve('FirstName, LastName, Company, Email', 'Lead',
                                 (lead.Id))
        self.assertEqual(result.FirstName, u'Joë')
        self.assertEqual(result.LastName, u'Möke')
        self.assertEqual(result.Company, u'你好公司')
        self.assertEqual(result.Email, None)

    def testUpdateTwoFieldsToNull(self):
        self.setHeaders('update')

        (result, lead) = self.createLead(True)

        lead.fieldsToNull = ('FirstName', 'Email')
        lead.Email = None
        lead.FirstName = None

        result = self.h.update(lead)
        self.assertTrue(result.success)
        self.assertEqual(result.id, lead.Id)

        result = self.h.retrieve('FirstName, LastName, Company, Email', 'Lead',
                                 (lead.Id))

        self.assertEqual(result.FirstName, None)
        self.assertEqual(result.LastName, u'Möke')
        self.assertEqual(result.Email, None)