Esempio n. 1
0
    def test_custom_session_success(self):
        httpretty.register_uri(
            httpretty.POST,
            re.compile(r'^https://.*$'),
            body=tests.LOGIN_RESPONSE_SUCCESS,
            status=http.OK
        )
        session_state = {
            'called': False,
        }

        def on_response(*args, **kwargs):
            session_state['called'] = True

        session = requests.Session()
        session.hooks = {
            'response': on_response,
        }
        sf = Salesforce(
            session=session,
            username='******',
            password='******',
            security_token='token')

        self.assertEqual(tests.SESSION_ID, sf.session_id)
        self.assertEqual(session, sf.request)
    def test_check_status_pending(self):
        """"
        Test method for metadata deployment
        """
        # pylint: disable-msg=C0301
        mock_response = '<?xml version="1.0" ' \
                        'encoding="UTF-8"?><soapenv:Envelope ' \
                        'xmlns:soapenv="http://schemas.xmlsoap.org/soap' \
                        '/envelope/" ' \
                        'xmlns="http://soap.sforce.com/2006/04/metadata' \
                        '"><soapenv:Body><checkDeployStatusResponse><result' \
                        '><checkOnly>true</checkOnly><createdBy' \
                        '>0053D0000052Xaq</createdBy><createdByName>User ' \
                        'User</createdByName><createdDate>2020-10-28T15:38:34' \
                        '.000Z</createdDate><details><runTestResult' \
                        '><numFailures>0</numFailures><numTestsRun>0' \
                        '</numTestsRun><totalTime>0.0</totalTime' \
                        '></runTestResult></details><done>false</done><id' \
                        '>0Af3D00001NViC1SAL</id><ignoreWarnings>false' \
                        '</ignoreWarnings><lastModifiedDate>2020-10-28T15:38' \
                        ':34.000Z</lastModifiedDate><numberComponentErrors>0' \
                        '</numberComponentErrors><numberComponentsDeployed>0' \
                        '</numberComponentsDeployed><numberComponentsTotal>0' \
                        '</numberComponentsTotal><numberTestErrors>0' \
                        '</numberTestErrors><numberTestsCompleted>0' \
                        '</numberTestsCompleted><numberTestsTotal>0' \
                        '</numberTestsTotal><rollbackOnError>true' \
                        '</rollbackOnError><runTestsEnabled>false' \
                        '</runTestsEnabled><status>Pending</status><success' \
                        '>false</success></result></checkDeployStatusResponse' \
                        '></soapenv:Body></soapenv:Envelope>'

        responses.add(responses.POST,
                      re.compile(r'^https://.*/deployRequest/abdcefg'),
                      body=mock_response,
                      status=http.OK)

        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance=tests.INSTANCE_URL,
                            session=session)

        result = client.checkDeployStatus("abdcefg", sandbox=False)

        self.assertEqual(result.get('state'), "Pending")
        self.assertEqual(result.get('state_detail'), None)
        self.assertEqual(
            result.get('deployment_detail'), {
                'total_count': '0',
                'failed_count': '0',
                'deployed_count': '0',
                'errors': []
            })
        self.assertEqual(
            result.get('unit_test_detail'), {
                'total_count': '0',
                'failed_count': '0',
                'completed_count': '0',
                'errors': []
            })
