diff --git a/core-java-modules/core-java-date-operations-2/README.md b/core-java-modules/core-java-date-operations-2/README.md index e49da29db4..5dedd006c1 100644 --- a/core-java-modules/core-java-date-operations-2/README.md +++ b/core-java-modules/core-java-date-operations-2/README.md @@ -13,4 +13,4 @@ This module contains articles about date operations in Java. - [Getting the Week Number From Any Date](https://www.baeldung.com/java-get-week-number) - [Subtract Days from a Date in Java](https://www.baeldung.com/java-subtract-days-from-date) - [How to Calculate “Time Ago” in Java](https://www.baeldung.com/java-calculate-time-ago) -- [[<-- Prev]](/core-java-modules/core-java-date-operations-1) +- [[<-- Prev]](/core-java-modules/core-java-date-operations-1) [[Next-->]](/core-java-modules/core-java-date-operations-3) diff --git a/core-java-modules/core-java-date-operations-3/README.md b/core-java-modules/core-java-date-operations-3/README.md new file mode 100644 index 0000000000..7c3146d32b --- /dev/null +++ b/core-java-modules/core-java-date-operations-3/README.md @@ -0,0 +1,6 @@ +## Core Date Operations (Part 3) +This module contains articles about date operations in Java. + +### Relevant Articles: + +- [[<-- Prev]](/core-java-modules/core-java-date-operations-2) diff --git a/core-java-modules/core-java-date-operations-3/pom.xml b/core-java-modules/core-java-date-operations-3/pom.xml new file mode 100644 index 0000000000..dba8129797 --- /dev/null +++ b/core-java-modules/core-java-date-operations-3/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + core-java-date-operations-3 + ${project.parent.version} + core-java-date-operations-3 + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + + + + + + + + + diff --git a/core-java-modules/core-java-date-operations-3/src/main/java/com/baeldung/unixtime/UnixTimeUtils.java b/core-java-modules/core-java-date-operations-3/src/main/java/com/baeldung/unixtime/UnixTimeUtils.java new file mode 100644 index 0000000000..00a309e67b --- /dev/null +++ b/core-java-modules/core-java-date-operations-3/src/main/java/com/baeldung/unixtime/UnixTimeUtils.java @@ -0,0 +1,60 @@ +package com.baeldung.unixtime; + +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.Calendar; +import java.util.Date; + +public class UnixTimeUtils { + + private UnixTimeUtils() { + } + + public static Date dateFrom(long timestamp) { + return new Date(timestamp); + } + + public static Calendar calendarFrom(long timestamp) { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(timestamp); + return calendar; + } + + public static Instant fromNanos(long timestamp) { + long seconds = timestamp / 1_000_000_000; + long nanos = timestamp % 1_000_000_000; + + return Instant.ofEpochSecond(seconds, nanos); + } + + public static Instant fromTimestamp(long timestamp) { + return Instant.ofEpochMilli(millis(timestamp)); + } + + public static String format(Instant instant) { + LocalDateTime time = localTimeUtc(instant); + return time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + } + + public static LocalDateTime localTimeUtc(Instant instant) { + return LocalDateTime.ofInstant(instant, ZoneOffset.UTC); + } + + private static long millis(long timestamp) { + if (timestamp >= 1E16 || timestamp <= -1E16) { + return timestamp / 1_000_000; + } + + if (timestamp >= 1E14 || timestamp <= -1E14) { + return timestamp / 1_000; + } + + if (timestamp >= 1E11 || timestamp <= -3E10) { + return timestamp; + } + + return timestamp * 1_000; + } +} diff --git a/core-java-modules/core-java-date-operations-3/src/test/java/com/baeldung/unixtime/UnixTimeUtilsUnitTest.java b/core-java-modules/core-java-date-operations-3/src/test/java/com/baeldung/unixtime/UnixTimeUtilsUnitTest.java new file mode 100644 index 0000000000..7522fa7bec --- /dev/null +++ b/core-java-modules/core-java-date-operations-3/src/test/java/com/baeldung/unixtime/UnixTimeUtilsUnitTest.java @@ -0,0 +1,104 @@ +package com.baeldung.unixtime; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.temporal.ChronoField; +import java.util.Calendar; +import java.util.Date; + +import org.junit.jupiter.api.Test; + +class UnixTimeUtilsUnitTest { + private static final String AUG_16_2022_15h25m32_Z_FORMATTED = "2022-08-16T15:25:32"; + private static final long AUG_16_2022_15h25m32_Z_NANOS = 1660663532747420283L; + private static final long AUGUST = 8; + + private void assertInstantFieldsMatch(LocalDateTime time) { + assertEquals(AUGUST, time.get(ChronoField.MONTH_OF_YEAR)); + assertEquals(16, time.get(ChronoField.DAY_OF_MONTH)); + assertEquals(2022, time.get(ChronoField.YEAR)); + assertEquals(15, time.get(ChronoField.HOUR_OF_DAY)); + assertEquals(25, time.get(ChronoField.MINUTE_OF_HOUR)); + assertEquals(32, time.get(ChronoField.SECOND_OF_MINUTE)); + } + + @Test + void givenMillis_whenDateFrom_thenLocalTimeMatches() { + long millis = AUG_16_2022_15h25m32_Z_NANOS / 1000 / 1000; + + Date date = UnixTimeUtils.dateFrom(millis); + + LocalDateTime time = UnixTimeUtils.localTimeUtc(date.toInstant()); + assertInstantFieldsMatch(time); + } + + @Test + void givenMillis_whenCalendarFrom_thenLocalTimeMatches() { + long millis = AUG_16_2022_15h25m32_Z_NANOS / 1000 / 1000; + + Calendar calendar = UnixTimeUtils.calendarFrom(millis); + + LocalDateTime time = UnixTimeUtils.localTimeUtc(calendar.toInstant()); + assertInstantFieldsMatch(time); + } + + @Test + void whenInstantFromNanos_thenLocalTimeMatches() { + Instant instant = UnixTimeUtils.fromNanos(AUG_16_2022_15h25m32_Z_NANOS); + + LocalDateTime time = UnixTimeUtils.localTimeUtc(instant); + assertThat(time.toString()).startsWith(AUG_16_2022_15h25m32_Z_FORMATTED); + } + + @Test + void givenWrongPrecision_whenInstantFromNanos_thenUnexpectedTime() { + long microseconds = AUG_16_2022_15h25m32_Z_NANOS / 1000; + + Instant instant = UnixTimeUtils.fromNanos(microseconds); + + LocalDateTime time = UnixTimeUtils.localTimeUtc(instant); + assertThat(time.toString()).doesNotStartWith(AUG_16_2022_15h25m32_Z_FORMATTED); + assertEquals("1970-01-20T05:17:43.532747420", time.toString()); + } + + @Test + void givenNanos_whenInstantFromTimestamp_thenLocalTimeMatches() { + Instant instant = UnixTimeUtils.fromTimestamp(AUG_16_2022_15h25m32_Z_NANOS); + + LocalDateTime time = UnixTimeUtils.localTimeUtc(instant); + assertInstantFieldsMatch(time); + } + + @Test + void givenMicroseconds_whenInstantFromTimestamp_thenLocalTimeMatches() { + long microseconds = AUG_16_2022_15h25m32_Z_NANOS / 1000; + + Instant instant = UnixTimeUtils.fromTimestamp(microseconds); + + LocalDateTime time = UnixTimeUtils.localTimeUtc(instant); + assertInstantFieldsMatch(time); + } + + @Test + void givenMillis_whenInstantFromTimestamp_thenLocalTimeMatches() { + long millis = AUG_16_2022_15h25m32_Z_NANOS / 1000 / 1000; + + Instant instant = UnixTimeUtils.fromTimestamp(millis); + + LocalDateTime time = UnixTimeUtils.localTimeUtc(instant); + assertInstantFieldsMatch(time); + } + + @Test + void givenSeconds_whenInstantFromTimestamp_thenLocalTimeMatches() { + long seconds = AUG_16_2022_15h25m32_Z_NANOS / 1000 / 1000 / 1000; + + Instant instant = UnixTimeUtils.fromTimestamp(seconds); + + LocalDateTime time = UnixTimeUtils.localTimeUtc(instant); + assertInstantFieldsMatch(time); + } +} diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 3da4195efd..7d09e3c0ee 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -55,6 +55,7 @@ core-java-console core-java-8-datetime-2 core-java-date-operations-2 + core-java-date-operations-3 core-java-8-datetime core-java-exceptions core-java-exceptions-2 diff --git a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/SpringBootPersistenceApplication.java b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/SpringBootPersistenceApplication.java new file mode 100644 index 0000000000..2dff3f37df --- /dev/null +++ b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/SpringBootPersistenceApplication.java @@ -0,0 +1,13 @@ +package com.baeldung; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringBootPersistenceApplication { + + public static void main(String ... args) { + SpringApplication.run(SpringBootPersistenceApplication.class, args); + } + +} diff --git a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/builder/SpringMongoConnectionViaBuilderApp.java b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/builder/SpringMongoConnectionViaBuilderApp.java deleted file mode 100644 index 00a1166a48..0000000000 --- a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/builder/SpringMongoConnectionViaBuilderApp.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.boot.connection.via.builder; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.WebApplicationType; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.mongo.MongoClientSettingsBuilderCustomizer; -import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.context.annotation.Bean; -import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; - -import com.mongodb.ConnectionString; - -@EnableAutoConfiguration(exclude = EmbeddedMongoAutoConfiguration.class) -@EnableMongoRepositories(basePackages = { "com.baeldung.boot.connection.base" }) -@SpringBootApplication(scanBasePackages = { "com.baeldung.boot.connection.base" }) -public class SpringMongoConnectionViaBuilderApp { - - public static void main(String... args) { - SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaBuilderApp.class); - app.web(WebApplicationType.NONE); - app.run(args); - } - - @Bean - public MongoClientSettingsBuilderCustomizer customizer(@Value("${custom.uri}") String uri) { - ConnectionString connection = new ConnectionString(uri); - return settings -> settings.applyConnectionString(connection); - } -} diff --git a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/client/SpringMongoConnectionViaClientApp.java b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/client/SpringMongoConnectionViaClientApp.java deleted file mode 100644 index 6b86fcac2b..0000000000 --- a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/client/SpringMongoConnectionViaClientApp.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.baeldung.boot.connection.via.client; - -import org.bson.Document; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.WebApplicationType; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration; -import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; - -import com.mongodb.client.ListDatabasesIterable; -import com.mongodb.client.MongoClient; -import com.mongodb.client.MongoClients; - -@EnableAutoConfiguration(exclude = EmbeddedMongoAutoConfiguration.class) -@EnableMongoRepositories(basePackages = { "com.baeldung.boot.connection.base" }) -@SpringBootApplication(scanBasePackages = { "com.baeldung.boot.connection.base" }) -public class SpringMongoConnectionViaClientApp extends AbstractMongoClientConfiguration { - - public static void main(String... args) { - SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaClientApp.class); - app.web(WebApplicationType.NONE); - app.run(args); - } - - @Value("${spring.data.mongodb.uri}") - private String uri; - - @Value("${spring.data.mongodb.database}") - private String db; - - @Override - public MongoClient mongoClient() { - MongoClient client = MongoClients.create(uri); - ListDatabasesIterable databases = client.listDatabases(); - databases.forEach(System.out::println); - return client; - } - - @Override - protected String getDatabaseName() { - return db; - } -} diff --git a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/factory/SpringMongoConnectionViaFactoryApp.java b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/factory/SpringMongoConnectionViaFactoryApp.java deleted file mode 100644 index 7f7c3f0668..0000000000 --- a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/factory/SpringMongoConnectionViaFactoryApp.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.baeldung.boot.connection.via.factory; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.WebApplicationType; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.context.annotation.Bean; -import org.springframework.data.mongodb.core.MongoClientFactoryBean; -import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; - -import com.mongodb.ConnectionString; -import com.mongodb.client.MongoClient; - -@EnableAutoConfiguration(exclude = EmbeddedMongoAutoConfiguration.class) -@EnableMongoRepositories(basePackages = { "com.baeldung.boot.connection.base" }) -@SpringBootApplication(scanBasePackages = { "com.baeldung.boot.connection.base" }) -public class SpringMongoConnectionViaFactoryApp { - - public static void main(String... args) { - SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaFactoryApp.class); - app.web(WebApplicationType.NONE); - app.run(args); - } - - @Bean - public MongoClientFactoryBean mongo(@Value("${custom.uri}") String uri) throws Exception { - MongoClientFactoryBean mongo = new MongoClientFactoryBean(); - ConnectionString conn = new ConnectionString(uri); - mongo.setConnectionString(conn); - - mongo.setSingleton(false); - - MongoClient client = mongo.getObject(); - client.listDatabaseNames() - .forEach(System.out::println); - return mongo; - } -} diff --git a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/properties/SpringMongoConnectionViaPropertiesApp.java b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/properties/SpringMongoConnectionViaPropertiesApp.java deleted file mode 100644 index e6eb1dea33..0000000000 --- a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/properties/SpringMongoConnectionViaPropertiesApp.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.boot.connection.via.properties; - -import org.springframework.boot.WebApplicationType; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.context.annotation.PropertySource; -import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; - -@PropertySource("classpath:connection.via.properties/app.properties") -@EnableAutoConfiguration(exclude = EmbeddedMongoAutoConfiguration.class) -@EnableMongoRepositories(basePackages = { "com.baeldung.boot.connection.base" }) -@SpringBootApplication(scanBasePackages = { "com.baeldung.boot.connection.base" }) -public class SpringMongoConnectionViaPropertiesApp { - - public static void main(String... args) { - SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaPropertiesApp.class); - app.web(WebApplicationType.NONE); - app.run(args); - } -} diff --git a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/resources/connection.via.properties/app.properties b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/resources/connection.via.properties/app.properties deleted file mode 100644 index 6e5d8c3050..0000000000 --- a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/resources/connection.via.properties/app.properties +++ /dev/null @@ -1,5 +0,0 @@ -spring.data.mongodb.database=baeldung -spring.data.mongodb.host=localhost -spring.data.mongodb.port=27017 -spring.data.mongodb.username=admin -spring.data.mongodb.password=password diff --git a/persistence-modules/spring-boot-persistence-mongodb-2/src/test/java/com/baeldung/boot/connection/via/tests/MongoConnectionApplicationLiveTest.java b/persistence-modules/spring-boot-persistence-mongodb-2/src/test/java/com/baeldung/boot/connection/via/tests/MongoConnectionApplicationLiveTest.java deleted file mode 100644 index a306232c8a..0000000000 --- a/persistence-modules/spring-boot-persistence-mongodb-2/src/test/java/com/baeldung/boot/connection/via/tests/MongoConnectionApplicationLiveTest.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.baeldung.boot.connection.via.tests; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertThrows; -import static org.junit.Assert.assertTrue; - -import org.bson.Document; -import org.junit.Before; -import org.junit.Test; -import org.springframework.beans.factory.BeanCreationException; -import org.springframework.boot.WebApplicationType; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.test.annotation.DirtiesContext; - -import com.baeldung.boot.connection.via.builder.SpringMongoConnectionViaBuilderApp; -import com.baeldung.boot.connection.via.client.SpringMongoConnectionViaClientApp; -import com.baeldung.boot.connection.via.factory.SpringMongoConnectionViaFactoryApp; -import com.baeldung.boot.connection.via.properties.SpringMongoConnectionViaPropertiesApp; - -@DirtiesContext -public class MongoConnectionApplicationLiveTest { - private static final String HOST = "localhost"; - private static final String PORT = "27017"; - private static final String DB = "baeldung"; - private static final String USER = "admin"; - private static final String PASS = "password"; - - private void assertInsertSucceeds(ConfigurableApplicationContext context) { - String name = "A"; - - MongoTemplate mongo = context.getBean(MongoTemplate.class); - Document doc = Document.parse("{\"name\":\"" + name + "\"}"); - Document inserted = mongo.insert(doc, "items"); - - assertNotNull(inserted.get("_id")); - assertEquals(inserted.get("name"), name); - } - - @Before - public void clearSystemProperties() { - System.clearProperty("spring.data.mongodb.host"); - System.clearProperty("spring.data.mongodb.port"); - System.clearProperty("spring.data.mongodb.database"); - System.clearProperty("spring.data.mongodb.username"); - System.clearProperty("spring.data.mongodb.password"); - System.clearProperty("spring.data.mongodb.uri"); - } - - @Test - public void whenPropertiesConfig_thenInsertSucceeds() { - SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaPropertiesApp.class); - app.web(WebApplicationType.NONE) - .run(); - - assertInsertSucceeds(app.context()); - } - - @Test - public void whenSystemConfig_thenInsertSucceeds() { - System.setProperty("spring.data.mongodb.host", HOST); - System.setProperty("spring.data.mongodb.port", PORT); - System.setProperty("spring.data.mongodb.database", DB); - System.setProperty("spring.data.mongodb.username", USER); - System.setProperty("spring.data.mongodb.password", PASS); - - SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaPropertiesApp.class); - app.web(WebApplicationType.NONE) - .run(); - - assertInsertSucceeds(app.context()); - } - - @Test - public void givenPrecedence_whenSystemConfig_thenInsertSucceeds() { - System.setProperty("spring.data.mongodb.host", HOST); - System.setProperty("spring.data.mongodb.port", PORT); - System.setProperty("spring.data.mongodb.database", DB); - System.setProperty("spring.data.mongodb.username", USER); - System.setProperty("spring.data.mongodb.password", PASS); - - SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaPropertiesApp.class) - .properties( - "spring.data.mongodb.host=oldValue", - "spring.data.mongodb.port=oldValue", - "spring.data.mongodb.database=oldValue", - "spring.data.mongodb.username=oldValue", - "spring.data.mongodb.password=oldValue" - ); - - app.web(WebApplicationType.NONE) - .run(); - - assertInsertSucceeds(app.context()); - } - - @Test - public void givenPrecedence_whenApplicationArgs_thenInsertSucceeds() { - System.setProperty("spring.data.mongodb.host", "incorrect"); - System.setProperty("spring.data.mongodb.port", "incorrect"); - System.setProperty("spring.data.mongodb.database", "incorrect"); - System.setProperty("spring.data.mongodb.username", "incorrect"); - System.setProperty("spring.data.mongodb.password", "incorrect"); - - SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaPropertiesApp.class); - app.web(WebApplicationType.NONE) - .run( - "--spring.data.mongodb.host=" + HOST, - "--spring.data.mongodb.port=" + PORT, - "--spring.data.mongodb.database=" + DB, - "--spring.data.mongodb.username=" + USER, - "--spring.data.mongodb.password=" + PASS - ); - - assertInsertSucceeds(app.context()); - } - - @Test - public void givenConnectionUri_whenAlsoIncludingIndividualParameters_thenInvalidConfig() { - System.setProperty( - "spring.data.mongodb.uri", - "mongodb://" + USER + ":" + PASS + "@" + HOST + ":" + PORT + "/" + DB - ); - - SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaPropertiesApp.class) - .web(WebApplicationType.NONE) - .properties( - "spring.data.mongodb.host=" + HOST, - "spring.data.mongodb.port=" + PORT, - "spring.data.mongodb.username=" + USER, - "spring.data.mongodb.password=" + PASS - ); - - BeanCreationException e = assertThrows(BeanCreationException.class, () -> { - app.run(); - }); - - Throwable rootCause = e.getRootCause(); - assertTrue(rootCause instanceof IllegalStateException); - assertThat(rootCause.getMessage() - .contains("Invalid mongo configuration, either uri or host/port/credentials/replicaSet must be specified")); - } - - @Test - public void whenClientConfig_thenInsertSucceeds() { - SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaClientApp.class); - app.web(WebApplicationType.NONE) - .run( - "--spring.data.mongodb.uri=mongodb://" + USER + ":" + PASS + "@" + HOST + ":" + PORT + "/" + DB, - "--spring.data.mongodb.database=" + DB - ); - - assertInsertSucceeds(app.context()); - } - - @Test - public void whenFactoryConfig_thenInsertSucceeds() { - SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaFactoryApp.class); - app.web(WebApplicationType.NONE) - .run( - "--custom.uri=mongodb://" + USER + ":" + PASS + "@" + HOST + ":" + PORT + "/" + DB - ); - - assertInsertSucceeds(app.context()); - } - - @Test - public void whenBuilderConfig_thenInsertSucceeds() { - SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaBuilderApp.class); - app.web(WebApplicationType.NONE) - .run( - "--custom.uri=mongodb://" + USER + ":" + PASS + "@" + HOST + ":" + PORT + "/" + DB - ); - - assertInsertSucceeds(app.context()); - } -}