示例#1
0
        public void Authenticate_ValidCredentials_Authenticated()
        {
            var target = new SalesforceClient();

            target.Authenticate(CreateAuthenticationFlow(TestConfig.ClientId, TestConfig.ClientSecret, TestConfig.Username, TestConfig.Password));
            Assert.IsTrue(target.IsAuthenticated);
        }
        public void Update_ErrorReceivedWithInvalidFields_Exception()
        {
            var response = new Mock <IRestResponse <object> >();

            response.Setup(r => r.Content).Returns("[{ errorCode: 'error', message: 'error', fields: ['field1', 'field2'] }]");
            response.Setup(r => r.StatusCode).Returns(HttpStatusCode.BadRequest);

            var restClient = new Mock <IRestClient>();

            restClient.Setup(r => r.BaseUrl).Returns(new Uri("http://tokenUrl"));
            restClient.Setup(r => r.Execute <object>(It.IsAny <IRestRequest>())).Returns(response.Object);
            restClient.Setup(r => r.Execute(It.IsAny <IRestRequest>())).Returns(response.Object);

            var flow = new Mock <IAuthenticationFlow>();

            flow.Setup(f => f.Authenticate()).Returns(new AuthenticationInfo("access", "http://url"));

            var target = new SalesforceClient(restClient.Object);

            target.Authenticate(flow.Object);

            ExceptionAssert.IsThrowing(new SalesforceException("TESTE", "error", new string[] { "field1", "field2" }), () =>
            {
                target.Update("TESTE", "TESTE", "TESTE");
            });
        }
        public void Update_StatusCodeOkButErrorException_Exception()
        {
            var response = MockRepository.GenerateMock <IRestResponse <object> >();

            response.Expect(r => r.Content).Return("");
            response.Expect(r => r.StatusCode).Return(HttpStatusCode.NoContent);
            response.Expect(r => r.ErrorException).Return(new Exception("TESTE"));

            var restClient = MockRepository.GenerateMock <IRestClient>();

            restClient.Expect(r => r.BaseUrl).SetPropertyWithArgument(new Uri("http://tokenUrl"));
            restClient.Expect(r => r.Execute <object>(null)).IgnoreArguments().Return(response);

            var flow = MockRepository.GenerateMock <IAuthenticationFlow>();

            flow.Expect(f => f.Authenticate()).Return(new AuthenticationInfo("access", "http://url"));

            var target = new SalesforceClient(restClient);

            target.Authenticate(flow);

            ExceptionAssert.IsThrowing(new FormatException("TESTE" + Environment.NewLine), () =>
            {
                target.Update("TESTE", "TESTE", "TESTE");
            });
        }
        public void Update_StatusCodeOkButErrorException_Exception()
        {
            var response = new Mock <IRestResponse <object> >();

            response.Setup(r => r.Content).Returns("");
            response.Setup(r => r.StatusCode).Returns(HttpStatusCode.NoContent);
            response.Setup(r => r.ErrorException).Returns(new Exception("TESTE"));

            var restClient = new Mock <IRestClient>();

            restClient.Setup(r => r.BaseUrl).Returns(new Uri("http://tokenUrl"));
            restClient.Setup(r => r.Execute(It.IsAny <IRestRequest>())).Returns(response.Object);

            var flow = new Mock <IAuthenticationFlow>();

            flow.Setup(f => f.Authenticate()).Returns(new AuthenticationInfo("access", "http://url"));

            var target = new SalesforceClient(restClient.Object);

            target.Authenticate(flow.Object);

            ExceptionAssert.IsThrowing(new FormatException("TESTE" + Environment.NewLine), () =>
            {
                target.Update("TESTE", "TESTE", "TESTE");
            });
        }
        public void Update_ErrorReceivedWithInvalidFields_Exception()
        {
            var response = MockRepository.GenerateMock <IRestResponse <object> >();

            response.Expect(r => r.Content).Return("[{ errorCode: 'error', message: 'error', fields: ['field1', 'field2'] }]");
            response.Expect(r => r.StatusCode).Return(HttpStatusCode.BadRequest);

            var restClient = MockRepository.GenerateMock <IRestClient>();

            restClient.Expect(r => r.BaseUrl).SetPropertyWithArgument(new Uri("http://tokenUrl"));
            restClient.Expect(r => r.Execute <object>(null)).IgnoreArguments().Return(response);

            var flow = MockRepository.GenerateMock <IAuthenticationFlow>();

            flow.Expect(f => f.Authenticate()).Return(new AuthenticationInfo("access", "http://url"));

            var target = new SalesforceClient(restClient);

            target.Authenticate(flow);

            ExceptionAssert.IsThrowing(new SalesforceException("TESTE", "error", new string[] { "field1", "field2" }), () =>
            {
                target.Update("TESTE", "TESTE", "TESTE");
            });
        }
        private SalesforceClient CreateAltUrlClientWithResponseOk <T>(HttpStatusCode statusCode, T data, Action <Uri> recordUrl) where T : new()
        {
            var response = new Mock <IRestResponse <T> >();

            response.Setup(r => r.Content).Returns("{\"id\":\"id\",\"records\":[{\"Id\": \"1\"},{\"Id\":\"2\"}]}");
            response.Setup(r => r.StatusCode).Returns(statusCode);
            response.Setup(r => r.ErrorException).Returns((Exception)null);
            response.Setup(r => r.Data).Returns(data);

            var restClient = new Mock <IRestClient>();

            restClient.Setup(r => r.BaseUrl).Returns(new Uri($"http://url{AltUrl}/TESTE"));
            restClient.Setup(r => r.Execute(It.IsAny <IRestRequest>())).Returns(response.Object);
            restClient.Setup(r => r.Execute <T>(It.IsAny <IRestRequest>())).Returns(response.Object);

            var flow = new Mock <IAuthenticationFlow>();

            flow.Setup(f => f.Authenticate()).Returns(new AuthenticationInfo("access", "http://url"));

            var target = new SalesforceClient(restClient.Object);

            target.Authenticate(flow.Object);

            return(target);
        }
        private SalesforceClient CreateAltUrlClientWithResponseOk <T>(HttpStatusCode statusCode, T data, Action <Uri> recordUrl) where T : new()
        {
            var response = MockRepository.GenerateMock <IRestResponse <T> >();

            response.Expect(r => r.Content).Return("{\"id\":\"id\",\"records\":[{\"Id\": \"1\"},{\"Id\":\"2\"}]}");
            response.Expect(r => r.StatusCode).Return(statusCode);
            response.Expect(r => r.ErrorException).Return(null);
            response.Expect(r => r.Data).Return(data);

            var restClient = MockRepository.GenerateMock <IRestClient>();

            restClient.Expect(r => r.BaseUrl = new Uri(string.Format("http://url{0}/TESTE", AltUrl))).IgnoreArguments().Do(recordUrl);
            restClient.Expect(r => r.Execute(null)).IgnoreArguments().Return(response);
            restClient.Expect(r => r.Execute <T>(null)).IgnoreArguments().Return(response);

            var flow = MockRepository.GenerateMock <IAuthenticationFlow>();

            flow.Expect(f => f.Authenticate()).Return(new AuthenticationInfo("access", "http://url"));

            var target = new SalesforceClient(restClient);

            target.Authenticate(flow);

            return(target);
        }
        private SalesforceClient CreateClientWithResponseOk <T>(HttpStatusCode statusCode, T data) where T : new()
        {
            var response = MockRepository.GenerateMock <IRestResponse <T> >();

            response.Expect(r => r.Content).Return("{\"id\":\"id\",\"records\":[{\"Id\": \"1\"},{\"Id\":\"2\"}]}");
            response.Expect(r => r.StatusCode).Return(statusCode);
            response.Expect(r => r.ErrorException).Return(null);
            response.Expect(r => r.Data).Return(data);

            var restClient = MockRepository.GenerateMock <IRestClient>();

            //restClient.Expect(r => r.BaseUrl).SetPropertyWithArgument("url/services/data/v28.0/query?q=SELECT Id FROM TESTE WHERE Id = 'TESTE'");
            restClient.Expect(r => r.Execute <T>(null)).IgnoreArguments().Return(response);


            var flow = MockRepository.GenerateMock <IAuthenticationFlow>();

            flow.Expect(f => f.Authenticate()).Return(new AuthenticationInfo("access", "http://url"));

            var target = new SalesforceClient(restClient);

            target.Authenticate(flow);

            return(target);
        }
        public void Authenticate_InvalidClientSecret_InvalidClientSecret()
        {
            var target = new SalesforceClient();

            ExceptionAssert.IsThrowing(new SalesforceException(SalesforceError.InvalidClient, "invalid client credentials"), () =>
            {
                target.Authenticate(CreateAuthenticationFlow(TestConfig.ClientId, "invalid client secret", "invalid user name", TestConfig.Password));
            });

            Assert.IsFalse(target.IsAuthenticated);
        }