Esempio n. 3
0
    def test_check_status_success(self):
        """"
        Test method for metadata deployment
        """
        # pylint: disable-msg=C0301
        mock_response = '<?xml version="1.0" ' \
                        'encoding="UTF-8"?><soapenv:Envelope ' \
                        'xmlns:soapenv="http://schemas.xmlsoap.org/soap' \
                        '/envelope/" ' \
                        'xmlns="http://soap.sforce.com/2006/04/metadata' \
                        '"><soapenv:Body><checkDeployStatusResponse><result' \
                        '><checkOnly>false</checkOnly><completedDate>2020-10' \
                        '-28T13:33:29.000Z</completedDate><createdBy' \
                        '>0053D0000052Xaq</createdBy><createdByName>User ' \
                        'User</createdByName><createdDate>2020-10-28T13:33:25' \
                        '.000Z</createdDate><details><componentSuccesses' \
                        '><changed>true</changed><componentType>ApexSettings' \
                        '</componentType><created>false</created><createdDate' \
                        '>2020-10-28T13:33:29.000Z</createdDate><deleted' \
                        '>false</deleted><fileName>shape/settings/Apex' \
                        '.settings</fileName><fullName>Apex</fullName' \
                        '><success>true</success></componentSuccesses' \
                        '><componentSuccesses><changed>true</changed' \
                        '><componentType>ChatterSettings</componentType' \
                        '><created>false</created><createdDate>2020-10-28T13' \
                        ':33:29.000Z</createdDate><deleted>false</deleted' \
                        '><fileName>shape/settings/Chatter.settings</fileName' \
                        '><fullName>Chatter</fullName><success>true</success' \
                        '></componentSuccesses><componentSuccesses><changed' \
                        '>true</changed><componentType></componentType' \
                        '><created>false</created><createdDate>2020-10-28T13' \
                        ':33:29.000Z</createdDate><deleted>false</deleted' \
                        '><fileName>shape/package.xml</fileName><fullName' \
                        '>package.xml</fullName><success>true</success' \
                        '></componentSuccesses><componentSuccesses><changed' \
                        '>true</changed><componentType>LightningExperienceSettings</componentType><created>false</created><createdDate>2020-10-28T13:33:29.000Z</createdDate><deleted>false</deleted><fileName>shape/settings/LightningExperience.settings</fileName><fullName>LightningExperience</fullName><success>true</success></componentSuccesses><componentSuccesses><changed>true</changed><componentType>LanguageSettings</componentType><created>false</created><createdDate>2020-10-28T13:33:29.000Z</createdDate><deleted>false</deleted><fileName>shape/settings/Language.settings</fileName><fullName>Language</fullName><success>true</success></componentSuccesses><runTestResult><numFailures>0</numFailures><numTestsRun>0</numTestsRun><totalTime>0.0</totalTime></runTestResult></details><done>true</done><id>0Af3D00001NVCnwSAH</id><ignoreWarnings>false</ignoreWarnings><lastModifiedDate>2020-10-28T13:33:29.000Z</lastModifiedDate><numberComponentErrors>0</numberComponentErrors><numberComponentsDeployed>4</numberComponentsDeployed><numberComponentsTotal>4</numberComponentsTotal><numberTestErrors>0</numberTestErrors><numberTestsCompleted>0</numberTestsCompleted><numberTestsTotal>0</numberTestsTotal><rollbackOnError>true</rollbackOnError><runTestsEnabled>false</runTestsEnabled><startDate>2020-10-28T13:33:26.000Z</startDate><status>Succeeded</status><success>true</success></result></checkDeployStatusResponse></soapenv:Body></soapenv:Envelope>'

        responses.add(
            responses.POST,
            re.compile(r'^https://.*/deployRequest/abdcefg'),
            body=mock_response,
            status=http.OK
            )

        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance=tests.INSTANCE_URL,
                            session=session)
        result = client.checkDeployStatus(
            "abdcefg", sandbox=False)
        self.assertEqual(result.get('state'), "Succeeded")
        self.assertEqual(result.get('state_detail'), None)
        self.assertEqual(result.get('deployment_detail'), {
            'total_count': '4', 'failed_count': '0', 'deployed_count': '4',
            'errors': []
            })
        self.assertEqual(result.get('unit_test_detail'), {
            'total_count': '0', 'failed_count': '0', 'completed_count': '0',
            'errors': []
            })
Esempio n. 4
0
    def test_check_status_in_progress(self, mock_post):
        """ "
        Test method for metadata deployment
        """
        mock_response = Mock()
        mock_response.status_code = 200
        mock_response.text = '<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://soap.sforce.com/2006/04/metadata"><soapenv:Body><checkDeployStatusResponse><result><checkOnly>false</checkOnly><createdBy>0053D0000052Xaq</createdBy><createdByName>User User</createdByName><createdDate>2020-10-28T17:24:30.000Z</createdDate><details><runTestResult><numFailures>0</numFailures><numTestsRun>0</numTestsRun><totalTime>0.0</totalTime></runTestResult></details><done>false</done><id>0Af3D00001NW8mnSAD</id><ignoreWarnings>false</ignoreWarnings><lastModifiedDate>2020-10-28T17:37:08.000Z</lastModifiedDate><numberComponentErrors>0</numberComponentErrors><numberComponentsDeployed>2</numberComponentsDeployed><numberComponentsTotal>3</numberComponentsTotal><numberTestErrors>0</numberTestErrors><numberTestsCompleted>0</numberTestsCompleted><numberTestsTotal>0</numberTestsTotal><rollbackOnError>true</rollbackOnError><runTestsEnabled>false</runTestsEnabled><startDate>2020-10-28T17:24:30.000Z</startDate><status>InProgress</status><success>false</success></result></checkDeployStatusResponse></soapenv:Body></soapenv:Envelope>'
        mock_post.return_value = mock_response

        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance=tests.SERVER_URL,
                            session=session)
        state, state_detail, deployment_detail, unit_test_detail = client.checkDeployStatus(
            "abdcefg")
        self.assertEqual(state, "InProgress")
        self.assertEqual(state_detail, None)
        self.assertEqual(
            deployment_detail, {
                "total_count": "3",
                "failed_count": "0",
                "deployed_count": "2",
                "errors": []
            })
        self.assertEqual(
            unit_test_detail, {
                "total_count": "0",
                "failed_count": "0",
                "completed_count": "0",
                "errors": []
            })
    def test_md_deploy_success(self, mock_read_zip):
        """"
        Test method for metadata deployment
        """
        #pylint: disable=unused-argument
        mock_response = '<?xml version="1.0" ' \
                        'encoding="UTF-8"?><soapenv:Envelope ' \
                        'xmlns:soapenv="http://schemas.xmlsoap.org/soap' \
                        '/envelope/" ' \
                        'xmlns="http://soap.sforce.com/2006/04/metadata' \
                        '"><soapenv:Body><deployResponse><result><done' \
                        '>false</done><id>0Af3B00001CMyfASAT</id><state' \
                        '>Queued</state></result></deployResponse></soapenv' \
                        ':Body></soapenv:Envelope>'
        responses.add(responses.POST,
                      re.compile(r'^https://.*/deployRequest'),
                      body=mock_response,
                      status=200)

        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance=tests.INSTANCE_URL,
                            session=session)
        result = client.deploy("path/to/fake/zip.zip", sandbox=False)
        self.assertEqual(result.get('asyncId'), "0Af3B00001CMyfASAT")
        self.assertEqual(result.get('state'), "Queued")
