From 39a6930414d3e3566ba6436ce61be82a675f1d49 Mon Sep 17 00:00:00 2001 From: Randall Wood <297232+rhwood@users.noreply.github.com> Date: Sun, 8 Mar 2020 21:19:18 -0400 Subject: [PATCH] test: add tests for setting turnout feedback mode and sensors --- .../server/json/JsonHttpServiceTestBase.java | 9 +++++ .../turnout/JsonTurnoutHttpServiceTest.java | 40 ++++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/java/test/jmri/server/json/JsonHttpServiceTestBase.java b/java/test/jmri/server/json/JsonHttpServiceTestBase.java index ec37d2af2d8..382cce70e9a 100644 --- a/java/test/jmri/server/json/JsonHttpServiceTestBase.java +++ b/java/test/jmri/server/json/JsonHttpServiceTestBase.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.NullNode; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import static org.junit.Assume.assumeNotNull; @@ -85,6 +86,14 @@ public final void testDoSchema(String type) throws JsonException { // Suppress a warning message (see networknt/json-schema-validator#79) JUnitAppender.checkForMessageStartingWith( "Unknown keyword exclusiveMinimum - you should define your own Meta Schema."); + // test an invalid schema + try { + schema = service.doSchema("non-existant-type", false, new JsonRequest(locale, JSON.V5, JSON.GET, 42)); + } catch (JsonException ex) { + assertThat(ex.getCode()).isEqualTo(500); + assertThat(ex.getMessage()).isEqualTo("Unknown object type non-existant-type was requested."); + assertThat(ex.getId()).isEqualTo(42); + } } /** diff --git a/java/test/jmri/server/json/turnout/JsonTurnoutHttpServiceTest.java b/java/test/jmri/server/json/turnout/JsonTurnoutHttpServiceTest.java index f801b272ac2..e56d2370bcd 100644 --- a/java/test/jmri/server/json/turnout/JsonTurnoutHttpServiceTest.java +++ b/java/test/jmri/server/json/turnout/JsonTurnoutHttpServiceTest.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.node.NullNode; import com.fasterxml.jackson.databind.node.ObjectNode; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -15,12 +16,15 @@ import javax.servlet.http.HttpServletResponse; import jmri.InstanceManager; import jmri.JmriException; +import jmri.Sensor; +import jmri.SensorManager; import jmri.Turnout; import jmri.TurnoutManager; import jmri.server.json.JSON; import jmri.server.json.JsonException; import jmri.server.json.JsonNamedBeanHttpServiceTestBase; import jmri.server.json.JsonRequest; +import jmri.server.json.sensor.JsonSensor; import jmri.util.JUnitUtil; import org.junit.After; import org.junit.Before; @@ -46,6 +50,7 @@ public void testDoGet() throws JmriException, JsonException { assertEquals(JsonTurnout.TURNOUT, result.path(JSON.TYPE).asText()); assertEquals("IT1", result.path(JSON.DATA).path(JSON.NAME).asText()); assertEquals(JSON.UNKNOWN, result.path(JSON.DATA).path(JSON.STATE).asInt()); + assertThat(result.path(JSON.DATA).path(JsonTurnout.FEEDBACK_MODE).asInt()).isEqualTo(Turnout.DIRECT); turnout1.setState(Turnout.CLOSED); result = service.doGet(JsonTurnout.TURNOUT, "IT1", NullNode.getInstance(), new JsonRequest(locale, JSON.V5, JSON.GET, 42)); @@ -108,6 +113,39 @@ public void testDoPost() throws JmriException, JsonException { assertEquals(HttpServletResponse.SC_BAD_REQUEST, ex.getCode()); } assertEquals(Turnout.THROWN, turnout1.getState()); + // set feedback mode (valid) + assertThat(turnout1.getFeedbackMode()).isEqualTo(Turnout.DIRECT); + message = mapper.createObjectNode().put(JSON.NAME, "IT1").put(JsonTurnout.FEEDBACK_MODE, Turnout.DELAYED); + result = service.doPost(JsonTurnout.TURNOUT, "IT1", message, new JsonRequest(locale, JSON.V5, JSON.GET, 42)); + assertThat(turnout1.getFeedbackMode()).isEqualTo(Turnout.DELAYED); + assertThat(result.path(JSON.DATA).path(JsonTurnout.FEEDBACK_MODE).asInt()).isEqualTo(Turnout.DELAYED); + // set feedback mode (invalid) + message = mapper.createObjectNode().put(JSON.NAME, "IT1").put(JsonTurnout.FEEDBACK_MODE, -1); + try { + service.doPost(JsonTurnout.TURNOUT, "IT1", message, new JsonRequest(locale, JSON.V5, JSON.GET, 42)); + fail("Expected exception not thrown"); + } catch (JsonException ex) { + assertThat(ex.getCode()).isEqualTo(HttpServletResponse.SC_BAD_REQUEST); + assertThat(ex.getMessage()).isEqualTo("Property feedbackMode is invalid for turnout IT1."); + assertThat(ex.getId()).isEqualTo(42); + } + assertThat(turnout1.getFeedbackMode()).isEqualTo(Turnout.DELAYED); + // set feedback mode with sensor (sensor must exist first) + Sensor sensor1 = InstanceManager.getDefault(SensorManager.class).provide("IS1"); + assertThat(turnout1.getFirstNamedSensor()).isNull(); + assertThat(turnout1.getSecondNamedSensor()).isNull(); + message = mapper.createObjectNode().put(JSON.NAME, "IT1") + .put(JsonTurnout.FEEDBACK_MODE, Turnout.TWOSENSOR) + .set(JsonSensor.SENSOR, mapper.createArrayNode().add(NullNode.getInstance()).add(sensor1.getSystemName())); + result = service.doPost(JsonTurnout.TURNOUT, "IT1", message, new JsonRequest(locale, JSON.V5, JSON.GET, 42)); + assertThat(turnout1.getFirstNamedSensor()).isNull(); + assertThat(turnout1.getSecondNamedSensor()).isNotNull(); + assertThat(turnout1.getSecondNamedSensor().getBean()).isEqualTo(sensor1); + assertThat(turnout1.getFeedbackMode()).isEqualTo(Turnout.TWOSENSOR); + assertThat(result.path(JSON.DATA).path(JsonTurnout.FEEDBACK_MODE).asInt()).isEqualTo(Turnout.TWOSENSOR); + assertThat(result.path(JSON.DATA).path(JsonSensor.SENSOR).get(0).isNull()).isTrue(); + assertThat(result.path(JSON.DATA).path(JsonSensor.SENSOR).get(1).path(JSON.TYPE).asText()).isEqualTo(JsonSensor.SENSOR); + assertThat(result.path(JSON.DATA).path(JsonSensor.SENSOR).get(1).path(JSON.DATA).path(JSON.NAME).asText()).isEqualTo(sensor1.getSystemName()); } @Test @@ -144,7 +182,7 @@ public void testDoDelete() throws JsonException { TurnoutManager manager = InstanceManager.getDefault(TurnoutManager.class); ObjectNode message = mapper.createObjectNode(); assumeNotNull(service); // protect against JUnit tests in Eclipse that test this class directly - // delete non-existant bean + // delete non-existent bean try { service.doDelete(service.getType(), "non-existant", message, new JsonRequest(locale, JSON.V5, JSON.GET, 42)); fail("Expected exception not thrown.");