|
5 | 5 |
|
6 | 6 | import com.oviva.epa.client.KonnektorService; |
7 | 7 | import com.oviva.epa.client.model.SmcbCard; |
| 8 | +import com.oviva.telematik.epa4all.client.Environment; |
8 | 9 | import com.oviva.telematik.epaapi.SoapClientFactory; |
9 | 10 | import com.oviva.telematik.vau.epa4all.client.Epa4AllClientException; |
10 | 11 | import com.oviva.telematik.vau.epa4all.client.authz.AuthorizationService; |
11 | 12 | import com.oviva.telematik.vau.epa4all.client.info.InformationService; |
12 | 13 | import com.oviva.telematik.vau.proxy.VauProxy; |
| 14 | +import java.net.InetSocketAddress; |
| 15 | +import java.security.KeyStore; |
| 16 | +import java.security.NoSuchAlgorithmException; |
13 | 17 | import java.util.List; |
| 18 | +import javax.net.ssl.SSLContext; |
14 | 19 | import org.junit.jupiter.api.BeforeEach; |
15 | 20 | import org.junit.jupiter.api.Test; |
16 | 21 | import org.junit.jupiter.api.extension.ExtendWith; |
@@ -128,4 +133,122 @@ void findSmcBCard_shouldThrowWhenTelematikIdNotFound() { |
128 | 133 | .getMessage() |
129 | 134 | .contains("no SMC-B card found for telematikId [ nonexistintent-telematik-id ]")); |
130 | 135 | } |
| 136 | + |
| 137 | + @Test |
| 138 | + void findSmcBCard_singleCard_nullTelematikId_returnsCard() { |
| 139 | + when(konnektorService.listSmcbCards()).thenReturn(List.of(mockCard1)); |
| 140 | + |
| 141 | + var result = Epa4AllClientFactory.findSmcBCard(konnektorService, null); |
| 142 | + |
| 143 | + assertEquals(mockCard1, result); |
| 144 | + } |
| 145 | + |
| 146 | + @Test |
| 147 | + void findSmcBCard_shouldSelectSecondCardByTelematikId() { |
| 148 | + when(konnektorService.listSmcbCards()).thenReturn(List.of(mockCard1, mockCard2)); |
| 149 | + |
| 150 | + var result = Epa4AllClientFactory.findSmcBCard(konnektorService, "test-telematik-id-2"); |
| 151 | + |
| 152 | + assertEquals(mockCard2, result); |
| 153 | + } |
| 154 | + |
| 155 | + @Test |
| 156 | + void findSmcBCard_notFound_errorMessageContainsAvailableCardDetails() { |
| 157 | + when(konnektorService.listSmcbCards()).thenReturn(List.of(mockCard1, mockCard2)); |
| 158 | + |
| 159 | + var exception = |
| 160 | + assertThrows( |
| 161 | + Epa4AllClientException.class, |
| 162 | + () -> Epa4AllClientFactory.findSmcBCard(konnektorService, "unknown-id")); |
| 163 | + |
| 164 | + var msg = exception.getMessage(); |
| 165 | + assertTrue(msg.contains("'test-telematik-id-1' (Test Holder)")); |
| 166 | + assertTrue(msg.contains("'test-telematik-id-2' (Test Holder)")); |
| 167 | + } |
| 168 | + |
| 169 | + @Test |
| 170 | + void create_noCardsFound_throwsEpa4AllClientException() throws NoSuchAlgorithmException { |
| 171 | + var proxyAddr = new InetSocketAddress("127.0.0.1", 9999); |
| 172 | + var ks = mock(KonnektorService.class); |
| 173 | + when(ks.listSmcbCards()).thenReturn(List.of()); |
| 174 | + var trustStore = mock(KeyStore.class); |
| 175 | + var proxyListenAddr = new InetSocketAddress("127.0.0.1", 18080); |
| 176 | + |
| 177 | + try (var sslMock = mockStatic(SslContextBuilder.class); |
| 178 | + var ignored = |
| 179 | + mockConstruction( |
| 180 | + VauProxy.class, |
| 181 | + (proxy, ctx) -> |
| 182 | + when(proxy.start()).thenReturn(new VauProxy.ServerInfo(proxyListenAddr)))) { |
| 183 | + sslMock |
| 184 | + .when(() -> SslContextBuilder.buildSslContext(any())) |
| 185 | + .thenReturn(SSLContext.getDefault()); |
| 186 | + |
| 187 | + assertThrows( |
| 188 | + Epa4AllClientException.class, |
| 189 | + () -> Epa4AllClientFactory.create(ks, proxyAddr, Environment.RU, trustStore, null)); |
| 190 | + } |
| 191 | + } |
| 192 | + |
| 193 | + @Test |
| 194 | + void create_withSingleCard_returnsFactory() throws NoSuchAlgorithmException { |
| 195 | + var proxyAddr = new InetSocketAddress("127.0.0.1", 9999); |
| 196 | + var ks = mock(KonnektorService.class); |
| 197 | + var card = mock(SmcbCard.class); |
| 198 | + when(ks.listSmcbCards()).thenReturn(List.of(card)); |
| 199 | + when(card.telematikId()).thenReturn("test-id"); |
| 200 | + var trustStore = mock(KeyStore.class); |
| 201 | + var proxyListenAddr = new InetSocketAddress("127.0.0.1", 18080); |
| 202 | + |
| 203 | + try (var sslMock = mockStatic(SslContextBuilder.class); |
| 204 | + var ignored = |
| 205 | + mockConstruction( |
| 206 | + VauProxy.class, |
| 207 | + (proxy, ctx) -> |
| 208 | + when(proxy.start()).thenReturn(new VauProxy.ServerInfo(proxyListenAddr))); |
| 209 | + var ignored2 = mockConstruction(SoapClientFactory.class)) { |
| 210 | + sslMock |
| 211 | + .when(() -> SslContextBuilder.buildSslContext(any())) |
| 212 | + .thenReturn(SSLContext.getDefault()); |
| 213 | + |
| 214 | + // When |
| 215 | + var result = |
| 216 | + Epa4AllClientFactory.create(ks, proxyAddr, Environment.RU, trustStore, "test-id"); |
| 217 | + |
| 218 | + // Then |
| 219 | + assertNotNull(result); |
| 220 | + assertInstanceOf(Epa4AllClientFactory.class, result); |
| 221 | + } |
| 222 | + } |
| 223 | + |
| 224 | + @Test |
| 225 | + void create_withTelematikId_selectsMatchingCard() throws NoSuchAlgorithmException { |
| 226 | + var proxyAddr = new InetSocketAddress("127.0.0.1", 9999); |
| 227 | + var ks = mock(KonnektorService.class); |
| 228 | + var card1 = mock(SmcbCard.class); |
| 229 | + var card2 = mock(SmcbCard.class); |
| 230 | + when(card1.telematikId()).thenReturn("id-1"); |
| 231 | + when(card2.telematikId()).thenReturn("id-2"); |
| 232 | + when(ks.listSmcbCards()).thenReturn(List.of(card1, card2)); |
| 233 | + var trustStore = mock(KeyStore.class); |
| 234 | + var proxyListenAddr = new InetSocketAddress("127.0.0.1", 18080); |
| 235 | + |
| 236 | + try (var sslMock = mockStatic(SslContextBuilder.class); |
| 237 | + var ignored = |
| 238 | + mockConstruction( |
| 239 | + VauProxy.class, |
| 240 | + (proxy, ctx) -> |
| 241 | + when(proxy.start()).thenReturn(new VauProxy.ServerInfo(proxyListenAddr))); |
| 242 | + var ignored2 = mockConstruction(SoapClientFactory.class)) { |
| 243 | + sslMock |
| 244 | + .when(() -> SslContextBuilder.buildSslContext(any())) |
| 245 | + .thenReturn(SSLContext.getDefault()); |
| 246 | + |
| 247 | + // When |
| 248 | + var result = Epa4AllClientFactory.create(ks, proxyAddr, Environment.RU, trustStore, "id-2"); |
| 249 | + |
| 250 | + // Then |
| 251 | + assertNotNull(result); |
| 252 | + } |
| 253 | + } |
131 | 254 | } |
0 commit comments