GH-159 - Unit tests for JDBC schema resolution.

This commit is contained in:
Oliver Drotbohm
2023-03-08 10:47:52 +01:00
parent 0e2e404308
commit 5ba5db07a6
3 changed files with 69 additions and 1 deletions

View File

@@ -59,6 +59,18 @@
<artifactId>spring-boot-starter-jdbc</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<scope>test</scope>
</dependency>
<!-- Testcontainers -->

View File

@@ -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);

View File

@@ -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.<String> 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);
}
}