示例#10
0
        public void Authenticate_InvalidPassword_InvalidPassword()
        {
            var target = new SalesforceClient();

            ExceptionAssert.IsThrowing(new SalesforceException(SalesforceError.InvalidPassword, "authentication failure"), () =>
            {
                target.Authenticate(CreateAuthenticationFlow(TestConfig.ClientId, TestConfig.ClientSecret, TestConfig.Username, "invalid password"));
            });

            Assert.IsFalse(target.IsAuthenticated);
        }
        public void Authenticate_InvalidPassword_InvalidPassword()
        {
            var target = new SalesforceClient();

            ExceptionAssert.IsThrowing(new SalesforceException(SalesforceError.InvalidPassword, "authentication failure - invalid password"), () =>
            {
                target.Authenticate(CreateAuthenticationFlow(TestConfig.ClientId, TestConfig.ClientSecret, TestConfig.Username, "invalid password"));
            });

            Assert.IsFalse(target.IsAuthenticated);
        }
示例#12
0
        public void Authenticate_InvalidClientSecret_InvalidClientSecret()
        {
            var target = new SalesforceClient();

            ExceptionAssert.IsThrowing(new SalesforceException(SalesforceError.InvalidClient, "invalid client credentials"), () =>
            {
                target.Authenticate(CreateAuthenticationFlow(TestConfig.ClientId, "invalid client secret", "invalid user name", TestConfig.Password));
            });

            Assert.IsFalse(target.IsAuthenticated);
        }
        public void Authenticate_FlowCanAuthenticate_IsAuthenticated()
        {
            var flow = MockRepository.GenerateMock <IAuthenticationFlow>();

            flow.Expect(f => f.Authenticate()).Return(new AuthenticationInfo("access", "http://url"));
            var target = new SalesforceClient();

            target.Authenticate(flow);
            Assert.IsTrue(target.IsAuthenticated);
            Assert.AreEqual(target.InstanceUrl, "http://url");
        }
        public void Authenticate_FlowCannotAuthenticate_Exception()
        {
            var flow = MockRepository.GenerateMock <IAuthenticationFlow>();

            flow.Expect(f => f.Authenticate()).Throw(new SalesforceException(SalesforceError.AuthenticationFailure, "authentication failure"));
            var target = new SalesforceClient();

            ExceptionAssert.IsThrowing(new SalesforceException(SalesforceError.AuthenticationFailure, "authentication failure"), () =>
            {
                target.Authenticate(flow);
            });
        }
