diff --git a/pluto-server/pom.xml b/pluto-server/pom.xml index 71b37a75738b3be4d24839e97c828b3c71f46b26..a19c33857e92480145782ed67f6f27156140ac0a 100644 --- a/pluto-server/pom.xml +++ b/pluto-server/pom.xml @@ -185,15 +185,13 @@ <version>1.15.3</version> <scope>test</scope> </dependency> - -<<<<<<< HEAD <dependency> <groupId>org.testcontainers</groupId> <artifactId>solr</artifactId> <version>1.16.2</version> <scope>test</scope> </dependency> -======= + <!-- mongock --> <dependency> <groupId>io.mongock</groupId> @@ -205,7 +203,6 @@ <artifactId>mongodb-springdata-v3-driver</artifactId> <version>${mongock.version}</version> </dependency> ->>>>>>> refs/remotes/origin/master </dependencies> <build> diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/BeansConfig.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/BeansConfig.java index ca2edf0a0bb7c556734e7e9968bf5e1c8ef8e948..845b288a6c369e219b96daec5a673679afa2a77b 100644 --- a/pluto-server/src/main/java/de/itvsh/ozg/pluto/BeansConfig.java +++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/BeansConfig.java @@ -1,9 +1,15 @@ package de.itvsh.ozg.pluto; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.solr.client.solrj.SolrClient; +import org.apache.solr.client.solrj.impl.CloudHttp2SolrClient; +import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; +import de.itvsh.ozg.pluto.common.solr.SolrProperties; + @Configuration public class BeansConfig { @@ -14,4 +20,19 @@ public class BeansConfig { freeMarkerConfigurer.setDefaultEncoding("UTF-8"); return freeMarkerConfigurer; } + + @Bean + public SolrClient getSolrClient(SolrProperties properties) { + SolrClient client = null; + if (CollectionUtils.isNotEmpty(properties.getHosts()) && properties.getHosts().size() > 1) { + client = new CloudHttp2SolrClient.Builder(properties.getHosts()).build(); + } else if (CollectionUtils.isNotEmpty(properties.getHosts())) { + client = new HttpSolrClient.Builder(properties.getHosts().get(0)) + .withConnectionTimeout(properties.getConnectionTimeout()) + .withSocketTimeout(properties.getSocketTimeout()) + .build(); + } + + return client; + } } diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/PlutoServerApplication.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/PlutoServerApplication.java index 1965aee359f201a9c6d58c2172a498652782c61a..77094c8371175c6bc0e073ae69d44156617284db 100644 --- a/pluto-server/src/main/java/de/itvsh/ozg/pluto/PlutoServerApplication.java +++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/PlutoServerApplication.java @@ -4,6 +4,7 @@ import java.util.TimeZone; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.properties.ConfigurationPropertiesScan; import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; @@ -15,6 +16,7 @@ import io.mongock.runner.springboot.EnableMongock; @EnableScheduling @EnableAspectJAutoProxy(proxyTargetClass = true) @EnableMongock +@ConfigurationPropertiesScan("de.itvsh.ozg.pluto.common.*") public class PlutoServerApplication { public static void main(String[] args) { diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/solr/SolrEventListener.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/solr/SolrEventListener.java index 615dec76db2f94f3c8ab2611053bedb0ec39616b..5d86f660fd42e110b22308ec7c8ca6692c795ca5 100644 --- a/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/solr/SolrEventListener.java +++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/solr/SolrEventListener.java @@ -2,12 +2,11 @@ package de.itvsh.ozg.pluto.common.solr; import java.util.Optional; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; -import de.itvsh.ozg.mail.common.errorhandling.TechnicalException; import de.itvsh.ozg.pluto.command.Command; import de.itvsh.ozg.pluto.command.CommandService; import de.itvsh.ozg.pluto.vorgang.StatusChangedEvent; @@ -17,6 +16,7 @@ import de.itvsh.ozg.pluto.vorgang.VorgangCreatedEvent; import de.itvsh.ozg.pluto.vorgang.VorgangService; @Component +@ConditionalOnBean(SolrService.class) public class SolrEventListener { @Autowired private SolrService solrService; @@ -29,16 +29,12 @@ public class SolrEventListener { @EventListener public void onNewVorgang(VorgangCreatedEvent event) { - solrService.addVorgang(VorgangMapper.toSolrInputDocument(event.getVorgang())); + solrService.addVorgang(SolrVorgangMapper.toSolrInputDocument(event.getVorgang())); } @EventListener public void onVorgangAssigned(VorgangAssignedEvent event) { - if (event.getSource() instanceof Command command) { - updateVorgang(command); - } else { - throw new TechnicalException("Event has invalid source type. Expected type Command, but was " + event.getClass()); - } + updateVorgang((Command) event.getSource()); } @EventListener @@ -47,17 +43,12 @@ public class SolrEventListener { } void updateVorgang(Command command) { - String vorgangId = command.getVorgangId(); - if (StringUtils.isNotEmpty(vorgangId)) { - Vorgang vorgang = vorgangService.getById(vorgangId); - solrService.updateVorgang(VorgangMapper.toSolrInputDocument(vorgang)); - } - + Vorgang vorgang = vorgangService.getById(command.getVorgangId()); + solrService.updateVorgang(SolrVorgangMapper.toSolrInputDocument(vorgang)); } private void updateVorgangById(String commandId) { Optional<Command> command = commandService.findCommand(commandId); command.ifPresent(this::updateVorgang); } - } diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/solr/SolrProperties.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/solr/SolrProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..635896911478c25922e4d94c55d4277b3b344597 --- /dev/null +++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/solr/SolrProperties.java @@ -0,0 +1,18 @@ +package de.itvsh.ozg.pluto.common.solr; + +import java.util.List; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@ConfigurationProperties(prefix = "kop.solr") +public class SolrProperties { + private List<String> hosts; + private String collection; + private int socketTimeout = 10000; + private int connectionTimeout = 5000; +} diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/solr/SolrService.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/solr/SolrService.java index b12890111f30c74a07f5add87f81ef0cb750fdcd..ef2e44e5f0a879433b76698326aa71dfcb2f254a 100644 --- a/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/solr/SolrService.java +++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/solr/SolrService.java @@ -1,93 +1,72 @@ package de.itvsh.ozg.pluto.common.solr; import java.io.IOException; -import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrServerException; -import org.apache.solr.client.solrj.impl.CloudHttp2SolrClient; -import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrInputDocument; import org.apache.solr.common.params.MapSolrParams; -import org.springframework.beans.factory.annotation.Value; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.stereotype.Service; -import io.micrometer.core.instrument.util.StringUtils; import lombok.extern.java.Log; @Service @Log +@ConditionalOnBean(SolrClient.class) public class SolrService { + public static final String SOLR_QUERY = "q"; + public static final String SOLR_FIELD = "fl"; + public static final String SOLR_SORT = "sort"; + public static final String SOLR_ID = "id"; + public static final String SOLR_SORT_ID_ASC = "id asc"; - @Value("${pluto.solr.hosts}") - private String solrHosts; + @Autowired + private SolrProperties properties; - @Value("${pluto.solr.collection}") - private String solrCollection; - - @Value("${pluto.solr.timeout.connection:5000}") - private int connectionTimeout; - - @Value("${pluto.solr.timeout.socket:10000}") - private int socketTimeout; - - private SolrClient solrClient; + @Autowired + private SolrClient client; public void addVorgang(SolrInputDocument doc) { - SolrClient client = getSolrClient(); try { - if (client != null) { - client.add(solrCollection, doc); - client.commit(solrCollection); - } + saveToIndex(doc); } catch (IOException | SolrServerException e) { LOG.log(Level.WARNING, "Error adding document to index", e); } } public void updateVorgang(SolrInputDocument doc) { - SolrClient client = getSolrClient(); try { - if (client != null) { - final Map<String, String> queryParamMap = new HashMap<>(); - queryParamMap.put("q", "aktenzeichen:" + doc.getFieldValue("aktenzeichen")); - queryParamMap.put("fl", "id"); - queryParamMap.put("sort", "id asc"); - MapSolrParams queryParams = new MapSolrParams(queryParamMap); - final QueryResponse response = client.query("test", queryParams); - final SolrDocumentList documents = response.getResults(); + SolrDocumentList documents = loadSolrDocuments(doc); + doc.addField(SOLR_ID, documents.get(0).getFieldValue(SOLR_ID)); - doc.addField("id", documents.get(0).getFieldValue("id")); - client.add(solrCollection, doc); - client.commit(solrCollection); - } + saveToIndex(doc); } catch (IOException | SolrServerException e) { LOG.log(Level.WARNING, "Error updating document to index", e); } } - SolrClient getSolrClient() { - SolrClient client = null; - if (solrClient != null) { - client = solrClient; - } else { - if (StringUtils.isNotEmpty(solrHosts) && solrHosts.contains(";")) { - String[] hosts = solrHosts.split(";"); - client = new CloudHttp2SolrClient.Builder(Arrays.asList(hosts)).build(); - } else if (StringUtils.isNotEmpty(solrHosts)) { - client = new HttpSolrClient.Builder(solrHosts).withConnectionTimeout(connectionTimeout).withSocketTimeout(socketTimeout).build(); - } else { - LOG.info("pluto.solr.hosts ist nocht nicht konfiguriert, Vorgänge werden nicht zum Solr hinzugefügt"); - } + private SolrDocumentList loadSolrDocuments(SolrInputDocument doc) throws SolrServerException, IOException { + QueryResponse response = client.query(properties.getCollection(), createQueryParams(doc)); + return response.getResults(); + } - solrClient = client; - } + private MapSolrParams createQueryParams(SolrInputDocument doc) { + final Map<String, String> queryParamMap = new HashMap<>(); + queryParamMap.put(SOLR_QUERY, SolrVorgangMapper.AKTENZEICHEN + ":" + doc.getFieldValue(SolrVorgangMapper.AKTENZEICHEN)); + queryParamMap.put(SOLR_FIELD, SOLR_ID); + queryParamMap.put(SOLR_SORT, SOLR_SORT_ID_ASC); + return new MapSolrParams(queryParamMap); + } - return client; + private void saveToIndex(SolrInputDocument doc) throws SolrServerException, IOException { + client.add(properties.getCollection(), doc); + client.commit(properties.getCollection()); } } diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/solr/SolrVorgangMapper.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/solr/SolrVorgangMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..93e2f133640236d8a9d316b6813144b78fe04439 --- /dev/null +++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/solr/SolrVorgangMapper.java @@ -0,0 +1,46 @@ +package de.itvsh.ozg.pluto.common.solr; + +import org.apache.solr.common.SolrInputDocument; + +import de.itvsh.ozg.pluto.vorgang.Eingang; +import de.itvsh.ozg.pluto.vorgang.Vorgang; +import lombok.experimental.UtilityClass; + +@UtilityClass +class SolrVorgangMapper { + public static final String NAME = "name"; + public static final String AKTENZEICHEN = "aktenzeichen"; + public static final String ASSIGNED_TO = "assignedTo"; + public static final String STATUS = "status"; + public static final String CREATED_AT = "createdAt"; + public static final String ORGANISATIONSEINHEITEN_ID = "eingang_zustaendigeStelle_organisationseinheitenId"; + public static final String ANTRAGSTELLER_VORNAME = "antragsteller_vorname"; + public static final String ANTRAGSTELLER_NACHNAME = "antragsteller_nachname"; + public static final String VORGANG_ID = "vorgangId"; + + static SolrInputDocument toSolrInputDocument(Vorgang vorgang) { + SolrInputDocument doc = new SolrInputDocument(); + doc.setField(NAME, vorgang.getName()); + doc.setField(AKTENZEICHEN, vorgang.getAktenzeichen()); + doc.setField(ASSIGNED_TO, vorgang.getAssignedTo()); + doc.setField(STATUS, vorgang.getStatus().name()); + doc.setField(CREATED_AT, vorgang.getCreatedAt()); + + setEingang(vorgang, doc); + + return doc; + } + + private static void setEingang(Vorgang vorgang, SolrInputDocument doc) { + if (vorgang.getEingangs() != null && !vorgang.getEingangs().isEmpty()) { + Eingang eingang = vorgang.getEingangs().get(0); + if (eingang.getZustaendigeStelle() != null) { + doc.setField(ORGANISATIONSEINHEITEN_ID, eingang.getZustaendigeStelle().getOrganisationseinheitenId()); + } + if (eingang.getAntragsteller() != null) { + doc.setField(ANTRAGSTELLER_VORNAME, eingang.getAntragsteller().getVorname()); + doc.setField(ANTRAGSTELLER_NACHNAME, eingang.getAntragsteller().getNachname()); + } + } + } +} diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/solr/VorgangMapper.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/solr/VorgangMapper.java deleted file mode 100644 index ac766f10db099b4bb79d7b095d2af68f298793d6..0000000000000000000000000000000000000000 --- a/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/solr/VorgangMapper.java +++ /dev/null @@ -1,33 +0,0 @@ -package de.itvsh.ozg.pluto.common.solr; - -import org.apache.solr.common.SolrInputDocument; - -import de.itvsh.ozg.pluto.vorgang.Eingang; -import de.itvsh.ozg.pluto.vorgang.Vorgang; - -class VorgangMapper { - private VorgangMapper() { - // Utility class - } - - static SolrInputDocument toSolrInputDocument(Vorgang vorgang) { - SolrInputDocument doc = new SolrInputDocument(); - doc.setField("name", vorgang.getName()); - doc.setField("aktenzeichen", vorgang.getAktenzeichen()); - doc.setField("assignedTo", vorgang.getAssignedTo()); - doc.setField("status", vorgang.getStatus().name()); - doc.setField("createdAt", vorgang.getCreatedAt()); - if (vorgang.getEingangs() != null && !vorgang.getEingangs().isEmpty()) { - Eingang eingang = vorgang.getEingangs().get(0); - if (eingang.getZustaendigeStelle() != null) { - doc.setField("eingang_zustaendigeStelle_organisationseinheitenId", eingang.getZustaendigeStelle().getOrganisationseinheitenId()); - } - if (eingang.getAntragsteller() != null) { - doc.setField("antragsteller_vorname", eingang.getAntragsteller().getVorname()); - doc.setField("antragsteller_nachname", eingang.getAntragsteller().getNachname()); - } - } - - return doc; - } -} diff --git a/pluto-server/src/main/resources/application-local.yml b/pluto-server/src/main/resources/application-local.yml index a30c3c628dac90d325b9fd60c016807b4b0f739d..bc022ab7c07bf53f32754e42db28938351a678cb 100644 --- a/pluto-server/src/main/resources/application-local.yml +++ b/pluto-server/src/main/resources/application-local.yml @@ -32,10 +32,7 @@ spring: pluto: redirect: - mail-from: ea@ozg-sh.de - solr: - hosts: http://localhost:8983/solr - collection: kop + mail-from: ea@ozg-sh.de kop: osi: @@ -50,5 +47,9 @@ kop: vorgang: filter: defaultBehaviour: SHOW_ALL + solr: + hosts: + - http://localhost:8983/solr + collection: kop aktenzeichen: de.itvsh.ozg.pluto.vorgang.AktenzeichenProviderEA \ No newline at end of file diff --git a/pluto-server/src/main/resources/application.yml b/pluto-server/src/main/resources/application.yml index 65122cf1c8fa6c131b0f72eff5419806d6cd98c3..6bff381877c216ce881c1b6982dc950eb43f1d49 100644 --- a/pluto-server/src/main/resources/application.yml +++ b/pluto-server/src/main/resources/application.yml @@ -24,9 +24,6 @@ pluto: production: false forwarding: reply-to: EA-Poststelle@itvsh.de - solr: - hosts: - collection: kop management: server: diff --git a/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrITCase.java b/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrITCase.java new file mode 100644 index 0000000000000000000000000000000000000000..4c3a5f6cbcd02c185eee1cb58b2603b68bf21c92 --- /dev/null +++ b/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrITCase.java @@ -0,0 +1,24 @@ +package de.itvsh.ozg.pluto.common.solr; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; + +import de.itvsh.kop.common.test.DataITCase; +import de.itvsh.kop.common.test.DbInitializer; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +@Inherited + +@DataITCase +@ContextConfiguration(initializers = { SolrInitializer.class, DbInitializer.class }) +@ActiveProfiles({ "itcase", "with_db", "with_solr" }) +public @interface SolrITCase { + +} diff --git a/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrInitializer.java b/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrInitializer.java new file mode 100644 index 0000000000000000000000000000000000000000..39827af92be6f3c1bd4915e00c20525fd84ba968 --- /dev/null +++ b/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrInitializer.java @@ -0,0 +1,23 @@ +package de.itvsh.ozg.pluto.common.solr; + +import org.springframework.boot.test.util.TestPropertyValues; +import org.springframework.context.ApplicationContextInitializer; +import org.springframework.context.ConfigurableApplicationContext; +import org.testcontainers.containers.SolrContainer; +import org.testcontainers.utility.DockerImageName; + +public class SolrInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { + + @Override + public void initialize(ConfigurableApplicationContext applicationContext) { + SolrContainer solrContainer = new SolrContainer(DockerImageName.parse("solr").withTag("8.11")); + solrContainer.start(); + Integer port = solrContainer.getFirstMappedPort(); + + TestPropertyValues.of( + "kop.solr.hosts[0]=http://" + solrContainer.getHost() + ":" + port + "/solr", + "kop.solr.collection=test", + "kop.solr.port=" + port).applyTo(applicationContext.getEnvironment()); + + } +} diff --git a/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrInputDocumentFactory.java b/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrInputDocumentFactory.java deleted file mode 100644 index 2c3575c2d119225720303ce3ed3a8fececa03d59..0000000000000000000000000000000000000000 --- a/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrInputDocumentFactory.java +++ /dev/null @@ -1,26 +0,0 @@ -package de.itvsh.ozg.pluto.common.solr; - -import java.time.ZonedDateTime; - -import org.apache.solr.common.SolrInputDocument; - -class SolrInputDocumentFactory { - private SolrInputDocumentFactory() { - - } - - static SolrInputDocument create() { - ZonedDateTime dateTime = ZonedDateTime.now(); - SolrInputDocument vorgang = new SolrInputDocument(); - vorgang.addField("aktenzeichen", "aktenzeichen"); - vorgang.addField("assignedTo", "sabine"); - vorgang.addField("createdAt", dateTime.toString()); - vorgang.addField("name", "name"); - vorgang.addField("status", "NEU"); - vorgang.addField("eingang_zustaendigeStelle_organisationseinheitenId", "org_einhait_id"); - vorgang.addField("antragsteller_vorname", "Max"); - vorgang.addField("antragsteller_nachname", "Mueller"); - - return vorgang; - } -} diff --git a/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrInputDocumentTestFactory.java b/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrInputDocumentTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..5c4a117c7edff77961f75e472df0a870b2542ac8 --- /dev/null +++ b/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrInputDocumentTestFactory.java @@ -0,0 +1,33 @@ +package de.itvsh.ozg.pluto.common.solr; + +import java.time.ZonedDateTime; + +import org.apache.solr.common.SolrInputDocument; + +import lombok.experimental.UtilityClass; + +@UtilityClass +class SolrInputDocumentTestFactory { + public static final String AKTENZEICHEN = "65124217325"; + public static final String ASSIGNED_TO = "43434-734747"; + public static final String CREATED_AT = ZonedDateTime.now().toString(); + public static final String NAME = "testname"; + public static final String STATUS = "NEU"; + public static final String ZUSTAENDIGESTELLE_ORGANISATIONSEINHEITEN_ID = "zus_org_id"; + public static final String ANTRAGSTELLER_VORNAME = "Max"; + public static final String ANTRAGSTELLER_NACHNAME = "Mueller"; + + static SolrInputDocument create() { + SolrInputDocument vorgang = new SolrInputDocument(); + vorgang.addField(SolrVorgangMapper.AKTENZEICHEN, AKTENZEICHEN); + vorgang.addField(SolrVorgangMapper.ASSIGNED_TO, ASSIGNED_TO); + vorgang.addField(SolrVorgangMapper.CREATED_AT, CREATED_AT); + vorgang.addField(SolrVorgangMapper.NAME, NAME); + vorgang.addField(SolrVorgangMapper.STATUS, STATUS); + vorgang.addField(SolrVorgangMapper.ORGANISATIONSEINHEITEN_ID, ZUSTAENDIGESTELLE_ORGANISATIONSEINHEITEN_ID); + vorgang.addField(SolrVorgangMapper.ANTRAGSTELLER_VORNAME, ANTRAGSTELLER_VORNAME); + vorgang.addField(SolrVorgangMapper.ANTRAGSTELLER_NACHNAME, ANTRAGSTELLER_NACHNAME); + + return vorgang; + } +} diff --git a/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrServerITCase.java b/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrServerITCase.java index c091765af722167ce05c8107de795d507fb8ee8d..cd227c214123c93c45bedb61f5160f162ac65569 100644 --- a/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrServerITCase.java +++ b/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrServerITCase.java @@ -1,6 +1,6 @@ package de.itvsh.ozg.pluto.common.solr; -import static org.junit.Assert.assertNotNull; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.when; @@ -23,20 +23,15 @@ import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrInputDocument; import org.apache.solr.common.params.MapSolrParams; -import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.data.mongodb.core.MongoOperations; -import org.springframework.test.util.ReflectionTestUtils; -import org.testcontainers.containers.SolrContainer; -import org.testcontainers.utility.DockerImageName; -import de.itvsh.kop.common.test.DataITCase; import de.itvsh.ozg.pluto.command.Command; import de.itvsh.ozg.pluto.command.CommandService; import de.itvsh.ozg.pluto.vorgang.Eingang; @@ -47,14 +42,14 @@ import de.itvsh.ozg.pluto.vorgang.Vorgang; import de.itvsh.ozg.pluto.vorgang.Vorgang.Status; import de.itvsh.ozg.pluto.vorgang.VorgangService; -@DataITCase +@SolrITCase class SolrServerITCase { - private static SolrContainer solrContainer; - static String baseUrl; - @Autowired private SolrService solrService; + @Autowired + private SolrClient solrClient; + @Autowired private VorgangService vorgangService; @@ -64,31 +59,31 @@ class SolrServerITCase { @MockBean private CommandService commandService; - SolrInputDocument vorgang; - String dateTime; + @Autowired + private SolrProperties solrProperties; - @BeforeAll - static void setUpClass() { - solrContainer = new SolrContainer(DockerImageName.parse("solr").withTag("8.11")); - solrContainer.start(); + @Value("${kop.solr.port}") + private String solrPort; - baseUrl = "http://" + solrContainer.getContainerIpAddress() + ":" + solrContainer.getSolrPort() + "/solr"; - System.out.println("Using solr at " + baseUrl); - } + @Value("${kop.solr.collection}") + private String collectionName; + + private SolrInputDocument vorgang; + + private String baseUrl; @BeforeEach - void setUp() { + void init() { + baseUrl = solrProperties.getHosts().get(0); + Command cmd = Command.builder().id("testid").vorgangId("vorgangId").build(); when(commandService.findCommand("testId")).thenReturn(Optional.of(cmd)); - ReflectionTestUtils.setField(solrService, "solrCollection", "test"); - ReflectionTestUtils.setField(solrService, "solrHosts", baseUrl); - - vorgang = SolrInputDocumentFactory.create(); - dateTime = vorgang.get("createdAt").getValue().toString(); + vorgang = SolrInputDocumentTestFactory.create(); HttpClient httpClient = HttpClient.newHttpClient(); - HttpRequest addRequest = HttpRequest.newBuilder().uri(URI.create(baseUrl + "/admin/collections?action=CREATE&name=test&numShards=1")) + HttpRequest addRequest = HttpRequest.newBuilder() + .uri(URI.create(baseUrl + "/admin/collections?action=CREATE&name=" + collectionName + "&numShards=1")) .build(); httpClient.sendAsync(addRequest, BodyHandlers.ofString()) .thenApply(HttpResponse::body) @@ -103,15 +98,10 @@ class SolrServerITCase { } - @AfterAll - static void stopContainer() { - solrContainer.stop(); - } - @AfterEach void tearDown() { HttpClient httpClient = HttpClient.newHttpClient(); - HttpRequest addRequest = HttpRequest.newBuilder().uri(URI.create(baseUrl + "/admin/collections?action=DELETE&name=test")) + HttpRequest addRequest = HttpRequest.newBuilder().uri(URI.create(baseUrl + "/admin/collections?action=DELETE&name=" + collectionName)) .build(); httpClient.sendAsync(addRequest, BodyHandlers.ofString()) .thenApply(HttpResponse::body) @@ -119,21 +109,25 @@ class SolrServerITCase { } private SolrDocumentList query(String key, Object value) throws SolrServerException, IOException { - SolrClient client = solrService.getSolrClient(); - final Map<String, String> queryParamMap = new HashMap<String, String>(); - queryParamMap.put("q", key + ":" + value); - queryParamMap.put("sort", "id asc"); - MapSolrParams queryParams = new MapSolrParams(queryParamMap); - final QueryResponse response = client.query("test", queryParams); - final SolrDocumentList documents = response.getResults(); - return documents; + MapSolrParams queryParams = createQueryParams(key, value); + + QueryResponse response = solrClient.query(collectionName, queryParams); + + return response.getResults(); + } + + private MapSolrParams createQueryParams(String key, Object value) { + Map<String, String> queryParamMap = new HashMap<String, String>(); + queryParamMap.put(SolrService.SOLR_QUERY, key + ":" + value); + queryParamMap.put(SolrService.SOLR_SORT, SolrService.SOLR_SORT_ID_ASC); + return new MapSolrParams(queryParamMap); } private Optional<Vorgang> findVorgangInDbByAktenzeichen(final SolrDocument doc) { List<Vorgang> vorgangs = mongoOperations.findAll(Vorgang.class); return vorgangs.stream().filter(v -> { - String ak = doc.getFirstValue("aktenzeichen").toString(); + String ak = doc.getFirstValue(SolrVorgangMapper.AKTENZEICHEN).toString(); return v.getAktenzeichen().equals(ak); }).findFirst(); } @@ -142,7 +136,7 @@ class SolrServerITCase { class TestAddVorgang { @Test - void addVorgangTest() throws SolrServerException, IOException { + void shouldAdd() throws SolrServerException, IOException { solrService.addVorgang(vorgang); final SolrDocumentList documents = query("aktenzeichen", vorgang.get("aktenzeichen").getValue()); @@ -150,30 +144,43 @@ class SolrServerITCase { assertEquals(1, documents.size()); SolrDocument doc = documents.get(0); - assertEquals("aktenzeichen", String.valueOf(doc.getFirstValue("aktenzeichen"))); - assertEquals("sabine", String.valueOf(doc.getFirstValue("assignedTo"))); - assertEquals(dateTime, String.valueOf(doc.getFirstValue("createdAt"))); - assertEquals("name", String.valueOf(doc.getFirstValue("name"))); - assertEquals("NEU", String.valueOf(doc.getFirstValue("status"))); - assertEquals("org_einhait_id", String.valueOf(doc.getFirstValue("eingang_zustaendigeStelle_organisationseinheitenId"))); - assertEquals("Max", String.valueOf(doc.getFirstValue("antragsteller_vorname"))); - assertEquals("Mueller", String.valueOf(doc.getFirstValue("antragsteller_nachname"))); - - assertNotNull(doc.get("id")); + assertThat(String.valueOf(doc.getFirstValue(SolrVorgangMapper.AKTENZEICHEN))) + .isEqualTo(SolrInputDocumentTestFactory.AKTENZEICHEN); + assertThat(String.valueOf(doc.getFirstValue(SolrVorgangMapper.ASSIGNED_TO))) + .isEqualTo(SolrInputDocumentTestFactory.ASSIGNED_TO); + assertThat(String.valueOf(doc.getFirstValue(SolrVorgangMapper.CREATED_AT))) + .isEqualTo(SolrInputDocumentTestFactory.CREATED_AT); + assertThat(String.valueOf(doc.getFirstValue(SolrVorgangMapper.NAME))) + .isEqualTo(SolrInputDocumentTestFactory.NAME); + assertThat(String.valueOf(doc.getFirstValue(SolrVorgangMapper.STATUS))) + .isEqualTo(SolrInputDocumentTestFactory.STATUS); + + checkEingang(doc); + + assertThat(doc.get("id")).isNotNull(); + } + + private void checkEingang(SolrDocument doc) { + assertThat(String.valueOf(doc.getFirstValue(SolrVorgangMapper.ORGANISATIONSEINHEITEN_ID))) + .isEqualTo(SolrInputDocumentTestFactory.ZUSTAENDIGESTELLE_ORGANISATIONSEINHEITEN_ID); + assertThat(String.valueOf(doc.getFirstValue(SolrVorgangMapper.ANTRAGSTELLER_VORNAME))) + .isEqualTo(SolrInputDocumentTestFactory.ANTRAGSTELLER_VORNAME); + assertThat(String.valueOf(doc.getFirstValue(SolrVorgangMapper.ANTRAGSTELLER_NACHNAME))) + .isEqualTo(SolrInputDocumentTestFactory.ANTRAGSTELLER_NACHNAME); } @Test - void addVorgangEventTest() throws SolrServerException, IOException { + void shouldAddByEvent() throws SolrServerException, IOException { Eingang eingang = EingangTestFactory.create(); vorgangService.createVorgang(eingang); - final SolrDocumentList documents = query("name", eingang.getHeader().getFormName()); + SolrDocumentList documents = query(SolrInputDocumentTestFactory.NAME, eingang.getHeader().getFormName()); assertEquals(1, documents.size()); SolrDocument doc = documents.get(0); - assertEquals(eingang.getHeader().getFormName(), String.valueOf(doc.getFirstValue("name"))); - assertEquals("null", String.valueOf(doc.getFirstValue("assignedTo"))); + assertThat(String.valueOf(doc.getFirstValue(SolrInputDocumentTestFactory.NAME))).isEqualTo(eingang.getHeader().getFormName()); + assertThat(String.valueOf(doc.getFirstValue(SolrInputDocumentTestFactory.ASSIGNED_TO))).isNull(); } } @@ -181,13 +188,13 @@ class SolrServerITCase { class TestUpdateVorgang { @Test - void updateVorgangTest() throws SolrServerException, IOException { + void shouldUpdate() throws SolrServerException, IOException { solrService.addVorgang(vorgang); - vorgang.setField("assignedTo", "Berta"); + vorgang.setField(SolrInputDocumentTestFactory.ASSIGNED_TO, "Berta"); solrService.updateVorgang(vorgang); - final SolrDocumentList documents = query("aktenzeichen", vorgang.get("aktenzeichen").getValue()); + final SolrDocumentList documents = query(SolrVorgangMapper.AKTENZEICHEN, vorgang.get("aktenzeichen").getValue()); assertEquals(1, documents.size()); SolrDocument doc = documents.get(0); @@ -197,17 +204,17 @@ class SolrServerITCase { } @Test - void assignVorgangEventTest() throws SolrServerException, IOException { + void shouldAssignVorgangByEvent() throws SolrServerException, IOException { Eingang eingang = EingangTestFactory.create(); vorgangService.createVorgang(eingang); - SolrDocumentList documents = query("name", eingang.getHeader().getFormName()); + SolrDocumentList documents = query(SolrVorgangMapper.NAME, eingang.getHeader().getFormName()); assertEquals(1, documents.size()); Optional<Vorgang> vorgang = findVorgangInDbByAktenzeichen(documents.get(0)); vorgang.ifPresent(vor -> { - Map<String, String> body = Map.of("assignedTo", "Paul"); + Map<String, String> body = Map.of(SolrVorgangMapper.ASSIGNED_TO, "Paul"); Command command = Command.builder() .vorgangId(vor.getId()) .relationId(vor.getId()) @@ -228,7 +235,7 @@ class SolrServerITCase { } @Test - void updateVorgangEventTest() throws SolrServerException, IOException { + void shouldUpdateByEvent() throws SolrServerException, IOException { EingangHeader eingangHeader = EingangHeaderTestFactory.createBuilder() .formName("update_vorgang_doc") .requestId("update_vorgang_req_id") diff --git a/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrServiceTest.java b/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrServiceTest.java index d3323ba2d551737dca0515b90679e5f4b1112f71..5dca8b560d792c3d22beb998721ba88a6507d3a4 100644 --- a/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrServiceTest.java +++ b/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrServiceTest.java @@ -1,13 +1,8 @@ package de.itvsh.ozg.pluto.common.solr; -import static org.junit.Assert.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -15,7 +10,6 @@ import java.io.IOException; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrServerException; -import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.client.solrj.response.UpdateResponse; import org.apache.solr.common.SolrDocument; @@ -28,9 +22,9 @@ import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; -import org.springframework.test.util.ReflectionTestUtils; class SolrServiceTest { + private static final String COLLECTION_NAME = "test"; @Spy @InjectMocks @@ -39,107 +33,49 @@ class SolrServiceTest { @Mock private SolrClient solrClient; + @Mock + private SolrProperties properties; + private SolrInputDocument vorgang; @BeforeEach - void setUp() throws Exception { - vorgang = SolrInputDocumentFactory.create(); - - ReflectionTestUtils.setField(solrService, "solrCollection", "test"); + void init() throws Exception { + vorgang = SolrInputDocumentTestFactory.create(); + when(properties.getCollection()).thenReturn(COLLECTION_NAME); } @Nested class TestAddVorgang { + UpdateResponse response = new UpdateResponse(); @Test - void addVorgang() throws SolrServerException, IOException { - UpdateResponse response = new UpdateResponse(); - when(solrClient.add("test", vorgang)).thenReturn(response); + void shouldAddVorgang() throws SolrServerException, IOException { + when(solrClient.add(COLLECTION_NAME, vorgang)).thenReturn(response); solrService.addVorgang(vorgang); - verify(solrClient, times(1)).add("test", vorgang); - verify(solrClient, times(1)).commit("test"); - } - - @Test - void addVorgangNoSolrHostConfigured() throws SolrServerException, IOException { - ReflectionTestUtils.setField(solrService, "solrClient", null); - ReflectionTestUtils.setField(solrService, "solrHosts", null); - - solrService.addVorgang(vorgang); - - verify(solrClient, times(0)).add("test", vorgang); - verify(solrClient, times(0)).commit("test"); + verify(solrClient).add(COLLECTION_NAME, vorgang); + verify(solrClient).commit(COLLECTION_NAME); } } @Nested class TestUpdateVorgang { + QueryResponse response = mock(QueryResponse.class); + SolrDocumentList documents = mock(SolrDocumentList.class); + SolrDocument doc = mock(SolrDocument.class); @Test - void updateVorgang() throws SolrServerException, IOException { - QueryResponse response = mock(QueryResponse.class); - SolrDocumentList documents = mock(SolrDocumentList.class); - SolrDocument doc = mock(SolrDocument.class); - + void shouldUpdateVorgang() throws SolrServerException, IOException { when(documents.get(0)).thenReturn(doc); when(response.getResults()).thenReturn(documents); when(solrClient.query(anyString(), any(MapSolrParams.class))).thenReturn(response); solrService.updateVorgang(vorgang); - verify(solrClient, times(1)).query(anyString(), any(MapSolrParams.class)); - verify(solrClient, times(1)).add("test", vorgang); - verify(solrClient, times(1)).commit("test"); - } - - @Test - void updateVorgangNoSolrHostConfigured() throws SolrServerException, IOException { - ReflectionTestUtils.setField(solrService, "solrClient", null); - ReflectionTestUtils.setField(solrService, "solrHosts", null); - - solrService.updateVorgang(vorgang); - - verify(solrClient, times(0)).add("test", vorgang); - verify(solrClient, times(0)).commit("test"); - } - } - - @Nested - class TestGetSolrClient { - @Test - void solrClientLazyLoadingTest() { - assertEquals(solrClient, solrService.getSolrClient()); - } - - @Test - void initSolrClientTestWhenSolrHostsNotSet() { - ReflectionTestUtils.setField(solrService, "solrClient", null); - assertNull(solrService.getSolrClient()); - } - - @Test - void initSolrClientTestWhenOneSolrHostsSet() { - ReflectionTestUtils.setField(solrService, "solrClient", null); - ReflectionTestUtils.setField(solrService, "solrHosts", "http://127.0.0.1/solr"); - assertNotNull(solrService.getSolrClient()); - assertEquals(HttpSolrClient.class, solrService.getSolrClient().getClass()); - } - - @Test - void initSolrClientTestWhenMultipleSolrHostsSet() { - ReflectionTestUtils.setField(solrService, "solrClient", null); - ReflectionTestUtils.setField(solrService, "solrHosts", "http://127.0.0.1/solr;http://127.0.0.2/solr;http://127.0.0.3/solr"); - - // The CloudHttp2SolrClient throws an exception when initialized with dummy - // values, - // so to test the creation of the solr cloud client we check for the exception. - RuntimeException thrown = assertThrows(RuntimeException.class, () -> { - solrService.getSolrClient(); - }); - - assertNotNull(thrown); + verify(solrClient).query(anyString(), any(MapSolrParams.class)); + verify(solrClient).add(COLLECTION_NAME, vorgang); + verify(solrClient).commit(COLLECTION_NAME); } } } diff --git a/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrVorgangMapperTest.java b/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrVorgangMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..5ecc9cbc16bbc35d3d7c3d3592b840062d89ada7 --- /dev/null +++ b/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/SolrVorgangMapperTest.java @@ -0,0 +1,45 @@ +package de.itvsh.ozg.pluto.common.solr; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.time.ZonedDateTime; + +import org.apache.solr.common.SolrInputDocument; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import de.itvsh.ozg.pluto.vorgang.Vorgang; +import de.itvsh.ozg.pluto.vorgang.VorgangTestFactory; + +class SolrVorgangMapperTest { + Vorgang vorgang; + ZonedDateTime dateTime; + + @BeforeEach + void setUp() throws Exception { + dateTime = ZonedDateTime.now(); + vorgang = VorgangTestFactory.create(); + } + + @Test + void testToSolrInputDocument() { + SolrInputDocument doc = SolrVorgangMapper.toSolrInputDocument(vorgang); + + assertThat(vorgang.getAktenzeichen()).isEqualTo(doc.get(SolrVorgangMapper.AKTENZEICHEN).getValue()); + assertThat(vorgang.getAssignedTo()).isEqualTo(doc.get(SolrVorgangMapper.ASSIGNED_TO).getValue()); + assertThat(vorgang.getCreatedAt()).isEqualTo(doc.get(SolrVorgangMapper.CREATED_AT).getValue()); + assertThat(vorgang.getName()).isEqualTo(doc.get(SolrVorgangMapper.NAME).getValue()); + assertThat(vorgang.getStatus().name()).isEqualTo(doc.get(SolrVorgangMapper.STATUS).getValue()); + + checkEingang(doc); + } + + private void checkEingang(SolrInputDocument doc) { + assertThat(vorgang.getEingangs().get(0).getZustaendigeStelle().getOrganisationseinheitenId()) + .isEqualTo(doc.get(SolrVorgangMapper.ORGANISATIONSEINHEITEN_ID).getValue()); + assertThat(vorgang.getEingangs().get(0).getAntragsteller().getVorname()) + .isEqualTo(doc.get(SolrVorgangMapper.ANTRAGSTELLER_VORNAME).getValue()); + assertThat(vorgang.getEingangs().get(0).getAntragsteller().getNachname()) + .isEqualTo(doc.get(SolrVorgangMapper.ANTRAGSTELLER_NACHNAME).getValue()); + } +} diff --git a/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/VorgangMapperTest.java b/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/VorgangMapperTest.java deleted file mode 100644 index 3a915f2784f33400d55c1b29076617deb097be24..0000000000000000000000000000000000000000 --- a/pluto-server/src/test/java/de/itvsh/ozg/pluto/common/solr/VorgangMapperTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package de.itvsh.ozg.pluto.common.solr; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.time.ZonedDateTime; - -import org.apache.solr.common.SolrInputDocument; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import de.itvsh.ozg.pluto.common.solr.VorgangMapper; -import de.itvsh.ozg.pluto.vorgang.Antragsteller; -import de.itvsh.ozg.pluto.vorgang.Eingang; -import de.itvsh.ozg.pluto.vorgang.Vorgang; -import de.itvsh.ozg.pluto.vorgang.ZustaendigeStelle; - -public class VorgangMapperTest { - Vorgang vorgang; - ZonedDateTime dateTime; - - @BeforeEach - void setUp() throws Exception { - dateTime = ZonedDateTime.now(); - vorgang = Vorgang.builder() - .aktenzeichen("aktenzeichen") - .assignedTo("sabine") - .createdAt(dateTime) - .eingang(Eingang.builder().antragsteller(Antragsteller.builder().nachname("Mueller").vorname("Max").build()) - .zustaendigeStelle(ZustaendigeStelle.builder().organisationseinheitenId("org_einhait_id").build()).build()) - .name("name") - .build(); - } - - @Test - void testToSolrInputDocument() { - SolrInputDocument doc = VorgangMapper.toSolrInputDocument(vorgang); - - assertEquals("aktenzeichen", doc.get("aktenzeichen").getValue()); - assertEquals("sabine", doc.get("assignedTo").getValue()); - assertEquals(dateTime, doc.get("createdAt").getValue()); - assertEquals("name", doc.get("name").getValue()); - assertEquals("NEU", doc.get("status").getValue()); - assertEquals("org_einhait_id", doc.get("eingang_zustaendigeStelle_organisationseinheitenId").getValue()); - assertEquals("Max", doc.get("antragsteller_vorname").getValue()); - assertEquals("Mueller", doc.get("antragsteller_nachname").getValue()); - } - -} diff --git a/pluto-server/src/test/resources/application-itcase.yml b/pluto-server/src/test/resources/application-itcase.yml index 6500e0a581ad96aaf423233fe99809721104eaed..35d5e9eedd0c5418d61b164ca139c735f5c73d5f 100644 --- a/pluto-server/src/test/resources/application-itcase.yml +++ b/pluto-server/src/test/resources/application-itcase.yml @@ -21,10 +21,9 @@ kop: vorgang: filter: defaultBehaviour: SHOW_ALL - -pluto: solr: - hosts: http://localhost:8983/solr + hosts: + - http://localhost:8983/solr collection: gettingstarted mongock: diff --git a/pluto-server/src/test/resources/application-with_solr.yml b/pluto-server/src/test/resources/application-with_solr.yml new file mode 100644 index 0000000000000000000000000000000000000000..ba92e8e0f26230b7bafec546153d95cb6cc16bc0 --- /dev/null +++ b/pluto-server/src/test/resources/application-with_solr.yml @@ -0,0 +1,5 @@ +kop: + solr: + hosts: + - http://localhost:8983/solr + collection: test \ No newline at end of file