Esempio n. 6
0
    def test_check_status_success(self, mock_post):
        """ "
        Test method for metadata deployment
        """
        mock_response = Mock()
        mock_response.status_code = 200
        mock_response.text = '<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://soap.sforce.com/2006/04/metadata"><soapenv:Body><checkDeployStatusResponse><result><checkOnly>false</checkOnly><completedDate>2020-10-28T13:33:29.000Z</completedDate><createdBy>0053D0000052Xaq</createdBy><createdByName>User User</createdByName><createdDate>2020-10-28T13:33:25.000Z</createdDate><details><componentSuccesses><changed>true</changed><componentType>ApexSettings</componentType><created>false</created><createdDate>2020-10-28T13:33:29.000Z</createdDate><deleted>false</deleted><fileName>shape/settings/Apex.settings</fileName><fullName>Apex</fullName><success>true</success></componentSuccesses><componentSuccesses><changed>true</changed><componentType>ChatterSettings</componentType><created>false</created><createdDate>2020-10-28T13:33:29.000Z</createdDate><deleted>false</deleted><fileName>shape/settings/Chatter.settings</fileName><fullName>Chatter</fullName><success>true</success></componentSuccesses><componentSuccesses><changed>true</changed><componentType></componentType><created>false</created><createdDate>2020-10-28T13:33:29.000Z</createdDate><deleted>false</deleted><fileName>shape/package.xml</fileName><fullName>package.xml</fullName><success>true</success></componentSuccesses><componentSuccesses><changed>true</changed><componentType>LightningExperienceSettings</componentType><created>false</created><createdDate>2020-10-28T13:33:29.000Z</createdDate><deleted>false</deleted><fileName>shape/settings/LightningExperience.settings</fileName><fullName>LightningExperience</fullName><success>true</success></componentSuccesses><componentSuccesses><changed>true</changed><componentType>LanguageSettings</componentType><created>false</created><createdDate>2020-10-28T13:33:29.000Z</createdDate><deleted>false</deleted><fileName>shape/settings/Language.settings</fileName><fullName>Language</fullName><success>true</success></componentSuccesses><runTestResult><numFailures>0</numFailures><numTestsRun>0</numTestsRun><totalTime>0.0</totalTime></runTestResult></details><done>true</done><id>0Af3D00001NVCnwSAH</id><ignoreWarnings>false</ignoreWarnings><lastModifiedDate>2020-10-28T13:33:29.000Z</lastModifiedDate><numberComponentErrors>0</numberComponentErrors><numberComponentsDeployed>4</numberComponentsDeployed><numberComponentsTotal>4</numberComponentsTotal><numberTestErrors>0</numberTestErrors><numberTestsCompleted>0</numberTestsCompleted><numberTestsTotal>0</numberTestsTotal><rollbackOnError>true</rollbackOnError><runTestsEnabled>false</runTestsEnabled><startDate>2020-10-28T13:33:26.000Z</startDate><status>Succeeded</status><success>true</success></result></checkDeployStatusResponse></soapenv:Body></soapenv:Envelope>'
        mock_post.return_value = mock_response

        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance=tests.SERVER_URL,
                            session=session)
        state, state_detail, deployment_detail, unit_test_detail = client.checkDeployStatus(
            "abdcefg")
        self.assertEqual(state, "Succeeded")
        self.assertEqual(state_detail, None)
        self.assertEqual(
            deployment_detail, {
                "total_count": "4",
                "failed_count": "0",
                "deployed_count": "4",
                "errors": []
            })
        self.assertEqual(
            unit_test_detail, {
                "total_count": "0",
                "failed_count": "0",
                "completed_count": "0",
                "errors": []
            })
