2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.tr064.internal.phonebook;
15 import static org.junit.jupiter.api.Assertions.assertEquals;
16 import static org.mockito.ArgumentMatchers.any;
17 import static org.mockito.Mockito.when;
19 import java.util.Collection;
20 import java.util.List;
22 import java.util.Optional;
24 import org.eclipse.jdt.annotation.NonNullByDefault;
25 import org.eclipse.jetty.client.HttpClient;
26 import org.junit.jupiter.api.Test;
27 import org.junit.jupiter.api.extension.ExtendWith;
28 import org.junit.jupiter.params.ParameterizedTest;
29 import org.junit.jupiter.params.provider.MethodSource;
30 import org.mockito.Mock;
31 import org.mockito.junit.jupiter.MockitoExtension;
32 import org.mockito.junit.jupiter.MockitoSettings;
33 import org.mockito.quality.Strictness;
36 * The {@link Tr064PhonebookImplTest} class implements test cases for the {@link Tr064PhonebookImpl} class
38 * @author Jan N. Klug - Initial contribution
41 @MockitoSettings(strictness = Strictness.WARN)
42 @ExtendWith(MockitoExtension.class)
43 public class Tr064PhonebookImplTest {
45 private @NonNullByDefault({}) HttpClient httpClient;
47 // key -> input, value -> output
48 public static Collection<Map.Entry<String, String>> phoneNumbers() {
50 Map.entry("**820", "**820"), //
51 Map.entry("49200123456", "49200123456"), //
52 Map.entry("+49-200-123456", "+49200123456"), //
53 Map.entry("49 (200) 123456", "49200123456"), //
54 Map.entry("+49 200/123456", "+49200123456"));
58 @MethodSource("phoneNumbers")
59 public void testNormalization(Map.Entry<String, String> input) {
60 when(httpClient.newRequest((String) any())).thenThrow(new IllegalArgumentException("testing"));
61 Tr064PhonebookImpl testPhonebook = new Tr064PhonebookImpl(httpClient, "", 0);
62 assertEquals(input.getValue(), testPhonebook.normalizeNumber(input.getKey()));
66 public void testLookup() {
67 when(httpClient.newRequest((String) any())).thenThrow(new IllegalArgumentException("testing"));
68 TestPhonebook testPhonebook = new TestPhonebook(httpClient, "", 0);
69 testPhonebook.setPhonebook(Map.of("+491238007001", "foo", "+4933998005671", "bar"));
71 Optional<String> result = testPhonebook.lookupNumber("01238007001", 0);
72 assertEquals(Optional.empty(), result);
74 result = testPhonebook.lookupNumber("01238007001", 10);
75 assertEquals("foo", result.get());
77 result = testPhonebook.lookupNumber("033998005671", -1);
78 assertEquals("bar", result.get());
81 private static class TestPhonebook extends Tr064PhonebookImpl {
82 public TestPhonebook(HttpClient httpClient, String phonebookUrl, int httpTimeout) {
83 super(httpClient, phonebookUrl, httpTimeout);
86 public void setPhonebook(Map<String, String> phonebook) {
87 this.phonebook = phonebook;