示例#15
0
        private SalesforceClient CreateClientAndAuth(
            string clientId,
            string clientSecret,
            string username,
            string password)
        {
            var client             = new SalesforceClient();
            var authenticationFlow = CreateAuthenticationFlow(clientId, clientSecret, username, password);

            client.Authenticate(authenticationFlow);

            return(client);
        }
示例#16
0
        public void Publish_Package_InstalledAndRunning()
        {
            var clientId = ConfigHelper.ReadAppSetting ("SalesforceSharp.FunctionalTests", "ClientId");
            var clientSecret = ConfigHelper.ReadAppSetting ("SalesforceSharp.FunctionalTests", "ClientSecret");
            var username = ConfigHelper.ReadAppSetting ("SalesforceSharp.FunctionalTests", "Username");
            var password = ConfigHelper.ReadAppSetting ("SalesforceSharp.FunctionalTests", "Password");
            var flow = new UsernamePasswordAuthenticationFlow (clientId, clientSecret, username, password);

            var client = new SalesforceClient();
            client.Authenticate (flow);

            var users = client.Query<UserStub> ("SELECT Username, Email FROM USER");

            Assert.That (users.Count > 0);
            Assert.IsFalse (String.IsNullOrEmpty (users [0].Username));
            Assert.IsFalse (String.IsNullOrEmpty (users [0].Email));
            Assert.IsTrue (String.IsNullOrEmpty (users [0].Alias));
        }
