@Test
  public void createTemplate_does_POST_on_Ws_create_template() {
    underTest.createTemplate(
        new CreateTemplateWsRequest()
            .setName(NAME_VALUE)
            .setDescription(DESCRIPTION_VALUE)
            .setProjectKeyPattern(PROJECT_KEY_PATTERN_VALUE));

    assertThat(serviceTester.getPostParser())
        .isSameAs(WsPermissions.CreateTemplateWsResponse.parser());
    PostRequest postRequest = serviceTester.getPostRequest();
    serviceTester
        .assertThat(postRequest)
        .hasPath("create_template")
        .hasParam(PARAM_NAME, NAME_VALUE)
        .hasParam(PARAM_DESCRIPTION, DESCRIPTION_VALUE)
        .hasParam(PARAM_PROJECT_KEY_PATTERN, PROJECT_KEY_PATTERN_VALUE)
        .andNoOtherParam();
  }
  @Test
  public void template_permission_web_services() {
    WsPermissions.CreateTemplateWsResponse createTemplateWsResponse =
        permissionsWsClient.createTemplate(
            new CreateTemplateWsRequest()
                .setName("my-new-template")
                .setDescription("template-used-in-tests"));
    assertThat(createTemplateWsResponse.getPermissionTemplate().getName())
        .isEqualTo("my-new-template");

    permissionsWsClient.addUserToTemplate(
        new AddUserToTemplateWsRequest()
            .setPermission("admin")
            .setTemplateName("my-new-template")
            .setLogin(LOGIN));

    permissionsWsClient.addGroupToTemplate(
        new AddGroupToTemplateWsRequest()
            .setPermission("admin")
            .setTemplateName("my-new-template")
            .setGroupName(GROUP_NAME));

    permissionsWsClient.addProjectCreatorToTemplate(
        AddProjectCreatorToTemplateWsRequest.builder()
            .setPermission("admin")
            .setTemplateName("my-new-template")
            .build());

    SearchTemplatesWsResponse searchTemplatesWsResponse =
        permissionsWsClient.searchTemplates(
            new SearchTemplatesWsRequest().setQuery("my-new-template"));
    assertThat(searchTemplatesWsResponse.getPermissionTemplates(0).getName())
        .isEqualTo("my-new-template");
    assertThat(searchTemplatesWsResponse.getPermissionTemplates(0).getPermissions(0).getKey())
        .isEqualTo("admin");
    assertThat(
            searchTemplatesWsResponse.getPermissionTemplates(0).getPermissions(0).getUsersCount())
        .isEqualTo(1);
    assertThat(
            searchTemplatesWsResponse.getPermissionTemplates(0).getPermissions(0).getGroupsCount())
        .isEqualTo(1);
    assertThat(
            searchTemplatesWsResponse
                .getPermissionTemplates(0)
                .getPermissions(0)
                .getWithProjectCreator())
        .isTrue();

    permissionsWsClient.removeGroupFromTemplate(
        new RemoveGroupFromTemplateWsRequest()
            .setPermission("admin")
            .setTemplateName("my-new-template")
            .setGroupName(GROUP_NAME));

    permissionsWsClient.removeUserFromTemplate(
        new RemoveUserFromTemplateWsRequest()
            .setPermission("admin")
            .setTemplateName("my-new-template")
            .setLogin(LOGIN));

    permissionsWsClient.removeProjectCreatorFromTemplate(
        RemoveProjectCreatorFromTemplateWsRequest.builder()
            .setPermission("admin")
            .setTemplateName("my-new-template")
            .build());

    SearchTemplatesWsResponse clearedSearchTemplatesWsResponse =
        permissionsWsClient.searchTemplates(
            new SearchTemplatesWsRequest().setQuery("my-new-template"));
    assertThat(clearedSearchTemplatesWsResponse.getPermissionTemplates(0).getPermissionsList())
        .extracting(
            Permission::getUsersCount,
            Permission::getGroupsCount,
            Permission::getWithProjectCreator)
        .hasSize(5)
        .containsOnly(tuple(0, 0, false));
  }