Esempio n. 7
0
    def test_custom_session_success(self):
        """Ensure custom session is used"""
        responses.add(responses.POST,
                      re.compile(r'^https://.*$'),
                      body=tests.LOGIN_RESPONSE_SUCCESS,
                      status=http.OK)
        session_state = {
            'called': False,
        }

        # pylint: disable=unused-argument,missing-docstring
        def on_response(*args, **kwargs):
            session_state['called'] = True

        session = requests.Session()
        session.hooks = {
            'response': on_response,
        }
        client = Salesforce(session=session,
                            username='******',
                            password='******',
                            security_token='token')

        self.assertEqual(tests.SESSION_ID, client.session_id)
        self.assertEqual(session, client.session)
Esempio n. 8
0
    def test_query_all_include_deleted(self):
        """
        Test that we query all and fetch additional result sets automatically.
        """
        responses.add(
            responses.GET,
            re.compile(r"^https://.*/queryAll/\?q=SELECT\+ID\+FROM\+Account$"),
            body='{"records": [{"ID": "1"}], "done": false, "nextRecordsUrl": '
            '"https://example.com/queryAll/next-records-id",'
            '"totalSize": 2}',
            status=http.OK,
        )
        responses.add(
            responses.GET,
            re.compile(r"^https://.*/queryAll/next-records-id$"),
            body='{"records": [{"ID": "2"}], "done": true, "totalSize": 2}',
            status=http.OK,
        )
        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance_url=tests.SERVER_URL,
                            session=session)

        result = client.query_all("SELECT ID FROM Account",
                                  include_deleted=True)
        self.assertEqual(
            result,
            OrderedDict([
                ("records",
                 [OrderedDict([("ID", "1")]),
                  OrderedDict([("ID", "2")])]),
                ("done", True),
                ("totalSize", 2),
            ]),
        )
Esempio n. 9
0
    def test_query_all_include_deleted(self):
        """
        Test that we query all and fetch additional result sets automatically.
        """
        responses.add(
            responses.GET,
            re.compile(r'^https://.*/queryAll/\?q=SELECT\+ID\+FROM\+Account$'),
            body='{"records": [{"ID": "1"}], "done": false, "nextRecordsUrl": '
            '"https://example.com/queryAll/next-records-id"}',
            status=http.OK)
        responses.add(responses.GET,
                      re.compile(r'^https://.*/queryAll/next-records-id$'),
                      body='{"records": [{"ID": "2"}], "done": true}',
                      status=http.OK)
        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance_url=tests.SERVER_URL,
                            session=session)

        result = client.query_all('SELECT ID FROM Account',
                                  include_deleted=True)
        self.assertEqual(
            result,
            OrderedDict([
                (u'records',
                 [OrderedDict([(u'ID', u'1')]),
                  OrderedDict([(u'ID', u'2')])]), (u'done', True)
            ]))
