diff options
| author | Thomas <> | 2021-11-15 10:20:07 +0100 | 
|---|---|---|
| committer | Thomas <> | 2021-11-15 10:20:07 +0100 | 
| commit | 85b20a28e3a44e2c0fd68d10c033bcace0b6203c (patch) | |
| tree | 26e7a90ac2088114a746d4b7e1f55f798ce66d51 /eidas_modules/authmodule-eIDAS-v2/src/test/java | |
| parent | 9385171b2137eb71b3b5a0d9524b69fa95b48699 (diff) | |
| download | National_eIDAS_Gateway-85b20a28e3a44e2c0fd68d10c033bcace0b6203c.tar.gz National_eIDAS_Gateway-85b20a28e3a44e2c0fd68d10c033bcace0b6203c.tar.bz2 National_eIDAS_Gateway-85b20a28e3a44e2c0fd68d10c033bcace0b6203c.zip | |
add jUnit test for InitialSearchTask that uses production like responses from ZMR T-stage
Diffstat (limited to 'eidas_modules/authmodule-eIDAS-v2/src/test/java')
3 files changed, 530 insertions, 3 deletions
| diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrClientTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrClientTest.java index 127f5d3c..beedfda0 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrClientTest.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrClientTest.java @@ -65,9 +65,9 @@ import lombok.SneakyThrows;  @DirtiesContext(classMode = ClassMode.AFTER_CLASS)  public class ZmrClientTest { -  private static final String PROCESS_GENERAL = "GP_EIDAS"; -  private static final String PROCESS_TASK_SEARCH = "ZPR_VO_Person_suchen_Meldevorgang"; -  private static final String PROCESS_TASK_UPDATE = "ZPR_VO_Person_aendern"; +  public static final String PROCESS_GENERAL = "GP_EIDAS"; +  public static final String PROCESS_TASK_SEARCH = "ZPR_VO_Person_suchen_Meldevorgang"; +  public static final String PROCESS_TASK_UPDATE = "ZPR_VO_Person_aendern";    @Autowired    MsConnectorDummyConfigMap basicConfig; diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateOtherLoginMethodGuiTaskTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateOtherLoginMethodGuiTaskTest.java index 0b169ca4..eed0d53d 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateOtherLoginMethodGuiTaskTest.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateOtherLoginMethodGuiTaskTest.java @@ -7,6 +7,7 @@ import java.util.Locale;  import org.apache.commons.lang3.RandomStringUtils;  import org.junit.Assert;  import org.junit.Before; +import org.junit.BeforeClass;  import org.junit.Test;  import org.junit.runner.RunWith;  import org.springframework.beans.factory.annotation.Autowired; @@ -44,6 +45,12 @@ public class GenerateOtherLoginMethodGuiTaskTest {    private MockHttpServletRequest httpReq;    private MockHttpServletResponse httpResp; +  @BeforeClass +  public static void classInitializer() { +    Locale.setDefault(Locale.ENGLISH); +    +  } +      /**     * jUnit test set-up.     *  diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskWithRegistersTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskWithRegistersTest.java new file mode 100644 index 00000000..11dfc522 --- /dev/null +++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskWithRegistersTest.java @@ -0,0 +1,520 @@ +/* + * Copyright 2020 A-SIT Plus GmbH + * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ, + * A-SIT Plus GmbH, A-SIT, and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "License"); + * You may not use this work except in compliance with the License. + * You may obtain a copy of the License at: + * https://joinup.ec.europa.eu/news/understanding-eupl-v12 + * + * 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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.tasks; + +import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.math.BigInteger; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBElement; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Unmarshaller; +import javax.xml.namespace.QName; + +import org.apache.commons.lang3.RandomStringUtils; +import org.jetbrains.annotations.NotNull; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.annotation.DirtiesContext.ClassMode; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import com.github.skjolber.mockito.soap.SoapServiceRule; + +import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr.IZmrClient; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr.ZmrSoapClient.ZmrRegisterResult; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.MatchedPersonResult; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.RegisterResult; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.ernp.IErnpClient; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidPostProcessingException; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasAttributeException; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasSAuthenticationException; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.WorkflowException; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.handler.CountrySpecificDetailSearchProcessor; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.handler.GenericEidProcessor; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.ICcSpecificEidProcessingService; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.RegisterSearchService; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.RegisterSearchService.RegisterStatusResults; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.InitialSearchTask; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.test.clients.ZmrClientTest; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.MatchingTaskUtils; +import at.gv.bmi.namespace.zmr_su.base._20040201.RequestType; +import at.gv.bmi.namespace.zmr_su.base._20040201.ResponseType; +import at.gv.bmi.namespace.zmr_su.base._20040201_.ServicePort; +import at.gv.egiz.eaaf.core.api.IRequest; +import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext; +import at.gv.egiz.eaaf.core.exceptions.EaafStorageException; +import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException; +import at.gv.egiz.eaaf.core.impl.idp.auth.data.AuthProcessDataWrapper; +import at.gv.egiz.eaaf.core.impl.idp.module.test.TestRequestImpl; +import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl; +import eu.eidas.auth.commons.attribute.AttributeDefinition; +import eu.eidas.auth.commons.attribute.ImmutableAttributeMap; +import eu.eidas.auth.commons.attribute.PersonType; +import eu.eidas.auth.commons.light.impl.LightRequest; +import eu.eidas.auth.commons.protocol.impl.AuthenticationResponse; +import lombok.SneakyThrows; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { +    "/SpringTest-context_tasks_test.xml", +    "/SpringTest-context_basic_mapConfig.xml", +    "/SpringTest-context_ccSearchProcessor_test.xml" +}) +@DirtiesContext(classMode = ClassMode.BEFORE_CLASS) +public class InitialSearchTaskWithRegistersTest { + +  private static final String EE = "EE"; +  private static final String DE = "DE"; + +  @Rule +  public SoapServiceRule soap = SoapServiceRule.newInstance(); +   +  @Mock private IErnpClient ernpClient; + +  @Autowired private IZmrClient zmrClient; +  @Autowired private List<CountrySpecificDetailSearchProcessor> handlers; +  private RegisterSearchService registerSearchService; + +  private ServicePort zmrMock = null; +   +  private final ICcSpecificEidProcessingService eidPostProcessor = createEidPostProcessor(); +  private InitialSearchTask task; + +  final ExecutionContext executionContext = new ExecutionContextImpl(); +  private TestRequestImpl pendingReq; +  private static JAXBContext jaxbContext; + +  /** +   * Initialize jUnit class. +   */ +  @BeforeClass +  @SneakyThrows +  public static void classInitializer() { +    jaxbContext = JAXBContext.newInstance( +        at.gv.bmi.namespace.zmr_su.zmr._20040201.ObjectFactory.class, +        at.gv.bmi.namespace.zmr_su.gis._20070725.ObjectFactory.class, +        at.gv.bmi.namespace.zmr_su.base._20040201.ObjectFactory.class); +  } + +   +  /** +   * jUnit test set-up. +   */ +  @Before +  public void setUp() throws URISyntaxException, EaafStorageException { +    MockitoAnnotations.initMocks(this); + +    if (zmrMock == null) { +      zmrMock = soap.mock(ServicePort.class, "http://localhost:1234/demozmr"); +       +    } +     +    registerSearchService = new RegisterSearchService(handlers, zmrClient, ernpClient); +    task = new InitialSearchTask(registerSearchService, eidPostProcessor); + +    MockHttpServletRequest httpReq = new MockHttpServletRequest("POST", "https://localhost/authhandler"); +    MockHttpServletResponse httpResp = new MockHttpServletResponse(); +    RequestContextHolder.resetRequestAttributes(); +    RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp)); + +    pendingReq = new TestRequestImpl(); + +  } + +  /** +   * One match, but register update needed +   */ +  @Test +  @DirtiesContext +  public void singlePersonalIdMatchUpdateNecessary_Zmr() throws Exception { +     +    String oldGivenName = "XXXClaus - Maria"; +     +    //inject eIDAS data +    pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession( +        Constants.DATA_FULL_EIDAS_RESPONSE,  +        buildDummyAuthResponse("XXXKlaus - Maria", "XXXvon Brandenburg",  +            "DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", "1994-12-31")); + +    final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class); +     +    // inject response +    when(zmrMock.service(zmrReq.capture(), any())) +        .thenReturn(loadResponseFromFile("/data/zmr/seq_1-8_search_with_personalId_only_resp.xml")) +        .thenThrow(new RuntimeException("This request is not needed any more"));     + +     +    // execute test +    task.execute(pendingReq, executionContext); + +    // validate state +    //INFO: has to be the old givenName because ZMR allows no update of MDS information +    checkMatchingSuccessState(pendingReq, "UgeknNsc26lVuB7U/uYGVmWtnnA=", "XXXvon Brandenburg",  +        oldGivenName, "1994-12-31", DE); + +    // validate request +    assertEquals("wrong number of req.", 1, zmrReq.getAllValues().size()); +    assertNotNull("Personensuche req.", zmrReq.getValue().getPersonSuchenRequest()); +    checkBasicRequestParameters(zmrReq.getValue(), ZmrClientTest.PROCESS_TASK_SEARCH, null, "jUnit123456"); +     +  } + + +  /** +   * Two matches by PersonalId found in ZMR +   * +   * @throws EidasSAuthenticationException +   */ +  @Test +  @DirtiesContext +  @SneakyThrows +  public void multiPersonalIdMatch_Zmr() throws EidasSAuthenticationException {     +    //inject eIDAS data +    pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession( +        Constants.DATA_FULL_EIDAS_RESPONSE,  +        buildDummyAuthResponse("XXXKlaus - Maria", "XXXvon Brandenburg",  +            "DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", "1994-12-31")); +     +    // inject response +    when(zmrMock.service(any(), any())) +        .thenReturn(loadResponseFromFile("/data/zmr/search_with_personalId_only_resp_moreThanOne.xml")) +        .thenThrow(new RuntimeException("This request is not needed any more"));     + +    // execute task +    TaskExecutionException exception = assertThrows(TaskExecutionException.class, +        () -> task.execute(pendingReq, executionContext)); + +    // validate state +    assertTrue("Wrong exception", (exception.getOriginalException() instanceof WorkflowException)); +    assertTrue("Wrong flag 'manualFixNeeded'", +        ((WorkflowException) exception.getOriginalException()).isRequiresManualFix()); +     +  } +   +   +  /** +   * Find single person in ZMR by country specifics. +   */ +  @Test +  @DirtiesContext +  public void singlePersonFindWithCountySpecifics_Zmr() throws Exception {         +    //inject eIDAS data +    pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession( +        Constants.DATA_FULL_EIDAS_RESPONSE,  +        buildDummyAuthResponse("XXXClaus - Maria", "XXXvon Brandenburg",  +            "DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit_with_New_ID", "1994-12-31", +            null, "Hintergigritzpotschn", "XXXvon Heuburg")); +         +    final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class); +    BigInteger processId = new BigInteger("367100000000079"); +     +    // inject response +    when(zmrMock.service(zmrReq.capture(), any())) +        .thenReturn(loadResponseFromFile("/data/zmr/empty_zmr_result.xml"))   //personalId search +        .thenReturn(loadResponseFromFile("/data/zmr/seq_1-8_search_with_personalId_only_resp.xml"))  //CC specific search +        .thenReturn(loadResponseFromFile("/data/zmr/seq_1-4_kitt_get_latest_version_resp.xml"))  //KITT latest version          +        .thenReturn(loadResponseFromFile("/data/zmr/seq_1-6_kitt_update_resp.xml"))  //KITT update +        .thenThrow(new RuntimeException("This request is not needed any more")); +     +    // execute test +    task.execute(pendingReq, executionContext); + +    // validate state +    checkMatchingSuccessState(pendingReq, "UgeknNsc26lVuB7U/uYGVmWtnnA=", "XXXvon Brandenburg",  +        "XXXClaus - Maria", "1994-12-31", DE); + +    // validate request +    assertEquals("wrong number of req.", 4, zmrReq.getAllValues().size());     +    checkBasicRequestParameters(zmrReq.getAllValues().get(0), ZmrClientTest.PROCESS_TASK_SEARCH, null, "jUnit123456"); +    checkBasicRequestParameters(zmrReq.getAllValues().get(1), ZmrClientTest.PROCESS_TASK_SEARCH, processId, "jUnit123456"); +    checkBasicRequestParameters(zmrReq.getAllValues().get(2), ZmrClientTest.PROCESS_TASK_SEARCH, processId, "jUnit123456"); +    checkBasicRequestParameters(zmrReq.getAllValues().get(3), ZmrClientTest.PROCESS_TASK_UPDATE, processId, "jUnit123456"); +     +  } +   +  /** +   * Find one match with MDS search in ZMR. +   */ +  @Test +  @DirtiesContext +  @SneakyThrows +  public void resultByMdsSearch_Zmr() throws TaskExecutionException, EidasSAuthenticationException { +    //inject eIDAS data +    pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession( +        Constants.DATA_FULL_EIDAS_RESPONSE,  +        buildDummyAuthResponse("XXXClaus - Maria", "XXXvon Brandenburg",  +            "DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit_with_New_ID", "1994-12-31")); +         +    final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class); +    BigInteger processId = new BigInteger("367100000000079"); +     +    // inject response +    when(zmrMock.service(zmrReq.capture(), any())) +        .thenReturn(loadResponseFromFile("/data/zmr/empty_zmr_result.xml"))   //personalId search +        //CC-specific will be ignored because CC is DE but BirthName and PlaceOfBirth is 'null'  +        .thenReturn(loadResponseFromFile("/data/zmr/seq_1-2_search_with_mds_resp.xml"))  //MDS specific search        +        .thenThrow(new RuntimeException("This request is not needed any more")); + + +    // execute test +    task.execute(pendingReq, executionContext); + +    // validate state +    checkIntermediateResult(1); + +    // validate request +    assertEquals("wrong number of req.", 2, zmrReq.getAllValues().size()); +    checkBasicRequestParameters(zmrReq.getAllValues().get(0), ZmrClientTest.PROCESS_TASK_SEARCH, null, "jUnit123456"); +    checkBasicRequestParameters(zmrReq.getAllValues().get(1), ZmrClientTest.PROCESS_TASK_SEARCH, processId, "jUnit123456"); +     +  } +   +  /** +   * Find one match with MDS search in ZMR. +   */ +  @Test +  @DirtiesContext +  @SneakyThrows +  public void resultByMdsSearch_Zmr_Second() throws TaskExecutionException, EidasSAuthenticationException { +    //inject eIDAS data +    pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession( +        Constants.DATA_FULL_EIDAS_RESPONSE,  +        buildDummyAuthResponse("XXXClaus - Maria", "XXXvon Brandenburg",  +            "DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit_with_New_ID", "1994-12-31", +            null, "Hintergigritzpotschn", "XXXvon Heuburg")); +         +    final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class); +    BigInteger processId = new BigInteger("367100000000079"); +     +    // inject response +    when(zmrMock.service(zmrReq.capture(), any())) +        .thenReturn(loadResponseFromFile("/data/zmr/empty_zmr_result.xml"))   //personalId search +        .thenReturn(loadResponseFromFile("/data/zmr/empty_zmr_result.xml"))   //CC-specific search  +        .thenReturn(loadResponseFromFile("/data/zmr/search_with_personalId_only_resp_moreThanOne.xml"))  //MDS specific search        +        .thenThrow(new RuntimeException("This request is not needed any more")); + + +    // execute test +    task.execute(pendingReq, executionContext); + +    // validate state +    checkIntermediateResult(2); + +    // validate request +    assertEquals("wrong number of req.", 3, zmrReq.getAllValues().size()); +    checkBasicRequestParameters(zmrReq.getAllValues().get(0), ZmrClientTest.PROCESS_TASK_SEARCH, null, "jUnit123456"); +    checkBasicRequestParameters(zmrReq.getAllValues().get(1), ZmrClientTest.PROCESS_TASK_SEARCH, processId, "jUnit123456"); +    checkBasicRequestParameters(zmrReq.getAllValues().get(2), ZmrClientTest.PROCESS_TASK_SEARCH, processId, "jUnit123456"); +     +  } +   +   +   +  @NotNull +  private ICcSpecificEidProcessingService createEidPostProcessor() { +    return new ICcSpecificEidProcessingService() { + +      private final GenericEidProcessor genericEidProcessor = new GenericEidProcessor(); + +      @Override +      public SimpleEidasData postProcess(Map<String, Object> eidasAttrMap) throws EidPostProcessingException, EidasAttributeException { +        return genericEidProcessor.postProcess(eidasAttrMap); +      } + +      @Override +      public void preProcess(String selectedCC, IRequest pendingReq, LightRequest.Builder authnRequestBuilder) { +        genericEidProcessor.preProcess(pendingReq, authnRequestBuilder); +      } +    }; +  } +   +  @NotNull +  private ZmrRegisterResult zmrRegisterResult(RegisterResult registerResult, BigInteger processId) { +    return new ZmrRegisterResult(Collections.singletonList(registerResult), processId); +  } + +  @NotNull +  private ZmrRegisterResult zmrRegisterResult(RegisterResult registerResult) { +    return zmrRegisterResult(registerResult, generateRandomProcessId()); +  } + + +  private BigInteger generateRandomProcessId() { +    return new BigInteger(RandomStringUtils.randomNumeric(10)); + +  } + +  private void checkMatchingSuccessState(IRequest pendingReq, String bpk, String familyName, String givenName, +                                         String birhday, String countryCode) { +    assertNull("Find intermediate matching data but matching should be finished", +        MatchingTaskUtils.getIntermediateMatchingResult(pendingReq)); +    assertNotNull("find no eIDAS inbut data", MatchingTaskUtils.getInitialEidasData(pendingReq)); + +    MatchedPersonResult personInfo = MatchingTaskUtils.getFinalMatchingResult(pendingReq); +    assertNotNull("no final matching result", personInfo); +    assertEquals("wrong bpk", bpk, personInfo.getBpk()); +    assertEquals("wrong givenName", givenName, personInfo.getGivenName()); +    assertEquals("wrong familyName", familyName, personInfo.getFamilyName()); +    assertEquals("wrong dateOfBirth", birhday, personInfo.getDateOfBirth()); +    assertEquals("wrong countryCode", countryCode, personInfo.getCountryCode()); + +  } + +  private void checkIntermediateResult(int resultSize) { +    Boolean transitionGUI = (Boolean) executionContext.get(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK); +    Assert.assertTrue("Wrong transition", transitionGUI); +    Boolean transitionErnb = (Boolean) executionContext.get(Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK); +    Assert.assertNull("Wrong transition", transitionErnb); + +    assertNotNull("find no eIDAS inbut data", MatchingTaskUtils.getInitialEidasData(pendingReq)); +    assertNull("Find final matching data but no match sould be found", +        MatchingTaskUtils.getFinalMatchingResult(pendingReq)); + +    RegisterStatusResults result = MatchingTaskUtils.getIntermediateMatchingResult(pendingReq); +    assertNotNull("Find no intermediate matching data", result); +    assertEquals("wrong intermediate result size", resultSize, result.getResultCount()); + +  } + +  @NotNull +  private AuthenticationResponse buildDummyAuthResponse(String givenName, String familyName, String identifier, +                                                        String dateOfBirth) throws URISyntaxException { +    return buildDummyAuthResponse(givenName, familyName, identifier, dateOfBirth, null, null, null); +  } + +  @NotNull +  private AuthenticationResponse buildDummyAuthResponseDE(String givenName, String familyName, String identifier, +                                                          String dateOfBirth, String placeOfBirth, +                                                          String birthName) throws URISyntaxException { +    return buildDummyAuthResponse(givenName, familyName, identifier, dateOfBirth, null, placeOfBirth, birthName); +  } + +  @NotNull +  private AuthenticationResponse buildDummyAuthResponse(String givenName, String familyName, String identifier, +                                                        String dateOfBirth, String taxNumber, String placeOfBirth, +                                                        String birthName) throws URISyntaxException { +    ImmutableAttributeMap.Builder builder = ImmutableAttributeMap.builder() +        .put(generateStringAttribute(Constants.eIDAS_ATTR_PERSONALIDENTIFIER, +            randomAlphabetic(2), randomAlphabetic(2)), identifier) +        .put(generateStringAttribute(Constants.eIDAS_ATTR_CURRENTFAMILYNAME, +            randomAlphabetic(3), randomAlphabetic(3)), familyName) +        .put(generateStringAttribute(Constants.eIDAS_ATTR_CURRENTGIVENNAME, +            randomAlphabetic(4), randomAlphabetic(4)), givenName) +        .put(generateDateTimeAttribute(Constants.eIDAS_ATTR_DATEOFBIRTH, +            randomAlphabetic(5), randomAlphabetic(5)), dateOfBirth); +    if (taxNumber != null) { +      builder.put(generateStringAttribute(Constants.eIDAS_ATTR_TAXREFERENCE, +          randomAlphabetic(6), randomAlphabetic(6)), taxNumber); +    } +    if (birthName != null) { +      builder.put(generateStringAttribute(Constants.eIDAS_ATTR_BIRTHNAME, +          randomAlphabetic(7), randomAlphabetic(7)), birthName); +    } +    if (placeOfBirth != null) { +      builder.put(generateStringAttribute(Constants.eIDAS_ATTR_PLACEOFBIRTH, +          randomAlphabetic(8), randomAlphabetic(8)), placeOfBirth); +    } +    final ImmutableAttributeMap attributeMap = builder.build(); + +    return new AuthenticationResponse.Builder().id(randomAlphabetic(5)) +        .issuer(randomAlphabetic(5)).subject(randomAlphabetic(5)).statusCode("200") +        .inResponseTo(randomAlphabetic(5)).subjectNameIdFormat(randomAlphabetic(5)) +        .attributes(attributeMap).build(); +  } + +  private AttributeDefinition<Object> generateStringAttribute(String friendlyName, String fragment, String prefix) +      throws URISyntaxException { +    return generateAttribute(friendlyName, fragment, prefix, "eu.eidas.auth.commons.attribute.impl" + +        ".LiteralStringAttributeValueMarshaller"); +  } + +  @SuppressWarnings("SameParameterValue") +  private AttributeDefinition<Object> generateDateTimeAttribute(String friendlyName, String fragment, String prefix) +      throws URISyntaxException { +    return generateAttribute(friendlyName, fragment, prefix, "eu.eidas.auth.commons.attribute.impl" + +        ".DateTimeAttributeValueMarshaller"); +  } + +  private AttributeDefinition<Object> generateAttribute(String friendlyName, String fragment, String prefix, +                                                        String marshaller) throws URISyntaxException { +    return AttributeDefinition.builder() +        .friendlyName(friendlyName).nameUri(new URI("ad", "sd", fragment)) +        .personType(PersonType.LEGAL_PERSON).xmlType(new QName("http://saf", "as", prefix)) +        .attributeValueMarshaller(marshaller).build(); +  } + +  private ResponseType loadResponseFromFile(String filepath) throws JAXBException { +    final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); +    JAXBElement<?> resp = (JAXBElement<?>) unmarshaller.unmarshal(ZmrClientTest.class.getResourceAsStream( +        filepath)); +    return (ResponseType) resp.getValue(); + +  } +   +  private void checkBasicRequestParameters(RequestType requestType, String vorgangName, BigInteger processId, +      String behoerdennummer) { +    assertNotNull("no workflow infos", requestType.getWorkflowInfoClient()); +    assertEquals("processName",  ZmrClientTest.PROCESS_GENERAL, requestType.getWorkflowInfoClient().getProzessName()); +    assertEquals("vorgangsName", vorgangName, requestType.getWorkflowInfoClient().getVorgangName()); + +    if (processId != null) { +      assertEquals("processId", processId, requestType.getWorkflowInfoClient().getProzessInstanzID()); +    } else { +      assertNull("processId", requestType.getWorkflowInfoClient().getProzessInstanzID()); +    } + +    assertNotNull("no client infos", requestType.getClientInfo()); +    assertEquals("behoerdennummer", behoerdennummer, requestType.getClientInfo().getOrganisation() +        .getBehoerdenNr()); +  } +} | 
