From 5ba5db07a60415f5ed0bef022029a81156fbb2c1 Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Wed, 8 Mar 2023 10:47:52 +0100 Subject: [PATCH] GH-159 - Unit tests for JDBC schema resolution. --- .../spring-modulith-events-jdbc/pom.xml | 12 ++++ .../jdbc/DatabaseSchemaInitializer.java | 2 +- .../DatabaseSchemaInitializerUnitTests.java | 56 +++++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerUnitTests.java diff --git a/spring-modulith-events/spring-modulith-events-jdbc/pom.xml b/spring-modulith-events/spring-modulith-events-jdbc/pom.xml index 18076d24..086b5221 100644 --- a/spring-modulith-events/spring-modulith-events-jdbc/pom.xml +++ b/spring-modulith-events/spring-modulith-events-jdbc/pom.xml @@ -59,6 +59,18 @@ spring-boot-starter-jdbc test + + + org.springframework + spring-web + test + + + + jakarta.servlet + jakarta.servlet-api + test + diff --git a/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializer.java b/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializer.java index d2f92bbd..98476308 100644 --- a/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializer.java +++ b/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializer.java @@ -62,7 +62,7 @@ class DatabaseSchemaInitializer implements InitializingBean { public void afterPropertiesSet() { var schemaResourceFilename = databaseType.getSchemaResourceFilename(); - var schemaDdlResource = resourceLoader.getResource("classpath:" + schemaResourceFilename); + var schemaDdlResource = resourceLoader.getResource(ResourceLoader.CLASSPATH_URL_PREFIX + schemaResourceFilename); var schemaDdl = asString(schemaDdlResource); jdbcOperations.execute(schemaDdl); diff --git a/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerUnitTests.java b/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerUnitTests.java new file mode 100644 index 00000000..8d2dd748 --- /dev/null +++ b/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerUnitTests.java @@ -0,0 +1,56 @@ +/* + * Copyright 2023 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.modulith.events.jdbc; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.ResourceLoader; +import org.springframework.jdbc.core.JdbcOperations; + +/** + * Unit tests for {@link DatabaseSchemaInitializer}. + * + * @author Oliver Drotbohm + */ +@ExtendWith(MockitoExtension.class) +class DatabaseSchemaInitializerUnitTests { + + @Mock JdbcOperations jdbcOperations; + @Mock ResourceLoader resourceLoader; + + @Test // GH-159 + void loadsSchemaFilesFromClasspath() { + + when(resourceLoader.getResource(any())).thenAnswer(it -> { + return new ClassPathResource(it. getArgument(0).substring(ResourceLoader.CLASSPATH_URL_PREFIX.length())); + }); + + var initializer = new DatabaseSchemaInitializer(jdbcOperations, resourceLoader, DatabaseType.H2); + var captor = ArgumentCaptor.forClass(String.class); + + assertThatNoException().isThrownBy(initializer::afterPropertiesSet); + verify(resourceLoader).getResource(captor.capture()); + assertThat(captor.getValue()).startsWith(ResourceLoader.CLASSPATH_URL_PREFIX); + } +}