Esempio n. 10
0
    def test_query_all_iter(self):
        """
        Test that we get data only once we ask for them (lazily).
        """
        responses.add(
            responses.GET,
            re.compile(r'^https://.*/query/\?q=SELECT\+ID\+FROM\+Account$'),
            body='{"records": [{"ID": "1"}], "done": false, "nextRecordsUrl": '
                 '"https://example.com/query/next-records-id", "totalSize": 2}',
            status=http.OK)
        responses.add(
            responses.GET,
            re.compile(r'^https://.*/query/next-records-id$'),
            body='{"records": [{"ID": "2"}], "done": true, "totalSize": 2}',
            status=http.OK)
        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance_url=tests.SERVER_URL,
                            session=session)

        result = client.query_all_iter('SELECT ID FROM Account')
        self.assertEqual(next(result), OrderedDict([(u'ID', u'1')]))
        self.assertEqual(next(result), OrderedDict([(u'ID', u'2')]))
        with self.assertRaises(StopIteration):
            next(result)
    def test_update(self):
        """Test bulk update records"""
        operation = 'upsert'
        responses.add(
            responses.POST,
            re.compile(r'^https://[^/job].*/job$'),
            body='{"apiVersion": 42.0, "concurrencyMode": "Parallel",'
            '"contentType": "JSON","id": "Job-1","object": "Contact",'
            '"operation": "%s","state": "Open"}' % operation,
            status=http.OK)
        responses.add(
            responses.POST,
            re.compile(r'^https://[^/job].*/job/Job-1/batch$'),
            body='{"id": "Batch-1","jobId": "Job-1","state": "Queued"}',
            status=http.OK)
        responses.add(
            responses.POST,
            re.compile(r'^https://[^/job].*/job/Job-1$'),
            body='{"apiVersion" : 42.0, "concurrencyMode" : "Parallel",'
            '"contentType" : "JSON","id" : "Job-1","object" : "Contact",'
            '"operation" : "%s","state" : "Closed"}' % operation,
            status=http.OK)
        responses.add(
            responses.GET,
            re.compile(r'^https://[^/job].*/job/Job-1/batch/Batch-1$'),
            body='{"id": "Batch-1","jobId": "Job-1","state": "InProgress"}',
            status=http.OK)
        responses.add(
            responses.GET,
            re.compile(r'^https://[^/job].*/job/Job-1/batch/Batch-1$'),
            body='{"id": "Batch-1","jobId": "Job-1","state": "Completed"}',
            status=http.OK)
        responses.add(
            responses.GET,
            re.compile(r'^https://[^/job].*/job/Job-1/batch/Batch-1/result$'),
            body='[{"success": true,"created": true,"id": "001xx000003DHP0AAO",'
            '"errors": []},{"success": true,"created": true,'
            '"id": "001xx000003DHP1AAO","errors": []}]',
            status=http.OK)

        data = [{
            'Id': '001xx000003DHP0AAO',
            'AccountId': 'ID-13',
            'Email': '*****@*****.**',
            'FirstName': 'Bob',
            'LastName': 'x'
        }, {
            'Id': '001xx000003DHP1AAO',
            'AccountId': 'ID-24',
            'Email': '*****@*****.**',
            'FirstName': 'Alice',
            'LastName': 'y'
        }]
        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance_url=tests.SERVER_URL,
                            session=session)
        contact = client.bulk.Contact.update(data)
        self.assertEqual(self.expected, contact)
Esempio n. 12
0
    def test_check_status_payload_error(self):
        """"
        Test method for metadata deployment
        """
        # pylint: disable-msg=C0301
        mock_response = '<?xml version="1.0" ' \
                        'encoding="UTF-8"?><soapenv:Envelope ' \
                        'xmlns:soapenv="http://schemas.xmlsoap.org/soap' \
                        '/envelope/" ' \
                        'xmlns="http://soap.sforce.com/2006/04/metadata' \
                        '"><soapenv:Body><checkDeployStatusResponse><result' \
                        '><checkOnly>true</checkOnly><completedDate>2020-10' \
                        '-28T13:37:48.000Z</completedDate><createdBy' \
                        '>0053D0000052Xaq</createdBy><createdByName>User ' \
                        'User</createdByName><createdDate>2020-10-28T13:37:46' \
                        '.000Z</createdDate><details><componentFailures' \
                        '><changed>false</changed><componentType' \
                        '></componentType><created>false</created' \
                        '><createdDate>2020-10-28T13:37:47.000Z</createdDate' \
                        '><deleted>false</deleted><fileName>package.xml' \
                        '</fileName><fullName>package.xml</fullName><problem' \
                        '>No package.xml ' \
                        'found</problem><problemType>Error</problemType' \
                        '><success>false</success></componentFailures' \
                        '><runTestResult><numFailures>0</numFailures' \
                        '><numTestsRun>0</numTestsRun><totalTime>0.0' \
                        '</totalTime></runTestResult></details><done>true' \
                        '</done><id>0Af3D00001NVD0TSAX</id><ignoreWarnings' \
                        '>false</ignoreWarnings><lastModifiedDate>2020-10' \
                        '-28T13:37:48.000Z</lastModifiedDate' \
                        '><numberComponentErrors>0</numberComponentErrors' \
                        '><numberComponentsDeployed>0</numberComponentsDeployed><numberComponentsTotal>0</numberComponentsTotal><numberTestErrors>0</numberTestErrors><numberTestsCompleted>0</numberTestsCompleted><numberTestsTotal>0</numberTestsTotal><rollbackOnError>true</rollbackOnError><runTestsEnabled>false</runTestsEnabled><startDate>2020-10-28T13:37:47.000Z</startDate><status>Failed</status><success>false</success></result></checkDeployStatusResponse></soapenv:Body></soapenv:Envelope>'

        responses.add(
            responses.POST,
            re.compile(r'^https://.*/deployRequest/abdcefg'),
            body=mock_response,
            status=http.OK
            )

        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance=tests.INSTANCE_URL,
                            session=session)
        result = client.checkDeployStatus(
            "abdcefg", sandbox=False)
        self.assertEqual(result.get('state'), "Failed")
        self.assertEqual(result.get('state_detail'), None)
        self.assertEqual(result.get('deployment_detail'), {
            'total_count': '0', 'failed_count': '0', 'deployed_count': '0',
            'errors': [{
                'type': None, 'file': 'package.xml',
                'status': 'Error', 'message': 'No package.xml found'
                }]
            })
        self.assertEqual(result.get('unit_test_detail'), {
            'total_count': '0', 'failed_count': '0', 'completed_count': '0',
            'errors': []
            })
