@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 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 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 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 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 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 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_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 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); }
((WebService) context -> { NewController newController = context.createController("api/rule"); NewAction newAction = newDefaultAction(newController, "create"); newAction .createParam("key")
@Test public void param_metadata_as_objects() { ((WebService) context -> { NewController newController = context.createController("api/rule"); NewAction create = newDefaultAction(newController, "create"); create.createParam("status") .setDefaultValue(RuleStatus.BETA) .setPossibleValues(RuleStatus.BETA, RuleStatus.READY) .setExampleValue(RuleStatus.BETA); create.createParam("max") .setDefaultValue(11) .setPossibleValues(11, 13, 17) .setExampleValue(17); newController.done(); }).define(context); WebService.Action action = context.controller("api/rule").action("create"); assertThat(action.param("status").defaultValue()).isEqualTo("BETA"); assertThat(action.param("status").possibleValues()).containsOnly("BETA", "READY"); assertThat(action.param("status").exampleValue()).isEqualTo("BETA"); assertThat(action.param("max").defaultValue()).isEqualTo("11"); assertThat(action.param("max").possibleValues()).containsOnly("11", "13", "17"); assertThat(action.param("max").exampleValue()).isEqualTo("17"); }
@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_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); }
@Test public void param_null_metadata() { ((WebService) context -> { NewController newController = context.createController("api/rule"); NewAction create = newDefaultAction(newController, "create"); create.createParam("status") .setDefaultValue(null) .setPossibleValues(Collections.emptyList()) .setExampleValue(null); create.createParam("max") .setPossibleValues((Object[]) null); newController.done(); }).define(context); WebService.Action action = context.controller("api/rule").action("create"); assertThat(action.param("status").defaultValue()).isNull(); assertThat(action.param("status").possibleValues()).isNull(); assertThat(action.param("status").exampleValue()).isNull(); assertThat(action.param("max").possibleValues()).isNull(); }