139 lines
6.3 KiB
Java
139 lines
6.3 KiB
Java
package jmri.server.json.signalhead;
|
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
import com.fasterxml.jackson.databind.node.NullNode;
|
|
|
|
import jmri.JmriException;
|
|
import jmri.SignalHead;
|
|
import jmri.server.json.JSON;
|
|
import jmri.server.json.JsonException;
|
|
import jmri.server.json.JsonHttpServiceTestBase;
|
|
import jmri.server.json.JsonRequest;
|
|
import jmri.util.JUnitUtil;
|
|
|
|
import org.junit.jupiter.api.*;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
|
|
/**
|
|
*
|
|
* @author Paul Bender
|
|
* @author Randall Wood
|
|
* @author Steve Todd
|
|
*/
|
|
public class JsonSignalHeadHttpServiceTest extends JsonHttpServiceTestBase<JsonSignalHeadHttpService> {
|
|
|
|
@Test
|
|
public void testDoGet() throws JmriException, JsonException {
|
|
|
|
//create a signalhead for testing
|
|
String sysName = "IH1";
|
|
String userName = "SH1";
|
|
SignalHead s = new jmri.implementation.VirtualSignalHead(sysName, userName);
|
|
jmri.InstanceManager.getDefault(jmri.SignalHeadManager.class).register(s);
|
|
assertNotNull(s);
|
|
|
|
JsonNode result;
|
|
//retrieve by systemname
|
|
result = service.doGet(JsonSignalHead.SIGNAL_HEAD, sysName, NullNode.getInstance(), new JsonRequest(locale, JSON.V5, JSON.GET, 42));
|
|
validate(result);
|
|
assertEquals(JsonSignalHead.SIGNAL_HEAD, result.path(JSON.TYPE).asText());
|
|
assertEquals(sysName, result.path(JSON.DATA).path(JSON.NAME).asText());
|
|
|
|
//retrieve by username, should get systemname back
|
|
result = service.doGet(JsonSignalHead.SIGNAL_HEAD, userName, NullNode.getInstance(), new JsonRequest(locale, JSON.V5, JSON.GET, 42));
|
|
validate(result);
|
|
assertEquals(sysName, result.path(JSON.DATA).path(JSON.NAME).asText());
|
|
|
|
//verify initial aspect/state is Dark
|
|
assertEquals(SignalHead.DARK, result.path(JSON.DATA).path(JSON.STATE).asInt());
|
|
//change to Green, then verify change
|
|
s.setAppearance(SignalHead.GREEN);
|
|
result = service.doGet(JsonSignalHead.SIGNAL_HEAD, userName, NullNode.getInstance(), new JsonRequest(locale, JSON.V5, JSON.GET, 42));
|
|
assertEquals(SignalHead.GREEN, result.path(JSON.DATA).path(JSON.STATE).asInt());
|
|
//set Held, then verify change
|
|
s.setHeld(true);
|
|
result = service.doGet(JsonSignalHead.SIGNAL_HEAD, userName, NullNode.getInstance(), new JsonRequest(locale, JSON.V5, JSON.GET, 42));
|
|
assertTrue(result.path(JSON.DATA).path(JSON.TOKEN_HELD).asBoolean());
|
|
//set to Not Held, then verify change
|
|
s.setHeld(false);
|
|
result = service.doGet(JsonSignalHead.SIGNAL_HEAD, userName, NullNode.getInstance(), new JsonRequest(locale, JSON.V5, JSON.GET, 42));
|
|
assertFalse(result.path(JSON.DATA).path(JSON.TOKEN_HELD).asBoolean());
|
|
}
|
|
|
|
@Test
|
|
public void testDoPost() throws JmriException, JsonException {
|
|
//create a signalhead for testing
|
|
String sysName = "IH1";
|
|
String userName = "SH1";
|
|
SignalHead s = new jmri.implementation.VirtualSignalHead(sysName, userName);
|
|
jmri.InstanceManager.getDefault(jmri.SignalHeadManager.class).register(s);
|
|
assertNotNull(s);
|
|
|
|
JsonNode result;
|
|
JsonNode message;
|
|
|
|
//set signalhead to Green and verify change
|
|
message = mapper.createObjectNode().put(JSON.NAME, userName).put(JSON.STATE, SignalHead.GREEN);
|
|
result = service.doPost(JsonSignalHead.SIGNAL_HEAD, userName, message, new JsonRequest(locale, JSON.V5, JSON.GET, 42));
|
|
validate(result);
|
|
assertEquals(SignalHead.GREEN, s.getState());
|
|
assertEquals(SignalHead.GREEN, result.path(JSON.DATA).path(JSON.STATE).asInt());
|
|
|
|
// try to set to FLASHLUNAR, which should not be allowed for this signalHead,
|
|
// so check for error, and verify state does not change
|
|
JsonException ex = assertThrows( JsonException.class, () -> {
|
|
JsonNode messageEx = mapper.createObjectNode().put(JSON.NAME, userName).put(JSON.STATE, SignalHead.FLASHLUNAR);
|
|
service.doPost(JsonSignalHead.SIGNAL_HEAD, userName, messageEx, new JsonRequest(locale, JSON.V5, JSON.GET, 42));
|
|
});
|
|
assertEquals(400, ex.getCode());
|
|
assertEquals(SignalHead.GREEN, s.getState());
|
|
|
|
assertEquals(false, s.getHeld());
|
|
// set signalmast to Held, then verify
|
|
message = mapper.createObjectNode().put(JSON.NAME, userName).put(JSON.STATE, SignalHead.HELD);
|
|
result = service.doPost(JsonSignalHead.SIGNAL_HEAD, userName, message, new JsonRequest(locale, JSON.V5, JSON.GET, 42));
|
|
assertNotNull(result);
|
|
assertEquals(true, s.getHeld());
|
|
|
|
assertEquals(true, s.getHeld());
|
|
// set signalmast to something other than Held, then verify Held is released
|
|
message = mapper.createObjectNode().put(JSON.NAME, userName).put(JSON.STATE, SignalHead.RED);
|
|
result = service.doPost(JsonSignalHead.SIGNAL_HEAD, userName, message, new JsonRequest(locale, JSON.V5, JSON.GET, 42));
|
|
assertNotNull(result);
|
|
assertEquals(false, s.getHeld());
|
|
}
|
|
|
|
@Test
|
|
public void testDoGetList() throws JsonException {
|
|
JsonNode result;
|
|
result = service.doGetList(JsonSignalHead.SIGNAL_HEAD, NullNode.getInstance(), new JsonRequest(locale, JSON.V5, JSON.GET, 0));
|
|
validate(result);
|
|
assertEquals(0, result.size());
|
|
jmri.InstanceManager.getDefault(jmri.SignalHeadManager.class).register(new jmri.implementation.VirtualSignalHead("IH1","Head 1"));
|
|
jmri.InstanceManager.getDefault(jmri.SignalHeadManager.class).register(new jmri.implementation.VirtualSignalHead("IH2","Head 2"));
|
|
result = service.doGetList(JsonSignalHead.SIGNAL_HEAD, NullNode.getInstance(), new JsonRequest(locale, JSON.V5, JSON.GET, 0));
|
|
validate(result);
|
|
assertEquals(2, result.size());
|
|
}
|
|
|
|
@BeforeEach
|
|
@Override
|
|
public void setUp() throws Exception {
|
|
super.setUp();
|
|
service = new JsonSignalHeadHttpService(mapper);
|
|
JUnitUtil.initInternalSignalHeadManager();
|
|
JUnitUtil.initDebugThrottleManager();
|
|
}
|
|
|
|
@AfterEach
|
|
@Override
|
|
public void tearDown() throws Exception {
|
|
super.tearDown();
|
|
}
|
|
}
|