Esempio n. 13
0
    def test_shared_custom_session_to_sftype(self):
        """Test Salesforce and SFType instances share custom `Session`"""
        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance_url=tests.SERVER_URL,
                            session=session)

        self.assertIs(session, client.session)
        self.assertIs(session, client.Contact.session)
Esempio n. 14
0
    def test_proxies_inherited_default(self):
        """Test Salesforce and SFType use same proxies"""
        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance_url=tests.SERVER_URL,
                            session=session)

        self.assertIs(session.proxies, client.session.proxies)
        self.assertIs(session.proxies, client.Contact.session.proxies)
Esempio n. 15
0
 def test_proxies_inherited_set_on_session(self):
     """Test Salesforce and SFType use same custom proxies"""
     session = requests.Session()
     session.proxies = tests.PROXIES
     client = Salesforce(session_id=tests.SESSION_ID,
                         instance_url=tests.SERVER_URL,
                         session=session)
     self.assertIs(tests.PROXIES, client.session.proxies)
     self.assertIs(tests.PROXIES, client.Contact.session.proxies)
 def test_bulk_type(self):
     """Test bulk type creation"""
     session = requests.Session()
     client = Salesforce(session_id=tests.SESSION_ID,
                         instance_url=tests.SERVER_URL,
                         session=session)
     contact = client.bulk.Contact
     self.assertIs('Contact', contact.object_name)
     self.assertIs(client.bulk_url, contact.bulk_url)
     self.assertEqual(tests.BULK_HEADERS, contact.headers)
Esempio n. 17
0
    def test_proxies_ignored(self):
        """Test overridden proxies are ignored"""
        session = requests.Session()
        session.proxies = tests.PROXIES

        with patch('simple_salesforce.api.logger.warning') as mock_log:
            client = Salesforce(session_id=tests.SESSION_ID,
                instance_url=tests.SERVER_URL, session=session, proxies={})
            self.assertIn('ignoring proxies', mock_log.call_args[0][0])
            self.assertIs(tests.PROXIES, client.session.proxies)
Esempio n. 18
0
    def test_query_parse_decimals(self):
        """Test parsing of floating point numbers as decimals"""
        responses.add(
            responses.GET,
            re.compile(r'^https://.*/query/\?q=SELECT\+ID%2C\+Price\+'
                       r'FROM\+Account$'),
            body='{"records": [{"ID": "1", "Price": 13.40},'
                              '{"ID": "2", "Price": 1.12345678901234567},'
                              '{"ID": "3", "Price": 123456789012345678},'
                              '{"ID": "4", "Price": 0},'
                              '{"ID": "5", "Price": -1.1234567890123456},'
                              '{"ID": "6", "Price": -12345678901234567}],'
                 '"done": false, "nextRecordsUrl": '
                 '"https://example.com/query/next-records-id", "totalSize": 6}',
            status=http.OK)
        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance_url=tests.SERVER_URL,
                            session=session,
                            parse_fixed_place=True)

        result = client.query('SELECT ID, Price FROM Account')
        self.assertEqual(
            result,
            OrderedDict([
                ('records', [
                    OrderedDict([
                        ('ID', '1'),
                        ('Price', decimal.Decimal('13.40')),
                    ]),
                    OrderedDict([
                        ('ID', '2'),
                        ('Price', decimal.Decimal('1.12345678901234567')),
                    ]),
                    OrderedDict([
                        ('ID', '3'),
                        ('Price', decimal.Decimal('123456789012345678')),
                    ]),
                    OrderedDict([
                        ('ID', '4'),
                        ('Price', decimal.Decimal('0')),
                    ]),
                    OrderedDict([
                        ('ID', '5'),
                        ('Price', decimal.Decimal('-1.1234567890123456')),
                    ]),
                    OrderedDict([
                        ('ID', '6'),
                        ('Price', decimal.Decimal('-12345678901234567')),
                    ]),
                ]),
                ('done', False),
                ("nextRecordsUrl", "https://example.com/query/next-records-id"),
                ('totalSize', 6),
            ]))
    def test_bulk_handler(self):
        """Test bulk handler creation"""
        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance_url=tests.SERVER_URL,
                            session=session)
        bulk_handler = client.bulk

        self.assertIs(tests.SESSION_ID, bulk_handler.session_id)
        self.assertIs(client.bulk_url, bulk_handler.bulk_url)
        self.assertEqual(tests.BULK_HEADERS, bulk_handler.headers)
