Files
JIMRI/java/test/jmri/server/json/signalhead/JsonSignalHeadHttpServiceTest.java
T
2026-06-17 14:00:51 +02:00

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();
}
}