@Test
  public void should_count_component_permissions() {
    dbTester.prepareDbUnit(getClass(), "should_count_component_permissions.xml");

    assertThat(permissionFacade.countComponentPermissions(dbTester.getSession(), 123L))
        .isEqualTo(2);
  }
  @Test
  public void should_fail_on_unmatched_template() {
    dbTester.truncateTables();

    throwable.expect(IllegalArgumentException.class);

    PermissionTemplateDao permissionTemplateDao = mock(PermissionTemplateDao.class);

    DbClient dbClient = mock(DbClient.class);
    when(dbClient.permissionTemplateDao()).thenReturn(permissionTemplateDao);
    permissionFacade = new PermissionFacade(dbClient, null);
    permissionFacade.getPermissionTemplateWithPermissions(dbTester.getSession(), "unmatched");
  }
  @Test
  public void should_apply_permission_template() {
    dbTester.prepareDbUnit(getClass(), "should_apply_permission_template.xml");

    assertThat(
            permissionFacade.selectGroupPermissions(
                dbTester.getSession(), "sonar-administrators", 123L))
        .isEmpty();
    assertThat(permissionFacade.selectGroupPermissions(dbTester.getSession(), "sonar-users", 123L))
        .isEmpty();
    assertThat(permissionFacade.selectGroupPermissions(dbTester.getSession(), "Anyone", 123L))
        .isEmpty();
    assertThat(permissionFacade.selectUserPermissions(dbTester.getSession(), "marius", 123L))
        .isEmpty();

    permissionFacade.applyPermissionTemplate(
        dbTester.getSession(), "default_20130101_010203", 123L);

    assertThat(
            permissionFacade.selectGroupPermissions(
                dbTester.getSession(), "sonar-administrators", 123L))
        .containsOnly("admin", "issueadmin");
    assertThat(permissionFacade.selectGroupPermissions(dbTester.getSession(), "sonar-users", 123L))
        .containsOnly("user", "codeviewer");
    assertThat(permissionFacade.selectGroupPermissions(dbTester.getSession(), "Anyone", 123L))
        .containsOnly("user", "codeviewer");

    assertThat(permissionFacade.selectUserPermissions(dbTester.getSession(), "marius", 123L))
        .containsOnly("admin");

    assertThat(
            dbTester
                .getDbClient()
                .resourceDao()
                .selectResource(123L, dbTester.getSession())
                .getAuthorizationUpdatedAt())
        .isEqualTo(123456789L);
  }
  @Test
  public void should_delete_group_name_permission() {
    dbTester.prepareDbUnit(getClass(), "should_delete_group_permission.xml");

    permissionFacade.deleteGroupPermission(123L, "devs", UserRole.USER, dbTester.getSession());
    dbTester.getSession().commit();

    dbTester.assertDbUnitTable(
        getClass(),
        "should_delete_group_permission-result.xml",
        "group_roles",
        "group_id",
        "resource_id",
        "role");
    dbTester.assertDbUnitTable(
        getClass(),
        "should_delete_group_permission-result.xml",
        "projects",
        "authorization_updated_at");
  }
  @Test
  public void should_delete_user_permission() {
    dbTester.prepareDbUnit(getClass(), "should_delete_user_permission.xml");

    permissionFacade.deleteUserPermission(123L, 200L, UserRole.ADMIN, dbTester.getSession());
    dbTester.getSession().commit();

    dbTester.assertDbUnitTable(
        getClass(),
        "should_delete_user_permission-result.xml",
        "user_roles",
        "user_id",
        "resource_id",
        "role");
    dbTester.assertDbUnitTable(
        getClass(),
        "should_delete_user_permission-result.xml",
        "projects",
        "authorization_updated_at");
  }
  @Test
  public void should_retrieve_permission_template() {
    dbTester.truncateTables();

    PermissionTemplateDto permissionTemplateDto =
        new PermissionTemplateDto().setName("Test template").setKee("test_template");
    PermissionTemplateDto templateWithPermissions =
        new PermissionTemplateDto().setKee("test_template");
    PermissionTemplateDao permissionTemplateDao = mock(PermissionTemplateDao.class);
    when(permissionTemplateDao.selectTemplateByKey(dbTester.getSession(), "test_template"))
        .thenReturn(permissionTemplateDto);
    when(permissionTemplateDao.selectPermissionTemplate(dbTester.getSession(), "test_template"))
        .thenReturn(templateWithPermissions);

    DbClient dbClient = mock(DbClient.class);
    when(dbClient.permissionTemplateDao()).thenReturn(permissionTemplateDao);
    permissionFacade = new PermissionFacade(dbClient, null);

    PermissionTemplateDto permissionTemplate =
        permissionFacade.getPermissionTemplateWithPermissions(
            dbTester.getSession(), "test_template");

    assertThat(permissionTemplate).isSameAs(templateWithPermissions);
  }
  @Test
  public void should_remove_all_permissions() {
    dbTester.prepareDbUnit(getClass(), "should_remove_all_permissions.xml");

    assertThat(permissionFacade.selectGroupPermissions(dbTester.getSession(), "devs", 123L))
        .hasSize(1);
    assertThat(permissionFacade.selectGroupPermissions(dbTester.getSession(), "other", 123L))
        .isEmpty();
    assertThat(permissionFacade.selectUserPermissions(dbTester.getSession(), "dave.loper", 123L))
        .hasSize(1);
    assertThat(permissionFacade.selectUserPermissions(dbTester.getSession(), "other.user", 123L))
        .isEmpty();

    permissionFacade.removeAllPermissions(123L, dbTester.getSession());
    dbTester.getSession().commit();

    dbTester.assertDbUnitTable(
        getClass(),
        "should_remove_all_permissions-result.xml",
        "group_roles",
        "group_id",
        "resource_id",
        "role");
    dbTester.assertDbUnitTable(
        getClass(),
        "should_remove_all_permissions-result.xml",
        "user_roles",
        "user_id",
        "resource_id",
        "role");

    assertThat(permissionFacade.selectGroupPermissions(dbTester.getSession(), "devs", 123L))
        .isEmpty();
    assertThat(permissionFacade.selectUserPermissions(dbTester.getSession(), "dave.loper", 123L))
        .isEmpty();
  }