@Override public void start() { context = new WebService.Context(); for (WebService webService : webServices) { webService.define(context); } }
public WsTester(WebService... webServices) { for (WebService webService : webServices) { webService.define(context); } }
@Test public void ws_is_internal_if_all_actions_are_internal() { ((WebService) context -> { NewController newController = context.createController("api/rule"); newDefaultAction(newController, "create").setInternal(true); newDefaultAction(newController, "update").setInternal(true); newController.done(); }).define(context); assertThat(context.controller("api/rule").isInternal()).isTrue(); }
@Test public void log_if_action_description_is_empty() { ((WebService) context -> { NewController newController = context.createController("api/rule"); newDefaultAction(newController, "list") .setDescription(""); newController.done(); }).define(context); assertThat(logTester.logs(LoggerLevel.WARN)) .contains("Description is not set on action api/rule/list"); }
@Test public void fail_to_open_response_example() { WebService ws = context -> { try { NewController controller = context.createController("foo"); newDefaultAction(controller, "bar").setResponseExample(new URL("file:/does/not/exist")); controller.done(); } catch (MalformedURLException e) { e.printStackTrace(); } }; ws.define(context); WebService.Action action = context.controller("foo").action("bar"); try { action.responseExampleAsString(); fail(); } catch (IllegalStateException e) { assertThat(e).hasMessage("Fail to load file:/does/not/exist"); } }
@Test public void fail_if_no_controller_path() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("WS controller path must not be empty"); ((WebService) context -> context.createController(null).done()).define(context); }
@Test public void log_if_since_on_an_action_is_empty() { ((WebService) context -> { NewController newController = context.createController("api/rule"); newDefaultAction(newController, "list") .setSince(""); newController.done(); }).define(context); assertThat(logTester.logs(LoggerLevel.WARN)) .contains("Since is not set on action api/rule/list"); }
@Test public void fail_if_get_and_no_response_example() { ((WebService) context -> { NewController newController = context.createController("api/rule"); newDefaultAction(newController, "list").setResponseExample(null); newController.done(); }).define(context); assertThat(logTester.logs(LoggerLevel.WARN)) .contains("The response example is not set on action api/rule/list"); }
@Test public void log_if_action_description_is_null() { ((WebService) context -> { NewController newController = context.createController("api/rule"); newDefaultAction(newController, "list") .setDescription(null); newController.done(); }).define(context); assertThat(logTester.logs(LoggerLevel.WARN)) .contains("Description is not set on action api/rule/list"); }
@Test public void fail_if_no_actions() { expectedException.expect(IllegalStateException.class); expectedException.expectMessage("At least one action must be declared in the web service 'rule'"); ((WebService) context -> context.createController("rule").done()).define(context); }
@Test public void controller_path_must_not_start_with_slash() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("WS controller path must not start or end with slash: /hello"); ((WebService) context -> context.createController("/hello").done()).define(context); }
@Test public void controller_path_must_not_end_with_slash() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("WS controller path must not start or end with slash: hello/"); ((WebService) context -> context.createController("hello/").done()).define(context); }
@Test public void log_if_since_on_an_action_is_null() { ((WebService) context -> { NewController newController = context.createController("api/rule"); newDefaultAction(newController, "list") .setSince(null); newController.done(); }).define(context); assertThat(logTester.logs(LoggerLevel.WARN)) .contains("Since is not set on action api/rule/list"); }
@Test public void param_with_maximum_value() { ((WebService) context -> { NewController newController = context.createController("api/custom_measures"); NewAction create = newDefaultAction(newController, "create"); create.createParam("numeric_value") .setMaximumValue(10); newController.done(); }).define(context); WebService.Action action = context.controller("api/custom_measures").action("create"); assertThat(action.param("numeric_value").maximumValue()).isEqualTo(10); }
@Test public void param_with_minimum_length() { ((WebService) context -> { NewController newController = context.createController("api/custom_measures"); NewAction create = newDefaultAction(newController, "create"); create.createParam("string_value") .setMinimumLength(3); newController.done(); }).define(context); WebService.Action action = context.controller("api/custom_measures").action("create"); assertThat(action.param("string_value").minimumLength()).isEqualTo(3); }
@Test public void post_action_without_response_example() { WebService ws = context -> { NewController newController = context.createController("api/rule"); newDefaultAction(newController, "list").setPost(true).setResponseExample(null); newController.done(); }; ws.define(context); assertThat(logTester.logs(LoggerLevel.WARN)) .doesNotContain("The response example is not set on action api/rule/list"); }
@Test public void param_with_maximum_length() { ((WebService) context -> { NewController newController = context.createController("api/custom_measures"); NewAction create = newDefaultAction(newController, "create"); create.createParam("string_value") .setMaximumLength(24); newController.done(); }).define(context); WebService.Action action = context.controller("api/custom_measures").action("create"); assertThat(action.param("string_value").maximumLength()).isEqualTo(24); }
@Test public void param_with_empty_possible_values() { ((WebService) context -> { NewController newController = context.createController("api/rule"); NewAction create = newDefaultAction(newController, "create"); create.createParam("status") .setPossibleValues(Collections.emptyList()); newController.done(); }).define(context); WebService.Action action = context.controller("api/rule").action("create"); // no possible values -> return null but not empty assertThat(action.param("status").possibleValues()).isNull(); }
@Test public void fail_if_no_action_handler() { expectedException.expect(IllegalStateException.class); expectedException.expectMessage("RequestHandler is not set on action rule/show"); ((WebService) context -> { NewController controller = context.createController("rule"); newDefaultAction(controller, "show") .setHandler(null); controller.done(); }).define(context); }
}).define(context);