示例#17
0
        public void Publish_Package_InstalledAndRunning()
        {
            var clientId     = ConfigHelper.ReadAppSetting("SalesforceSharp.FunctionalTests", "ClientId");
            var clientSecret = ConfigHelper.ReadAppSetting("SalesforceSharp.FunctionalTests", "ClientSecret");
            var username     = ConfigHelper.ReadAppSetting("SalesforceSharp.FunctionalTests", "Username");
            var password     = ConfigHelper.ReadAppSetting("SalesforceSharp.FunctionalTests", "Password");
            var flow         = new UsernamePasswordAuthenticationFlow(clientId, clientSecret, username, password);

            var client = new SalesforceClient();

            client.Authenticate(flow);

            var users = client.Query <UserStub> ("SELECT Username, Email FROM USER");

            Assert.That(users.Count > 0);
            Assert.IsFalse(String.IsNullOrEmpty(users [0].Username));
            Assert.IsFalse(String.IsNullOrEmpty(users [0].Email));
            Assert.IsTrue(String.IsNullOrEmpty(users [0].Alias));
        }
        private SalesforceClient CreateClientWithResponseError <T>() where T : new()
        {
            var response = MockRepository.GenerateMock <IRestResponse <T> >();

            response.Expect(r => r.Content).Return("[{ errorCode: 'error', message: 'error' }]");
            response.Expect(r => r.StatusCode).Return(HttpStatusCode.BadRequest);

            var restClient = MockRepository.GenerateMock <IRestClient>();

            restClient.Expect(r => r.BaseUrl).SetPropertyWithArgument(new Uri("http://tokenUrl"));
            restClient.Expect(r => r.Execute <T>(null)).IgnoreArguments().Return(response);

            var flow = MockRepository.GenerateMock <IAuthenticationFlow>();

            flow.Expect(f => f.Authenticate()).Return(new AuthenticationInfo("access", "http://url"));

            var target = new SalesforceClient(restClient);

            target.Authenticate(flow);

            return(target);
        }
        private SalesforceClient CreateClientWithResponseError <T>() where T : new()
        {
            var response = new Mock <IRestResponse <T> >();

            response.Setup(r => r.Content).Returns("[{ errorCode: 'error', message: 'error' }]");
            response.Setup(r => r.StatusCode).Returns(HttpStatusCode.BadRequest);

            var restClient = new Mock <IRestClient>();

            restClient.Setup(r => r.BaseUrl).Returns(new Uri("http://tokenUrl"));
            restClient.Setup(r => r.Execute(It.IsAny <IRestRequest>())).Returns(response.Object);
            restClient.Setup(r => r.Execute <T>(It.IsAny <IRestRequest>())).Returns(response.Object);

            var flow = new Mock <IAuthenticationFlow>();

            flow.Setup(f => f.Authenticate()).Returns(new AuthenticationInfo("access", "http://url"));

            var target = new SalesforceClient(restClient.Object);

            target.Authenticate(flow.Object);

            return(target);
        }
