]> git.basschouten.com Git - openhab-addons.git/blob
2c31a9b968c8be75e08ef9f31f610c838642cc8a
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
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
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.tr064.internal.phonebook;
14
15 import static org.junit.jupiter.api.Assertions.assertEquals;
16 import static org.mockito.ArgumentMatchers.any;
17 import static org.mockito.Mockito.when;
18
19 import java.util.Collection;
20 import java.util.List;
21 import java.util.Map;
22 import java.util.Optional;
23
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;
34
35 /**
36  * The {@link Tr064PhonebookImplTest} class implements test cases for the {@link Tr064PhonebookImpl} class
37  *
38  * @author Jan N. Klug - Initial contribution
39  */
40 @NonNullByDefault
41 @MockitoSettings(strictness = Strictness.WARN)
42 @ExtendWith(MockitoExtension.class)
43 public class Tr064PhonebookImplTest {
44     @Mock
45     private @NonNullByDefault({}) HttpClient httpClient;
46
47     // key -> input, value -> output
48     public static Collection<Map.Entry<String, String>> phoneNumbers() {
49         return List.of( //
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"));
55     }
56
57     @ParameterizedTest
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()));
63     }
64
65     @Test
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"));
70
71         Optional<String> result = testPhonebook.lookupNumber("01238007001", 0);
72         assertEquals(Optional.empty(), result);
73
74         result = testPhonebook.lookupNumber("01238007001", 10);
75         assertEquals("foo", result.get());
76
77         result = testPhonebook.lookupNumber("033998005671", -1);
78         assertEquals("bar", result.get());
79     }
80
81     private static class TestPhonebook extends Tr064PhonebookImpl {
82         public TestPhonebook(HttpClient httpClient, String phonebookUrl, int httpTimeout) {
83             super(httpClient, phonebookUrl, httpTimeout);
84         }
85
86         public void setPhonebook(Map<String, String> phonebook) {
87             this.phonebook = phonebook;
88         }
89     }
90 }