Introduktion

For at udføre integrationstest (og nogle gange unittest) af en NSP komponent kræver det at man kalder denne i forhold til DGWS eller IDWS standarden, dvs der skal først skaffes et id-kort eller en borger IDWS billet fra STS'en hvilket igen kræver (P/M/V/F)OCES certifikater. Sådanne certifikater skal genudstedes med faste mellemrum hvilket betyder at gamle versioner af en komponent ikke længere kan bygges. Hver enkelt komponent skal også implementere klient siden af DGWS/IDWS standarderne hvilket øger kompleksiteten af koden uden nogen reel merværdi. For at undgå disse problemstillinger i fremtiden har NSP fået udviklet et fælles kode-bibliotek der tager sig af alle aspekter af de komplekse standarder og lader komponent-udvikleren fokusere på at skrive tests af den forretningslogik der er udviklet. Biblioteket hedder "NSP Test Identity Provider" og anvendes i komponenterne ved hjælp af følgende Maven opsætning

<dependency>
	<groupId>dk.nsp.idp</groupId>
	<artifactId>nsp-test-idp</artifactId>
	<version>1.0.0</version>
	<scope>test</scope>
</dependency>

Anvendelse

NSP Test Identity Provider indeholder en SOAP klient der pakker den komplekse IdP og DGWS/IDWS logik ind i en simpel snitflade og derudover et større antal identiteter på både borgere, medarbejdere og organisationer.

Klient

Den primære klasse i NSP Test Identity Provider er NspSoapClient som kan bygge og udføre et request mod enhver NSP service der udstiller DGWS/IDWS endpoints. Klassen anvendes med try-with-resource strukturen og indeholder en enkelt metode der identificerer den service man ønsker at kalde (endpoint og action). Herefter angiver man den identitet som skal anvendes, hvilket afgør om klienten bruger DGWS eller IDWS billetomveksling. Til sidst kan man vælge om man ønsker at få requestet udført mod servicen eller bygget og returneret som en streng til brug med andet http-transport framework.

private static final URI NTS_ENDPOINT = URI.create("http://test1-cnsp.ekstern-test.nspop.dk:8080/nts/service");

private static final String NTS_ACTION = "http://sundhedsdatastyrelsen.dk/soap/2022/10/21/actions#SomeSoapAction";

private static final String NTS_REQUEST_BODY = "<Request/>";

public void employeeExample() throws Exception {
	try (NspSoapClient client = new NspSoapClient(System.out::println)) {
		try (NspSoapResponse response = client.request(NTS_ENDPOINT, NTS_ACTION).as(jordemoderAdaLovelace()).execute(NTS_REQUEST_BODY)) {
			assertNotNull(response);
			assertFalse(response.isFault());
			String xml = IOUtils.toString(response.getResponse(), "utf-8");
			assertTrue(xml.contains("OK"));
		}
	}
}

Ovenstående eksempel viser hvordan man kan anvende NSP Test Identity Provider til at kalde en service på NSP. I det følgende gennemgåes hver linie af eksemplet:

LinieForklaring
1Definer den NSP service der skal kaldes.
3Definer hvilken specifik operation der skal udføres
5Definer den SOAP Body der skal sendes.
8Opret en ny NspSoapClient der logger requests og response til standard out.
9Udfører et request mod NTS servicen som den indbyggede identitet Ada Lovelace der er en autoriseret jordemoder.
10-13Tjekker om servicen svarede forventet.


Identiteter