Esempio n. 20
0
    def test_query_include_deleted(self):
        """Test querying for all records generates the expected request"""
        responses.add(
            responses.GET,
            re.compile(r'^https://.*/queryAll/\?q=SELECT\+ID\+FROM\+Account$'),
            body='{}',
            status=http.OK)
        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance_url=tests.SERVER_URL,
                            session=session)

        result = client.query('SELECT ID FROM Account', include_deleted=True)
        self.assertEqual(result, {})
Esempio n. 21
0
    def test_query(self):
        """Test querying generates the expected request"""
        responses.add(
            responses.GET,
            re.compile(r"^https://.*/query/\?q=SELECT\+ID\+FROM\+Account$"),
            body="{}",
            status=http.OK)
        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance_url=tests.SERVER_URL,
                            session=session)

        result = client.query("SELECT ID FROM Account")
        self.assertEqual(result, {})
Esempio n. 22
0
 def test_delete(self):
     """Test bulk delete records"""
     operation = 'delete'
     responses.add(
         responses.POST,
         re.compile(r'^https://[^/job].*/job$'),
         body='{"apiVersion": 42.0, "concurrencyMode": "Parallel",'
         '"contentType": "JSON","id": "Job-1","object": "Contact",'
         '"operation": "%s","state": "Open"}' % operation,
         status=http.OK)
     responses.add(
         responses.POST,
         re.compile(r'^https://[^/job].*/job/Job-1/batch$'),
         body='{"id": "Batch-1","jobId": "Job-1","state": "Queued"}',
         status=http.OK)
     responses.add(
         responses.POST,
         re.compile(r'^https://[^/job].*/job/Job-1$'),
         body='{"apiVersion" : 42.0, "concurrencyMode" : "Parallel",'
         '"contentType" : "JSON","id" : "Job-1","object" : "Contact",'
         '"operation" : "%s","state" : "Closed"}' % operation,
         status=http.OK)
     responses.add(
         responses.GET,
         re.compile(r'^https://[^/job].*/job/Job-1/batch/Batch-1$'),
         body='{"id": "Batch-1","jobId": "Job-1","state": "InProgress"}',
         status=http.OK)
     responses.add(
         responses.GET,
         re.compile(r'^https://[^/job].*/job/Job-1/batch/Batch-1$'),
         body='{"id": "Batch-1","jobId": "Job-1","state": "Completed"}',
         status=http.OK)
     responses.add(
         responses.GET,
         re.compile(r'^https://[^/job].*/job/Job-1/batch/Batch-1/result$'),
         body='[{"success": true,"created": true,"id": "001xx000003DHP0AAO",'
         '"errors": []},{"success": true,"created": true,'
         '"id": "001xx000003DHP1AAO","errors": []}]',
         status=http.OK)
     data = [{
         'id': 'ID-1',
     }, {
         'id': 'ID-2',
     }]
     session = requests.Session()
     client = Salesforce(session_id=tests.SESSION_ID,
                         instance_url=tests.SERVER_URL,
                         session=session)
     contact = client.bulk.Contact.delete(data)
     self.assertEqual([self.expected], contact)
Esempio n. 23
0
    def test_query_more_id_not_url(self):
        """
        Test fetching additional results by ID generates the expected request
        """
        responses.add(responses.GET,
                      re.compile(r'^https://.*/query/next-records-id$'),
                      body='{}',
                      status=http.OK)
        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance_url=tests.SERVER_URL,
                            session=session)

        result = client.query_more('next-records-id', identifier_is_url=False)
        self.assertEqual(result, {})
Esempio n. 24
0
    def test_md_deploy_failed_status_code(self, mock_read_zip, mock_post):
        """ "
        Test method for metadata deployment
        """
        mock_response = Mock()
        mock_response.status_code = 2599
        mock_response.text = "Unrecognized Error"
        mock_post.return_value = mock_response

        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance=tests.SERVER_URL,
                            session=session)
        with self.assertRaises(Exception):
            client.deploy("path/to/fake/zip.zip", {})
Esempio n. 25
0
    def test_api_limits(self):
        """Test method for getting Salesforce organization limits"""

        responses.add(responses.GET,
                      re.compile(r'^https://.*/limits/$'),
                      json=tests.ORGANIZATION_LIMITS_RESPONSE,
                      status=http.OK)

        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance_url=tests.SERVER_URL,
                            session=session)

        result = client.limits()

        self.assertEqual(result, tests.ORGANIZATION_LIMITS_RESPONSE)
