diff --git a/spring-batch-bigquery/pom.xml b/spring-batch-bigquery/pom.xml
index 247e8ae9..fb7bf679 100644
--- a/spring-batch-bigquery/pom.xml
+++ b/spring-batch-bigquery/pom.xml
@@ -112,7 +112,12 @@
2.0.16
test
-
+
+ org.testcontainers
+ junit-jupiter
+ 1.20.1
+ test
+
@@ -136,8 +141,9 @@
3.3.1
-
- /unit
+
+ **/unit/**
+ **/emulator/**
diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/common/BigQueryDataLoader.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/common/BigQueryDataLoader.java
index 485c3960..f8e280da 100644
--- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/common/BigQueryDataLoader.java
+++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/common/BigQueryDataLoader.java
@@ -22,9 +22,7 @@
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.WriteChannelConfiguration;
import org.springframework.batch.extensions.bigquery.writer.BigQueryCsvItemWriter;
-import org.springframework.batch.extensions.bigquery.writer.BigQueryJsonItemWriter;
import org.springframework.batch.extensions.bigquery.writer.builder.BigQueryCsvItemWriterBuilder;
-import org.springframework.batch.extensions.bigquery.writer.builder.BigQueryJsonItemWriterBuilder;
import org.springframework.batch.item.Chunk;
import java.util.Comparator;
@@ -69,25 +67,4 @@ public void loadCsvSample(String tableName) throws Exception {
job.get().waitFor();
}
- public void loadJsonSample(String tableName) throws Exception {
- AtomicReference job = new AtomicReference<>();
-
- WriteChannelConfiguration channelConfiguration = WriteChannelConfiguration
- .newBuilder(TableId.of(TestConstants.DATASET, tableName))
- .setSchema(PersonDto.getBigQuerySchema())
- .setAutodetect(false)
- .setFormatOptions(FormatOptions.json())
- .build();
-
- BigQueryJsonItemWriter writer = new BigQueryJsonItemWriterBuilder()
- .bigQuery(bigQuery)
- .writeChannelConfig(channelConfiguration)
- .jobConsumer(job::set)
- .build();
-
- writer.afterPropertiesSet();
- writer.write(CHUNK);
- job.get().waitFor();
- }
-
}
\ No newline at end of file
diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/common/TestConstants.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/common/TestConstants.java
index dc931c1f..a845e7dc 100644
--- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/common/TestConstants.java
+++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/common/TestConstants.java
@@ -26,6 +26,8 @@ private TestConstants() {}
public static final String DATASET = "spring_batch_extensions";
public static final String NAME = "name";
public static final String AGE = "age";
+ public static final String CSV = "csv";
+ public static final String JSON = "json";
public static final Converter PERSON_MAPPER = res -> new PersonDto(
res.get(NAME).getStringValue(), Long.valueOf(res.get(AGE).getLongValue()).intValue()
diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/emulator/reader/BaseEmulatorItemReaderTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/emulator/reader/BaseEmulatorItemReaderTest.java
new file mode 100644
index 00000000..c6ae4d98
--- /dev/null
+++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/emulator/reader/BaseEmulatorItemReaderTest.java
@@ -0,0 +1,36 @@
+package org.springframework.batch.extensions.bigquery.emulator.reader;
+
+import com.google.cloud.NoCredentials;
+import com.google.cloud.bigquery.BigQuery;
+import com.google.cloud.bigquery.BigQueryOptions;
+import org.junit.jupiter.api.BeforeAll;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
+import org.testcontainers.utility.MountableFile;
+
+@Testcontainers
+abstract class BaseEmulatorItemReaderTest {
+ private static final int PORT = 9050;
+
+ private static final String PROJECT = "batch-test";
+
+ @Container
+ private static final GenericContainer> CONTAINER = new GenericContainer<>("ghcr.io/goccy/bigquery-emulator")
+ .withExposedPorts(PORT)
+ .withCommand("--project=" + PROJECT, "--data-from-yaml=/test-data.yaml")
+ .withCopyFileToContainer(MountableFile.forClasspathResource("test-data.yaml"), "/test-data.yaml");
+
+ protected static BigQuery bigQuery;
+
+ @BeforeAll
+ static void init() {
+ bigQuery = BigQueryOptions
+ .newBuilder()
+ .setHost("http://%s:%d".formatted(CONTAINER.getHost(), CONTAINER.getMappedPort(PORT)))
+ .setProjectId(PROJECT)
+ .setCredentials(NoCredentials.getInstance())
+ .build()
+ .getService();
+ }
+}
\ No newline at end of file
diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/emulator/reader/BigQueryEmulatorItemReaderTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/emulator/reader/BigQueryEmulatorItemReaderTest.java
new file mode 100644
index 00000000..68fb5d47
--- /dev/null
+++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/emulator/reader/BigQueryEmulatorItemReaderTest.java
@@ -0,0 +1,59 @@
+package org.springframework.batch.extensions.bigquery.emulator.reader;
+
+import com.google.cloud.bigquery.*;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.springframework.batch.extensions.bigquery.common.PersonDto;
+import org.springframework.batch.extensions.bigquery.common.TestConstants;
+import org.springframework.batch.extensions.bigquery.reader.BigQueryQueryItemReader;
+import org.springframework.batch.extensions.bigquery.reader.builder.BigQueryQueryItemReaderBuilder;
+
+class BigQueryEmulatorItemReaderTest extends BaseEmulatorItemReaderTest {
+
+ @Test
+ void testBatchReader() throws Exception {
+ QueryJobConfiguration jobConfiguration = QueryJobConfiguration
+ .newBuilder("SELECT p.name, p.age FROM spring_batch_extensions.csv p ORDER BY p.name LIMIT 2")
+ .setDestinationTable(TableId.of(TestConstants.DATASET, TestConstants.CSV))
+ .setPriority(QueryJobConfiguration.Priority.BATCH)
+ .build();
+
+ BigQueryQueryItemReader reader = new BigQueryQueryItemReaderBuilder()
+ .bigQuery(bigQuery)
+ .rowMapper(TestConstants.PERSON_MAPPER)
+ .jobConfiguration(jobConfiguration)
+ .build();
+
+ reader.afterPropertiesSet();
+
+ verifyResult(reader);
+ }
+
+ @Test
+ void testInteractiveReader() throws Exception {
+ QueryJobConfiguration jobConfiguration = QueryJobConfiguration
+ .newBuilder("SELECT p.name, p.age FROM spring_batch_extensions.csv p ORDER BY p.name LIMIT 2")
+ .setDestinationTable(TableId.of(TestConstants.DATASET, TestConstants.CSV))
+ .build();
+
+ BigQueryQueryItemReader reader = new BigQueryQueryItemReaderBuilder()
+ .bigQuery(bigQuery)
+ .rowMapper(TestConstants.PERSON_MAPPER)
+ .jobConfiguration(jobConfiguration)
+ .build();
+
+ reader.afterPropertiesSet();
+
+ verifyResult(reader);
+ }
+
+ private void verifyResult(BigQueryQueryItemReader reader) throws Exception {
+ PersonDto actual1 = reader.read();
+ Assertions.assertEquals("Volodymyr", actual1.name());
+ Assertions.assertEquals(27, actual1.age());
+
+ PersonDto actual2 = reader.read();
+ Assertions.assertEquals("Oleksandra", actual2.name());
+ Assertions.assertEquals(26, actual2.age());
+ }
+}
\ No newline at end of file
diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/emulator/writer/JsonWriterTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/emulator/writer/JsonWriterTest.java
new file mode 100644
index 00000000..7d404e41
--- /dev/null
+++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/emulator/writer/JsonWriterTest.java
@@ -0,0 +1,5 @@
+package org.springframework.batch.extensions.bigquery.emulator.writer;
+
+// TODO
+public class JsonWriterTest {
+}
diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/base/BaseBigQueryIntegrationTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/base/BaseBigQueryGcloudIntegrationTest.java
similarity index 54%
rename from spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/base/BaseBigQueryIntegrationTest.java
rename to spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/base/BaseBigQueryGcloudIntegrationTest.java
index e2f6c2f2..d005d3c3 100644
--- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/base/BaseBigQueryIntegrationTest.java
+++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/base/BaseBigQueryGcloudIntegrationTest.java
@@ -14,25 +14,11 @@
* limitations under the License.
*/
-package org.springframework.batch.extensions.bigquery.integration.base;
+package org.springframework.batch.extensions.bigquery.gcloud.base;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
-import org.junit.jupiter.api.TestInfo;
-import java.lang.reflect.Method;
-
-public abstract class BaseBigQueryIntegrationTest {
-
- private static final String TABLE_PATTERN = "%s_%s";
-
- public final BigQuery bigQuery = BigQueryOptions.getDefaultInstance().getService();
-
- protected String getTableName(TestInfo testInfo) {
- return String.format(
- TABLE_PATTERN,
- testInfo.getTags().iterator().next(),
- testInfo.getTestMethod().map(Method::getName).orElseThrow()
- );
- }
+public abstract class BaseBigQueryGcloudIntegrationTest {
+ protected static final BigQuery BIG_QUERY = BigQueryOptions.getDefaultInstance().getService();
}
\ No newline at end of file
diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/package-info.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/package-info.java
similarity index 95%
rename from spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/package-info.java
rename to spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/package-info.java
index e5aced08..9df3f745 100644
--- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/package-info.java
+++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/package-info.java
@@ -25,4 +25,4 @@
*
* @see Authentication
*/
-package org.springframework.batch.extensions.bigquery.integration;
\ No newline at end of file
+package org.springframework.batch.extensions.bigquery.gcloud;
\ No newline at end of file
diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/batch/BigQueryBatchQueryCsvItemReaderTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/reader/BigQueryGcloudItemReaderTest.java
similarity index 53%
rename from spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/batch/BigQueryBatchQueryCsvItemReaderTest.java
rename to spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/reader/BigQueryGcloudItemReaderTest.java
index 7cfef0e5..57b31c40 100644
--- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/batch/BigQueryBatchQueryCsvItemReaderTest.java
+++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/reader/BigQueryGcloudItemReaderTest.java
@@ -14,50 +14,76 @@
* limitations under the License.
*/
-package org.springframework.batch.extensions.bigquery.integration.reader.batch;
-
-import com.google.cloud.bigquery.QueryJobConfiguration;
-import com.google.cloud.bigquery.TableId;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.TestInfo;
+package org.springframework.batch.extensions.bigquery.gcloud.reader;
+
+import com.google.cloud.bigquery.*;
+import org.junit.jupiter.api.*;
import org.springframework.batch.extensions.bigquery.common.BigQueryDataLoader;
import org.springframework.batch.extensions.bigquery.common.PersonDto;
import org.springframework.batch.extensions.bigquery.common.TestConstants;
-import org.springframework.batch.extensions.bigquery.integration.reader.base.BaseCsvJsonInteractiveQueryItemReaderTest;
+import org.springframework.batch.extensions.bigquery.gcloud.base.BaseBigQueryGcloudIntegrationTest;
import org.springframework.batch.extensions.bigquery.reader.BigQueryQueryItemReader;
import org.springframework.batch.extensions.bigquery.reader.builder.BigQueryQueryItemReaderBuilder;
-import org.springframework.batch.item.Chunk;
-@Tag("csv")
-class BigQueryBatchQueryCsvItemReaderTest extends BaseCsvJsonInteractiveQueryItemReaderTest {
+class BigQueryGcloudItemReaderTest extends BaseBigQueryGcloudIntegrationTest {
- @Test
- void batchQueryTest1(TestInfo testInfo) throws Exception {
- String tableName = getTableName(testInfo);
- new BigQueryDataLoader(bigQuery).loadCsvSample(tableName);
- Chunk chunk = BigQueryDataLoader.CHUNK;
+ @BeforeAll
+ static void init() throws Exception {
+ if (BIG_QUERY.getDataset(TestConstants.DATASET) == null) {
+ BIG_QUERY.create(DatasetInfo.of(TestConstants.DATASET));
+ }
+
+ if (BIG_QUERY.getTable(TestConstants.DATASET, TestConstants.CSV) == null) {
+ TableDefinition tableDefinition = StandardTableDefinition.of(PersonDto.getBigQuerySchema());
+ BIG_QUERY.create(TableInfo.of(TableId.of(TestConstants.DATASET, TestConstants.CSV), tableDefinition));
+ }
+
+ new BigQueryDataLoader(BIG_QUERY).loadCsvSample(TestConstants.CSV);
+ }
+ @AfterAll
+ static void cleanupTest() {
+ BIG_QUERY.delete(TableId.of(TestConstants.DATASET, TestConstants.CSV));
+ }
+
+ @Test
+ void testBatchQuery() throws Exception {
QueryJobConfiguration jobConfiguration = QueryJobConfiguration
- .newBuilder("SELECT p.name, p.age FROM spring_batch_extensions.%s p ORDER BY p.name LIMIT 2")
- .setDestinationTable(TableId.of(TestConstants.DATASET, tableName))
+ .newBuilder("SELECT p.name, p.age FROM spring_batch_extensions.%s p ORDER BY p.name LIMIT 2".formatted(TestConstants.CSV))
+ .setDestinationTable(TableId.of(TestConstants.DATASET, TestConstants.CSV))
.setPriority(QueryJobConfiguration.Priority.BATCH)
.build();
BigQueryQueryItemReader reader = new BigQueryQueryItemReaderBuilder()
- .bigQuery(bigQuery)
+ .bigQuery(BIG_QUERY)
.rowMapper(TestConstants.PERSON_MAPPER)
.jobConfiguration(jobConfiguration)
.build();
reader.afterPropertiesSet();
+ verifyResult(reader);
+ }
+
+ @Test
+ void testInteractiveQuery() throws Exception {
+ BigQueryQueryItemReader reader = new BigQueryQueryItemReaderBuilder()
+ .bigQuery(BIG_QUERY)
+ .query("SELECT p.name, p.age FROM spring_batch_extensions.%s p ORDER BY p.name LIMIT 2".formatted(TestConstants.CSV))
+ .rowMapper(TestConstants.PERSON_MAPPER)
+ .build();
+
+ reader.afterPropertiesSet();
+
+ verifyResult(reader);
+ }
+
+ private void verifyResult(BigQueryQueryItemReader reader) throws Exception {
PersonDto actualFirstPerson = reader.read();
- PersonDto expectedFirstPerson = chunk.getItems().get(0);
+ PersonDto expectedFirstPerson = BigQueryDataLoader.CHUNK.getItems().get(0);
PersonDto actualSecondPerson = reader.read();
- PersonDto expectedSecondPerson = chunk.getItems().get(1);
+ PersonDto expectedSecondPerson = BigQueryDataLoader.CHUNK.getItems().get(1);
PersonDto actualThirdPerson = reader.read();
diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/writer/BigQueryCsvItemWriterTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/writer/BaseBigQueryGcloudItemWriterTest.java
similarity index 52%
rename from spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/writer/BigQueryCsvItemWriterTest.java
rename to spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/writer/BaseBigQueryGcloudItemWriterTest.java
index 11c3f096..e10523d0 100644
--- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/writer/BigQueryCsvItemWriterTest.java
+++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/writer/BaseBigQueryGcloudItemWriterTest.java
@@ -14,49 +14,35 @@
* limitations under the License.
*/
-package org.springframework.batch.extensions.bigquery.integration.writer;
+package org.springframework.batch.extensions.bigquery.gcloud.writer;
-import com.google.cloud.bigquery.BigQuery;
-import com.google.cloud.bigquery.Dataset;
-import com.google.cloud.bigquery.Table;
-import com.google.cloud.bigquery.TableId;
-import com.google.cloud.bigquery.TableResult;
+import com.google.cloud.bigquery.*;
import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.TestInfo;
import org.springframework.batch.extensions.bigquery.common.BigQueryDataLoader;
import org.springframework.batch.extensions.bigquery.common.PersonDto;
import org.springframework.batch.extensions.bigquery.common.TestConstants;
-import org.springframework.batch.extensions.bigquery.integration.writer.base.BaseBigQueryItemWriterTest;
-import org.springframework.batch.item.Chunk;
+import org.springframework.batch.extensions.bigquery.gcloud.base.BaseBigQueryGcloudIntegrationTest;
-@Tag("csv")
-class BigQueryCsvItemWriterTest extends BaseBigQueryItemWriterTest {
+abstract class BaseBigQueryGcloudItemWriterTest extends BaseBigQueryGcloudIntegrationTest {
- @Test
- void test1(TestInfo testInfo) throws Exception {
- String tableName = getTableName(testInfo);
- new BigQueryDataLoader(bigQuery).loadCsvSample(tableName);
- Chunk chunk = BigQueryDataLoader.CHUNK;
-
- Dataset dataset = bigQuery.getDataset(TestConstants.DATASET);
- Table table = bigQuery.getTable(TableId.of(TestConstants.DATASET, tableName));
+ protected void verifyResults(String tableName) {
+ Dataset dataset = BIG_QUERY.getDataset(TestConstants.DATASET);
+ Table table = BIG_QUERY.getTable(TableId.of(TestConstants.DATASET, tableName));
TableId tableId = table.getTableId();
- TableResult tableResult = bigQuery.listTableData(tableId, BigQuery.TableDataListOption.pageSize(2L));
+ TableResult tableResult = BIG_QUERY.listTableData(tableId, BigQuery.TableDataListOption.pageSize(2L));
Assertions.assertNotNull(dataset.getDatasetId());
Assertions.assertNotNull(tableId);
- Assertions.assertEquals(chunk.size(), tableResult.getTotalRows());
+ Assertions.assertEquals(BigQueryDataLoader.CHUNK.size(), tableResult.getTotalRows());
tableResult
.getValues()
.forEach(field -> {
Assertions.assertTrue(
- chunk.getItems().stream().map(PersonDto::name).anyMatch(name -> field.get(0).getStringValue().equals(name))
+ BigQueryDataLoader.CHUNK.getItems().stream().map(PersonDto::name).anyMatch(name -> field.get(0).getStringValue().equals(name))
);
- boolean ageCondition = chunk
+ boolean ageCondition = BigQueryDataLoader.CHUNK
.getItems()
.stream()
.map(PersonDto::age)
diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/writer/BigQueryGcloudCsvItemWriterTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/writer/BigQueryGcloudCsvItemWriterTest.java
new file mode 100644
index 00000000..dd986daf
--- /dev/null
+++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/writer/BigQueryGcloudCsvItemWriterTest.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2002-2024 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.springframework.batch.extensions.bigquery.gcloud.writer;
+
+import com.google.cloud.bigquery.*;
+import org.junit.jupiter.api.*;
+import org.springframework.batch.extensions.bigquery.common.BigQueryDataLoader;
+import org.springframework.batch.extensions.bigquery.common.PersonDto;
+import org.springframework.batch.extensions.bigquery.common.TestConstants;
+import org.springframework.batch.extensions.bigquery.writer.BigQueryCsvItemWriter;
+import org.springframework.batch.extensions.bigquery.writer.builder.BigQueryCsvItemWriterBuilder;
+
+import java.util.concurrent.atomic.AtomicReference;
+
+class BigQueryGcloudCsvItemWriterTest extends BaseBigQueryGcloudItemWriterTest {
+
+ @BeforeAll
+ static void prepareTest() {
+ if (BIG_QUERY.getDataset(TestConstants.DATASET) == null) {
+ BIG_QUERY.create(DatasetInfo.of(TestConstants.DATASET));
+ }
+
+ if (BIG_QUERY.getTable(TestConstants.DATASET, TestConstants.CSV) == null) {
+ TableDefinition tableDefinition = StandardTableDefinition.of(PersonDto.getBigQuerySchema());
+ BIG_QUERY.create(TableInfo.of(TableId.of(TestConstants.DATASET, TestConstants.CSV), tableDefinition));
+ }
+ }
+
+ @AfterAll
+ static void cleanup() {
+ BIG_QUERY.delete(TableId.of(TestConstants.DATASET, TestConstants.CSV));
+ }
+
+ @Test
+ void testWriteCsv() throws Exception {
+ AtomicReference job = new AtomicReference<>();
+
+ WriteChannelConfiguration channelConfiguration = WriteChannelConfiguration
+ .newBuilder(TableId.of(TestConstants.DATASET, TestConstants.CSV))
+ .setSchema(PersonDto.getBigQuerySchema())
+ .setAutodetect(false)
+ .setFormatOptions(FormatOptions.csv())
+ .build();
+
+ BigQueryCsvItemWriter writer = new BigQueryCsvItemWriterBuilder()
+ .bigQuery(BIG_QUERY)
+ .writeChannelConfig(channelConfiguration)
+ .jobConsumer(job::set)
+ .build();
+
+ writer.afterPropertiesSet();
+ writer.write(BigQueryDataLoader.CHUNK);
+ job.get().waitFor();
+
+ verifyResults(TestConstants.CSV);
+ }
+
+}
\ No newline at end of file
diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/writer/BigQueryGcloudJsonItemWriterTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/writer/BigQueryGcloudJsonItemWriterTest.java
new file mode 100644
index 00000000..02d44400
--- /dev/null
+++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/writer/BigQueryGcloudJsonItemWriterTest.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2002-2024 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.springframework.batch.extensions.bigquery.gcloud.writer;
+
+import com.google.cloud.bigquery.*;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.springframework.batch.extensions.bigquery.common.BigQueryDataLoader;
+import org.springframework.batch.extensions.bigquery.common.PersonDto;
+import org.springframework.batch.extensions.bigquery.common.TestConstants;
+import org.springframework.batch.extensions.bigquery.writer.BigQueryJsonItemWriter;
+import org.springframework.batch.extensions.bigquery.writer.builder.BigQueryJsonItemWriterBuilder;
+
+import java.util.concurrent.atomic.AtomicReference;
+
+class BigQueryGcloudJsonItemWriterTest extends BaseBigQueryGcloudItemWriterTest {
+
+ @BeforeAll
+ static void prepareTest() {
+ if (BIG_QUERY.getDataset(TestConstants.DATASET) == null) {
+ BIG_QUERY.create(DatasetInfo.of(TestConstants.DATASET));
+ }
+
+ if (BIG_QUERY.getTable(TestConstants.DATASET, TestConstants.JSON) == null) {
+ TableDefinition tableDefinition = StandardTableDefinition.of(PersonDto.getBigQuerySchema());
+ BIG_QUERY.create(TableInfo.of(TableId.of(TestConstants.DATASET, TestConstants.JSON), tableDefinition));
+ }
+ }
+
+ @AfterAll
+ static void cleanup() {
+ BIG_QUERY.delete(TableId.of(TestConstants.DATASET, TestConstants.JSON));
+ }
+
+ @Test
+ void testWriteJson() throws Exception {
+ AtomicReference job = new AtomicReference<>();
+
+ WriteChannelConfiguration channelConfiguration = WriteChannelConfiguration
+ .newBuilder(TableId.of(TestConstants.DATASET, TestConstants.JSON))
+ .setSchema(PersonDto.getBigQuerySchema())
+ .setAutodetect(false)
+ .setFormatOptions(FormatOptions.json())
+ .build();
+
+ BigQueryJsonItemWriter writer = new BigQueryJsonItemWriterBuilder()
+ .bigQuery(BIG_QUERY)
+ .writeChannelConfig(channelConfiguration)
+ .jobConsumer(job::set)
+ .build();
+
+ writer.afterPropertiesSet();
+ writer.write(BigQueryDataLoader.CHUNK);
+ job.get().waitFor();
+
+ verifyResults(TestConstants.JSON);
+ }
+
+}
\ No newline at end of file
diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/base/BaseCsvJsonInteractiveQueryItemReaderTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/base/BaseCsvJsonInteractiveQueryItemReaderTest.java
deleted file mode 100644
index 27035cbc..00000000
--- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/base/BaseCsvJsonInteractiveQueryItemReaderTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2002-2024 the original author or authors.
- *
- * Licensed 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
- *
- * https://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.springframework.batch.extensions.bigquery.integration.reader.base;
-
-import com.google.cloud.bigquery.DatasetInfo;
-import com.google.cloud.bigquery.StandardTableDefinition;
-import com.google.cloud.bigquery.TableDefinition;
-import com.google.cloud.bigquery.TableId;
-import com.google.cloud.bigquery.TableInfo;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.TestInfo;
-import org.springframework.batch.extensions.bigquery.common.PersonDto;
-import org.springframework.batch.extensions.bigquery.common.TestConstants;
-import org.springframework.batch.extensions.bigquery.integration.base.BaseBigQueryIntegrationTest;
-
-public abstract class BaseCsvJsonInteractiveQueryItemReaderTest extends BaseBigQueryIntegrationTest {
-
- @BeforeEach
- void prepareTest(TestInfo testInfo) {
- if (bigQuery.getDataset(TestConstants.DATASET) == null) {
- bigQuery.create(DatasetInfo.of(TestConstants.DATASET));
- }
-
- String tableName = getTableName(testInfo);
-
- if (bigQuery.getTable(TestConstants.DATASET, tableName) == null) {
- TableDefinition tableDefinition = StandardTableDefinition.of(PersonDto.getBigQuerySchema());
- bigQuery.create(TableInfo.of(TableId.of(TestConstants.DATASET, tableName), tableDefinition));
- }
- }
-
- @AfterEach
- void cleanupTest(TestInfo testInfo) {
- bigQuery.delete(TableId.of(TestConstants.DATASET, getTableName(testInfo)));
- }
-
-}
\ No newline at end of file
diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/batch/BigQueryBatchQueryJsonItemReaderTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/batch/BigQueryBatchQueryJsonItemReaderTest.java
deleted file mode 100644
index 285816d2..00000000
--- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/batch/BigQueryBatchQueryJsonItemReaderTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2002-2024 the original author or authors.
- *
- * Licensed 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
- *
- * https://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.springframework.batch.extensions.bigquery.integration.reader.batch;
-
-import com.google.cloud.bigquery.QueryJobConfiguration;
-import com.google.cloud.bigquery.TableId;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.TestInfo;
-import org.springframework.batch.extensions.bigquery.common.BigQueryDataLoader;
-import org.springframework.batch.extensions.bigquery.common.PersonDto;
-import org.springframework.batch.extensions.bigquery.common.TestConstants;
-import org.springframework.batch.extensions.bigquery.integration.reader.base.BaseCsvJsonInteractiveQueryItemReaderTest;
-import org.springframework.batch.extensions.bigquery.reader.BigQueryQueryItemReader;
-import org.springframework.batch.extensions.bigquery.reader.builder.BigQueryQueryItemReaderBuilder;
-import org.springframework.batch.item.Chunk;
-
-@Tag("json")
-class BigQueryBatchQueryJsonItemReaderTest extends BaseCsvJsonInteractiveQueryItemReaderTest {
-
- @Test
- void batchQueryTest1(TestInfo testInfo) throws Exception {
- String tableName = getTableName(testInfo);
- new BigQueryDataLoader(bigQuery).loadJsonSample(tableName);
- Chunk chunk = BigQueryDataLoader.CHUNK;
-
- QueryJobConfiguration jobConfiguration = QueryJobConfiguration
- .newBuilder("SELECT p.name, p.age FROM spring_batch_extensions.%s p ORDER BY p.name LIMIT 2")
- .setDestinationTable(TableId.of(TestConstants.DATASET, tableName))
- .setPriority(QueryJobConfiguration.Priority.BATCH)
- .build();
-
- BigQueryQueryItemReader reader = new BigQueryQueryItemReaderBuilder()
- .bigQuery(bigQuery)
- .rowMapper(TestConstants.PERSON_MAPPER)
- .jobConfiguration(jobConfiguration)
- .build();
-
- reader.afterPropertiesSet();
-
- PersonDto actualFirstPerson = reader.read();
- PersonDto expectedFirstPerson = chunk.getItems().get(0);
-
- PersonDto actualSecondPerson = reader.read();
- PersonDto expectedSecondPerson = chunk.getItems().get(1);
-
- PersonDto actualThirdPerson = reader.read();
-
- Assertions.assertNotNull(actualFirstPerson);
- Assertions.assertEquals(expectedFirstPerson.name(), actualFirstPerson.name());
- Assertions.assertEquals(0, expectedFirstPerson.age().compareTo(actualFirstPerson.age()));
-
- Assertions.assertNotNull(actualSecondPerson);
- Assertions.assertEquals(expectedSecondPerson.name(), actualSecondPerson.name());
- Assertions.assertEquals(0, expectedSecondPerson.age().compareTo(actualSecondPerson.age()));
-
- Assertions.assertNull(actualThirdPerson);
- }
-
-}
\ No newline at end of file
diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/interactive/BigQueryInteractiveQueryCsvItemReaderTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/interactive/BigQueryInteractiveQueryCsvItemReaderTest.java
deleted file mode 100644
index 63aeed8a..00000000
--- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/interactive/BigQueryInteractiveQueryCsvItemReaderTest.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2002-2024 the original author or authors.
- *
- * Licensed 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
- *
- * https://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.springframework.batch.extensions.bigquery.integration.reader.interactive;
-
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.TestInfo;
-import org.springframework.batch.extensions.bigquery.common.BigQueryDataLoader;
-import org.springframework.batch.extensions.bigquery.common.PersonDto;
-import org.springframework.batch.extensions.bigquery.common.TestConstants;
-import org.springframework.batch.extensions.bigquery.integration.reader.base.BaseCsvJsonInteractiveQueryItemReaderTest;
-import org.springframework.batch.extensions.bigquery.reader.BigQueryQueryItemReader;
-import org.springframework.batch.extensions.bigquery.reader.builder.BigQueryQueryItemReaderBuilder;
-import org.springframework.batch.item.Chunk;
-
-@Tag("csv")
-class BigQueryInteractiveQueryCsvItemReaderTest extends BaseCsvJsonInteractiveQueryItemReaderTest {
-
- @Test
- void interactiveQueryTest1(TestInfo testInfo) throws Exception {
- String tableName = getTableName(testInfo);
- new BigQueryDataLoader(bigQuery).loadCsvSample(tableName);
- Chunk chunk = BigQueryDataLoader.CHUNK;
-
- BigQueryQueryItemReader reader = new BigQueryQueryItemReaderBuilder()
- .bigQuery(bigQuery)
- .query(String.format("SELECT p.name, p.age FROM spring_batch_extensions.%s p ORDER BY p.name LIMIT 2", tableName))
- .rowMapper(TestConstants.PERSON_MAPPER)
- .build();
-
- reader.afterPropertiesSet();
-
- PersonDto actualFirstPerson = reader.read();
- PersonDto expectedFirstPerson = chunk.getItems().get(0);
-
- PersonDto actualSecondPerson = reader.read();
- PersonDto expectedSecondPerson = chunk.getItems().get(1);
-
- PersonDto actualThirdPerson = reader.read();
-
- Assertions.assertNotNull(actualFirstPerson);
- Assertions.assertEquals(expectedFirstPerson.name(), actualFirstPerson.name());
- Assertions.assertEquals(0, expectedFirstPerson.age().compareTo(actualFirstPerson.age()));
-
- Assertions.assertNotNull(actualSecondPerson);
- Assertions.assertEquals(expectedSecondPerson.name(), actualSecondPerson.name());
- Assertions.assertEquals(0, expectedSecondPerson.age().compareTo(actualSecondPerson.age()));
-
- Assertions.assertNull(actualThirdPerson);
- }
-
-}
\ No newline at end of file
diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/interactive/BigQueryInteractiveQueryJsonItemReaderTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/interactive/BigQueryInteractiveQueryJsonItemReaderTest.java
deleted file mode 100644
index ddf7d915..00000000
--- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/interactive/BigQueryInteractiveQueryJsonItemReaderTest.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2002-2024 the original author or authors.
- *
- * Licensed 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
- *
- * https://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.springframework.batch.extensions.bigquery.integration.reader.interactive;
-
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.TestInfo;
-import org.springframework.batch.extensions.bigquery.common.BigQueryDataLoader;
-import org.springframework.batch.extensions.bigquery.common.PersonDto;
-import org.springframework.batch.extensions.bigquery.common.TestConstants;
-import org.springframework.batch.extensions.bigquery.integration.reader.base.BaseCsvJsonInteractiveQueryItemReaderTest;
-import org.springframework.batch.extensions.bigquery.reader.BigQueryQueryItemReader;
-import org.springframework.batch.extensions.bigquery.reader.builder.BigQueryQueryItemReaderBuilder;
-import org.springframework.batch.item.Chunk;
-
-@Tag("json")
-class BigQueryInteractiveQueryJsonItemReaderTest extends BaseCsvJsonInteractiveQueryItemReaderTest {
-
- @Test
- void interactiveQueryTest1(TestInfo testInfo) throws Exception {
- String tableName = getTableName(testInfo);
- new BigQueryDataLoader(bigQuery).loadJsonSample(tableName);
- Chunk chunk = BigQueryDataLoader.CHUNK;
-
- BigQueryQueryItemReader reader = new BigQueryQueryItemReaderBuilder()
- .bigQuery(bigQuery)
- .query(String.format("SELECT p.name, p.age FROM spring_batch_extensions.%s p ORDER BY p.name LIMIT 2", tableName))
- .rowMapper(TestConstants.PERSON_MAPPER)
- .build();
-
- reader.afterPropertiesSet();
-
- PersonDto actualFirstPerson = reader.read();
- PersonDto expectedFirstPerson = chunk.getItems().get(0);
-
- PersonDto actualSecondPerson = reader.read();
- PersonDto expectedSecondPerson = chunk.getItems().get(1);
-
- PersonDto actualThirdPerson = reader.read();
-
- Assertions.assertNotNull(actualFirstPerson);
- Assertions.assertEquals(expectedFirstPerson.name(), actualFirstPerson.name());
- Assertions.assertEquals(0, expectedFirstPerson.age().compareTo(actualFirstPerson.age()));
-
- Assertions.assertNotNull(actualSecondPerson);
- Assertions.assertEquals(expectedSecondPerson.name(), actualSecondPerson.name());
- Assertions.assertEquals(0, expectedSecondPerson.age().compareTo(actualSecondPerson.age()));
-
- Assertions.assertNull(actualThirdPerson);
- }
-
-}
\ No newline at end of file
diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/writer/BigQueryJsonItemWriterTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/writer/BigQueryJsonItemWriterTest.java
deleted file mode 100644
index 70e16bbc..00000000
--- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/writer/BigQueryJsonItemWriterTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2002-2024 the original author or authors.
- *
- * Licensed 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
- *
- * https://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.springframework.batch.extensions.bigquery.integration.writer;
-
-import com.google.cloud.bigquery.BigQuery;
-import com.google.cloud.bigquery.Dataset;
-import com.google.cloud.bigquery.Table;
-import com.google.cloud.bigquery.TableId;
-import com.google.cloud.bigquery.TableResult;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.TestInfo;
-import org.springframework.batch.extensions.bigquery.common.BigQueryDataLoader;
-import org.springframework.batch.extensions.bigquery.common.PersonDto;
-import org.springframework.batch.extensions.bigquery.common.TestConstants;
-import org.springframework.batch.extensions.bigquery.integration.writer.base.BaseBigQueryItemWriterTest;
-import org.springframework.batch.item.Chunk;
-
-@Tag("json")
-class BigQueryJsonItemWriterTest extends BaseBigQueryItemWriterTest {
-
- @Test
- void test1(TestInfo testInfo) throws Exception {
- String tableName = getTableName(testInfo);
- new BigQueryDataLoader(bigQuery).loadJsonSample(tableName);
- Chunk chunk = BigQueryDataLoader.CHUNK;
-
- Dataset dataset = bigQuery.getDataset(TestConstants.DATASET);
- Table table = bigQuery.getTable(TableId.of(TestConstants.DATASET, tableName));
- TableId tableId = table.getTableId();
- TableResult tableResult = bigQuery.listTableData(tableId, BigQuery.TableDataListOption.pageSize(2L));
-
- Assertions.assertNotNull(dataset.getDatasetId());
- Assertions.assertNotNull(tableId);
- Assertions.assertEquals(chunk.size(), tableResult.getTotalRows());
-
- tableResult
- .getValues()
- .forEach(field -> {
- Assertions.assertTrue(
- chunk.getItems().stream().map(PersonDto::name).anyMatch(name -> field.get(0).getStringValue().equals(name))
- );
-
- boolean ageCondition = chunk
- .getItems()
- .stream()
- .map(PersonDto::age)
- .map(Long::valueOf)
- .anyMatch(age -> age.compareTo(field.get(1).getLongValue()) == 0);
-
- Assertions.assertTrue(ageCondition);
- });
- }
-
-}
\ No newline at end of file
diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/writer/base/BaseBigQueryItemWriterTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/writer/base/BaseBigQueryItemWriterTest.java
deleted file mode 100644
index 402b713c..00000000
--- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/writer/base/BaseBigQueryItemWriterTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2002-2024 the original author or authors.
- *
- * Licensed 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
- *
- * https://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.springframework.batch.extensions.bigquery.integration.writer.base;
-
-import com.google.cloud.bigquery.DatasetInfo;
-import com.google.cloud.bigquery.StandardTableDefinition;
-import com.google.cloud.bigquery.TableDefinition;
-import com.google.cloud.bigquery.TableId;
-import com.google.cloud.bigquery.TableInfo;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.TestInfo;
-import org.springframework.batch.extensions.bigquery.common.PersonDto;
-import org.springframework.batch.extensions.bigquery.common.TestConstants;
-import org.springframework.batch.extensions.bigquery.integration.base.BaseBigQueryIntegrationTest;
-
-public abstract class BaseBigQueryItemWriterTest extends BaseBigQueryIntegrationTest {
-
- @BeforeEach
- void prepareTest(TestInfo testInfo) {
- if (bigQuery.getDataset(TestConstants.DATASET) == null) {
- bigQuery.create(DatasetInfo.of(TestConstants.DATASET));
- }
-
- if (bigQuery.getTable(TestConstants.DATASET, getTableName(testInfo)) == null) {
- TableDefinition tableDefinition = StandardTableDefinition.of(PersonDto.getBigQuerySchema());
- bigQuery.create(TableInfo.of(TableId.of(TestConstants.DATASET, getTableName(testInfo)), tableDefinition));
- }
- }
-
- @AfterEach
- void cleanupTest(TestInfo testInfo) {
- bigQuery.delete(TableId.of(TestConstants.DATASET, getTableName(testInfo)));
- }
-
-}
\ No newline at end of file
diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/unit/reader/builder/BigQueryBatchQueryItemReaderBuilderTests.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/unit/reader/builder/BigQueryBatchQueryItemReaderBuilderTests.java
index ec9b9567..f798c6cc 100644
--- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/unit/reader/builder/BigQueryBatchQueryItemReaderBuilderTests.java
+++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/unit/reader/builder/BigQueryBatchQueryItemReaderBuilderTests.java
@@ -27,6 +27,7 @@
import org.springframework.batch.extensions.bigquery.reader.builder.BigQueryQueryItemReaderBuilder;
import org.springframework.batch.extensions.bigquery.unit.base.AbstractBigQueryTest;
+// TODO verify all corner cases of afterPropertiesSet
class BigQueryBatchQueryItemReaderBuilderTests extends AbstractBigQueryTest {
@Test
diff --git a/spring-batch-bigquery/src/test/resources/logback.xml b/spring-batch-bigquery/src/test/resources/logback.xml
index 6a2c0bce..d227b170 100644
--- a/spring-batch-bigquery/src/test/resources/logback.xml
+++ b/spring-batch-bigquery/src/test/resources/logback.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/spring-batch-bigquery/src/test/resources/test-data.yaml b/spring-batch-bigquery/src/test/resources/test-data.yaml
new file mode 100644
index 00000000..ff477c56
--- /dev/null
+++ b/spring-batch-bigquery/src/test/resources/test-data.yaml
@@ -0,0 +1,18 @@
+projects:
+ - id: batch-test
+ datasets:
+ - id: spring_batch_extensions
+ tables:
+ - id: csv
+ columns:
+ - name: name
+ type: STRING
+ mode: REQUIRED
+ - name: age
+ type: INTEGER
+ mode: REQUIRED
+ data:
+ - name: Volodymyr
+ age: 27
+ - name: Oleksandra
+ age: 26
\ No newline at end of file