Repository: camel Updated Branches: refs/heads/master 603dfb48a -> 52459d26a
Update Camel Salesforce integration tests Tests in SalesforceComponentConfigurationTest were not updated to the latest functionality provided by the SalesforceComponent::completeEndpointPath. Also renamed SalesforceComponentConfigurationTest to SalesforceComponentConfigurationIntegrationTest, the test requires Salesforce access to run. Renamed the `salesforce-test` profile to `integration` and enforced existence of `test-salesforce-login.properties` file in the root of `camel-salesforce-parent` project -- it is needed for the integration tests and contains the credentials required for accessing Salesforce account used. Details in README.md. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/52459d26 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/52459d26 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/52459d26 Branch: refs/heads/master Commit: 52459d26ae17bb0436fb84354b169e8a649e4f3e Parents: 603dfb4 Author: Zoran Regvart <zo...@regvart.com> Authored: Thu Nov 10 11:51:28 2016 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Tue Nov 22 10:19:12 2016 +0100 ---------------------------------------------------------------------- .../camel-salesforce-component/README.md | 36 ++++ .../salesforce/RestApiIntegrationTest.java | 24 ++- ...ceComponentConfigurationIntegrationTest.java | 209 +++++++++++++++++++ .../SalesforceComponentConfigurationTest.java | 200 ------------------ components/camel-salesforce/pom.xml | 23 +- 5 files changed, 288 insertions(+), 204 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/52459d26/components/camel-salesforce/camel-salesforce-component/README.md ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/README.md b/components/camel-salesforce/camel-salesforce-component/README.md index 9bf9845..ef3dc12 100644 --- a/components/camel-salesforce/camel-salesforce-component/README.md +++ b/components/camel-salesforce/camel-salesforce-component/README.md @@ -66,3 +66,39 @@ To create and subscribe to a topic To subscribe to an existing topic from("force:CamelTestTopic&sObjectName=Merchandise__c")... + +## Developing the Camel Salesforce component + +### Running the integration tests + +**Note:** These instructions are only for running integration tests, they use permissions and IP restrictions that should be reconsidered for production use. + +In order to run the integration tests you need a Salesforce Developer account. You can get a Salesforce Developer account by visiting [developer.salesforce.com](https://developer.salesforce.com/) and sign up for one. + +Besides that account you'll need a _test user_ account that has `Bulk API Hard Delete` permission. You can create one by going to _My Developer Account_ (link from [developer.salesforce.com](https://login.salesforce.com/?lt=de)). Under _Administer_ expand _Manage Users_ and select _Profiles_ find _System Administrator_ profile and select _Clone_. Use `System Administrator With Hard Delete` as the profile name, and after saving under _Administrative Permissions_ click edit and tick _Bulk API Hard Delete_ and save. Next, create a new user under _Administer_ expand _Manage Users_ and select _Users_ and then click on _New User_. Fill in the required fields, and select _Salesforce_ for _User License_ and newly created profile for _Profile_. You get two user _Salesforce_ licenses so the newly created user will put you at a maximum. + +Install the Warehouse package, tested with _Spring 2013_ (version 1.2) that can be installed from the [https://login.salesforce.com/packaging/installPackage.apexp?p0=04ti0000000Pj8s](https://login.salesforce.com/packaging/installPackage.apexp?p0=04ti0000000Pj8s), and make the following modifications manually: + - add custom field `Description` of type `Text` with maxumum length of `100` on the `Merchandise` object + - add custom **required** field `Total_Inventory` of type `Number` with maximum length of `18` without default value on the `Merchandise` object + - add custom field `Shipping_Location` of type `GeoLocation` on the `Account` object + - add custom field `Units_Sold` of `Number` type with maximum length of `18` on the `Line_Item` object + - delete custom fields `Quantity`, `Invoice`, `Line_Item_Total` from the `Line_Item` object + - delete custom field `Quantity` from the `Merchanidise` object, you will need to delete dependencies (ApexClass and Visualforce Page) + - create new ApexClass named `MerchandiseRestResource` with the content of `MerchandiseRestResource.apxc` + +You'll need to access a Merchandise record and run a `Test Report` in order for them to appear in _Recent Items_ and _Recent Reports_. Do this by accessing _Warehouse_ application from the menu in the top right, and selecting _Merchandise_ click _Go!_ (preselected is View: _All_) and click on the single Merchandise item available. Next go to Reports and select and run _Test Report_ from _Test Reports_. This is needed by the integration tests as they access recent items and recently run reports. + +Create `Camel` connected application by selecting under _Apps_ in _Build_ and _Create_ sections by clicking _New_ in _Connected Apps_ section. Fill in the required fields and in the _API (Enable OAuth Settings)_ section thick _Enable OAuth Settings_ and move all scopes from _Available OAuth Scopes_ to _Selected OAuth Scopes_. For _Callback URL_ you can use any URL it's not needed by the REST API used by the Camel Salesforce component. Make note of _Consumer Key_ and _Consumer Secret_ you'll need to specify them in `test-salesforce-login.properties`, more on that below. + +Next enable relaxed IP restrictions, by editing the policy of the _Camel_ connected application in _Connected Apps_ under _Administer_ and _Manage Apps_ pick _Relax IP restrictions_ for _IP Relaxation_. + +Create `test-salesforce-login.properties` in `camel-salesforce` directory (one up from the directory this file resides in) with the content: + + clientId=<Consumer Key of the `Camel` connected App> + clientSecret=<Consumer Secret of the `Camel` connected app> + userName=<Username of the user with the `System Administrator With Hard Delete` profile> + password=<Password of the above user> + loginUrl=https://login.salesforce.com/ + report.0=Test_Report + + http://git-wip-us.apache.org/repos/asf/camel/blob/52459d26/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java index 486447a..ddfa832 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java +++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java @@ -306,8 +306,17 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase { } private void doTestCreateUpdateDeleteWithId(String suffix) throws Exception { + template().request("direct:deleteLineItems", null); + + Line_Item__c lineItem = new Line_Item__c(); + lineItem.setName("1"); + CreateSObjectResult result = template().requestBody("direct:createLineItem", + lineItem, CreateSObjectResult.class); + assertNotNull(result); + assertTrue(result.getSuccess()); + // get line item with Name 1 - Line_Item__c lineItem = template().requestBody("direct:getSObjectWithId" + suffix, TEST_LINE_ITEM_ID, + lineItem = template().requestBody("direct:getSObjectWithId" + suffix, TEST_LINE_ITEM_ID, Line_Item__c.class); assertNotNull(lineItem); LOG.debug("GetWithId: {}", lineItem); @@ -319,7 +328,7 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase { // update line item with Name NEW_LINE_ITEM_ID lineItem.setName(NEW_LINE_ITEM_ID); - CreateSObjectResult result = template().requestBodyAndHeader("direct:upsertSObject" + suffix, + result = template().requestBodyAndHeader("direct:upsertSObject" + suffix, lineItem, SalesforceEndpointConfig.SOBJECT_EXT_ID_VALUE, NEW_LINE_ITEM_ID, CreateSObjectResult.class); assertNotNull(result); @@ -529,7 +538,8 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase { // get test merchandise // note that the header value overrides sObjectFields in endpoint Merchandise__c merchandise = template().requestBodyAndHeader("direct:getSObject" + suffix, testId, - "sObjectFields", "Name,Description__c,Price__c,Total_Inventory__c", Merchandise__c.class); + "sObjectFields", "Name,Description__c,Price__c,Total_Inventory__c", + Merchandise__c.class); assertNotNull(merchandise); assertNotNull(merchandise.getName()); assertNotNull(merchandise.getPrice__c()); @@ -715,6 +725,14 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase { .to("salesforce:getSObjectWithId?format=XML&sObjectName=Line_Item__c&sObjectIdName=Name"); // testUpsertSObject + from("direct:deleteLineItems") + .to("salesforce:query?sObjectQuery=SELECT Id FROM Line_Item__C&sObjectClass=" + QueryRecordsLine_Item__c.class.getName()) + .transform(simple("${body.records}")).split(body()).transform(simple("${body.id}")) + .to("salesforce:deleteSObject?sObjectName=Line_Item__c"); + + from("direct:createLineItem") + .to("salesforce:createSObject?sObjectName=Line_Item__c"); + from("direct:upsertSObject") .to("salesforce:upsertSObject?sObjectName=Line_Item__c&sObjectIdName=Name"); http://git-wip-us.apache.org/repos/asf/camel/blob/52459d26/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceComponentConfigurationIntegrationTest.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceComponentConfigurationIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceComponentConfigurationIntegrationTest.java new file mode 100644 index 0000000..db9acc8 --- /dev/null +++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceComponentConfigurationIntegrationTest.java @@ -0,0 +1,209 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.salesforce; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.SortedMap; + +import org.apache.camel.CamelContext; +import org.apache.camel.Component; +import org.apache.camel.ComponentConfiguration; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.salesforce.dto.generated.Account; +import org.apache.camel.component.salesforce.dto.generated.Document; +import org.apache.camel.component.salesforce.dto.generated.Line_Item__c; +import org.apache.camel.component.salesforce.dto.generated.MSPTest; +import org.apache.camel.component.salesforce.dto.generated.Merchandise__c; +import org.apache.camel.component.salesforce.dto.generated.QueryRecordsLine_Item__c; +import org.apache.camel.component.salesforce.dto.generated.Tasks__c; +import org.apache.camel.component.salesforce.internal.PayloadFormat; +import org.apache.camel.impl.ParameterConfiguration; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Lets test the use of the ComponentConfiguration on the Salesforce endpoint + */ +public class SalesforceComponentConfigurationIntegrationTest extends CamelTestSupport { + + private static final Logger LOG = LoggerFactory.getLogger(SalesforceComponentConfigurationIntegrationTest.class); + + protected String componentName = "salesforce123"; + protected boolean verbose = true; + + @Test + public void testConfiguration() throws Exception { + Component component = context().getComponent(componentName); + ComponentConfiguration configuration = component.createComponentConfiguration(); + SortedMap<String, ParameterConfiguration> parameterConfigurationMap = configuration.getParameterConfigurationMap(); + if (verbose) { + Set<Map.Entry<String, ParameterConfiguration>> entries = parameterConfigurationMap.entrySet(); + for (Map.Entry<String, ParameterConfiguration> entry : entries) { + String name = entry.getKey(); + ParameterConfiguration config = entry.getValue(); + LOG.info("Has name: {} with type {}", name, config.getParameterType().getName()); + } + } + + assertParameterConfig(configuration, "format", PayloadFormat.class); + assertParameterConfig(configuration, "sObjectName", String.class); + assertParameterConfig(configuration, "sObjectFields", String.class); + assertParameterConfig(configuration, "updateTopic", boolean.class); + + configuration.setParameter("format", PayloadFormat.XML); + configuration.setParameter("sObjectName", "Merchandise__c"); + configuration.setParameter("sObjectFields", "Description__c,Total_Inventory__c"); + configuration.setParameter("updateTopic", false); + + // operation name is base uri + configuration.setBaseUri("getSObject"); + + SalesforceEndpoint endpoint = assertIsInstanceOf(SalesforceEndpoint.class, configuration.createEndpoint()); + final SalesforceEndpointConfig endpointConfig = endpoint.getConfiguration(); + assertEquals("endpoint.format", PayloadFormat.XML, endpointConfig.getFormat()); + assertEquals("endpoint.sObjectName", "Merchandise__c", endpointConfig.getSObjectName()); + assertEquals("endpoint.sObjectFields", "Description__c,Total_Inventory__c", endpointConfig.getSObjectFields()); + assertEquals("endpoint.updateTopic", false, endpointConfig.isUpdateTopic()); + } + + public static void assertParameterConfig(ComponentConfiguration configuration, String name, + Class<?> parameterType) { + ParameterConfiguration config = configuration.getParameterConfiguration(name); + assertNotNull("ParameterConfiguration should exist for parameter name " + name, config); + assertEquals("ParameterConfiguration." + name + ".getName()", name, config.getName()); + assertEquals("ParameterConfiguration." + name + ".getParameterType()", parameterType, + config.getParameterType()); + } + + @Test + public void testEndpointCompletion() throws Exception { + Component component = context().getComponent(componentName); + ComponentConfiguration configuration = component.createComponentConfiguration(); + + // get operation names + assertCompletionOptions(configuration.completeEndpointPath(""), + "getVersions", "getResources", "getGlobalObjects", "getBasicInfo", "getDescription", "getSObject", "createSObject", + "updateSObject", "deleteSObject", "getSObjectWithId", "upsertSObject", "deleteSObjectWithId", "getBlobField", + "query", "queryMore", "queryAll", "search", "apexCall", "createJob", "getJob", "closeJob", "abortJob", + "createBatch", "getBatch", "getAllBatches", "getRequest", "getResults", "createBatchQuery", "getQueryResultIds", + "getQueryResult", "getRecentReports", "getReportDescription", "executeSyncReport", "executeAsyncReport", + "getReportInstances", "getReportResults", "[PushTopicName]" + ); + + // get filtered operation names + assertCompletionOptions(configuration.completeEndpointPath("get"), + "getVersions", "getResources", "getGlobalObjects", "getBasicInfo", "getDescription", "getSObject", "getSObjectWithId", + "getBlobField", "getJob", "getBatch", "getAllBatches", "getRequest", "getResults", "getQueryResultIds", + "getQueryResult", "getRecentReports", "getReportDescription", "getReportInstances", "getReportResults" + ); + +/* TODO support parameter completion + // get ALL REST operation parameters + // TODO support operation specific parameter completion + assertCompletionOptions(configuration.completeEndpointPath("getSObject?"), + "apiVersion", "httpClient", "format", "sObjectName", "sObjectId", "sObjectFields", + "sObjectIdName", "sObjectIdValue", "sObjectBlobFieldName", "sObjectClass", "sObjectQuery", "sObjectSearch"); + + // get filtered REST parameters + assertCompletionOptions(configuration.completeEndpointPath("getSObject?format=XML&"), + "apiVersion", "httpClient", "sObjectName", "sObjectId", "sObjectFields", + "sObjectIdName", "sObjectIdValue", "sObjectBlobFieldName", "sObjectClass", "sObjectQuery", "sObjectSearch"); + + // get ALL Bulk operation parameters + // TODO support operation specific parameter completion + assertCompletionOptions(configuration.completeEndpointPath("createJob?"), + "apiVersion", "httpClient", "sObjectQuery", "contentType", "jobId", "batchId", "resultId"); + + // get filtered Bulk operation parameters + assertCompletionOptions(configuration.completeEndpointPath("createJob?contentType=XML&"), + "apiVersion", "httpClient", "sObjectQuery", "jobId", "batchId", "resultId"); + + // get ALL topic parameters for consumers + assertCompletionOptions(configuration.completeEndpointPath("myTopic?"), + "apiVersion", "httpClient", "updateTopic", "notifyForFields", "notifyForOperations"); + + // get filtered topic parameters for consumers + assertCompletionOptions(configuration.completeEndpointPath("myTopic?updateTopic=true&"), + "apiVersion", "httpClient", "notifyForFields", "notifyForOperations"); + + // get parameters from partial name + assertCompletionOptions(configuration.completeEndpointPath("getSObject?sObject"), + "sObjectName", "sObjectId", "sObjectFields", + "sObjectIdName", "sObjectIdValue", "sObjectBlobFieldName", "sObjectClass", "sObjectQuery", "sObjectSearch"); +*/ + + // get sObjectName values, from scanned DTO packages + assertCompletionOptions(configuration.completeEndpointPath("getSObject?sObjectName="), + "Account", "Tasks__c", "Line_Item__c", "Merchandise__c", "Document", "MSPTest"); + + // get sObjectFields values, from scanned DTO + assertCompletionOptions( + configuration.completeEndpointPath("getSObject?sObjectName=Merchandise__c&sObjectFields="), + "Description__c", "Price__c", "Total_Inventory__c", "attributes", "Id", + "OwnerId", "IsDeleted", "Name", "CreatedDate", "CreatedById", "LastModifiedDate", "LastModifiedById", + "SystemModstamp", "LastActivityDate", "LastViewedDate", "LastReferencedDate"); + + // get sObjectClass values, from scanned DTO packages + assertCompletionOptions(configuration.completeEndpointPath("getSObject?sObjectClass="), + Account.class.getName(), + Tasks__c.class.getName(), + Line_Item__c.class.getName(), + Merchandise__c.class.getName(), + Document.class.getName(), + MSPTest.class.getName(), + QueryRecordsLine_Item__c.class.getName()); + } + + private void assertCompletionOptions(List<String> options, final String ...args) { + List<String> missing = new ArrayList<String>(); + for (String arg : args) { + if (!options.remove(arg)) { + missing.add(arg); + } + } + if (!missing.isEmpty() || !options.isEmpty()) { + fail(String.format("Missing options %s, unknown options %s", + missing, options)); + } + } + + protected CamelContext createCamelContext() throws Exception { + final CamelContext camelContext = super.createCamelContext(); + final SalesforceLoginConfig loginConfig = LoginConfigHelper.getLoginConfig(); + final SalesforceComponent component = new SalesforceComponent(); + component.setLoginConfig(loginConfig); + // set DTO package + component.setPackages(new String[]{ + Merchandise__c.class.getPackage().getName() + }); + camelContext.addComponent(componentName, component); + return camelContext; + } + + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() throws Exception { + } + }; + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/52459d26/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceComponentConfigurationTest.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceComponentConfigurationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceComponentConfigurationTest.java deleted file mode 100644 index 4841943..0000000 --- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceComponentConfigurationTest.java +++ /dev/null @@ -1,200 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.component.salesforce; - -import java.util.*; - -import org.apache.camel.CamelContext; -import org.apache.camel.Component; -import org.apache.camel.ComponentConfiguration; -import org.apache.camel.builder.RouteBuilder; -import org.apache.camel.component.salesforce.dto.generated.Document; -import org.apache.camel.component.salesforce.dto.generated.Line_Item__c; -import org.apache.camel.component.salesforce.dto.generated.Merchandise__c; -import org.apache.camel.component.salesforce.dto.generated.QueryRecordsLine_Item__c; -import org.apache.camel.component.salesforce.internal.PayloadFormat; -import org.apache.camel.impl.ParameterConfiguration; -import org.apache.camel.test.junit4.CamelTestSupport; -import org.junit.Ignore; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Lets test the use of the ComponentConfiguration on the Salesforce endpoint - */ -@Ignore("Must run manually with a user supplied test-salesforce-login.properties") -public class SalesforceComponentConfigurationTest extends CamelTestSupport { - - private static final Logger LOG = LoggerFactory.getLogger(SalesforceComponentConfigurationTest.class); - - protected String componentName = "salesforce123"; - protected boolean verbose = true; - - @Test - public void testConfiguration() throws Exception { - Component component = context().getComponent(componentName); - ComponentConfiguration configuration = component.createComponentConfiguration(); - SortedMap<String, ParameterConfiguration> parameterConfigurationMap = configuration.getParameterConfigurationMap(); - if (verbose) { - Set<Map.Entry<String, ParameterConfiguration>> entries = parameterConfigurationMap.entrySet(); - for (Map.Entry<String, ParameterConfiguration> entry : entries) { - String name = entry.getKey(); - ParameterConfiguration config = entry.getValue(); - LOG.info("Has name: {} with type {}", name, config.getParameterType().getName()); - } - } - - assertParameterConfig(configuration, "format", PayloadFormat.class); - assertParameterConfig(configuration, "sObjectName", String.class); - assertParameterConfig(configuration, "sObjectFields", String.class); - assertParameterConfig(configuration, "updateTopic", boolean.class); - - configuration.setParameter("format", PayloadFormat.XML); - configuration.setParameter("sObjectName", "Merchandise__c"); - configuration.setParameter("sObjectFields", "Description__c,Total_Inventory__c"); - configuration.setParameter("updateTopic", false); - - // operation name is base uri - configuration.setBaseUri("getSObject"); - - SalesforceEndpoint endpoint = assertIsInstanceOf(SalesforceEndpoint.class, configuration.createEndpoint()); - final SalesforceEndpointConfig endpointConfig = endpoint.getConfiguration(); - assertEquals("endpoint.format", PayloadFormat.XML, endpointConfig.getFormat()); - assertEquals("endpoint.sObjectName", "Merchandise__c", endpointConfig.getSObjectName()); - assertEquals("endpoint.sObjectFields", "Description__c,Total_Inventory__c", endpointConfig.getSObjectFields()); - assertEquals("endpoint.updateTopic", false, endpointConfig.isUpdateTopic()); - } - - public static void assertParameterConfig(ComponentConfiguration configuration, String name, - Class<?> parameterType) { - ParameterConfiguration config = configuration.getParameterConfiguration(name); - assertNotNull("ParameterConfiguration should exist for parameter name " + name, config); - assertEquals("ParameterConfiguration." + name + ".getName()", name, config.getName()); - assertEquals("ParameterConfiguration." + name + ".getParameterType()", parameterType, - config.getParameterType()); - } - - @Test - public void testEndpointCompletion() throws Exception { - Component component = context().getComponent(componentName); - ComponentConfiguration configuration = component.createComponentConfiguration(); - - // get operation names - assertCompletionOptions(configuration.completeEndpointPath(""), - "getVersions", "getResources", "getGlobalObjects", "getBasicInfo", "getDescription", "getSObject", - "createSObject", "updateSObject", "deleteSObject", "getSObjectWithId", "upsertSObject", - "deleteSObjectWithId", "getBlobField", "query", "queryMore", "search", "createJob", "getJob", - "closeJob", "abortJob", "createBatch", "getBatch", "getAllBatches", "getRequest", "getResults", - "createBatchQuery", "getQueryResultIds", "getQueryResult", "[PushTopicName]" - ); - - // get filtered operation names - assertCompletionOptions(configuration.completeEndpointPath("get"), - "getVersions", "getResources", "getGlobalObjects", "getBasicInfo", "getDescription", "getSObject", - "getSObjectWithId", "getBlobField", "getJob", "getBatch", "getAllBatches", "getRequest", "getResults", - "getQueryResultIds", "getQueryResult" - ); - -/* TODO support parameter completion - // get ALL REST operation parameters - // TODO support operation specific parameter completion - assertCompletionOptions(configuration.completeEndpointPath("getSObject?"), - "apiVersion", "httpClient", "format", "sObjectName", "sObjectId", "sObjectFields", - "sObjectIdName", "sObjectIdValue", "sObjectBlobFieldName", "sObjectClass", "sObjectQuery", "sObjectSearch"); - - // get filtered REST parameters - assertCompletionOptions(configuration.completeEndpointPath("getSObject?format=XML&"), - "apiVersion", "httpClient", "sObjectName", "sObjectId", "sObjectFields", - "sObjectIdName", "sObjectIdValue", "sObjectBlobFieldName", "sObjectClass", "sObjectQuery", "sObjectSearch"); - - // get ALL Bulk operation parameters - // TODO support operation specific parameter completion - assertCompletionOptions(configuration.completeEndpointPath("createJob?"), - "apiVersion", "httpClient", "sObjectQuery", "contentType", "jobId", "batchId", "resultId"); - - // get filtered Bulk operation parameters - assertCompletionOptions(configuration.completeEndpointPath("createJob?contentType=XML&"), - "apiVersion", "httpClient", "sObjectQuery", "jobId", "batchId", "resultId"); - - // get ALL topic parameters for consumers - assertCompletionOptions(configuration.completeEndpointPath("myTopic?"), - "apiVersion", "httpClient", "updateTopic", "notifyForFields", "notifyForOperations"); - - // get filtered topic parameters for consumers - assertCompletionOptions(configuration.completeEndpointPath("myTopic?updateTopic=true&"), - "apiVersion", "httpClient", "notifyForFields", "notifyForOperations"); - - // get parameters from partial name - assertCompletionOptions(configuration.completeEndpointPath("getSObject?sObject"), - "sObjectName", "sObjectId", "sObjectFields", - "sObjectIdName", "sObjectIdValue", "sObjectBlobFieldName", "sObjectClass", "sObjectQuery", "sObjectSearch"); -*/ - - // get sObjectName values, from scanned DTO packages - assertCompletionOptions(configuration.completeEndpointPath("getSObject?sObjectName="), - "Document", "Line_Item__c", "Merchandise__c"); - - // get sObjectFields values, from scanned DTO - assertCompletionOptions( - configuration.completeEndpointPath("getSObject?sObjectName=Merchandise__c&sObjectFields="), - "attributes", "Id", "OwnerId", "IsDeleted", "Name", "CreatedDate", "CreatedById", - "LastModifiedDate", "LastModifiedById", "SystemModstamp", "LastActivityDate", - "Description__c", "Price__c", "Total_Inventory__c"); - - // get sObjectClass values, from scanned DTO packages - assertCompletionOptions(configuration.completeEndpointPath("getSObject?sObjectClass="), - Document.class.getName(), - Line_Item__c.class.getName(), - Merchandise__c.class.getName(), - QueryRecordsLine_Item__c.class.getName()); - } - - private void assertCompletionOptions(List<String> options, final String ...args) { - List<String> missing = new ArrayList<String>(); - for (String arg : args) { - if (!options.remove(arg)) { - missing.add(arg); - } - } - if (!missing.isEmpty() || !options.isEmpty()) { - fail(String.format("Missing options %s, unknown options %s", - missing, options)); - } - } - - protected CamelContext createCamelContext() throws Exception { - final CamelContext camelContext = super.createCamelContext(); - final SalesforceLoginConfig loginConfig = LoginConfigHelper.getLoginConfig(); - final SalesforceComponent component = new SalesforceComponent(); - component.setLoginConfig(loginConfig); - // set DTO package - component.setPackages(new String[]{ - Merchandise__c.class.getPackage().getName() - }); - camelContext.addComponent(componentName, component); - return camelContext; - } - - protected RouteBuilder createRouteBuilder() throws Exception { - return new RouteBuilder() { - public void configure() throws Exception { - } - }; - } - -} http://git-wip-us.apache.org/repos/asf/camel/blob/52459d26/components/camel-salesforce/pom.xml ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/pom.xml b/components/camel-salesforce/pom.xml index a26ed7c..258710b 100644 --- a/components/camel-salesforce/pom.xml +++ b/components/camel-salesforce/pom.xml @@ -68,10 +68,31 @@ <profiles> <profile> - <id>salesforce-test</id> + <id>integration</id> <build> <plugins> <plugin> + <artifactId>maven-enforcer-plugin</artifactId> + <executions> + <execution> + <id>test-salesforce-login-properties-exists</id> + <goals> + <goal>enforce</goal> + </goals> + <configuration> + <rules> + <requireFilesExist> + <files> + <file>../test-salesforce-login.properties</file> + </files> + </requireFilesExist> + </rules> + <fail>true</fail> + </configuration> + </execution> + </executions> + </plugin> + <plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> <childDelegation>false</childDelegation>