]> git.basschouten.com Git - openhab-addons.git/blob
85d74a6b36364b5a00cd17e472b0c6ab7b0e87ff
[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.mycroft.internal.api;
14
15 import static org.junit.jupiter.api.Assertions.assertEquals;
16
17 import java.io.IOException;
18 import java.io.UnsupportedEncodingException;
19 import java.net.InetSocketAddress;
20
21 import org.eclipse.jdt.annotation.NonNullByDefault;
22 import org.eclipse.jetty.websocket.api.Session;
23 import org.eclipse.jetty.websocket.client.WebSocketClient;
24 import org.junit.jupiter.api.Test;
25 import org.junit.jupiter.api.extension.ExtendWith;
26 import org.mockito.ArgumentCaptor;
27 import org.mockito.ArgumentMatchers;
28 import org.mockito.Mock;
29 import org.mockito.Mockito;
30 import org.mockito.junit.jupiter.MockitoExtension;
31 import org.mockito.junit.jupiter.MockitoSettings;
32 import org.mockito.quality.Strictness;
33 import org.openhab.binding.mycroft.internal.api.dto.BaseMessage;
34 import org.openhab.binding.mycroft.internal.api.dto.MessageSpeak;
35
36 /**
37  * This class provides tests for mycroft binding
38  *
39  * @author Gwendal Roulleau - Initial contribution
40  */
41 @ExtendWith(MockitoExtension.class)
42 @MockitoSettings(strictness = Strictness.LENIENT)
43 @NonNullByDefault
44 public class MycroftConnectionTest {
45
46     private @Mock @NonNullByDefault({}) MycroftConnectionListener mycroftConnectionListener;
47     private @Mock @NonNullByDefault({}) Session sessionMock;
48
49     @Test
50     public void testConnectionOK() throws IOException {
51         MycroftConnection mycroftConnection = new MycroftConnection(mycroftConnectionListener, new WebSocketClient());
52         Mockito.when(sessionMock.getRemoteAddress()).thenReturn(new InetSocketAddress(1234));
53         mycroftConnection.onConnect(sessionMock);
54
55         Mockito.verify(mycroftConnectionListener, Mockito.times(1)).connectionEstablished();
56     }
57
58     @Test
59     public void testAnyListener() throws UnsupportedEncodingException, IOException {
60         MycroftConnection mycroftConnection = new MycroftConnection(mycroftConnectionListener, new WebSocketClient());
61
62         Mockito.when(sessionMock.getRemoteAddress()).thenReturn(new InetSocketAddress(1234));
63         mycroftConnection.onConnect(sessionMock);
64
65         @SuppressWarnings("unchecked")
66         MycroftMessageListener<MessageSpeak> mockListener = Mockito.mock(MycroftMessageListener.class);
67         ArgumentCaptor<BaseMessage> argCaptorMessage = ArgumentCaptor.forClass(BaseMessage.class);
68
69         // given we register any listener
70         mycroftConnection.registerListener(MessageType.any, mockListener);
71
72         // when we send speak message
73         @SuppressWarnings("null")
74         String speakMessageJson = new String(
75                 MycroftConnectionTest.class.getResourceAsStream("speak.json").readAllBytes(), "UTF-8");
76         mycroftConnection.onMessage(sessionMock, speakMessageJson);
77
78         // then message is correctly received by listener
79         Mockito.verify(mockListener, Mockito.times(1)).baseMessageReceived(ArgumentMatchers.any());
80         Mockito.verify(mockListener).baseMessageReceived(argCaptorMessage.capture());
81
82         assertEquals(argCaptorMessage.getValue().message, speakMessageJson);
83     }
84
85     @Test
86     public void testSpeakListener() throws IOException {
87         MycroftConnection mycroftConnection = new MycroftConnection(mycroftConnectionListener, new WebSocketClient());
88
89         Mockito.when(sessionMock.getRemoteAddress()).thenReturn(new InetSocketAddress(1234));
90         mycroftConnection.onConnect(sessionMock);
91
92         @SuppressWarnings("unchecked")
93         MycroftMessageListener<MessageSpeak> mockListener = Mockito.mock(MycroftMessageListener.class);
94         ArgumentCaptor<MessageSpeak> argCaptorMessage = ArgumentCaptor.forClass(MessageSpeak.class);
95
96         // given we register speak listener
97         mycroftConnection.registerListener(MessageType.speak, mockListener);
98
99         // when we send speak message
100         @SuppressWarnings("null")
101         String speakMessageJson = new String(
102                 MycroftConnectionTest.class.getResourceAsStream("speak.json").readAllBytes(), "UTF-8");
103         mycroftConnection.onMessage(sessionMock, speakMessageJson);
104
105         // then message is correctly received by listener
106         Mockito.verify(mockListener).baseMessageReceived(argCaptorMessage.capture());
107
108         assertEquals(argCaptorMessage.getValue().data.utterance, "coucou");
109     }
110 }