]> git.basschouten.com Git - openhab-addons.git/blob
ea82c52499a2c6b0d56f533b742cfe4901681c90
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2020 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.yamahareceiver.internal.protocol.xml;
14
15 import static org.junit.Assert.*;
16 import static org.mockito.ArgumentMatchers.*;
17 import static org.mockito.Mockito.*;
18
19 import org.junit.Test;
20 import org.mockito.ArgumentCaptor;
21 import org.mockito.Mock;
22 import org.openhab.binding.yamahareceiver.internal.TestModels;
23 import org.openhab.binding.yamahareceiver.internal.state.DeviceInformationState;
24 import org.openhab.binding.yamahareceiver.internal.state.SystemControlState;
25 import org.openhab.binding.yamahareceiver.internal.state.SystemControlStateListener;
26
27 /**
28  * Unit test for {@link SystemControlXML}.
29  *
30  * @author Tomasz Maruszak - Initial contribution
31  */
32 public class SystemControlXMLTest extends AbstractXMLProtocolTest {
33
34     private SystemControlXML subject;
35
36     private DeviceInformationState deviceInformationState;
37
38     @Mock
39     private SystemControlStateListener systemControlStateListener;
40
41     protected void setupFor(String model) throws Exception {
42         ctx.prepareForModel(model);
43         ctx.respondWith("<System><Power_Control><Power>GetParam</Power></Power_Control></System>",
44                 "System_Power_Control_Power.xml");
45         ctx.respondWith("<System><Party_Mode><Mode>GetParam</Mode></Party_Mode></System>",
46                 "System_Party_Mode_Mode.xml");
47
48         deviceInformationState = new DeviceInformationState();
49         DeviceInformationXML deviceInformation = new DeviceInformationXML(con, deviceInformationState);
50         deviceInformation.update();
51
52         subject = new SystemControlXML(con, systemControlStateListener, deviceInformationState);
53     }
54
55     @Test
56     public void given_RX_S601D_when_update_then_parsesState() throws Exception {
57         // given
58         setupFor(TestModels.RX_S601D);
59
60         // when
61         subject.update();
62
63         // then
64         ArgumentCaptor<SystemControlState> stateArg = ArgumentCaptor.forClass(SystemControlState.class);
65         verify(systemControlStateListener, only()).systemControlStateChanged(stateArg.capture());
66
67         SystemControlState state = stateArg.getValue();
68         assertTrue(state.power);
69         assertTrue(state.partyMode);
70     }
71
72     @Test
73     public void given_RX_S601D_when_power_then_sendsProperCommand() throws Exception {
74         // given
75         setupFor(TestModels.RX_S601D);
76
77         // when
78         subject.setPower(true);
79         subject.setPower(false);
80         subject.setPartyMode(true);
81         subject.setPartyModeMute(true);
82
83         // then
84         verify(con).send(eq("<System><Power_Control><Power>On</Power></Power_Control></System>"));
85         verify(con).send(eq("<System><Power_Control><Power>Standby</Power></Power_Control></System>"));
86         verify(con).send(eq("<System><Party_Mode><Mode>On</Mode></Party_Mode></System>"));
87         verify(con).send(eq("<System><Party_Mode><Volume><Mute>On</Mute></Volume></Party_Mode></System>"));
88     }
89
90     @Test
91     public void given_RX_V3900_when_partyMode_then_noCommandSend() throws Exception {
92         // given
93         setupFor(TestModels.RX_V3900);
94
95         // when
96         subject.setPartyMode(true);
97         subject.setPartyModeMute(true);
98         subject.setPartyModeVolume(true);
99
100         // then
101         verify(con, never()).send(anyString());
102     }
103
104     @Test
105     public void given_RX_V3900_when_update_then_parsesStateAndDoesNotUpdateStateForPartyMode() throws Exception {
106         // given
107         setupFor(TestModels.RX_V3900);
108
109         // when
110         subject.update();
111
112         // then
113         ArgumentCaptor<SystemControlState> stateArg = ArgumentCaptor.forClass(SystemControlState.class);
114         verify(systemControlStateListener, only()).systemControlStateChanged(stateArg.capture());
115         verify(con, never()).sendReceive(eq("<System><Party_Mode><Mode>GetParam</Mode></Party_Mode></System>"));
116
117         SystemControlState state = stateArg.getValue();
118         assertTrue(state.power);
119         assertFalse(state.partyMode);
120     }
121 }