You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
3.3 KiB
Java

package at.procon.dip.architecture;
import at.procon.dip.domain.ted.config.TedProjectionProperties;
import at.procon.dip.ingestion.config.DipIngestionProperties;
import at.procon.dip.search.config.DipSearchProperties;
import at.procon.ted.config.TedProcessorProperties;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.util.List;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Regression guard for the runtime/config split.
* NEW runtime classes must not depend on TedProcessorProperties anymore.
*/
class NewRuntimeMustNotDependOnTedProcessorPropertiesTest {
@Test
void new_runtime_classes_should_not_depend_on_ted_processor_properties() {
List<Class<?>> newRuntimeClasses = List.of(
at.procon.dip.ingestion.service.GenericDocumentImportService.class,
at.procon.dip.ingestion.camel.GenericFileSystemIngestionRoute.class,
at.procon.dip.ingestion.controller.GenericDocumentImportController.class,
at.procon.dip.ingestion.adapter.MailDocumentIngestionAdapter.class,
at.procon.dip.ingestion.adapter.TedPackageDocumentIngestionAdapter.class,
at.procon.dip.ingestion.service.TedPackageChildImportProcessor.class,
at.procon.dip.domain.ted.service.TedNoticeProjectionService.class,
at.procon.dip.domain.ted.startup.TedProjectionStartupRunner.class,
at.procon.dip.domain.ted.search.TedStructuredSearchRepository.class,
at.procon.dip.domain.ted.service.TedStructuredSearchService.class,
at.procon.dip.domain.ted.web.TedStructuredSearchController.class,
at.procon.dip.search.engine.fulltext.PostgresFullTextSearchEngine.class,
at.procon.dip.search.engine.trigram.PostgresTrigramSearchEngine.class,
at.procon.dip.search.engine.semantic.PgVectorSemanticSearchEngine.class,
at.procon.dip.search.rank.DefaultSearchResultFusionService.class,
at.procon.dip.search.service.DefaultSearchOrchestrator.class,
at.procon.dip.search.service.SearchLexicalIndexStartupRunner.class,
at.procon.dip.normalization.impl.ChunkedLongTextRepresentationBuilder.class
);
for (Class<?> type : newRuntimeClasses) {
assertThat(hasDependency(type, TedProcessorProperties.class))
.as(type.getName() + " must not depend on TedProcessorProperties")
.isFalse();
}
}
@Test
void new_runtime_config_classes_exist_as_replacements() {
assertThat(DipSearchProperties.class).isNotNull();
assertThat(DipIngestionProperties.class).isNotNull();
assertThat(TedProjectionProperties.class).isNotNull();
}
private boolean hasDependency(Class<?> owner, Class<?> dependency) {
for (Field field : owner.getDeclaredFields()) {
if (field.getType().equals(dependency)) {
return true;
}
}
for (Constructor<?> constructor : owner.getDeclaredConstructors()) {
for (Class<?> param : constructor.getParameterTypes()) {
if (param.equals(dependency)) {
return true;
}
}
}
return false;
}
}