@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_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 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_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); }
@Test public void fail_if_duplicated_action_parameters() { expectedException.expect(IllegalStateException.class); expectedException.expectMessage("The parameter 'key' is defined multiple times in the action 'create'"); ((WebService) context -> { NewController controller = context.createController("api/rule"); NewAction action = newDefaultAction(controller, "create"); action.createParam("key"); action.createParam("key"); controller.done(); }).define(context); }
@Test public void fail_if_duplicated_ws_keys() { expectedException.expect(IllegalStateException.class); expectedException.expectMessage("The web service 'api/metric' is defined multiple times"); MetricWs metricWs = new MetricWs(); metricWs.define(context); ((WebService) context -> { NewController newController = context.createController("api/metric"); newDefaultAction(newController, "delete"); newController.done(); }).define(context); }
@Test public void fail_if_duplicated_action_keys() { expectedException.expect(IllegalStateException.class); expectedException.expectMessage("The action 'delete' is defined multiple times in the web service 'rule'"); ((WebService) context -> { NewController newController = context.createController("rule"); newDefaultAction(newController, "create"); newDefaultAction(newController, "delete"); newDefaultAction(newController, "delete"); newController.done(); }).define(context); }
@Test public void fail_if_required_param_has_default_value() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Default value must not be set on parameter 'api/rule/create?key' as it's marked as required"); ((WebService) context -> { NewController controller = context.createController("api/rule"); NewAction action = newDefaultAction(controller, "create"); action.createParam("key").setRequired(true).setDefaultValue("abc"); controller.done(); }).define(context); }