]> git.basschouten.com Git - openhab-addons.git/blob
716bec4ee2e82a12546c73678637b9c78ba657a0
[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.yamahareceiver.internal.protocol.xml;
14
15 import static org.junit.jupiter.api.Assertions.assertEquals;
16 import static org.mockito.ArgumentMatchers.eq;
17 import static org.mockito.Mockito.verify;
18 import static org.openhab.binding.yamahareceiver.internal.TestModels.*;
19 import static org.openhab.binding.yamahareceiver.internal.YamahaReceiverBindingConstants.Inputs.*;
20
21 import java.util.function.Consumer;
22
23 import org.junit.jupiter.api.Test;
24 import org.mockito.ArgumentCaptor;
25 import org.mockito.Captor;
26 import org.mockito.Mock;
27 import org.openhab.binding.yamahareceiver.internal.state.PresetInfoState;
28 import org.openhab.binding.yamahareceiver.internal.state.PresetInfoStateListener;
29
30 /**
31  * Unit test for {@link InputWithPresetControlXML}.
32  *
33  * @author Tomasz Maruszak - Initial contribution
34  */
35 public class InputWithPresetControlXMLTest extends AbstractZoneControlXMLTest {
36
37     private InputWithPresetControlXML subject;
38
39     private @Mock PresetInfoStateListener presetInfoStateListener;
40     private @Captor ArgumentCaptor<PresetInfoState> presetInfoStateArg;
41
42     private void given(String model, String input, Consumer<ModelContext> setup) throws Exception {
43         ctx.prepareForModel(model);
44
45         DeviceInformationXML deviceInformation = new DeviceInformationXML(con, deviceInformationState);
46         deviceInformation.update();
47
48         setup.accept(ctx);
49
50         subject = new InputWithPresetControlXML(input, con, presetInfoStateListener, deviceInformationState);
51     }
52
53     @Test
54     public void given_RX_S601D_and_NET_RADIO_when_preset1_then_sendsProperCommand() throws Exception {
55         given(RX_S601D, INPUT_NET_RADIO, ctx -> {
56             ctx.respondWith(
57                     "<NET_RADIO><Play_Control><Preset><Preset_Sel_Item>GetParam</Preset_Sel_Item></Preset></Play_Control></NET_RADIO>",
58                     "NET_RADIO_Play_Control_Preset_Preset_Sel_Item.xml");
59             ctx.respondWith(
60                     "<NET_RADIO><Play_Control><Preset><Preset_Sel>GetParam</Preset_Sel></Preset></Play_Control></NET_RADIO>",
61                     "NET_RADIO_Play_Control_Preset_Preset_Sel.xml");
62         });
63
64         // when
65         subject.selectItemByPresetNumber(1);
66
67         // then
68         verify(presetInfoStateListener).presetInfoUpdated(presetInfoStateArg.capture());
69         PresetInfoState state = presetInfoStateArg.getValue();
70
71         verify(con).send(
72                 eq("<NET_RADIO><Play_Control><Preset><Preset_Sel>1</Preset_Sel></Preset></Play_Control></NET_RADIO>"));
73         assertEquals("1 : NET RADIO  Chilli ZET PL", state.presetChannelNames.get(0).getName());
74         assertEquals(1, state.presetChannelNames.get(0).getValue());
75         assertEquals("2 : NET RADIO  Polskie Radio 24", state.presetChannelNames.get(1).getName());
76         assertEquals(2, state.presetChannelNames.get(1).getValue());
77     }
78
79     @Test
80     public void given_RX_V3900_and_NET_RADIO_when_preset1_then_sendsProperCommand() throws Exception {
81         given(RX_V3900, INPUT_NET_RADIO, ctx -> {
82             ctx.respondWith(
83                     "<NET_USB><Play_Control><Preset><Preset_Sel_Item>GetParam</Preset_Sel_Item></Preset></Play_Control></NET_USB>",
84                     "NET_USB_Play_Control_Preset_Preset_Sel_Item.xml");
85             ctx.respondWith(
86                     "<NET_USB><Play_Control><Preset><Preset_Sel>GetParam</Preset_Sel></Preset></Play_Control></NET_USB>",
87                     "NET_USB_Play_Control_Preset_Preset_Sel.xml");
88         });
89
90         // when
91         subject.selectItemByPresetNumber(1);
92
93         // then
94         verify(con).send(
95                 eq("<NET_USB><Play_Control><Preset><Preset_Sel>1</Preset_Sel></Preset></Play_Control></NET_USB>"));
96     }
97
98     @Test
99     public void given_RX_V3900_and_TUNER_when_preset1_then_sendsProperCommand() throws Exception {
100         given(RX_V3900, INPUT_TUNER, ctx -> {
101             ctx.respondWith(
102                     "<Tuner><Play_Control><Preset><Preset_Sel_Item>GetParam</Preset_Sel_Item></Preset></Play_Control></Tuner>",
103                     "Tuner_Play_Control_Preset_Preset_Sel_Item.xml");
104             ctx.respondWith(
105                     "<Tuner><Play_Control><Preset><Preset_Sel>GetParam</Preset_Sel></Preset></Play_Control></Tuner>",
106                     "Tuner_Play_Control_Preset_Preset_Sel.xml");
107         });
108
109         // when
110         subject.selectItemByPresetNumber(101);
111         subject.selectItemByPresetNumber(212);
112
113         // then
114         verify(con)
115                 .send(eq("<Tuner><Play_Control><Preset><Preset_Sel>A1</Preset_Sel></Preset></Play_Control></Tuner>"));
116         verify(con)
117                 .send(eq("<Tuner><Play_Control><Preset><Preset_Sel>B12</Preset_Sel></Preset></Play_Control></Tuner>"));
118     }
119
120     @Test
121     public void given_RX_V3900_and_TUNER_when_update_then_populatesStateCorrectly() throws Exception {
122         given(RX_V3900, INPUT_TUNER, ctx -> {
123             ctx.respondWith(
124                     "<Tuner><Play_Control><Preset><Preset_Sel_Item>GetParam</Preset_Sel_Item></Preset></Play_Control></Tuner>",
125                     "Tuner_Play_Control_Preset_Preset_Sel_Item.xml");
126             ctx.respondWith(
127                     "<Tuner><Play_Control><Preset><Preset_Sel>GetParam</Preset_Sel></Preset></Play_Control></Tuner>",
128                     "Tuner_Play_Control_Preset_Preset_Sel.xml");
129         });
130
131         // when
132         subject.update();
133
134         // then
135         verify(presetInfoStateListener).presetInfoUpdated(presetInfoStateArg.capture());
136         PresetInfoState state = presetInfoStateArg.getValue();
137
138         // A1
139         assertEquals(101, state.presetChannel);
140
141         assertEquals(16, state.presetChannelNames.size());
142         assertEquals("A1", state.presetChannelNames.get(0).getName());
143         assertEquals(101, state.presetChannelNames.get(0).getValue());
144         assertEquals("A2", state.presetChannelNames.get(1).getName());
145         assertEquals(102, state.presetChannelNames.get(1).getValue());
146     }
147 }