diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/FindVorgangIteratorTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/FindVorgangIteratorTest.java new file mode 100644 index 0000000000000000000000000000000000000000..d519cc755840c71e0bec451fd8098e9b2379160a --- /dev/null +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/FindVorgangIteratorTest.java @@ -0,0 +1,293 @@ +/* + * Copyright (C) 2024 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.ozgcloud.nachrichten.postfach; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.Collections; +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.springframework.test.util.ReflectionTestUtils; + +import de.ozgcloud.vorgang.common.GrpcQueryOperator; +import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest; +import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangResponse; +import de.ozgcloud.vorgang.vorgang.GrpcQuery; +import de.ozgcloud.vorgang.vorgang.GrpcVorgangHeader; +import de.ozgcloud.vorgang.vorgang.GrpcVorgangQueryExpression; +import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub; + +class FindVorgangIteratorTest { + + private static final String SERVICEKONTO_TYPE = "servicekontoType"; + private static final String POSTFACH_ID = "postfachId"; + + private FindVorgangIterator findVorgangIterator; + + @Mock + private VorgangServiceBlockingStub vorgangServiceStub; + + @BeforeEach + void init() { + findVorgangIterator = spy(new FindVorgangIterator(vorgangServiceStub, SERVICEKONTO_TYPE, POSTFACH_ID)); + } + + @Nested + class TestHasNext { + + @Mock + private GrpcFindVorgangResponse findVorgangResponse; + @Mock + private GrpcFindVorgangRequest findVorgangRequest; + @Mock + private GrpcVorgangHeader vorgangHeader; + + @BeforeEach + void inti() { + when(vorgangServiceStub.findVorgang(any())).thenReturn(findVorgangResponse); + when(findVorgangResponse.getVorgangList()).thenReturn(List.of(vorgangHeader)); + } + + @Test + void shouldCallShouldRequestNext() { + findVorgangIterator.hasNext(); + + verify(findVorgangIterator).shouldRequestNext(); + } + + @Test + void shouldCallBuildFindRequest() { + findVorgangIterator.hasNext(); + + verify(findVorgangIterator).buildFindRequest(0); + } + + @Test + void shouldCallVorgangServiceStub() { + doReturn(findVorgangRequest).when(findVorgangIterator).buildFindRequest(anyInt()); + + findVorgangIterator.hasNext(); + + verify(vorgangServiceStub).findVorgang(findVorgangRequest); + } + + @Test + void shouldSetVorgangHeaderIterator() { + findVorgangIterator.hasNext(); + + assertThat(ReflectionTestUtils.getField(findVorgangIterator, "vorgangHeaderIterator")).isNotNull(); + } + + @Test + void shouldSetLastVorgangListSize() { + findVorgangIterator.hasNext(); + + assertThat(ReflectionTestUtils.getField(findVorgangIterator, "lastVorgangListSize")).isEqualTo(1); + } + + @Test + void shouldIncreaseOffset() { + doReturn(true).when(findVorgangIterator).shouldRequestNext(); + + findVorgangIterator.hasNext(); + findVorgangIterator.hasNext(); + + assertThat(ReflectionTestUtils.getField(findVorgangIterator, "offset")).isEqualTo(1); + } + } + + @Nested + class TestShouldRequestNext { + + @Test + void shouldReturnTrueIfNoFindVorgangRequest() { + var result = findVorgangIterator.shouldRequestNext(); + + assertThat(result).isTrue(); + } + + @Test + void shouldReturnTrueIfNoNextElementLastVorgangListSizeIsLimit() { + ReflectionTestUtils.setField(findVorgangIterator, "vorgangHeaderIterator", Collections.emptyIterator()); + ReflectionTestUtils.setField(findVorgangIterator, "lastVorgangListSize", FindVorgangIterator.LIMIT); + + var result = findVorgangIterator.shouldRequestNext(); + + assertThat(result).isTrue(); + } + } + + @Nested + class TestNext { + + @Mock + private GrpcVorgangHeader nextVorgangHeader; + + @Test + void shouldReturnNextElement() { + ReflectionTestUtils.setField(findVorgangIterator, "vorgangHeaderIterator", List.of(nextVorgangHeader).iterator()); + + var result = findVorgangIterator.next(); + + assertThat(result).isSameAs(nextVorgangHeader); + } + } + + @Nested + class TestBuildFindRequest { + + private static final int OFFSET = 100; + + @Test + void shouldSetOffset() { + var result = buildFindRequest(); + + assertThat(result.getOffset()).isEqualTo(OFFSET); + } + + @Test + void shouldSetLimit() { + var result = buildFindRequest(); + + assertThat(result.getLimit()).isEqualTo(FindVorgangIterator.LIMIT); + } + + @Test + void shouldCallBuildQuery() { + buildFindRequest(); + + verify(findVorgangIterator).buildQuery(); + } + + @Test + void shouldSetQuery() { + var query = GrpcQuery.newBuilder().build(); + doReturn(query).when(findVorgangIterator).buildQuery(); + + var result = buildFindRequest(); + + assertThat(result.getQuery()).isSameAs(query); + } + + private GrpcFindVorgangRequest buildFindRequest() { + return findVorgangIterator.buildFindRequest(OFFSET); + } + } + + @Nested + class TestBuildQuery { + + @Mock + private GrpcVorgangQueryExpression servicekontoExpression; + @Mock + private GrpcVorgangQueryExpression postfachIdExpression; + + @Test + void shouldCallBuildServicekontoExpression() { + findVorgangIterator.buildQuery(); + + verify(findVorgangIterator).buildServicekontoExpression(); + } + + @Test + void shouldSetServicekontoExpression() { + doReturn(servicekontoExpression).when(findVorgangIterator).buildServicekontoExpression(); + + var result = findVorgangIterator.buildQuery(); + + assertThat(result.getExpressionsList()).contains(servicekontoExpression); + } + + @Test + void shouldCallBuildPostfachIdExpression() { + findVorgangIterator.buildQuery(); + + verify(findVorgangIterator).buildPostfachIdExpression(); + } + + @Test + void shouldSetPostfachIdExpression() { + doReturn(postfachIdExpression).when(findVorgangIterator).buildPostfachIdExpression(); + + var result = findVorgangIterator.buildQuery(); + + assertThat(result.getExpressionsList()).contains(postfachIdExpression); + } + } + + @Nested + class TestBuildServicekontoExpression { + + @Test + void shouldSetPath() { + var result = findVorgangIterator.buildServicekontoExpression(); + + assertThat(result.getPath()).isEqualTo(FindVorgangIterator.PATH_SERVICEKONTO_TYPE); + } + + @Test + void shouldSetOperator() { + var result = findVorgangIterator.buildServicekontoExpression(); + + assertThat(result.getOperator()).isEqualTo(GrpcQueryOperator.EQUAL); + } + + @Test + void shouldSetOperandStringValue() { + var result = findVorgangIterator.buildServicekontoExpression(); + + assertThat(result.getOperandStringValue()).isEqualTo(SERVICEKONTO_TYPE); + } + } + + @Nested + class TestBuildPostfachIdExpression { + + @Test + void shouldSetPath() { + var result = findVorgangIterator.buildPostfachIdExpression(); + + assertThat(result.getPath()).isEqualTo(FindVorgangIterator.PATH_POSTFACH_ID); + } + + @Test + void shouldSetOperator() { + var result = findVorgangIterator.buildPostfachIdExpression(); + + assertThat(result.getOperator()).isEqualTo(GrpcQueryOperator.EQUAL); + } + + @Test + void shouldSetOperandStringValue() { + var result = findVorgangIterator.buildPostfachIdExpression(); + + assertThat(result.getOperandStringValue()).isEqualTo(POSTFACH_ID); + } + } +} \ No newline at end of file