示例#20
0
        static void Main(string[] args)
        {
            // See the SalesforceSetupWalkthrough.doc for information on how to configure your SalesForce account

            // from your setup >> create >> apps >> connected apps settings in SalesForce
            const string sfdcConsumerKey    = "3MVG9JZ_r.QzrS7gHCcJexYMP2UL45ZgzaagHsVXfYSjWwlhU7n2uaxzfsuBNvwjofV70lM9QtA_xYLTxXjgf";
            const string sfdcConsumerSecret = "2968907211720668629";

            // your user credentials in salesforce
            const string sfdcUserName = "******";
            const string sfdcPassword = "******";

            // your security token form salesforce.  Name >> My Settings >> Personal >>  Reset My Security Token
            const string sfdcToken = "w7UGcyJnOaWX8U7XRCEbIfLYw";

            var client   = new SalesforceClient();
            var authFlow = new UsernamePasswordAuthenticationFlow(sfdcConsumerKey, sfdcConsumerSecret, sfdcUserName, sfdcPassword + sfdcToken);

            // all actions should be in a try-catch - i'll just do the authentication one for an example
            try
            {
                client.Authenticate(authFlow);
            }
            catch (SalesforceException ex)
            {
                Console.WriteLine("Authentication failed: {0} : {1}", ex.Error, ex.Message);
            }

            // create a record using a class instance
            SFCaseUpdate myCase = new SFCaseUpdate();

            myCase.Subject     = "This is the subject of my salesforce case";
            myCase.Description = "This is the description of my salesforce case";
            myCase.Rank__c     = 5;
            client.Create("Case", myCase);

            // create a record using an anonymous class and returns the ID
            string resultID = client.Create("Case", new { Subject = "This is the subject of another salesforce case", Description = "This is the description of that other salesforce case", Rank__c = 5 });

            // query records
            var records = client.Query <SFCase>("SELECT id, CaseNumber, Subject, Description, Rank__c FROM Case");

            foreach (var r in records)
            {
                Console.WriteLine("Query Records {0}: {1} {2}", r.id, r.CaseNumber, r.Subject);
            }

            // find the record we just added by the ID we captured above in resultID
            var record = client.FindById <SFCase>("Case", resultID);

            Console.WriteLine("\n\nRead this record {0} {1} {2} {3} {4}\n\n", record.id, record.CaseNumber, record.Subject, record.Description, record.Rank__c);

            // update that record and set the custom field rank to 1 using an anonymous class.
            client.Update("Case", resultID, new { Rank__c = 1 });

            // update that record and set the custom field rank to 9001 using a class instance, note that i have to fill in every property from the record or it will push back nulls
            SFCaseUpdate myupdate = new SFCaseUpdate();

            myupdate.Rank__c     = 9001;
            myupdate.Description = record.Description;
            myupdate.Subject     = record.Subject;
            client.Update("Case", resultID, myupdate);

            // re-read it to see if it updated correctly, rank should = 9001
            var record2 = client.FindById <SFCase>("Case", resultID);

            Console.WriteLine("Read this record again {0} {1} {2} {3} {4}\n\n", record2.id, record2.CaseNumber, record2.Subject, record2.Description, record2.Rank__c);

            // now delete the record I added
            client.Delete("Case", resultID);


            Console.WriteLine("Hit Enter to Exit");
            Console.ReadKey();
        }
示例#21
0
        static void Main(string[] args)
        {
            // See the SalesforceSetupWalkthrough.doc for information on how to configure your SalesForce account

            // from your setup >> create >> apps >> connected apps settings in SalesForce
            const string sfdcConsumerKey = "3MVG9JZ_r.QzrS7gHCcJexYMP2UL45ZgzaagHsVXfYSjWwlhU7n2uaxzfsuBNvwjofV70lM9QtA_xYLTxXjgf";
            const string sfdcConsumerSecret = "2968907211720668629";

            // your user credentials in salesforce
            const string sfdcUserName = "******";
            const string sfdcPassword = "******";

            // your security token form salesforce.  Name >> My Settings >> Personal >>  Reset My Security Token
            const string sfdcToken = "w7UGcyJnOaWX8U7XRCEbIfLYw";

            var client = new SalesforceClient();
            var authFlow = new UsernamePasswordAuthenticationFlow(sfdcConsumerKey, sfdcConsumerSecret, sfdcUserName, sfdcPassword + sfdcToken);

            // all actions should be in a try-catch - i'll just do the authentication one for an example
            try
            {
                client.Authenticate(authFlow);
            }
            catch (SalesforceException ex)
            {
                Console.WriteLine("Authentication failed: {0} : {1}", ex.Error, ex.Message);
            }

            // create a record using a class instance
            SFCaseUpdate myCase = new SFCaseUpdate();
            myCase.Subject = "This is the subject of my salesforce case";
            myCase.Description = "This is the description of my salesforce case";
            myCase.Rank__c = 5;
            client.Create("Case", myCase);

            // create a record using an anonymous class and returns the ID
            string resultID = client.Create("Case", new { Subject = "This is the subject of another salesforce case", Description = "This is the description of that other salesforce case", Rank__c = 5 });

            // query records
            var records = client.Query<SFCase>("SELECT id, CaseNumber, Subject, Description, Rank__c FROM Case");
            foreach (var r in records)
            {
                Console.WriteLine("Query Records {0}: {1} {2}", r.id, r.CaseNumber, r.Subject);
            }

            // find the record we just added by the ID we captured above in resultID
            var record = client.FindById<SFCase>("Case", resultID);
            Console.WriteLine("\n\nRead this record {0} {1} {2} {3} {4}\n\n", record.id, record.CaseNumber, record.Subject, record.Description, record.Rank__c);

            // update that record and set the custom field rank to 1 using an anonymous class.
            client.Update("Case", resultID, new { Rank__c = 1 });

            // update that record and set the custom field rank to 9001 using a class instance, note that i have to fill in every property from the record or it will push back nulls
            SFCaseUpdate myupdate = new SFCaseUpdate();
            myupdate.Rank__c = 9001;
            myupdate.Description = record.Description;
            myupdate.Subject = record.Subject;
            client.Update("Case", resultID, myupdate);

            // re-read it to see if it updated correctly, rank should = 9001
            var record2 = client.FindById<SFCase>("Case", resultID);
            Console.WriteLine("Read this record again {0} {1} {2} {3} {4}\n\n", record2.id, record2.CaseNumber, record2.Subject, record2.Description, record2.Rank__c);

            // now delete the record I added
            client.Delete("Case", resultID);

            Console.WriteLine("Hit Enter to Exit");
            Console.ReadKey();
        }
        private SalesforceClient CreateClientAndAuth(
            string clientId,
            string clientSecret,
            string username,
            string password)
        {
            var client = new SalesforceClient();
            var authenticationFlow = CreateAuthenticationFlow(clientId, clientSecret, username, password);

            client.Authenticate(authenticationFlow);

            return client;
        }
 public void Authenticate_ValidCredentials_Authenticated()
 {
     var target = new SalesforceClient();
     target.Authenticate(CreateAuthenticationFlow(TestConfig.ClientId, TestConfig.ClientSecret, TestConfig.Username, TestConfig.Password));
     Assert.IsTrue(target.IsAuthenticated);
 }