Esempio n. 26
0
    def test_md_deploy_success(self, mock_read_zip, mock_post):
        """ "
        Test method for metadata deployment
        """
        mock_response = Mock()
        mock_response.status_code = 200
        mock_response.text = '<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://soap.sforce.com/2006/04/metadata"><soapenv:Body><deployResponse><result><done>false</done><id>0Af3B00001CMyfASAT</id><state>Queued</state></result></deployResponse></soapenv:Body></soapenv:Envelope>'
        mock_post.return_value = mock_response

        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance=tests.SERVER_URL,
                            session=session)
        pid, state = client.deploy("path/to/fake/zip.zip", {})
        self.assertEqual(pid, "0Af3B00001CMyfASAT")
        self.assertEqual(state, "Queued")
    def test_md_deploy_failed_status_code(self, mock_read_zip):
        """"
        Test method for metadata deployment
        """
        #pylint: disable=unused-argument
        responses.add(responses.POST,
                      re.compile(r'^https://.*'),
                      body="Unrecognized Error",
                      status=2599)

        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance=tests.INSTANCE_URL,
                            session=session)
        with self.assertRaises(Exception):
            client.deploy("path/to/fake/zip.zip", sandbox=False)
Esempio n. 28
0
    def test_custom_version_success(self):
        """Test custom version"""
        responses.add(responses.POST,
                      re.compile(r'^https://.*$'),
                      body=tests.LOGIN_RESPONSE_SUCCESS,
                      status=http.OK)

        # Use an invalid version that is guaranteed to never be used
        expected_version = '4.2'
        client = Salesforce(session=requests.Session(),
                            username='******',
                            password='******',
                            security_token='token',
                            version=expected_version)

        self.assertEqual(
            client.base_url.split('/')[-2], 'v%s' % expected_version)
Esempio n. 29
0
    def test_custom_version_success(self):
        """Test custom version"""
        responses.add(responses.POST,
                      re.compile(r"^https://.*$"),
                      body=tests.LOGIN_RESPONSE_SUCCESS,
                      status=http.OK)

        # Use an invalid version that is guaranteed to never be used
        expected_version = "4.2"
        client = Salesforce(
            session=requests.Session(),
            username="******",
            password="******",
            security_token="token",
            version=expected_version,
        )

        self.assertEqual(
            client.base_url.split("/")[-2], "v%s" % expected_version)
Esempio n. 30
0
    def test_check_status_payload_error(self, mock_post):
        """ "
        Test method for metadata deployment
        """
        mock_response = Mock()
        mock_response.status_code = 200
        mock_response.text = '<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://soap.sforce.com/2006/04/metadata"><soapenv:Body><checkDeployStatusResponse><result><checkOnly>true</checkOnly><completedDate>2020-10-28T13:37:48.000Z</completedDate><createdBy>0053D0000052Xaq</createdBy><createdByName>User User</createdByName><createdDate>2020-10-28T13:37:46.000Z</createdDate><details><componentFailures><changed>false</changed><componentType></componentType><created>false</created><createdDate>2020-10-28T13:37:47.000Z</createdDate><deleted>false</deleted><fileName>package.xml</fileName><fullName>package.xml</fullName><problem>No package.xml found</problem><problemType>Error</problemType><success>false</success></componentFailures><runTestResult><numFailures>0</numFailures><numTestsRun>0</numTestsRun><totalTime>0.0</totalTime></runTestResult></details><done>true</done><id>0Af3D00001NVD0TSAX</id><ignoreWarnings>false</ignoreWarnings><lastModifiedDate>2020-10-28T13:37:48.000Z</lastModifiedDate><numberComponentErrors>0</numberComponentErrors><numberComponentsDeployed>0</numberComponentsDeployed><numberComponentsTotal>0</numberComponentsTotal><numberTestErrors>0</numberTestErrors><numberTestsCompleted>0</numberTestsCompleted><numberTestsTotal>0</numberTestsTotal><rollbackOnError>true</rollbackOnError><runTestsEnabled>false</runTestsEnabled><startDate>2020-10-28T13:37:47.000Z</startDate><status>Failed</status><success>false</success></result></checkDeployStatusResponse></soapenv:Body></soapenv:Envelope>'
        mock_post.return_value = mock_response

        session = requests.Session()
        client = Salesforce(session_id=tests.SESSION_ID,
                            instance=tests.SERVER_URL,
                            session=session)
        state, state_detail, deployment_detail, unit_test_detail = client.checkDeployStatus(
            "abdcefg")
        self.assertEqual(state, "Failed")
        self.assertEqual(state_detail, None)
        self.assertEqual(
            deployment_detail,
            {
                "total_count":
                "0",
                "failed_count":
                "0",
                "deployed_count":
                "0",
                "errors": [{
                    "type": None,
                    "file": "package.xml",
                    "status": "Error",
                    "message": "No package.xml found"
                }],
            },
        )
        self.assertEqual(
            unit_test_detail, {
                "total_count": "0",
                "failed_count": "0",
                "completed_count": "0",
                "errors": []
            })