Skip to content
Snippets Groups Projects
Commit 9b6e8932 authored by OZGCloud's avatar OZGCloud
Browse files

Merge pull request 'OZG-2220-update-api-implementation' (#19) from...

Merge pull request 'OZG-2220-update-api-implementation' (#19) from OZG-2220-update-api-implementation into master

Reviewed-on: https://git.ozg-sh.de/mgm/zufi-manager/pulls/19
parents 76b26f9a 0ec13af7
Branches
Tags
No related merge requests found
Showing
with 361 additions and 265 deletions
......@@ -30,7 +30,7 @@
<parent>
<groupId>de.itvsh.kop.common</groupId>
<artifactId>kop-common-parent</artifactId>
<version>2.0.0-SNAPSHOT</version>
<version>1.5.0</version>
<relativePath/>
</parent>
......
......@@ -23,12 +23,14 @@
*/
package de.itvsh.kop.zufi.common.callcontext;
import static de.itvsh.kop.common.callcontext.GrpcUtils.*;
import java.nio.charset.StandardCharsets;
import java.util.Optional;
import org.apache.logging.log4j.CloseableThreadContext;
import io.grpc.ForwardingServerCallListener;
import io.grpc.Metadata;
import io.grpc.Metadata.Key;
import io.grpc.ServerCall;
import io.grpc.ServerCall.Listener;
import io.grpc.ServerCallHandler;
......@@ -93,4 +95,12 @@ class EnhanceGrpcLoggingInterceptor implements ServerInterceptor {
return getFromHeaders(KEY_REQUEST_ID, headers).orElseGet(() -> REQUEST_ID_PLACEHOLDER);
}
}
public static Optional<String> getFromHeaders(String key, Metadata headers) {
return Optional.ofNullable(headers.get(createKeyOf(key))).map(val -> new String(val, StandardCharsets.UTF_8));
}
public static Key<byte[]> createKeyOf(String key) {
return Key.of(key, Metadata.BINARY_BYTE_MARSHALLER);
}
}
package de.itvsh.kop.zufi.organisationseinheit;
import java.io.IOException;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
class ElasticsearchClientFacade {
@Autowired
private RestHighLevelClient client;
public UpdateResponse update(UpdateRequest request) throws IOException {
return client.update(request, RequestOptions.DEFAULT);
}
}
/*
* Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.itvsh.kop.zufi.organisationseinheit;
import org.springframework.data.elasticsearch.annotations.Document;
import lombok.Builder;
import lombok.Getter;
@Document(indexName = "#{@organisationsEinheitIndexNameProvider.getIndexName()}")
@Getter
@Builder(toBuilder = true)
class OrganisationsEinheit {
public static final String ID_FIELD = "id";
public static final String VORGANG_MANAGER_ADDRESS_FIELD = "vorgangManagerAddress";
private String id;
private String vorgangManagerAddress;
}
package de.itvsh.kop.zufi.organisationseinheit;
interface OrganisationsEinheitCustomRepository {
String VORGANG_MANAGER_ADDRESS_FIELD = "vorgangManagerAddress";
boolean updateServiceAddress(String organisationsEinheitId, String serviceAddress);
}
package de.itvsh.kop.zufi.organisationseinheit;
import java.io.IOException;
import java.util.Map;
import org.elasticsearch.ElasticsearchStatusException;
import org.elasticsearch.action.DocWriteResponse.Result;
import org.elasticsearch.action.update.UpdateRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
import de.itvsh.kop.common.errorhandling.TechnicalException;
import lombok.extern.log4j.Log4j2;
@Repository
@Log4j2
class OrganisationsEinheitCustomRepositoryImpl implements OrganisationsEinheitCustomRepository {
@Value("${kop.zufi.index.name:zufi-manager}")
private String indexName;
@Autowired
private ElasticsearchClientFacade elasticsearchFacade;
@Override
public boolean updateServiceAddress(String organisationsEinheitId, String serviceAddress) {
try {
var result = elasticsearchFacade.update(
new UpdateRequest()
.doc(Map.of(VORGANG_MANAGER_ADDRESS_FIELD, serviceAddress))
.id(organisationsEinheitId)
.index(indexName))
.getResult();
return Result.UPDATED.equals(result) || Result.NOOP.equals(result);
} catch (IOException e) {
var message = "IOException when updating OrganisationsEinheit with id %s in index %s".formatted(organisationsEinheitId, indexName);
LOG.error(message, e);
throw new TechnicalException(message, e);
} catch (ElasticsearchStatusException e) {
LOG.error("ElasticsearchStatusException when updating OrganisationsEinheit with id %s. The maybe the id does not exist in index %s"
.formatted(organisationsEinheitId, indexName), e);
return false;
}
}
}
/*
* Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.itvsh.kop.zufi.organisationseinheit;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
class OrganisationsEinheitIndexNameProvider {
@Value("${kop.zufi.index.name:zufi-manager}")
private String indexName;
public String getIndexName() {
return indexName;
}
}
\ No newline at end of file
/*
* Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.itvsh.kop.zufi.organisationseinheit;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
interface OrganisationsEinheitRepository extends ElasticsearchRepository<OrganisationsEinheit, String> {
}
......@@ -33,18 +33,15 @@ import lombok.extern.log4j.Log4j2;
public class OrganisationsEinheitService {
@Autowired
private OrganisationsEinheitRepository repository;
private OrganisationsEinheitCustomRepository repository;
public void updateVorgangManagerAddress(String serviceAddress, String organisationsEinheitId) {
var organisationsEinheitOptional = repository.findById(organisationsEinheitId);
public void updateVorgangManagerAddress(String vorgangManagerAddress, String organisationsEinheitId) {
organisationsEinheitOptional.ifPresentOrElse(organisationsEinheit -> updateOrganisationEinheit(organisationsEinheit, serviceAddress),
() -> LOG.error(
"No Organsationseinheit in ZufiManager for Organgisationseinheit %s received from VorgangsManager. VorgangsManager not registered!"
.formatted(organisationsEinheitId)));
}
var updateResult = repository.updateServiceAddress(organisationsEinheitId, vorgangManagerAddress);
void updateOrganisationEinheit(OrganisationsEinheit organisationsEinheit, String vorgangManagerAddress) {
repository.save(organisationsEinheit.toBuilder().vorgangManagerAddress(vorgangManagerAddress).build());
if (!updateResult) {
LOG.error("No Organisationseinheit in ZufiManager for Id %s received from VorgangsManager. VorgangsManager not registered!"
.formatted(organisationsEinheitId));
}
}
}
......@@ -23,19 +23,25 @@
*/
package de.itvsh.kop.zufi.organisationseinheit;
import java.util.UUID;
import org.apache.http.Header;
import org.apache.http.message.BasicHeader;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
public class OrganisationsEinheitTestFactory {
public static final String ID = UUID.randomUUID().toString();
public static final String VORGANG_MANAGER_ADDRESS = "http://localhost:9100";
@Configuration
class SearchConfiguration {
public static OrganisationsEinheit create() {
return createBuilder().build();
}
private static final Header[] COMPATIBILITY_HEADERS = new Header[] {
new BasicHeader("Accept", "application/vnd.elasticsearch+json;compatible-with=7"),
new BasicHeader("Content-Type", "application/vnd.elasticsearch+json;compatible-with=7")
};
public static OrganisationsEinheit.OrganisationsEinheitBuilder createBuilder() {
return new OrganisationsEinheit.OrganisationsEinheitBuilder()
.id(ID)
.vorgangManagerAddress(VORGANG_MANAGER_ADDRESS);
@Bean
RestHighLevelClient restHighLevelClient(RestClientBuilder client) {
client.setDefaultHeaders(COMPATIBILITY_HEADERS);
return new RestHighLevelClient(client);
}
}
......@@ -30,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import de.itvsh.kop.zufi.grpc.registration.GrpcVorgangManagerRegistrationRequest;
import de.itvsh.kop.zufi.grpc.registration.GrpcVorgangManagerRegistrationResponse;
import de.itvsh.kop.zufi.grpc.registration.VorgangManagerRegistrationServiceGrpc.VorgangManagerRegistrationServiceImplBase;
import io.grpc.stub.StreamObserver;
import net.devh.boot.grpc.server.service.GrpcService;
@GrpcService
......@@ -37,10 +38,13 @@ public class VorgangManagerRegistrationGrpcService extends VorgangManagerRegistr
@Autowired
private OrganisationsEinheitService service;
public GrpcVorgangManagerRegistrationResponse register(GrpcVorgangManagerRegistrationRequest request) {
@Override
public void register(GrpcVorgangManagerRegistrationRequest request, StreamObserver<GrpcVorgangManagerRegistrationResponse> responseObserver) {
registerAddress(request.getServiceAddress(), getOrganisationeEinheiten(request));
return GrpcVorgangManagerRegistrationResponse.newBuilder().setSuccess(true).build();
responseObserver.onNext(GrpcVorgangManagerRegistrationResponse.newBuilder().setSuccess(true).build());
responseObserver.onCompleted();
}
private Stream<String> getOrganisationeEinheiten(GrpcVorgangManagerRegistrationRequest request) {
......
......@@ -3,6 +3,7 @@ logging:
root: WARN,
'[de.itvsh]': INFO
'[org.elasticsearch.client]': WARN
'[io.grpc]': DEBUG
config: classpath:log4j2-local.xml
server:
......@@ -16,7 +17,7 @@ management:
server.port: 8086
health:
elasticsearch:
enabled: false
enabled: true
endpoint:
health:
show-details: always
......
......@@ -2,10 +2,19 @@ logging:
level:
ROOT: WARN
'[de.itvsh]': INFO
'[io.grpc]': DEBUG
spring:
application:
name: ZufiManager
elasticsearch:
uris: http://localhost:9200
username: elastic
password: password
grpc:
server:
port: 9190
management:
server:
......
......@@ -23,7 +23,6 @@
*/
package de.itvsh.kop.zufi.common.callcontext;
import static de.itvsh.kop.common.callcontext.GrpcUtils.*;
import static de.itvsh.kop.zufi.common.callcontext.EnhanceGrpcLoggingInterceptor.*;
import java.util.UUID;
......
......@@ -23,7 +23,6 @@
*/
package de.itvsh.kop.zufi.common.callcontext;
import static de.itvsh.kop.common.callcontext.GrpcUtils.*;
import static de.itvsh.kop.zufi.common.callcontext.EnhanceGrpcLoggingInterceptor.*;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
......
......@@ -23,7 +23,7 @@
*/
package de.itvsh.kop.zufi.common.callcontext;
import static de.itvsh.kop.common.callcontext.GrpcUtils.*;
import static de.itvsh.kop.zufi.common.callcontext.EnhanceGrpcLoggingInterceptor.*;
import java.util.UUID;
......
......@@ -23,52 +23,100 @@
*/
package de.itvsh.kop.zufi.organisationseinheit;
import static de.itvsh.kop.zufi.organisationseinheit.OrganisationsEinheit.*;
import static de.itvsh.kop.zufi.organisationseinheit.OrganisationsEinheitTestDocument.*;
import static org.assertj.core.api.Assertions.*;
import java.util.UUID;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.core.Map;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.test.context.ContextConfiguration;
import de.itvsh.kop.common.test.ITCase;
import de.itvsh.kop.zufi.SearchTestInitializer;
import lombok.SneakyThrows;
@ITCase
@ContextConfiguration(initializers = SearchTestInitializer.class)
class OrganisationsEinheitRepositoryITCase {
class OrganisationsEinheitCustomRepositoryITCase {
@Autowired
private OrganisationsEinheitCustomRepository repository;
@Autowired
private OrganisationsEinheitRepository repository;
private RestHighLevelClient elasticsearchClient;
@Autowired
private ElasticsearchOperations elasticsearchOperations;
@BeforeEach
void initDatabase() {
elasticsearchOperations.indexOps(OrganisationsEinheit.class).delete();
void initDatabase() throws Exception {
elasticsearchOperations.indexOps(IndexCoordinates.of("zufi-manager")).delete();
elasticsearchOperations.save(OrganisationsEinheitTestFactory.createBuilder().vorgangManagerAddress(null).build());
var insert = new IndexRequest().index("zufi-manager").source(Map.of(ID_KEY, ID, VALUE_KEY, VALUE)).id(ID);
elasticsearchClient.index(insert, RequestOptions.DEFAULT);
}
@DisplayName("Test updating a OrganisationsEinheit document in elasticsearch")
@DisplayName("Test updating an Organisationseinheit document in elasticsearch")
@Nested
class TestSave {
class TestUpdate {
@Test
void shouldReturnUpdateSuccess() {
var updateSuccess = repository.updateServiceAddress(ID, VORGANG_MANAGER_ADDRESS);
assertThat(updateSuccess).isTrue();
}
@Test
void shouldDoUpdate() {
var updateSuccess = repository.updateServiceAddress(ID, VORGANG_MANAGER_ADDRESS);
assertThat(updateSuccess).isTrue();
var doc = elasticsearchOperations.get(ID, OrganisationsEinheitTestDocument.class);
assertThat(doc)
.hasFieldOrPropertyWithValue(VORGANG_MANAGER_ADDRESS_KEY, VORGANG_MANAGER_ADDRESS);
}
@Test
@SneakyThrows
void shouldDoUpdateSameExistingAddress() {
var insert = new IndexRequest().index("zufi-manager")
.source(Map.of(ID_KEY, ID, VALUE_KEY, VALUE, VORGANG_MANAGER_ADDRESS_KEY, VORGANG_MANAGER_ADDRESS)).id(ID);
elasticsearchClient.index(insert, RequestOptions.DEFAULT);
var updateSuccess = repository.updateServiceAddress(ID, VORGANG_MANAGER_ADDRESS);
assertThat(updateSuccess).isTrue();
var doc = elasticsearchOperations.get(ID, OrganisationsEinheitTestDocument.class);
assertThat(doc)
.hasFieldOrPropertyWithValue(VORGANG_MANAGER_ADDRESS_KEY, VORGANG_MANAGER_ADDRESS);
}
@Test
void shouldUpdate() {
var organisationsEinheit = repository.save(OrganisationsEinheitTestFactory.create());
void shouldOnlyAddServiceAddress() {
repository.updateServiceAddress(ID, VORGANG_MANAGER_ADDRESS);
assertThat(organisationsEinheit).isNotNull().hasFieldOrProperty(VORGANG_MANAGER_ADDRESS_FIELD).isNotNull();
var doc = elasticsearchOperations.get(ID, OrganisationsEinheitTestDocument.class);
assertThat(doc)
.hasFieldOrPropertyWithValue(ID_KEY, ID)
.hasFieldOrPropertyWithValue(VALUE_KEY, VALUE)
.hasFieldOrPropertyWithValue(VORGANG_MANAGER_ADDRESS_KEY, VORGANG_MANAGER_ADDRESS);
}
@Test
void shouldInsert() {
var organisationsEinheit = repository.save(OrganisationsEinheitTestFactory.createBuilder().id(null).build());
void shouldNotUpdate() {
var updateSuccess = repository.updateServiceAddress(UUID.randomUUID().toString(), VORGANG_MANAGER_ADDRESS);
assertThat(organisationsEinheit).isNotNull().hasFieldOrProperty(ID_FIELD).isNotNull();
assertThat(updateSuccess).isFalse();
}
}
}
package de.itvsh.kop.zufi.organisationseinheit;
import static de.itvsh.kop.zufi.organisationseinheit.OrganisationsEinheitTestDocument.*;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import java.io.IOException;
import org.elasticsearch.ElasticsearchStatusException;
import org.elasticsearch.action.DocWriteResponse.Result;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.springframework.test.util.ReflectionTestUtils;
import de.itvsh.kop.common.errorhandling.TechnicalException;
import lombok.SneakyThrows;
class OrganisationsEinheitCustomRepositoyTest {
@Spy
@InjectMocks
private OrganisationsEinheitCustomRepositoryImpl repository;
@Mock
private ElasticsearchClientFacade client;
@BeforeEach
void init() {
ReflectionTestUtils.setField(repository, "indexName", "test-index");
}
@DisplayName("Test updating elasticsearch entry")
@Nested
class TestUpdate {
@Mock
private UpdateResponse response;
@Test
@SneakyThrows
void shouldUpdate() {
doReturn(response).when(client).update(any(UpdateRequest.class));
repository.updateServiceAddress(ID, VORGANG_MANAGER_ADDRESS);
verify(client).update(any(UpdateRequest.class));
}
@DisplayName("Test successfull results")
@Nested
class TestSuccess {
@ParameterizedTest
@SneakyThrows
@EnumSource(value = Result.class, names = { "UPDATED", "NOOP" })
void shouldHandleSuccessResult(Result result) {
when(response.getResult()).thenReturn(result);
doReturn(response).when(client).update(any(UpdateRequest.class));
var res = repository.updateServiceAddress(ID, VORGANG_MANAGER_ADDRESS);
assertThat(res).isTrue();
}
}
@DisplayName("Test unsuccessfull results")
@Nested
class TestFailures {
@ParameterizedTest
@SneakyThrows
@EnumSource(value = Result.class, names = { "NOT_FOUND", "DELETED" })
void shouldHandleNotFoundResult(Result result) {
when(response.getResult()).thenReturn(result);
doReturn(response).when(client).update(any(UpdateRequest.class));
var res = repository.updateServiceAddress(ID, VORGANG_MANAGER_ADDRESS);
assertThat(res).isFalse();
}
}
@DisplayName("Test handling exception while updating elasticsearch entry")
@Nested
class TestExceptions {
@Test
@SneakyThrows
void shouldHandleIOException() {
when(client.update(any(UpdateRequest.class))).thenThrow(IOException.class);
assertThatExceptionOfType(TechnicalException.class).isThrownBy(() -> repository.updateServiceAddress(ID, VORGANG_MANAGER_ADDRESS));
}
@Test
@SneakyThrows
void shouldNotThrowExceptionOnElasticsearchStatusException() {
when(client.update(any(UpdateRequest.class))).thenThrow(ElasticsearchStatusException.class);
assertThatNoException().isThrownBy(() -> repository.updateServiceAddress(ID, VORGANG_MANAGER_ADDRESS));
}
}
}
}
/*
* Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.itvsh.kop.zufi.organisationseinheit;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import de.itvsh.kop.zufi.SearchTestInitializer;
class OrganisationsEinheitIndexNameProviderITCase {
@SpringBootTest
@ContextConfiguration(initializers = SearchTestInitializer.class)
@DisplayName("Test provider for default index name")
@Nested
class TestDefaultNameProvider {
@Autowired
private OrganisationsEinheitIndexNameProvider nameProvider;
@Test
void shouldGetIndexName() {
var name = nameProvider.getIndexName();
assertThat(name).isEqualTo("zufi-manager");
}
}
@SpringBootTest(properties = "kop.zufi.index.name=other-zufi-manager")
@ContextConfiguration(initializers = SearchTestInitializer.class)
@DisplayName("Test provider for configured index name")
@Nested
class TestConfiguredNameProvider {
@Autowired
private OrganisationsEinheitIndexNameProvider nameProvider;
@Test
void shouldGetIndexName() {
var name = nameProvider.getIndexName();
assertThat(name).isEqualTo("other-zufi-manager");
}
}
}
/*
* Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.itvsh.kop.zufi.organisationseinheit;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.Spy;
import org.springframework.test.util.ReflectionTestUtils;
class OrganisationsEinheitIndexNameProviderTest {
private static final String NAME_PROVIDER = "nameProvider";
@DisplayName("Test provider for index name")
@Nested
class TestNameProvider {
@Spy
private OrganisationsEinheitIndexNameProvider nameProvider;
@BeforeEach
void init() {
ReflectionTestUtils.setField(nameProvider, "indexName", NAME_PROVIDER);
}
@Test
void shouldGetIndexName() {
var name = nameProvider.getIndexName();
assertThat(name).isEqualTo(NAME_PROVIDER);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment