This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 4e58ebded8f Google Spreadsheets tests refactoring (#8788)
4e58ebded8f is described below
commit 4e58ebded8f09cbcb4f3bfb089692f6a1ca74109
Author: Vladimir V. Bychkov <[email protected]>
AuthorDate: Wed Nov 30 19:14:15 2022 +0100
Google Spreadsheets tests refactoring (#8788)
---
camel-dependencies/pom.xml | 1 -
.../camel-google/camel-google-sheets/pom.xml | 76 -----
.../sheets/BatchGoogleSheetsClientFactory.java | 7 +-
.../sheets/AbstractGoogleSheetsTestSupport.java | 131 ++------
.../sheets/MockGoogleSheetsClientFactory.java | 60 ++++
.../google/sheets/SheetsSpreadsheetsIT.java | 208 ++++++------
.../google/sheets/SheetsSpreadsheetsValuesIT.java | 358 ++++++++++----------
.../sheets/server/GoogleSheetsApiTestServer.java | 353 --------------------
.../server/GoogleSheetsApiTestServerAssert.java | 365 ---------------------
.../server/GoogleSheetsApiTestServerRule.java | 99 ------
.../AbstractGoogleSheetsStreamTestSupport.java | 43 +--
.../SheetsStreamConsumerIntegrationTest.java | 252 +++++++-------
.../src/test/resources/googleapis.jks | Bin 2695 -> 0 bytes
.../src/test/resources/test-options.properties | 30 --
parent/pom.xml | 1 -
15 files changed, 530 insertions(+), 1454 deletions(-)
diff --git a/camel-dependencies/pom.xml b/camel-dependencies/pom.xml
index 34a8969cf4b..b5732bbbda1 100644
--- a/camel-dependencies/pom.xml
+++ b/camel-dependencies/pom.xml
@@ -117,7 +117,6 @@
<cglib-version>3.2.12</cglib-version>
<checkstyle.failOnViolation>false</checkstyle.failOnViolation>
<chunk-templates-version>3.6.2</chunk-templates-version>
- <citrus-version>2.8.0</citrus-version>
<classgraph-version>4.8.151</classgraph-version>
<cmis-version>1.1.0</cmis-version>
<cobertura-maven-plugin-version>2.7</cobertura-maven-plugin-version>
diff --git a/components/camel-google/camel-google-sheets/pom.xml
b/components/camel-google/camel-google-sheets/pom.xml
index bb4d1e395de..0622f8b34f5 100644
--- a/components/camel-google/camel-google-sheets/pom.xml
+++ b/components/camel-google/camel-google-sheets/pom.xml
@@ -38,54 +38,8 @@
<componentPackage>org.apache.camel.component.google.sheets</componentPackage>
<outPackage>org.apache.camel.component.google.sheets.internal</outPackage>
<camel.osgi.private.pkg>org.apache.camel.component.google.sheets.internal</camel.osgi.private.pkg>
-
<spring-security-oauth2-version>2.3.6.RELEASE</spring-security-oauth2-version>
</properties>
- <dependencyManagement>
- <dependencies>
- <!-- Test dependencies -->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>${spring-version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.security</groupId>
- <artifactId>spring-security-web</artifactId>
- <version>${spring-security-version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.security.oauth</groupId>
- <artifactId>spring-security-oauth2</artifactId>
- <version>${spring-security-oauth2-version}</version>
- </dependency>
- <dependency>
- <groupId>com.consol.citrus</groupId>
- <artifactId>citrus-core</artifactId>
- <version>${citrus-version}</version>
- <scope>test</scope>
- <exclusions>
- <exclusion>
- <groupId>com.google.code.findbugs</groupId>
- <artifactId>jsr305</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>com.consol.citrus</groupId>
- <artifactId>citrus-java-dsl</artifactId>
- <version>${citrus-version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.consol.citrus</groupId>
- <artifactId>citrus-http</artifactId>
- <version>${citrus-version}</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
@@ -152,41 +106,11 @@
<artifactId>camel-mock</artifactId>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.assertj</groupId>
- <artifactId>assertj-core</artifactId>
- <scope>test</scope>
- </dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.springframework.security</groupId>
- <artifactId>spring-security-core</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.springframework.security.oauth</groupId>
- <artifactId>spring-security-oauth2</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.consol.citrus</groupId>
- <artifactId>citrus-core</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.consol.citrus</groupId>
- <artifactId>citrus-java-dsl</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.consol.citrus</groupId>
- <artifactId>citrus-http</artifactId>
- <scope>test</scope>
- </dependency>
</dependencies>
<build>
diff --git
a/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/BatchGoogleSheetsClientFactory.java
b/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/BatchGoogleSheetsClientFactory.java
index bfd585bdf8e..231933037a1 100644
---
a/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/BatchGoogleSheetsClientFactory.java
+++
b/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/BatchGoogleSheetsClientFactory.java
@@ -23,6 +23,7 @@ import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
+import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.sheets.v4.Sheets;
import org.apache.camel.CamelContext;
@@ -33,7 +34,7 @@ import org.apache.camel.util.ObjectHelper;
public class BatchGoogleSheetsClientFactory implements
GoogleSheetsClientFactory {
private final HttpTransport transport;
- private final JacksonFactory jsonFactory;
+ private final JsonFactory jsonFactory;
public BatchGoogleSheetsClientFactory() {
this(new NetHttpTransport(), new JacksonFactory());
@@ -43,9 +44,9 @@ public class BatchGoogleSheetsClientFactory implements
GoogleSheetsClientFactory
this(httpTransport, new JacksonFactory());
}
- public BatchGoogleSheetsClientFactory(HttpTransport httpTransport,
JacksonFactory jacksonFactory) {
+ public BatchGoogleSheetsClientFactory(HttpTransport httpTransport,
JsonFactory jsonFactory) {
this.transport = httpTransport;
- this.jsonFactory = jacksonFactory;
+ this.jsonFactory = jsonFactory;
}
@Override
diff --git
a/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java
b/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java
index 52e9c006946..9662dcaa752 100644
---
a/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java
+++
b/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java
@@ -16,76 +16,42 @@
*/
package org.apache.camel.component.google.sheets;
-import java.io.IOException;
import java.security.SecureRandom;
-import java.util.Arrays;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Map;
-import java.util.Properties;
+import java.util.UUID;
import com.google.api.services.sheets.v4.model.Sheet;
import com.google.api.services.sheets.v4.model.SheetProperties;
import com.google.api.services.sheets.v4.model.Spreadsheet;
import com.google.api.services.sheets.v4.model.SpreadsheetProperties;
-import com.google.api.services.sheets.v4.model.ValueRange;
import org.apache.camel.CamelContext;
import org.apache.camel.CamelExecutionException;
-import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.component.google.sheets.internal.GoogleSheetsConstants;
-import
org.apache.camel.component.google.sheets.server.GoogleSheetsApiTestServer;
-import
org.apache.camel.component.google.sheets.server.GoogleSheetsApiTestServerRule;
-import org.apache.camel.support.PropertyBindingSupport;
+import org.apache.camel.Component;
import org.apache.camel.test.junit5.CamelTestSupport;
import org.junit.jupiter.api.TestInstance;
-import org.junit.jupiter.api.extension.RegisterExtension;
/**
* Abstract base class for GoogleSheets Integration tests generated by Camel
API component maven plugin.
*/
@TestInstance(TestInstance.Lifecycle.PER_METHOD)
-public class AbstractGoogleSheetsTestSupport extends CamelTestSupport {
+public abstract class AbstractGoogleSheetsTestSupport extends CamelTestSupport
{
protected static final String TEST_SHEET = "TestData";
- private static final String TEST_OPTIONS_PROPERTIES =
"/test-options.properties";
-
- @RegisterExtension
- protected GoogleSheetsApiTestServerRule googleSheetsApiTestServerRule
- = new GoogleSheetsApiTestServerRule(TEST_OPTIONS_PROPERTIES);
+ protected static final String TEST_RANGE = TEST_SHEET + "!A1:B2";
private Spreadsheet spreadsheet;
- private static Properties loadProperties() {
- // read GoogleMail component configuration from TEST_OPTIONS_PROPERTIES
- final Properties properties = new Properties();
- try {
-
properties.load(AbstractGoogleSheetsTestSupport.class.getResourceAsStream(TEST_OPTIONS_PROPERTIES));
- } catch (Exception e) {
- throw new RuntimeCamelException(
- String.format("%s could not be loaded: %s",
TEST_OPTIONS_PROPERTIES, e.getMessage()), e);
- }
- return properties;
- }
-
- // Used by JUnit to determine whether or not to run the integration tests
- @SuppressWarnings("unused")
- private static boolean hasCredentials() {
- Properties properties = loadProperties();
-
- return !properties.getProperty("clientId", "").isEmpty()
- && !properties.getProperty("clientSecret", "").isEmpty()
- && !properties.getProperty("accessToken", "").isEmpty()
- || !properties.getProperty("serviceAccountKey", "").isEmpty();
- }
-
/**
* Create test spreadsheet that is used throughout all tests.
*/
private void createTestSpreadsheet() {
Spreadsheet spreadsheet = new Spreadsheet();
+ spreadsheet.setFactory(MockGoogleSheetsClientFactory.JSON_FACTORY);
+ spreadsheet.setSpreadsheetId(UUID.randomUUID().toString());
+
SpreadsheetProperties spreadsheetProperties = new
SpreadsheetProperties();
spreadsheetProperties.setTitle("camel-sheets-" + new
SecureRandom().nextInt(Integer.MAX_VALUE));
-
spreadsheet.setProperties(spreadsheetProperties);
Sheet sheet = new Sheet();
@@ -95,30 +61,7 @@ public class AbstractGoogleSheetsTestSupport extends
CamelTestSupport {
spreadsheet.setSheets(Collections.singletonList(sheet));
- this.spreadsheet =
requestBody("google-sheets://spreadsheets/create?inBody=content", spreadsheet);
- }
-
- /**
- * Add some initial test data to test spreadsheet.
- */
- private void createTestData() {
- if (spreadsheet == null) {
- createTestSpreadsheet();
- }
-
- ValueRange valueRange = new ValueRange();
- valueRange.setValues(Arrays.asList(Arrays.asList("a1", "b1"),
Arrays.asList("a2", "b2")));
-
- final Map<String, Object> headers = new HashMap<>();
- // parameter type is String
- headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "spreadsheetId",
spreadsheet.getSpreadsheetId());
- // parameter type is String
- headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "range",
TEST_SHEET + "!A1:B2");
-
- // parameter type is String
- headers.put(GoogleSheetsConstants.PROPERTY_PREFIX +
"valueInputOption", "USER_ENTERED");
-
- requestBodyAndHeaders("google-sheets://data/update?inBody=values",
valueRange, headers);
+ this.spreadsheet = spreadsheet;
}
@Override
@@ -126,46 +69,28 @@ public class AbstractGoogleSheetsTestSupport extends
CamelTestSupport {
final CamelContext context = super.createCamelContext();
- final Properties properties = loadProperties();
-
- Map<String, Object> options = new HashMap<>();
- for (Map.Entry<Object, Object> entry : properties.entrySet()) {
- options.put(entry.getKey().toString(), entry.getValue());
- }
-
- final GoogleSheetsConfiguration configuration = new
GoogleSheetsConfiguration();
- PropertyBindingSupport.bindProperties(context, configuration, options);
-
- // add GoogleSheetsComponent to Camel context and use localhost url
- final GoogleSheetsComponent component = new
GoogleSheetsComponent(context);
- component.setConfiguration(configuration);
- context.addComponent("google-sheets", component);
+ Component component = getComponent(context);
+ context.addComponent(getComponentName(), component);
return context;
}
- /**
- * Read component configuration from TEST_OPTIONS_PROPERTIES.
- *
- * @return Map of component options.
- * @throws IOException when TEST_OPTIONS_PROPERTIES could not be loaded.
- */
- protected Map<String, Object> getTestOptions() throws IOException {
- final Properties properties = new Properties();
- try {
-
properties.load(getClass().getResourceAsStream(TEST_OPTIONS_PROPERTIES));
- } catch (Exception e) {
- throw new IOException(String.format("%s could not be loaded: %s",
TEST_OPTIONS_PROPERTIES, e.getMessage()), e);
- }
+ protected Component getComponent(CamelContext context) throws Exception {
+ GoogleSheetsConfiguration configuration = new
GoogleSheetsConfiguration();
+ configuration.setServiceAccountKey("mock");
- Map<String, Object> options = new HashMap<>();
- for (Map.Entry<Object, Object> entry : properties.entrySet()) {
- options.put(entry.getKey().toString(), entry.getValue());
- }
+ GoogleSheetsComponent component = new GoogleSheetsComponent(context);
+ component.setConfiguration(configuration);
+ component.setClientFactory(getClientFactory());
+ return component;
+ }
- return options;
+ protected String getComponentName() {
+ return "google-sheets";
}
+ protected abstract GoogleSheetsClientFactory getClientFactory() throws
Exception;
+
@SuppressWarnings("unchecked")
protected <T> T requestBodyAndHeaders(String endpointUri, Object body,
Map<String, Object> headers)
throws CamelExecutionException {
@@ -184,16 +109,4 @@ public class AbstractGoogleSheetsTestSupport extends
CamelTestSupport {
return spreadsheet;
}
- public Spreadsheet applyTestData(Spreadsheet spreadsheet) {
- createTestData();
- return spreadsheet;
- }
-
- public void setSpreadsheet(Spreadsheet sheet) {
- this.spreadsheet = sheet;
- }
-
- public GoogleSheetsApiTestServer getGoogleApiTestServer() {
- return googleSheetsApiTestServerRule.getGoogleApiTestServer();
- }
}
diff --git
a/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/MockGoogleSheetsClientFactory.java
b/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/MockGoogleSheetsClientFactory.java
new file mode 100644
index 00000000000..f300ecd56fd
--- /dev/null
+++
b/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/MockGoogleSheetsClientFactory.java
@@ -0,0 +1,60 @@
+/*
+ * 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.google.sheets;
+
+import java.util.Collection;
+
+import com.google.api.client.auth.oauth2.Credential;
+import
com.google.api.client.googleapis.testing.auth.oauth2.MockGoogleCredential;
+import com.google.api.client.http.HttpTransport;
+import com.google.api.client.json.JsonFactory;
+import com.google.api.client.json.jackson2.JacksonFactory;
+import com.google.api.client.testing.http.MockHttpTransport;
+import com.google.api.client.testing.http.MockLowLevelHttpResponse;
+import com.google.api.services.sheets.v4.Sheets;
+import org.apache.camel.CamelContext;
+
+public class MockGoogleSheetsClientFactory implements
GoogleSheetsClientFactory {
+
+ public static final JsonFactory JSON_FACTORY = new JacksonFactory();
+
+ private final HttpTransport transport;
+
+ public MockGoogleSheetsClientFactory(MockLowLevelHttpResponse
lowLevelHttpResponse) {
+ transport = new
MockHttpTransport.Builder().setLowLevelHttpResponse(lowLevelHttpResponse).build();
+ }
+
+ @Override
+ public Sheets makeClient(
+ CamelContext camelContext, String serviceAccountKey,
Collection<String> scopes,
+ String applicationName, String delegate) {
+ return makeClient();
+ }
+
+ @Override
+ public Sheets makeClient(
+ String clientId, String clientSecret, Collection<String> scopes,
String applicationName,
+ String refreshToken, String accessToken) {
+ return makeClient();
+ }
+
+ private Sheets makeClient() {
+ Credential credential = new MockGoogleCredential.Builder().build();
+ return new Sheets.Builder(transport, JSON_FACTORY,
credential).setApplicationName("mock").build();
+ }
+
+}
diff --git
a/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsIT.java
b/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsIT.java
index 78dc59eb5cf..ed2f8cbb9cb 100644
---
a/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsIT.java
+++
b/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsIT.java
@@ -21,6 +21,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import com.google.api.client.testing.http.MockLowLevelHttpResponse;
import com.google.api.services.sheets.v4.model.BatchUpdateSpreadsheetRequest;
import com.google.api.services.sheets.v4.model.BatchUpdateSpreadsheetResponse;
import com.google.api.services.sheets.v4.model.Request;
@@ -32,121 +33,134 @@ import
org.apache.camel.component.google.sheets.internal.GoogleSheetsApiCollecti
import org.apache.camel.component.google.sheets.internal.GoogleSheetsConstants;
import
org.apache.camel.component.google.sheets.internal.SheetsSpreadsheetsApiMethod;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.EnabledIf;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static
org.apache.camel.component.google.sheets.server.GoogleSheetsApiTestServerAssert.assertThatGoogleApi;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
/**
* Test class for {@link
com.google.api.services.sheets.v4.Sheets.Spreadsheets} APIs.
*/
-@EnabledIf(value =
"org.apache.camel.component.google.sheets.AbstractGoogleSheetsTestSupport#hasCredentials",
- disabledReason = "Google Sheets credentials were not provided")
-public class SheetsSpreadsheetsIT extends AbstractGoogleSheetsTestSupport {
+public class SheetsSpreadsheetsIT {
private static final Logger LOG =
LoggerFactory.getLogger(SheetsSpreadsheetsIT.class);
private static final String PATH_PREFIX
=
GoogleSheetsApiCollection.getCollection().getApiName(SheetsSpreadsheetsApiMethod.class).getName();
- @Test
- public void testCreate() {
- String title = "camel-sheets-" + new
SecureRandom().nextInt(Integer.MAX_VALUE);
- Spreadsheet sheetToCreate = new Spreadsheet();
- SpreadsheetProperties sheetProperties = new SpreadsheetProperties();
- sheetProperties.setTitle(title);
-
- sheetToCreate.setProperties(sheetProperties);
-
- assertThatGoogleApi(getGoogleApiTestServer())
- .createSpreadsheetRequest()
- .hasTitle(title)
- .andReturnRandomSpreadsheet();
-
- final Spreadsheet result = requestBody("direct://CREATE",
sheetToCreate);
-
- assertNotNull(result, "create result is null");
- assertEquals(title, result.getProperties().getTitle());
-
- LOG.debug("create: " + result);
+ public static class CreateTest extends AbstractGoogleSheetsTestSupport {
+ private String title = "camel-sheets-" + new
SecureRandom().nextInt(Integer.MAX_VALUE);
+
+ @Test
+ public void test() {
+ Spreadsheet sheetToCreate = new Spreadsheet();
+ SpreadsheetProperties sheetProperties = new
SpreadsheetProperties();
+ sheetProperties.setTitle(title);
+
+ sheetToCreate.setProperties(sheetProperties);
+
+ final Spreadsheet result = requestBody("direct://CREATE",
sheetToCreate);
+
+ assertNotNull(result, "create result is null");
+ assertEquals(title, result.getProperties().getTitle());
+
+ LOG.debug("create: " + result);
+ }
+
+ @Override
+ protected GoogleSheetsClientFactory getClientFactory() throws
Exception {
+ return new MockGoogleSheetsClientFactory(
+ new
MockLowLevelHttpResponse().setContent("{\"properties\":{\"title\":\"" + title +
"\"}}"));
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ @Override
+ public void configure() {
+ from("direct://CREATE")
+ .to("google-sheets://" + PATH_PREFIX +
"/create?inBody=content");
+ }
+ };
+ }
}
- @Test
- public void testGet() throws Exception {
- assertThatGoogleApi(getGoogleApiTestServer())
- .createSpreadsheetRequest()
- .hasSheetTitle("TestData")
- .andReturnRandomSpreadsheet();
-
- Spreadsheet testSheet = getSpreadsheet();
-
- assertThatGoogleApi(getGoogleApiTestServer())
- .getSpreadsheetRequest(testSheet.getSpreadsheetId())
- .andReturnSpreadsheet(testSheet);
-
- // using String message body for single parameter "spreadsheetId"
- final Spreadsheet result = requestBody("direct://GET",
testSheet.getSpreadsheetId());
-
- assertNotNull(result, "get result is null");
- assertEquals(testSheet.getSpreadsheetId(), result.getSpreadsheetId());
-
- LOG.debug("get: " + result);
+ public static class GetTest extends AbstractGoogleSheetsTestSupport {
+ private Spreadsheet testSheet = getSpreadsheet();
+
+ @Test
+ public void test() throws Exception {
+ final Spreadsheet result = requestBody("direct://GET",
testSheet.getSpreadsheetId());
+
+ assertNotNull(result, "get result is null");
+ assertEquals(testSheet.getSpreadsheetId(),
result.getSpreadsheetId());
+
+ LOG.debug("get: " + result);
+ }
+
+ @Override
+ protected GoogleSheetsClientFactory getClientFactory() throws
Exception {
+ return new MockGoogleSheetsClientFactory(new
MockLowLevelHttpResponse().setContent(testSheet.toPrettyString()));
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ @Override
+ public void configure() {
+ from("direct://GET")
+ .to("google-sheets://" + PATH_PREFIX +
"/get?inBody=spreadsheetId");
+ }
+ };
+ }
}
- @Test
- public void testBatchUpdate() {
- assertThatGoogleApi(getGoogleApiTestServer())
- .createSpreadsheetRequest()
- .hasSheetTitle("TestData")
- .andReturnRandomSpreadsheet();
-
- Spreadsheet testSheet = getSpreadsheet();
- String updateTitle = "updated-" + testSheet.getProperties().getTitle();
-
- assertThatGoogleApi(getGoogleApiTestServer())
- .batchUpdateSpreadsheetRequest(testSheet.getSpreadsheetId())
- .updateTitle(updateTitle)
- .andReturnUpdated();
-
- final Map<String, Object> headers = new HashMap<>();
- // parameter type is String
- headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "spreadsheetId",
testSheet.getSpreadsheetId());
- // parameter type is
com.google.api.services.sheets.v4.model.BatchUpdateSpreadsheetRequest
- headers.put(GoogleSheetsConstants.PROPERTY_PREFIX +
"batchUpdateSpreadsheetRequest", new BatchUpdateSpreadsheetRequest()
- .setIncludeSpreadsheetInResponse(true)
- .setRequests(Collections
- .singletonList(new
Request().setUpdateSpreadsheetProperties(new
UpdateSpreadsheetPropertiesRequest()
- .setProperties(new
SpreadsheetProperties().setTitle(updateTitle))
- .setFields("title")))));
-
- final BatchUpdateSpreadsheetResponse result =
requestBodyAndHeaders("direct://BATCHUPDATE", null, headers);
-
- assertNotNull(result, "batchUpdate result is null");
- assertEquals(updateTitle,
result.getUpdatedSpreadsheet().getProperties().getTitle());
-
- LOG.debug("batchUpdate: " + result);
+ public static class BatchUpdateTest extends
AbstractGoogleSheetsTestSupport {
+ private Spreadsheet testSheet = getSpreadsheet();
+ private String updateTitle = "updated-" +
testSheet.getProperties().getTitle();
+
+ @Test
+ public void test() {
+ final Map<String, Object> headers = new HashMap<>();
+ // parameter type is String
+ headers.put(GoogleSheetsConstants.PROPERTY_PREFIX +
"spreadsheetId", testSheet.getSpreadsheetId());
+ // parameter type is
com.google.api.services.sheets.v4.model.BatchUpdateSpreadsheetRequest
+ headers.put(GoogleSheetsConstants.PROPERTY_PREFIX +
"batchUpdateSpreadsheetRequest",
+ new BatchUpdateSpreadsheetRequest()
+ .setIncludeSpreadsheetInResponse(true)
+ .setRequests(Collections
+ .singletonList(new Request()
+
.setUpdateSpreadsheetProperties(new UpdateSpreadsheetPropertiesRequest()
+ .setProperties(new
SpreadsheetProperties().setTitle(updateTitle))
+ .setFields("title")))));
+
+ final BatchUpdateSpreadsheetResponse result =
requestBodyAndHeaders("direct://BATCHUPDATE", null, headers);
+
+ assertNotNull(result, "batchUpdate result is null");
+ assertEquals(updateTitle,
result.getUpdatedSpreadsheet().getProperties().getTitle());
+
+ LOG.debug("batchUpdate: " + result);
+ }
+
+ @Override
+ protected GoogleSheetsClientFactory getClientFactory() throws
Exception {
+ return new MockGoogleSheetsClientFactory(
+ new MockLowLevelHttpResponse()
+ .setContent("{\"spreadsheetId\":\"" +
testSheet.getSpreadsheetId()
+ +
"\",\"updatedSpreadsheet\":{\"properties\":{\"title\":\"" + updateTitle
+ + "\"},\"spreadsheetId\":\"" +
testSheet.getSpreadsheetId() + "\"}}"));
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ @Override
+ public void configure() {
+ from("direct://BATCHUPDATE")
+ .to("google-sheets://" + PATH_PREFIX +
"/batchUpdate");
+ }
+ };
+ }
}
- @Override
- protected RouteBuilder createRouteBuilder() {
- return new RouteBuilder() {
- @Override
- public void configure() {
- // test route for batchUpdate
- from("direct://BATCHUPDATE")
- .to("google-sheets://" + PATH_PREFIX + "/batchUpdate");
-
- // test route for create
- from("direct://CREATE")
- .to("google-sheets://" + PATH_PREFIX +
"/create?inBody=content");
-
- // test route for get
- from("direct://GET")
- .to("google-sheets://" + PATH_PREFIX +
"/get?inBody=spreadsheetId");
-
- }
- };
- }
}
diff --git
a/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsValuesIT.java
b/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsValuesIT.java
index f6a10e8ffe0..7c283c4b489 100644
---
a/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsValuesIT.java
+++
b/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsValuesIT.java
@@ -17,12 +17,14 @@
package org.apache.camel.component.google.sheets;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.UUID;
+import java.util.Optional;
+import com.google.api.client.testing.http.MockLowLevelHttpResponse;
import com.google.api.services.sheets.v4.model.AppendValuesResponse;
import com.google.api.services.sheets.v4.model.ClearValuesRequest;
import com.google.api.services.sheets.v4.model.ClearValuesResponse;
@@ -35,11 +37,9 @@ import
org.apache.camel.component.google.sheets.internal.GoogleSheetsConstants;
import
org.apache.camel.component.google.sheets.internal.SheetsSpreadsheetsValuesApiMethod;
import org.apache.camel.util.ObjectHelper;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.EnabledIf;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static
org.apache.camel.component.google.sheets.server.GoogleSheetsApiTestServerAssert.assertThatGoogleApi;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -47,181 +47,209 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* Test class for {@link
com.google.api.services.sheets.v4.Sheets.Spreadsheets.Values} APIs.
*/
-@EnabledIf(value =
"org.apache.camel.component.google.sheets.AbstractGoogleSheetsTestSupport#hasCredentials",
- disabledReason = "Google Sheets credentials were not provided")
-public class SheetsSpreadsheetsValuesIT extends
AbstractGoogleSheetsTestSupport {
+public class SheetsSpreadsheetsValuesIT {
private static final Logger LOG =
LoggerFactory.getLogger(SheetsSpreadsheetsValuesIT.class);
private static final String PATH_PREFIX
=
GoogleSheetsApiCollection.getCollection().getApiName(SheetsSpreadsheetsValuesApiMethod.class).getName();
- @Test
- public void testGet() throws Exception {
- assertThatGoogleApi(getGoogleApiTestServer())
- .createSpreadsheetRequest()
- .hasSheetTitle("TestData")
- .andReturnRandomSpreadsheet();
-
- Spreadsheet testSheet = getSpreadsheet();
-
- assertThatGoogleApi(getGoogleApiTestServer())
- .getValuesRequest(testSheet.getSpreadsheetId(), TEST_SHEET +
"!A1:B2")
- .andReturnValues(Collections.emptyList());
-
- final Map<String, Object> headers = new HashMap<>();
- // parameter type is String
- headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "spreadsheetId",
testSheet.getSpreadsheetId());
- // parameter type is String
- headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "range",
TEST_SHEET + "!A1:B2");
-
- final ValueRange result = requestBodyAndHeaders("direct://GET", null,
headers);
-
- assertNotNull(result, "get result is null");
- assertEquals(TEST_SHEET + "!A1:B2", result.getRange());
- assertTrue(ObjectHelper.isEmpty(result.getValues()), "expected empty
value range but found entries");
-
- LOG.debug("get: " + result);
+ public static class GetTest extends AbstractGoogleSheetsTestSupport {
+ private Spreadsheet testSheet = getSpreadsheet();
+
+ @Test
+ public void test() throws Exception {
+ final Map<String, Object> headers = new HashMap<>();
+ // parameter type is String
+ headers.put(GoogleSheetsConstants.PROPERTY_PREFIX +
"spreadsheetId", testSheet.getSpreadsheetId());
+ // parameter type is String
+ headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "range",
TEST_RANGE);
+
+ final ValueRange result = requestBodyAndHeaders("direct://GET",
null, headers);
+
+ assertNotNull(result, "get result is null");
+ assertEquals(TEST_RANGE, result.getRange());
+ assertTrue(ObjectHelper.isEmpty(result.getValues()), "expected
empty value range but found entries");
+
+ LOG.debug("get: " + result);
+ }
+
+ @Override
+ protected GoogleSheetsClientFactory getClientFactory() throws
Exception {
+ return new MockGoogleSheetsClientFactory(
+ new MockLowLevelHttpResponse()
+ .setContent("{" + "\"range\": \"" + TEST_RANGE +
"\"," + "\"majorDimension\": \"ROWS\"" + "}"));
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ @Override
+ public void configure() {
+ from("direct://GET")
+ .to("google-sheets://" + PATH_PREFIX + "/get");
+ }
+ };
+ }
}
- @Test
- public void testUpdate() throws Exception {
- assertThatGoogleApi(getGoogleApiTestServer())
- .createSpreadsheetRequest()
- .hasSheetTitle("TestData")
- .andReturnRandomSpreadsheet();
-
- Spreadsheet testSheet = getSpreadsheet();
-
- List<List<Object>> data = Arrays.asList(
+ public static class UpdateTest extends AbstractGoogleSheetsTestSupport {
+ private Spreadsheet testSheet = getSpreadsheet();
+ private String range = "TEST_SHEET!A1:B2";
+ private List<List<Object>> data = Arrays.asList(
Arrays.asList("A1", "B1"),
Arrays.asList("A2", "B2"));
- assertThatGoogleApi(getGoogleApiTestServer())
- .updateValuesRequest(testSheet.getSpreadsheetId(), TEST_SHEET
+ "!A1:B2", data)
- .andReturnUpdateResponse();
-
- ValueRange values = new ValueRange();
- values.setValues(data);
-
- final Map<String, Object> headers = new HashMap<>();
- // parameter type is String
- headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "spreadsheetId",
testSheet.getSpreadsheetId());
- // parameter type is String
- headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "range",
TEST_SHEET + "!A1:B2");
- // parameter type is com.google.api.services.sheets.v4.model.ValueRange
- headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "values", values);
-
- // parameter type is String
- headers.put(GoogleSheetsConstants.PROPERTY_PREFIX +
"valueInputOption", "USER_ENTERED");
-
- final UpdateValuesResponse result =
requestBodyAndHeaders("direct://UPDATE", null, headers);
-
- assertNotNull(result, "update result is null");
- assertEquals(testSheet.getSpreadsheetId(), result.getSpreadsheetId());
- assertEquals(TEST_SHEET + "!A1:B2", result.getUpdatedRange());
- assertEquals(Integer.valueOf(2), result.getUpdatedRows());
- assertEquals(Integer.valueOf(4), result.getUpdatedCells());
-
- LOG.debug("update: " + result);
+ @Test
+ public void test() throws Exception {
+
+ ValueRange values = new ValueRange();
+ values.setValues(data);
+
+ final Map<String, Object> headers = new HashMap<>();
+ // parameter type is String
+ headers.put(GoogleSheetsConstants.PROPERTY_PREFIX +
"spreadsheetId", testSheet.getSpreadsheetId());
+ // parameter type is String
+ headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "range",
range);
+ // parameter type is
com.google.api.services.sheets.v4.model.ValueRange
+ headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "values",
values);
+
+ // parameter type is String
+ headers.put(GoogleSheetsConstants.PROPERTY_PREFIX +
"valueInputOption", "USER_ENTERED");
+
+ final UpdateValuesResponse result =
requestBodyAndHeaders("direct://UPDATE", null, headers);
+
+ assertNotNull(result, "update result is null");
+ assertEquals(testSheet.getSpreadsheetId(),
result.getSpreadsheetId());
+ assertEquals(range, result.getUpdatedRange());
+ assertEquals(data.size(), result.getUpdatedRows());
+ assertEquals(data.size() * data.get(0).size(),
result.getUpdatedCells());
+
+ LOG.debug("update: " + result);
+ }
+
+ @Override
+ protected GoogleSheetsClientFactory getClientFactory() throws
Exception {
+ return new MockGoogleSheetsClientFactory(
+ new MockLowLevelHttpResponse()
+ .setContent("{" + "\"spreadsheetId\": \"" +
testSheet.getSpreadsheetId() + "\","
+ + "\"updatedRange\": \"" + range +
"\"," + "\"updatedRows\": "
+ + data.size() + "," +
"\"updatedColumns\": "
+ +
Optional.ofNullable(data.get(0)).map(Collection::size).orElse(0) + ","
+ + "\"updatedCells\": "
+ + data.size()
+ *
Optional.ofNullable(data.get(0)).map(Collection::size).orElse(0)
+ + "}"));
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ @Override
+ public void configure() {
+ from("direct://UPDATE")
+ .to("google-sheets://" + PATH_PREFIX + "/update");
+ }
+ };
+ }
}
- @Test
- public void testAppend() throws Exception {
- assertThatGoogleApi(getGoogleApiTestServer())
- .createSpreadsheetRequest()
- .hasSheetTitle("TestData")
- .andReturnRandomSpreadsheet();
-
- Spreadsheet testSheet = getSpreadsheet();
-
- List<List<Object>> data =
Collections.singletonList(Arrays.asList("A10", "B10", "C10"));
-
- assertThatGoogleApi(getGoogleApiTestServer())
- .appendValuesRequest(testSheet.getSpreadsheetId(), TEST_SHEET
+ "!A10", data)
- .andReturnAppendResponse(TEST_SHEET + "!A10:C10");
-
- final Map<String, Object> headers = new HashMap<>();
- // parameter type is String
- headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "spreadsheetId",
testSheet.getSpreadsheetId());
- // parameter type is String
- headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "range",
TEST_SHEET + "!A10");
- // parameter type is com.google.api.services.sheets.v4.model.ValueRange
- headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "values", new
ValueRange().setValues(data));
-
- // parameter type is String
- headers.put(GoogleSheetsConstants.PROPERTY_PREFIX +
"valueInputOption", "USER_ENTERED");
-
- final AppendValuesResponse result =
requestBodyAndHeaders("direct://APPEND", null, headers);
-
- assertNotNull(result, "append result is null");
- assertEquals(testSheet.getSpreadsheetId(), result.getSpreadsheetId());
- assertEquals(TEST_SHEET + "!A10:C10",
result.getUpdates().getUpdatedRange());
- assertEquals(Integer.valueOf(1), result.getUpdates().getUpdatedRows());
- assertEquals(Integer.valueOf(3),
result.getUpdates().getUpdatedCells());
-
- LOG.debug("append: " + result);
- }
-
- @Test
- public void testClear() throws Exception {
- String spreadsheetId = UUID.randomUUID().toString();
-
- assertThatGoogleApi(getGoogleApiTestServer())
- .createSpreadsheetRequest()
- .hasSheetTitle("TestData")
- .andReturnSpreadsheet(spreadsheetId);
-
- Spreadsheet testSheet = getSpreadsheet();
-
- assertThatGoogleApi(getGoogleApiTestServer())
- .updateValuesRequest(spreadsheetId, TEST_SHEET + "!A1:B2",
- Arrays.asList(Arrays.asList("a1", "b1"),
Arrays.asList("a2", "b2")))
- .andReturnUpdateResponse();
-
- applyTestData(testSheet);
-
- assertThatGoogleApi(getGoogleApiTestServer())
- .clearValuesRequest(testSheet.getSpreadsheetId(), TEST_SHEET +
"!A1:B2")
- .andReturnClearResponse(TEST_SHEET + "!A1:B2");
-
- final Map<String, Object> headers = new HashMap<>();
- // parameter type is String
- headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "spreadsheetId",
testSheet.getSpreadsheetId());
- // parameter type is String
- headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "range",
TEST_SHEET + "!A1:B2");
- // parameter type is
com.google.api.services.sheets.v4.model.ClearValuesRequest
- headers.put(GoogleSheetsConstants.PROPERTY_PREFIX +
"clearValuesRequest", new ClearValuesRequest());
-
- final ClearValuesResponse result =
requestBodyAndHeaders("direct://CLEAR", null, headers);
-
- assertNotNull(result, "clear result is null");
- assertEquals(testSheet.getSpreadsheetId(), result.getSpreadsheetId());
- assertEquals(TEST_SHEET + "!A1:B2", result.getClearedRange());
-
- LOG.debug("clear: " + result);
+ public static class AppendTest extends AbstractGoogleSheetsTestSupport {
+ private Spreadsheet testSheet = getSpreadsheet();
+ private List<List<Object>> data =
Collections.singletonList(Arrays.asList("A10", "B10", "C10"));
+ private String range = TEST_SHEET + "!A10";
+ private String updateRange = TEST_SHEET + "!" + data.get(0).get(0) +
":" + data.get(0).get(data.get(0).size() - 1);
+
+ @Test
+ public void test() throws Exception {
+ final Map<String, Object> headers = new HashMap<>();
+ // parameter type is String
+ headers.put(GoogleSheetsConstants.PROPERTY_PREFIX +
"spreadsheetId", testSheet.getSpreadsheetId());
+ // parameter type is String
+ headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "range",
range);
+ // parameter type is
com.google.api.services.sheets.v4.model.ValueRange
+ headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "values", new
ValueRange().setValues(data));
+
+ // parameter type is String
+ headers.put(GoogleSheetsConstants.PROPERTY_PREFIX +
"valueInputOption", "USER_ENTERED");
+
+ final AppendValuesResponse result =
requestBodyAndHeaders("direct://APPEND", null, headers);
+
+ assertNotNull(result, "append result is null");
+ assertEquals(testSheet.getSpreadsheetId(),
result.getSpreadsheetId());
+ assertEquals(updateRange, result.getUpdates().getUpdatedRange());
+ assertEquals(data.size(), result.getUpdates().getUpdatedRows());
+ assertEquals(data.get(0).size(),
result.getUpdates().getUpdatedCells());
+
+ LOG.debug("append: " + result);
+ }
+
+ @Override
+ protected GoogleSheetsClientFactory getClientFactory() throws
Exception {
+ return new MockGoogleSheetsClientFactory(
+ new MockLowLevelHttpResponse()
+ .setContent(
+ "{" + "\"spreadsheetId\": \"" +
testSheet.getSpreadsheetId() + "\"," + "\"updates\":" + "{"
+ + "\"spreadsheetId\": \"" +
testSheet.getSpreadsheetId() + "\","
+ + "\"updatedRange\": \"" + updateRange
+ "\"," + "\"updatedRows\": "
+ + data.size() + "," +
"\"updatedColumns\": "
+ +
Optional.ofNullable(data.get(0)).map(Collection::size).orElse(0) + ","
+ + "\"updatedCells\": "
+ + data.size()
+ *
Optional.ofNullable(data.get(0)).map(Collection::size).orElse(0)
+ + "}" + "}"));
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ @Override
+ public void configure() {
+ from("direct://APPEND")
+ .to("google-sheets://" + PATH_PREFIX + "/append");
+ }
+ };
+ }
}
- @Override
- protected RouteBuilder createRouteBuilder() {
- return new RouteBuilder() {
- @Override
- public void configure() {
- // test route for append
- from("direct://APPEND")
- .to("google-sheets://" + PATH_PREFIX + "/append");
-
- // test route for clear
- from("direct://CLEAR")
- .to("google-sheets://" + PATH_PREFIX + "/clear");
-
- // test route for get
- from("direct://GET")
- .to("google-sheets://" + PATH_PREFIX + "/get");
-
- // test route for update
- from("direct://UPDATE")
- .to("google-sheets://" + PATH_PREFIX + "/update");
- }
- };
+ public static class ClearTest extends AbstractGoogleSheetsTestSupport {
+ private Spreadsheet testSheet = getSpreadsheet();
+
+ @Test
+ public void test() throws Exception {
+ final Map<String, Object> headers = new HashMap<>();
+ // parameter type is String
+ headers.put(GoogleSheetsConstants.PROPERTY_PREFIX +
"spreadsheetId", testSheet.getSpreadsheetId());
+ // parameter type is String
+ headers.put(GoogleSheetsConstants.PROPERTY_PREFIX + "range",
TEST_RANGE);
+ // parameter type is
com.google.api.services.sheets.v4.model.ClearValuesRequest
+ headers.put(GoogleSheetsConstants.PROPERTY_PREFIX +
"clearValuesRequest", new ClearValuesRequest());
+
+ final ClearValuesResponse result =
requestBodyAndHeaders("direct://CLEAR", null, headers);
+
+ assertNotNull(result, "clear result is null");
+ assertEquals(testSheet.getSpreadsheetId(),
result.getSpreadsheetId());
+ assertEquals(TEST_RANGE, result.getClearedRange());
+
+ LOG.debug("clear: " + result);
+ }
+
+ @Override
+ protected GoogleSheetsClientFactory getClientFactory() throws
Exception {
+ return new MockGoogleSheetsClientFactory(
+ new MockLowLevelHttpResponse().setContent(
+ "{" + "\"spreadsheetId\": \"" +
testSheet.getSpreadsheetId() + "\"," + "\"clearedRange\": \""
+ + TEST_RANGE +
"\"" + "}"));
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ @Override
+ public void configure() {
+ from("direct://CLEAR")
+ .to("google-sheets://" + PATH_PREFIX + "/clear");
+ }
+ };
+ }
}
}
diff --git
a/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/server/GoogleSheetsApiTestServer.java
b/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/server/GoogleSheetsApiTestServer.java
deleted file mode 100644
index 81eaf5cd825..00000000000
---
a/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/server/GoogleSheetsApiTestServer.java
+++ /dev/null
@@ -1,353 +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.google.sheets.server;
-
-import java.io.IOException;
-import java.nio.file.Path;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Optional;
-import java.util.zip.GZIPInputStream;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.ReadListener;
-import javax.servlet.ServletException;
-import javax.servlet.ServletInputStream;
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.servlet.http.HttpServletResponse;
-
-import com.consol.citrus.Citrus;
-import com.consol.citrus.dsl.runner.DefaultTestRunner;
-import com.consol.citrus.dsl.runner.TestRunner;
-import com.consol.citrus.exceptions.CitrusRuntimeException;
-import com.consol.citrus.http.server.HttpServer;
-import com.consol.citrus.http.server.HttpServerBuilder;
-import com.consol.citrus.http.servlet.GzipHttpServletResponseWrapper;
-import com.consol.citrus.http.servlet.RequestCachingServletFilter;
-import org.eclipse.jetty.server.HttpConfiguration;
-import org.eclipse.jetty.server.HttpConnectionFactory;
-import org.eclipse.jetty.server.SecureRequestCustomizer;
-import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.SslConnectionFactory;
-import org.eclipse.jetty.util.ssl.SslContextFactory;
-import org.springframework.http.HttpHeaders;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
-import org.springframework.security.oauth2.common.DefaultOAuth2RefreshToken;
-import org.springframework.security.oauth2.provider.AuthorizationRequest;
-import org.springframework.security.oauth2.provider.ClientDetails;
-import org.springframework.security.oauth2.provider.OAuth2Authentication;
-import
org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationManager;
-import
org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter;
-import org.springframework.security.oauth2.provider.client.BaseClientDetails;
-import
org.springframework.security.oauth2.provider.client.InMemoryClientDetailsService;
-import org.springframework.security.oauth2.provider.token.DefaultTokenServices;
-import
org.springframework.security.oauth2.provider.token.store.InMemoryTokenStore;
-import org.springframework.web.filter.OncePerRequestFilter;
-
-public final class GoogleSheetsApiTestServer {
-
- private static Citrus citrus = Citrus.newInstance();
-
- private final HttpServer httpServer;
- private TestRunner runner;
-
- /**
- * Prevent direct instantiation.
- */
- private GoogleSheetsApiTestServer(HttpServer httpServer) {
- this.httpServer = httpServer;
- }
-
- /**
- * Initialize new test run.
- */
- public void init() {
- runner = new DefaultTestRunner(citrus.getApplicationContext(),
citrus.createTestContext());
- }
-
- /**
- * Stop and reset current test run if any.
- */
- public void reset() {
- if (runner != null) {
- runner.purgeEndpoints(action -> action.endpoint(httpServer));
- runner.stop();
- }
- }
-
- /**
- * Obtains the httpServer.
- *
- * @return
- */
- public HttpServer getHttpServer() {
- return httpServer;
- }
-
- public void afterPropertiesSet() throws Exception {
- httpServer.afterPropertiesSet();
- }
-
- public TestRunner getRunner() {
- return runner;
- }
-
- /**
- * Builder builds server instance from given http server builder adding
more setting options in fluent builder
- * pattern style.
- */
- public static class Builder {
- private final HttpServerBuilder serverBuilder;
-
- private Path keyStorePath;
- private String keyStorePassword;
- private int securePort = 8443;
-
- private String basePath = "";
-
- private String clientId;
- private String clientSecret;
-
- private String accessToken;
- private String refreshToken;
-
- public Builder(HttpServerBuilder serverBuilder) {
- this.serverBuilder = serverBuilder;
- }
-
- public Builder securePort(int securePort) {
- this.securePort = securePort;
- return this;
- }
-
- public Builder keyStorePath(Path keyStorePath) {
- this.keyStorePath = keyStorePath;
- return this;
- }
-
- public Builder keyStorePassword(String keyStorePass) {
- this.keyStorePassword = keyStorePass;
- return this;
- }
-
- public Builder basePath(String basePath) {
- this.basePath = basePath;
- return this;
- }
-
- public Builder clientId(String clientId) {
- this.clientId = clientId;
- return this;
- }
-
- public Builder clientSecret(String clientSecret) {
- this.clientSecret = clientSecret;
- return this;
- }
-
- public Builder accessToken(String accessToken) {
- this.accessToken = accessToken;
- return this;
- }
-
- public Builder refreshToken(String refreshToken) {
- this.refreshToken = refreshToken;
- return this;
- }
-
- public GoogleSheetsApiTestServer build() throws Exception {
- SslContextFactory sslContextFactory = new SslContextFactory(true);
-
sslContextFactory.setKeyStorePath(keyStorePath.toAbsolutePath().toString());
- sslContextFactory.setKeyStorePassword(keyStorePassword);
-
- HttpConfiguration parent = new HttpConfiguration();
- parent.setSecureScheme("https");
- parent.setSecurePort(securePort);
- HttpConfiguration httpConfiguration = new
HttpConfiguration(parent);
- httpConfiguration.setCustomizers(Collections.singletonList(new
SecureRequestCustomizer()));
-
- ServerConnector sslConnector = new ServerConnector(
- new org.eclipse.jetty.server.Server(), new
SslConnectionFactory(sslContextFactory, "http/1.1"),
- new HttpConnectionFactory(httpConfiguration));
- sslConnector.setPort(securePort);
-
- serverBuilder.connector(sslConnector);
-
- Map<String, Filter> filterMap = new LinkedHashMap<>();
- filterMap.put("request-caching-filter", new
RequestCachingServletFilter());
- filterMap.put("gzip-filter", new GzipServletFilter());
- filterMap.put("oauth2-filter", oauth2Filter());
-
- Map<String, String> filterMapings = new LinkedHashMap<>();
- filterMapings.put("oauth2-filter", "/" +
Optional.ofNullable(basePath).map(path -> path + "/*").orElse("*"));
- serverBuilder.filterMappings(filterMapings);
-
- serverBuilder.filters(filterMap);
-
- serverBuilder.applicationContext(citrus.getApplicationContext());
-
- GoogleSheetsApiTestServer server = new
GoogleSheetsApiTestServer(serverBuilder.build());
- server.afterPropertiesSet();
- return server;
- }
-
- private Filter oauth2Filter() {
- BaseClientDetails clientDetails = new BaseClientDetails();
- clientDetails.setClientId(clientId);
- clientDetails.setClientSecret(clientSecret);
- clientDetails.setAccessTokenValiditySeconds(3000);
- clientDetails.setAutoApproveScopes(Arrays.asList("read", "write"));
- clientDetails.setScope(Arrays.asList("read", "write"));
- clientDetails.setAuthorities(Arrays.asList(new
SimpleGrantedAuthority("client_credentials"),
- new SimpleGrantedAuthority("authorization_code"),
- new SimpleGrantedAuthority("password"), new
SimpleGrantedAuthority("refresh_token")));
-
- OAuth2AuthenticationProcessingFilter filter = new
OAuth2AuthenticationProcessingFilter();
- OAuth2AuthenticationManager oauth2AuthenticationManager = new
OAuth2AuthenticationManager();
-
- InMemoryClientDetailsService clientDetailsService = new
InMemoryClientDetailsService();
- Map<String, ClientDetails> clientDetailsStore = new HashMap<>();
- clientDetailsStore.put(clientId, clientDetails);
- clientDetailsService.setClientDetailsStore(clientDetailsStore);
-
oauth2AuthenticationManager.setClientDetailsService(clientDetailsService);
-
- InMemoryTokenStore tokenStore = new InMemoryTokenStore();
- AuthorizationRequest authorizationRequest = new
AuthorizationRequest();
- authorizationRequest.setClientId(clientDetails.getClientId());
-
authorizationRequest.setAuthorities(clientDetails.getAuthorities());
- authorizationRequest.setApproved(true);
-
- OAuth2Authentication authentication = new
OAuth2Authentication(authorizationRequest.createOAuth2Request(), null);
-
- tokenStore.storeAccessToken(new
DefaultOAuth2AccessToken(accessToken), authentication);
- tokenStore.storeRefreshToken(new
DefaultOAuth2RefreshToken(refreshToken), authentication);
-
- DefaultTokenServices tokenServices = new DefaultTokenServices();
- tokenServices.setTokenStore(tokenStore);
- tokenServices.setClientDetailsService(clientDetailsService);
- tokenServices.setSupportRefreshToken(true);
- oauth2AuthenticationManager.setTokenServices(tokenServices);
-
- filter.setAuthenticationManager(oauth2AuthenticationManager);
- return filter;
- }
- }
-
- private static class GzipServletFilter extends OncePerRequestFilter {
- @Override
- protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
- throws ServletException, IOException {
- HttpServletRequest filteredRequest = request;
- HttpServletResponse filteredResponse = response;
-
- String contentEncoding =
request.getHeader(HttpHeaders.CONTENT_ENCODING);
- if (contentEncoding != null && contentEncoding.contains("gzip")) {
- filteredRequest = new GzipHttpServletRequestWrapper(request);
- }
-
- String acceptEncoding =
request.getHeader(HttpHeaders.ACCEPT_ENCODING);
- if (acceptEncoding != null && acceptEncoding.contains("gzip")) {
- filteredResponse = new
GzipHttpServletResponseWrapper(response);
- }
-
- filterChain.doFilter(filteredRequest, filteredResponse);
-
- if (filteredResponse instanceof GzipHttpServletResponseWrapper) {
- ((GzipHttpServletResponseWrapper) filteredResponse).finish();
- }
- }
- }
-
- private static class GzipHttpServletRequestWrapper extends
HttpServletRequestWrapper {
- /**
- * Constructs a request adaptor wrapping the given request.
- *
- * @param request
- * @throws IllegalArgumentException if the request is null
- */
- public GzipHttpServletRequestWrapper(HttpServletRequest request) {
- super(request);
- }
-
- @Override
- public ServletInputStream getInputStream() throws IOException {
- return new GzipServletInputStream(getRequest());
- }
-
- /**
- * Gzip enabled servlet input stream.
- */
- private static class GzipServletInputStream extends ServletInputStream
{
- private final GZIPInputStream gzipStream;
-
- /**
- * Default constructor using wrapped input stream.
- *
- * @param request
- * @throws IOException
- */
- public GzipServletInputStream(ServletRequest request) throws
IOException {
- gzipStream = new GZIPInputStream(request.getInputStream());
- }
-
- @Override
- public boolean isFinished() {
- try {
- return gzipStream.available() == 0;
- } catch (IOException e) {
- throw new CitrusRuntimeException("Failed to check gzip
intput stream availability", e);
- }
- }
-
- @Override
- public boolean isReady() {
- return true;
- }
-
- @Override
- public void setReadListener(final ReadListener readListener) {
- throw new UnsupportedOperationException("Unsupported
operation");
- }
-
- @Override
- public int read() {
- try {
- return gzipStream.read();
- } catch (IOException e) {
- throw new CitrusRuntimeException("Failed to read gzip
input stream", e);
- }
- }
-
- @Override
- public int read(byte[] b) throws IOException {
- return gzipStream.read(b);
- }
-
- @Override
- public int read(byte[] b, int off, int len) throws IOException {
- return gzipStream.read(b, off, len);
- }
- }
- }
-}
diff --git
a/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/server/GoogleSheetsApiTestServerAssert.java
b/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/server/GoogleSheetsApiTestServerAssert.java
deleted file mode 100644
index d9cf1b03cd1..00000000000
---
a/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/server/GoogleSheetsApiTestServerAssert.java
+++ /dev/null
@@ -1,365 +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.google.sheets.server;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Optional;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import java.util.stream.Collectors;
-
-import com.consol.citrus.message.MessageType;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.google.api.services.sheets.v4.model.Spreadsheet;
-import com.google.api.services.sheets.v4.model.ValueRange;
-import org.apache.camel.util.ObjectHelper;
-import org.assertj.core.api.AbstractAssert;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-
-public final class GoogleSheetsApiTestServerAssert
- extends AbstractAssert<GoogleSheetsApiTestServerAssert,
GoogleSheetsApiTestServer> {
-
- private ObjectMapper mapper = new ObjectMapper()
- .setDefaultPropertyInclusion(
- JsonInclude.Value.construct(JsonInclude.Include.NON_EMPTY,
JsonInclude.Include.NON_EMPTY))
- .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
- .enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING)
-
.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING).disable(JsonParser.Feature.AUTO_CLOSE_SOURCE);
-
- private GoogleSheetsApiTestServerAssert(GoogleSheetsApiTestServer server) {
- super(server, GoogleSheetsApiTestServerAssert.class);
- }
-
- /**
- * A fluent entry point to the assertion class.
- *
- * @param server the target server to perform assertions to.
- * @return
- */
- public static GoogleSheetsApiTestServerAssert
assertThatGoogleApi(GoogleSheetsApiTestServer server) {
- return new GoogleSheetsApiTestServerAssert(server);
- }
-
- public GetSpreadsheetAssert getSpreadsheetRequest(String spreadsheetId) {
- return new GetSpreadsheetAssert(spreadsheetId);
- }
-
- public void isRunning() {
- isRunning(5000, TimeUnit.MILLISECONDS);
- }
-
- public void isRunning(long timeout, TimeUnit timeUnit) {
- ScheduledFuture<?> schedule = null;
- try {
- CompletableFuture<Boolean> runningProbe = new
CompletableFuture<>();
- schedule =
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(() -> {
- if (actual.getHttpServer().isRunning()) {
- runningProbe.complete(true);
- }
- }, 0, timeout / 10, timeUnit);
-
- runningProbe.get(timeout, timeUnit);
- } catch (InterruptedException | ExecutionException | TimeoutException
e) {
- throw new IllegalStateException(e);
- } finally {
- Optional.ofNullable(schedule).ifPresent(future ->
future.cancel(true));
- }
- }
-
- public class GetSpreadsheetAssert {
- GetSpreadsheetAssert(String spreadsheetId) {
- actual.getRunner().createVariable("spreadsheetId", spreadsheetId);
- }
-
- public void andReturnSpreadsheet(Spreadsheet spreadsheet) throws
IOException {
- String spreadsheetJson = spreadsheet.toPrettyString();
- actual.getRunner().async()
- .actions(
- actual.getRunner()
- .http(action -> action
-
.server(actual.getHttpServer()).receive().get("/v4/spreadsheets/${spreadsheetId}")),
- actual.getRunner()
- .http(action ->
action.server(actual.getHttpServer()).send().response(HttpStatus.OK)
-
.contentType(MediaType.APPLICATION_JSON_VALUE).payload(spreadsheetJson)));
- }
- }
-
- public ClearValuesAssert clearValuesRequest(String spreadsheetId, String
range) {
- return new ClearValuesAssert(spreadsheetId, range);
- }
-
- public class ClearValuesAssert {
- ClearValuesAssert(String spreadsheetId, String range) {
- actual.getRunner().createVariable("spreadsheetId", spreadsheetId);
- actual.getRunner().createVariable("range", range);
- }
-
- public void andReturnClearResponse(String clearedRange) {
- actual.getRunner().async()
- .actions(
- actual.getRunner()
- .http(action ->
action.server(actual.getHttpServer()).receive()
-
.post("/v4/spreadsheets/${spreadsheetId}/values/${range}:clear")),
- actual.getRunner()
- .http(action ->
action.server(actual.getHttpServer()).send().response(HttpStatus.OK)
-
.contentType(MediaType.APPLICATION_JSON_VALUE)
- .payload("{" + "\"spreadsheetId\":
\"${spreadsheetId}\"," + "\"clearedRange\": \""
- + clearedRange + "\"" +
"}")));
- }
- }
-
- public UpdateValuesAssert updateValuesRequest(String spreadsheetId, String
range, List<List<Object>> data) {
- return new UpdateValuesAssert(spreadsheetId, range, data);
- }
-
- public class UpdateValuesAssert {
- private final List<List<Object>> data;
-
- UpdateValuesAssert(String spreadsheetId, String range,
List<List<Object>> data) {
- actual.getRunner().createVariable("spreadsheetId", spreadsheetId);
- actual.getRunner().createVariable("range", range);
- this.data = data;
- }
-
- public void andReturnUpdateResponse() throws IOException {
- String valuesJson = mapper.writer().writeValueAsString(data);
-
- actual
- .getRunner().async().actions(
- actual.getRunner()
- .http(action ->
action.server(actual.getHttpServer()).receive()
-
.put("/v4/spreadsheets/${spreadsheetId}/values/${range}")
- .validate("$.values.toString()",
valuesJson)),
- actual.getRunner()
- .http(action ->
action.server(actual.getHttpServer()).send().response(HttpStatus.OK)
-
.contentType(MediaType.APPLICATION_JSON_VALUE)
- .payload("{" + "\"spreadsheetId\":
\"${spreadsheetId}\","
- + "\"updatedRange\":
\"${range}\"," + "\"updatedRows\": "
- + data.size() + "," +
"\"updatedColumns\": "
- +
Optional.ofNullable(data.get(0)).map(Collection::size).orElse(0) + ","
- + "\"updatedCells\": "
- + data.size()
- *
Optional.ofNullable(data.get(0)).map(Collection::size).orElse(0)
- + "}")));
- }
- }
-
- public AppendValuesAssert appendValuesRequest(String spreadsheetId, String
range, List<List<Object>> data) {
- return new AppendValuesAssert(spreadsheetId, range, data);
- }
-
- public class AppendValuesAssert {
- private final List<List<Object>> data;
-
- AppendValuesAssert(String spreadsheetId, String range,
List<List<Object>> data) {
- actual.getRunner().createVariable("spreadsheetId", spreadsheetId);
- actual.getRunner().createVariable("range", range);
- this.data = data;
- }
-
- public void andReturnAppendResponse(String updatedRange) throws
IOException {
- String valuesJson = mapper.writer().writeValueAsString(data);
-
- actual
- .getRunner().async().actions(
- actual.getRunner()
- .http(action ->
action.server(actual.getHttpServer()).receive()
-
.post("/v4/spreadsheets/${spreadsheetId}/values/${range}:append")
- .validate("$.values.toString()",
valuesJson)),
- actual.getRunner()
- .http(action ->
action.server(actual.getHttpServer()).send().response(HttpStatus.OK)
-
.contentType(MediaType.APPLICATION_JSON_VALUE)
- .payload("{" + "\"spreadsheetId\":
\"${spreadsheetId}\"," + "\"updates\":" + "{"
- + "\"spreadsheetId\":
\"${spreadsheetId}\","
- + "\"updatedRange\": \""
+ updatedRange + "\"," + "\"updatedRows\": "
- + data.size() + "," +
"\"updatedColumns\": "
- +
Optional.ofNullable(data.get(0)).map(Collection::size).orElse(0) + ","
- + "\"updatedCells\": "
- + data.size()
- *
Optional.ofNullable(data.get(0)).map(Collection::size).orElse(0)
- + "}" + "}")));
- }
- }
-
- public GetValuesAssert getValuesRequest(String spreadsheetId, String
range) {
- return new GetValuesAssert(spreadsheetId, range);
- }
-
- public class GetValuesAssert {
- GetValuesAssert(String spreadsheetId, String range) {
- actual.getRunner().createVariable("spreadsheetId", spreadsheetId);
- actual.getRunner().createVariable("range", range);
- }
-
- public void andReturnValueRange(ValueRange valueRange) throws
IOException {
- String valueJson = valueRange.toPrettyString();
- actual.getRunner().async()
- .actions(actual.getRunner()
- .http(action ->
action.server(actual.getHttpServer()).receive()
-
.get("/v4/spreadsheets/${spreadsheetId}/values/${range}")),
- actual
- .getRunner()
- .http(action ->
action.server(actual.getHttpServer()).send().response(HttpStatus.OK)
-
.contentType(MediaType.APPLICATION_JSON_VALUE).payload(valueJson)));
- }
-
- public void andReturnValues(List<List<Object>> data) throws
JsonProcessingException {
- String valueRangeJson;
- if (ObjectHelper.isEmpty(data)) {
- valueRangeJson = "{" + "\"range\": \"${range}\"," +
"\"majorDimension\": \"ROWS\"" + "}";
- } else {
- valueRangeJson = "{" + "\"range\": \"${range}\"," +
"\"majorDimension\": \"ROWS\"," + "\"values\":"
- + mapper.writer().writeValueAsString(data) +
"}";
- }
-
- actual.getRunner().async()
- .actions(actual.getRunner()
- .http(action ->
action.server(actual.getHttpServer()).receive()
-
.get("/v4/spreadsheets/${spreadsheetId}/values/${range}")),
- actual
- .getRunner()
- .http(action ->
action.server(actual.getHttpServer()).send().response(HttpStatus.OK)
-
.contentType(MediaType.APPLICATION_JSON_VALUE).payload(valueRangeJson)));
- }
- }
-
- public BatchGetValuesAssert batchGetValuesRequest(String spreadsheetId,
String range) {
- return new BatchGetValuesAssert(spreadsheetId, range);
- }
-
- public class BatchGetValuesAssert {
- BatchGetValuesAssert(String spreadsheetId, String range) {
- actual.getRunner().createVariable("spreadsheetId", spreadsheetId);
- actual.getRunner().createVariable("range", range);
- }
-
- public void andReturnValues(List<List<Object>> data) throws
JsonProcessingException {
- String valueRangeJson;
- if (ObjectHelper.isEmpty(data)) {
- valueRangeJson = "{\"spreadsheetId\": \"${spreadsheetId}\"," +
"\"valueRanges\": [" + "{"
- + "\"range\": \"${range}\"," +
"\"majorDimension\": \"ROWS\"" + "}"
- + "]}";
- } else {
- valueRangeJson = "{\"spreadsheetId\": \"${spreadsheetId}\"," +
"\"valueRanges\": [" + "{"
- + "\"range\": \"${range}\"," +
"\"majorDimension\": \"ROWS\","
- + "\"values\":" +
mapper.writer().writeValueAsString(data) + "}" + "]}";
- }
-
- actual.getRunner().async()
- .actions(actual.getRunner()
- .http(action ->
action.server(actual.getHttpServer()).receive()
-
.get("/v4/spreadsheets/${spreadsheetId}/values:batchGet")),
- actual
- .getRunner()
- .http(action ->
action.server(actual.getHttpServer()).send().response(HttpStatus.OK)
-
.contentType(MediaType.APPLICATION_JSON_VALUE).payload(valueRangeJson)));
- }
- }
-
- public CreateSpreadsheetAssert createSpreadsheetRequest() {
- return new CreateSpreadsheetAssert();
- }
-
- public class CreateSpreadsheetAssert {
- private String title = "@ignore@";
- private String sheetTitle;
-
- public CreateSpreadsheetAssert hasTitle(String title) {
- this.title = title;
- return this;
- }
-
- public CreateSpreadsheetAssert hasSheetTitle(String sheetTitle) {
- this.sheetTitle = sheetTitle;
- return this;
- }
-
- public void andReturnRandomSpreadsheet() {
- andReturnSpreadsheet("citrus:randomString(44)");
- }
-
- public void andReturnSpreadsheet(String spreadsheetId) {
- actual.getRunner().createVariable("spreadsheetId", spreadsheetId);
- actual.getRunner().createVariable("title", title);
-
- String spreadsheetJson;
- if (ObjectHelper.isNotEmpty(sheetTitle)) {
- actual.getRunner().createVariable("sheetTitle", sheetTitle);
- spreadsheetJson
- =
"{\"properties\":{\"title\":\"${title}\"},\"sheets\":[{\"properties\":{\"title\":\"${sheetTitle}\"}}]}";
- } else {
- spreadsheetJson = "{\"properties\":{\"title\":\"${title}\"}}";
- }
-
- actual.getRunner().async().actions(actual.getRunner().http(action
-> action.server(actual.getHttpServer()).receive()
- .post("/v4/spreadsheets").name("create.request")
- .messageType(MessageType.JSON).payload(spreadsheetJson)),
actual.getRunner()
- .http(action ->
action.server(actual.getHttpServer()).send().response(HttpStatus.OK)
-
.contentType(MediaType.APPLICATION_JSON_VALUE)
- .payload(
-
"{\"spreadsheetId\":\"${spreadsheetId}\",\"properties\":{\"title\":\"citrus:jsonPath(citrus:message(create.request.payload()),
'$.properties.title')\"}}")));
- }
- }
-
- public BatchUpdateSpreadsheetAssert batchUpdateSpreadsheetRequest(String
spreadsheetId) {
- return new BatchUpdateSpreadsheetAssert(spreadsheetId);
- }
-
- public class BatchUpdateSpreadsheetAssert {
- private List<String> fields = new ArrayList<>();
-
- BatchUpdateSpreadsheetAssert(String spreadsheetId) {
- actual.getRunner().createVariable("spreadsheetId", spreadsheetId);
- }
-
- public BatchUpdateSpreadsheetAssert updateTitle(String title) {
- actual.getRunner().createVariable("title", title);
- fields.add("title");
- return this;
- }
-
- public void andReturnUpdated() {
- actual.getRunner().async()
- .actions(actual.getRunner()
- .http(action ->
action.server(actual.getHttpServer()).receive()
-
.post("/v4/spreadsheets/${spreadsheetId}:batchUpdate").messageType(MessageType.JSON)
- .payload("{" +
"\"includeSpreadsheetInResponse\":true," + "\"requests\":[" + "{"
- +
"\"updateSpreadsheetProperties\": {" + "\"fields\":\""
- + String.join(",", fields) +
"\"," + "\"properties\":{"
- + fields.stream().map(field ->
String.format("\"%s\":\"${%s}\"", field, field))
-
.collect(Collectors.joining(","))
- + "}" + "}" + "}" + "]}")),
- actual.getRunner().http(action ->
action.server(actual.getHttpServer()).send()
-
.response(HttpStatus.OK).contentType(MediaType.APPLICATION_JSON_VALUE)
- .payload(
-
"{\"spreadsheetId\":\"${spreadsheetId}\",\"updatedSpreadsheet\":{\"properties\":{\"title\":\"${title}\"},\"spreadsheetId\":\"${spreadsheetId}\"}}")));
- }
- }
-}
diff --git
a/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/server/GoogleSheetsApiTestServerRule.java
b/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/server/GoogleSheetsApiTestServerRule.java
deleted file mode 100644
index 5f6750d360e..00000000000
---
a/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/server/GoogleSheetsApiTestServerRule.java
+++ /dev/null
@@ -1,99 +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.google.sheets.server;
-
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-import com.consol.citrus.dsl.endpoint.CitrusEndpoints;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.api.extension.InvocationInterceptor;
-import org.junit.jupiter.api.extension.ReflectiveInvocationContext;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.http.HttpStatus;
-import org.springframework.util.SocketUtils;
-
-import static
org.apache.camel.component.google.sheets.server.GoogleSheetsApiTestServerAssert.assertThatGoogleApi;
-
-public class GoogleSheetsApiTestServerRule implements InvocationInterceptor {
-
- public static final String SERVER_KEYSTORE = "googleapis.jks";
- public static final String SERVER_KEYSTORE_PASSWORD = "secret";
-
- private GoogleSheetsApiTestServer googleApiTestServer;
- private int serverPort = SocketUtils.findAvailableTcpPort();
-
- public GoogleSheetsApiTestServerRule(String optionFile) {
- try {
- Map<String, Object> testOptions = getTestOptions(optionFile);
-
- googleApiTestServer = new GoogleSheetsApiTestServer.Builder(
-
CitrusEndpoints.http().server().port(serverPort).timeout(15000).defaultStatus(HttpStatus.REQUEST_TIMEOUT)
- .autoStart(true)).keyStorePath(new
ClassPathResource(SERVER_KEYSTORE).getFile().toPath())
-
.keyStorePassword(SERVER_KEYSTORE_PASSWORD).securePort(serverPort)
-
.clientId(testOptions.get("clientId").toString())
-
.clientSecret(testOptions.get("clientSecret").toString())
-
.accessToken(testOptions.get("accessToken").toString())
-
.refreshToken(testOptions.get("refreshToken").toString()).build();
-
- assertThatGoogleApi(googleApiTestServer).isRunning();
- } catch (Exception e) {
- throw new IllegalStateException("Error while reading server
keystore file", e);
- }
- }
-
- @Override
- public void interceptTestMethod(
- Invocation<Void> invocation, ReflectiveInvocationContext<Method>
invocationContext,
- ExtensionContext extensionContext)
- throws Throwable {
- googleApiTestServer.init();
- try {
- invocation.proceed();
- } finally {
- googleApiTestServer.reset();
- }
- }
-
- /**
- * Read component configuration from TEST_OPTIONS_PROPERTIES.
- *
- * @return Map of component options.
- */
- private Map<String, Object> getTestOptions(String optionFile) throws
IOException {
- final Properties properties = new Properties();
- properties.load(getClass().getResourceAsStream(optionFile));
-
- Map<String, Object> options = new HashMap<>();
- for (Map.Entry<Object, Object> entry : properties.entrySet()) {
- options.put(entry.getKey().toString(), entry.getValue());
- }
-
- return options;
- }
-
- public GoogleSheetsApiTestServer getGoogleApiTestServer() {
- return googleApiTestServer;
- }
-
- public int getServerPort() {
- return serverPort;
- }
-}
diff --git
a/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/AbstractGoogleSheetsStreamTestSupport.java
b/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/AbstractGoogleSheetsStreamTestSupport.java
index 8a495811232..3b547ceaa70 100644
---
a/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/AbstractGoogleSheetsStreamTestSupport.java
+++
b/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/AbstractGoogleSheetsStreamTestSupport.java
@@ -16,45 +16,30 @@
*/
package org.apache.camel.component.google.sheets.stream;
-import com.google.api.client.http.javanet.NetHttpTransport;
-import com.google.api.client.json.jackson2.JacksonFactory;
-import com.google.api.services.sheets.v4.Sheets;
import org.apache.camel.CamelContext;
+import org.apache.camel.Component;
import
org.apache.camel.component.google.sheets.AbstractGoogleSheetsTestSupport;
-import org.apache.camel.component.google.sheets.BatchGoogleSheetsClientFactory;
-import
org.apache.camel.component.google.sheets.server.GoogleSheetsApiTestServerRule;
-import org.apache.camel.support.PropertyBindingSupport;
/**
* Abstract base class for GoogleSheets Integration tests generated by Camel
API component maven plugin.
*/
-public class AbstractGoogleSheetsStreamTestSupport extends
AbstractGoogleSheetsTestSupport {
+public abstract class AbstractGoogleSheetsStreamTestSupport extends
AbstractGoogleSheetsTestSupport {
@Override
- protected CamelContext createCamelContext() throws Exception {
+ protected Component getComponent(CamelContext context) throws Exception {
+ GoogleSheetsStreamConfiguration configuration = new
GoogleSheetsStreamConfiguration();
+ configuration.setServiceAccountKey("mock");
- final CamelContext context = super.createCamelContext();
-
- final GoogleSheetsStreamConfiguration configuration = new
GoogleSheetsStreamConfiguration();
- PropertyBindingSupport.bindProperties(context, configuration,
getTestOptions());
-
- // add GoogleSheetsComponent to Camel context
- final GoogleSheetsStreamComponent component = new
GoogleSheetsStreamComponent(context);
- component.setClientFactory(new BatchGoogleSheetsClientFactory(
- new NetHttpTransport.Builder()
- .trustCertificatesFromJavaKeyStore(
- getClass().getResourceAsStream("/" +
GoogleSheetsApiTestServerRule.SERVER_KEYSTORE),
-
GoogleSheetsApiTestServerRule.SERVER_KEYSTORE_PASSWORD)
- .build(),
- new JacksonFactory()) {
- @Override
- protected void configure(Sheets.Builder clientBuilder) {
-
clientBuilder.setRootUrl(String.format("https://localhost:%s/",
googleSheetsApiTestServerRule.getServerPort()));
- }
- });
+ GoogleSheetsStreamComponent component = new
GoogleSheetsStreamComponent(context);
component.setConfiguration(configuration);
- context.addComponent("google-sheets-stream", component);
+ component.setClientFactory(getClientFactory());
+
+ return component;
+ }
- return context;
+ @Override
+ protected String getComponentName() {
+ return "google-sheets-stream";
}
+
}
diff --git
a/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/SheetsStreamConsumerIntegrationTest.java
b/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/SheetsStreamConsumerIntegrationTest.java
index 03949824502..d2e347b1291 100644
---
a/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/SheetsStreamConsumerIntegrationTest.java
+++
b/components/camel-google/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/SheetsStreamConsumerIntegrationTest.java
@@ -18,17 +18,22 @@ package org.apache.camel.component.google.sheets.stream;
import java.util.Arrays;
import java.util.List;
-import java.util.UUID;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.google.api.client.testing.http.MockLowLevelHttpResponse;
import com.google.api.services.sheets.v4.model.Spreadsheet;
import com.google.api.services.sheets.v4.model.ValueRange;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.google.sheets.GoogleSheetsClientFactory;
+import org.apache.camel.component.google.sheets.MockGoogleSheetsClientFactory;
import org.apache.camel.component.mock.MockEndpoint;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.EnabledIf;
-import static
org.apache.camel.component.google.sheets.server.GoogleSheetsApiTestServerAssert.assertThatGoogleApi;
import static
org.apache.camel.component.google.sheets.stream.GoogleSheetsStreamConstants.MAJOR_DIMENSION;
import static
org.apache.camel.component.google.sheets.stream.GoogleSheetsStreamConstants.RANGE;
import static
org.apache.camel.component.google.sheets.stream.GoogleSheetsStreamConstants.RANGE_INDEX;
@@ -37,136 +42,131 @@ import static
org.apache.camel.component.google.sheets.stream.GoogleSheetsStream
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
-@EnabledIf(value =
"org.apache.camel.component.google.sheets.AbstractGoogleSheetsTestSupport#hasCredentials",
- disabledReason = "Google Sheets credentials were not provided")
-public class SheetsStreamConsumerIntegrationTest extends
AbstractGoogleSheetsStreamTestSupport {
+public class SheetsStreamConsumerIntegrationTest {
- private String range = TEST_SHEET + "!A1:B2";
-
- @Test
- public void testConsumeValueRange() throws Exception {
- String spreadsheetId = UUID.randomUUID().toString();
-
- assertThatGoogleApi(getGoogleApiTestServer())
- .createSpreadsheetRequest()
- .hasSheetTitle("TestData")
- .andReturnSpreadsheet(spreadsheetId);
+ private static final ObjectMapper MAPPER = new ObjectMapper()
+ .setDefaultPropertyInclusion(
+ JsonInclude.Value.construct(JsonInclude.Include.NON_EMPTY,
JsonInclude.Include.NON_EMPTY))
+ .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
+ .enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING)
+
.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING).disable(JsonParser.Feature.AUTO_CLOSE_SOURCE);
+ private static final List<List<Object>> TEST_DATA = Arrays.asList(
+ Arrays.asList("a1", "b1"),
+ Arrays.asList("a2", "b2"));
+ public static class ConsumeValueRangeTest extends
AbstractGoogleSheetsStreamTestSupport {
Spreadsheet testSheet = getSpreadsheet();
- List<List<Object>> data = Arrays.asList(
- Arrays.asList("a1", "b1"),
- Arrays.asList("a2", "b2"));
-
- assertThatGoogleApi(getGoogleApiTestServer())
- .updateValuesRequest(spreadsheetId, range, data)
- .andReturnUpdateResponse();
-
- applyTestData(testSheet);
-
- assertThatGoogleApi(getGoogleApiTestServer())
- .batchGetValuesRequest(testSheet.getSpreadsheetId(), range)
- .andReturnValues(data);
-
-
context().addRoutes(createGoogleStreamRouteBuilder(testSheet.getSpreadsheetId(),
false));
-
- MockEndpoint mock = getMockEndpoint("mock:result");
- mock.expectedMinimumMessageCount(1);
- MockEndpoint.assertIsSatisfied(context);
-
- Exchange exchange = mock.getReceivedExchanges().get(0);
- assertTrue(exchange.getIn().getHeaders().containsKey(SPREADSHEET_ID));
- assertTrue(exchange.getIn().getHeaders().containsKey(RANGE));
- assertTrue(exchange.getIn().getHeaders().containsKey(RANGE_INDEX));
- assertTrue(exchange.getIn().getHeaders().containsKey(MAJOR_DIMENSION));
- assertEquals(testSheet.getSpreadsheetId(),
exchange.getIn().getHeaders().get(SPREADSHEET_ID));
- assertEquals(range, exchange.getIn().getHeaders().get(RANGE));
- assertEquals(1, exchange.getIn().getHeaders().get(RANGE_INDEX));
- assertEquals("ROWS",
exchange.getIn().getHeaders().get(MAJOR_DIMENSION));
-
- ValueRange values = (ValueRange) exchange.getIn().getBody();
- assertEquals(2L, values.getValues().size());
- assertEquals("a1", values.getValues().get(0).get(0));
- assertEquals("b1", values.getValues().get(0).get(1));
- assertEquals("a2", values.getValues().get(1).get(0));
- assertEquals("b2", values.getValues().get(1).get(1));
+ @Test
+ public void test() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMinimumMessageCount(1);
+ MockEndpoint.assertIsSatisfied(context);
+
+ Exchange exchange = mock.getReceivedExchanges().get(0);
+
assertTrue(exchange.getIn().getHeaders().containsKey(SPREADSHEET_ID));
+ assertTrue(exchange.getIn().getHeaders().containsKey(RANGE));
+ assertTrue(exchange.getIn().getHeaders().containsKey(RANGE_INDEX));
+
assertTrue(exchange.getIn().getHeaders().containsKey(MAJOR_DIMENSION));
+ assertEquals(testSheet.getSpreadsheetId(),
exchange.getIn().getHeaders().get(SPREADSHEET_ID));
+ assertEquals(TEST_RANGE, exchange.getIn().getHeaders().get(RANGE));
+ assertEquals(1, exchange.getIn().getHeaders().get(RANGE_INDEX));
+ assertEquals("ROWS",
exchange.getIn().getHeaders().get(MAJOR_DIMENSION));
+
+ ValueRange result = (ValueRange) exchange.getIn().getBody();
+
+ assertEquals(2L, result.getValues().size());
+ assertEquals("a1", result.getValues().get(0).get(0));
+ assertEquals("b1", result.getValues().get(0).get(1));
+ assertEquals("a2", result.getValues().get(1).get(0));
+ assertEquals("b2", result.getValues().get(1).get(1));
+ }
+
+ @Override
+ protected GoogleSheetsClientFactory getClientFactory() throws
Exception {
+ return new MockGoogleSheetsClientFactory(
+ new MockLowLevelHttpResponse()
+ .setContent(
+ "{\"spreadsheetId\": \"" +
testSheet.getSpreadsheetId() + "\"," + "\"valueRanges\": [" + "{"
+ + "\"range\": \"" + TEST_RANGE + "\","
+ "\"majorDimension\": \"ROWS\","
+ + "\"values\":" +
MAPPER.writer().writeValueAsString(TEST_DATA) + "}" + "]}"));
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ @Override
+ public void configure() {
+
from(String.format("google-sheets-stream:%s?range=%s&delay=20000&maxResults=5&splitResults=%s",
+ testSheet.getSpreadsheetId(), TEST_RANGE, false))
+ .to("mock:result");
+ }
+ };
+ }
}
- @Test
- public void testConsumeValueRangeSplitResults() throws Exception {
- String spreadsheetId = UUID.randomUUID().toString();
-
- assertThatGoogleApi(getGoogleApiTestServer())
- .createSpreadsheetRequest()
- .hasSheetTitle("TestData")
- .andReturnSpreadsheet(spreadsheetId);
-
+ public static class ConsumeValueRangeSplitResultsTest extends
AbstractGoogleSheetsStreamTestSupport {
Spreadsheet testSheet = getSpreadsheet();
- List<List<Object>> data = Arrays.asList(
- Arrays.asList("a1", "b1"),
- Arrays.asList("a2", "b2"));
-
- assertThatGoogleApi(getGoogleApiTestServer())
- .updateValuesRequest(spreadsheetId, range, data)
- .andReturnUpdateResponse();
-
- applyTestData(testSheet);
-
- assertThatGoogleApi(getGoogleApiTestServer())
- .batchGetValuesRequest(testSheet.getSpreadsheetId(), range)
- .andReturnValues(data);
-
-
context().addRoutes(createGoogleStreamRouteBuilder(testSheet.getSpreadsheetId(),
true));
- context().getRouteController().startRoute("google-stream-test");
-
- MockEndpoint mock = getMockEndpoint("mock:result");
- mock.expectedMinimumMessageCount(2);
- MockEndpoint.assertIsSatisfied(context);
-
- Exchange exchange = mock.getReceivedExchanges().get(0);
- assertTrue(exchange.getIn().getHeaders().containsKey(SPREADSHEET_ID));
- assertTrue(exchange.getIn().getHeaders().containsKey(RANGE));
- assertTrue(exchange.getIn().getHeaders().containsKey(RANGE_INDEX));
- assertTrue(exchange.getIn().getHeaders().containsKey(VALUE_INDEX));
- assertTrue(exchange.getIn().getHeaders().containsKey(MAJOR_DIMENSION));
- assertEquals(testSheet.getSpreadsheetId(),
exchange.getIn().getHeaders().get(SPREADSHEET_ID));
- assertEquals(range, exchange.getIn().getHeaders().get(RANGE));
- assertEquals(1, exchange.getIn().getHeaders().get(RANGE_INDEX));
- assertEquals(1, exchange.getIn().getHeaders().get(VALUE_INDEX));
- assertEquals("ROWS",
exchange.getIn().getHeaders().get(MAJOR_DIMENSION));
-
- List<?> values = (List) exchange.getIn().getBody();
- assertEquals(2L, values.size());
- assertEquals("a1", values.get(0));
- assertEquals("b1", values.get(1));
-
- exchange = mock.getReceivedExchanges().get(1);
- assertTrue(exchange.getIn().getHeaders().containsKey(SPREADSHEET_ID));
- assertTrue(exchange.getIn().getHeaders().containsKey(RANGE));
- assertTrue(exchange.getIn().getHeaders().containsKey(RANGE_INDEX));
- assertTrue(exchange.getIn().getHeaders().containsKey(VALUE_INDEX));
- assertTrue(exchange.getIn().getHeaders().containsKey(MAJOR_DIMENSION));
- assertEquals(testSheet.getSpreadsheetId(),
exchange.getIn().getHeaders().get(SPREADSHEET_ID));
- assertEquals(1, exchange.getIn().getHeaders().get(RANGE_INDEX));
- assertEquals(2, exchange.getIn().getHeaders().get(VALUE_INDEX));
-
- values = (List) exchange.getIn().getBody();
- assertEquals(2L, values.size());
- assertEquals("a2", values.get(0));
- assertEquals("b2", values.get(1));
- }
-
- private RouteBuilder createGoogleStreamRouteBuilder(String spreadsheetId,
boolean splitResults) {
- return new RouteBuilder() {
- @Override
- public void configure() {
- from(String.format(
-
"google-sheets-stream://%s?range=%s&delay=20000&maxResults=5&splitResults=%s",
- spreadsheetId, range, splitResults))
- .routeId("google-stream-test")
- .to("mock:result");
- }
- };
+ @Test
+ public void test() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMinimumMessageCount(2);
+ MockEndpoint.assertIsSatisfied(context);
+
+ Exchange exchange = mock.getReceivedExchanges().get(0);
+
assertTrue(exchange.getIn().getHeaders().containsKey(SPREADSHEET_ID));
+ assertTrue(exchange.getIn().getHeaders().containsKey(RANGE));
+ assertTrue(exchange.getIn().getHeaders().containsKey(RANGE_INDEX));
+ assertTrue(exchange.getIn().getHeaders().containsKey(VALUE_INDEX));
+
assertTrue(exchange.getIn().getHeaders().containsKey(MAJOR_DIMENSION));
+ assertEquals(testSheet.getSpreadsheetId(),
exchange.getIn().getHeaders().get(SPREADSHEET_ID));
+ assertEquals(TEST_RANGE, exchange.getIn().getHeaders().get(RANGE));
+ assertEquals(1, exchange.getIn().getHeaders().get(RANGE_INDEX));
+ assertEquals(1, exchange.getIn().getHeaders().get(VALUE_INDEX));
+ assertEquals("ROWS",
exchange.getIn().getHeaders().get(MAJOR_DIMENSION));
+
+ List<?> values = (List) exchange.getIn().getBody();
+ assertEquals(2L, values.size());
+ assertEquals("a1", values.get(0));
+ assertEquals("b1", values.get(1));
+
+ exchange = mock.getReceivedExchanges().get(1);
+
assertTrue(exchange.getIn().getHeaders().containsKey(SPREADSHEET_ID));
+ assertTrue(exchange.getIn().getHeaders().containsKey(RANGE));
+ assertTrue(exchange.getIn().getHeaders().containsKey(RANGE_INDEX));
+ assertTrue(exchange.getIn().getHeaders().containsKey(VALUE_INDEX));
+
assertTrue(exchange.getIn().getHeaders().containsKey(MAJOR_DIMENSION));
+ assertEquals(testSheet.getSpreadsheetId(),
exchange.getIn().getHeaders().get(SPREADSHEET_ID));
+ assertEquals(1, exchange.getIn().getHeaders().get(RANGE_INDEX));
+ assertEquals(2, exchange.getIn().getHeaders().get(VALUE_INDEX));
+
+ values = (List) exchange.getIn().getBody();
+ assertEquals(2L, values.size());
+ assertEquals("a2", values.get(0));
+ assertEquals("b2", values.get(1));
+ }
+
+ @Override
+ protected GoogleSheetsClientFactory getClientFactory() throws
Exception {
+ return new MockGoogleSheetsClientFactory(
+ new MockLowLevelHttpResponse()
+ .setContent(
+ "{\"spreadsheetId\": \"" +
testSheet.getSpreadsheetId() + "\"," + "\"valueRanges\": [" + "{"
+ + "\"range\": \"" + TEST_RANGE + "\","
+ "\"majorDimension\": \"ROWS\","
+ + "\"values\":" +
MAPPER.writer().writeValueAsString(TEST_DATA) + "}" + "]}"));
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ @Override
+ public void configure() {
+
from(String.format("google-sheets-stream:%s?range=%s&delay=20000&maxResults=5&splitResults=%s",
+ testSheet.getSpreadsheetId(), TEST_RANGE, true))
+ .to("mock:result");
+ }
+ };
+ }
}
}
diff --git
a/components/camel-google/camel-google-sheets/src/test/resources/googleapis.jks
b/components/camel-google/camel-google-sheets/src/test/resources/googleapis.jks
deleted file mode 100644
index 0d6097cc2c9..00000000000
Binary files
a/components/camel-google/camel-google-sheets/src/test/resources/googleapis.jks
and /dev/null differ
diff --git
a/components/camel-google/camel-google-sheets/src/test/resources/test-options.properties
b/components/camel-google/camel-google-sheets/src/test/resources/test-options.properties
deleted file mode 100644
index c29a60c4d27..00000000000
---
a/components/camel-google/camel-google-sheets/src/test/resources/test-options.properties
+++ /dev/null
@@ -1,30 +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.
-## ---------------------------------------------------------------------------
-
-#####################################
-## Login properties for Google Sheets Component
-#####################################
-## Application client id and secret
-clientId=
-clientSecret=
-applicationName=camel-google-sheets/1.0
-accessToken=
-refreshToken=
-
-serviceAccountKey=
-scopes[]=
-delegate=
\ No newline at end of file
diff --git a/parent/pom.xml b/parent/pom.xml
index d26d0162f2d..f3772b354fb 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -101,7 +101,6 @@
<jta-api-1.2-version>1.2</jta-api-1.2-version>
<cglib-version>3.2.12</cglib-version>
<chunk-templates-version>3.6.2</chunk-templates-version>
- <citrus-version>2.8.0</citrus-version>
<classgraph-version>4.8.151</classgraph-version>
<cmis-version>1.1.0</cmis-version>
<cometd-java-client-version>4.0.4</cometd-java-client-version>