Package org.sonar.core.resource

Source Code of org.sonar.core.resource.ResourceDaoTest

/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2014 SonarSource
* mailto:contact AT sonarsource DOT com
*
* SonarQube is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* SonarQube is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/
package org.sonar.core.resource;

import com.google.common.base.Function;
import com.google.common.collect.Iterables;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.sonar.api.component.Component;
import org.sonar.api.resources.Qualifiers;
import org.sonar.api.resources.Scopes;
import org.sonar.api.utils.DateUtils;
import org.sonar.api.utils.System2;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.component.SnapshotDto;
import org.sonar.core.persistence.AbstractDaoTestCase;
import org.sonar.core.persistence.DbSession;

import javax.annotation.Nullable;

import java.util.Collections;
import java.util.List;

import static com.google.common.collect.Lists.newArrayList;
import static org.fest.assertions.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class ResourceDaoTest extends AbstractDaoTestCase {

  private DbSession session;

  private ResourceDao dao;
  private System2 system2;

  @Before
  public void createDao() {
    session = getMyBatis().openSession(false);
    system2 = mock(System2.class);
    when(system2.now()).thenReturn(DateUtils.parseDate("2014-09-03").getTime());
    dao = new ResourceDao(getMyBatis(), system2);
  }

  @After
  public void tearDown() throws Exception {
    session.close();
  }

  @Test
  public void testDescendantProjects_do_not_include_self() {
    setupData("fixture");

    List<ResourceDto> resources = dao.getDescendantProjects(1L);

    assertThat(resources).onProperty("id").containsOnly(2L);
  }

  @Test
  public void testDescendantProjects_id_not_found() {
    setupData("fixture");

    List<ResourceDto> resources = dao.getDescendantProjects(33333L);

    assertThat(resources).isEmpty();
  }

  @Test
  public void get_resource_by_id() {
    setupData("fixture");

    ResourceDto resource = dao.getResource(1L);

    assertThat(resource.getUuid()).isEqualTo("ABCD");
    assertThat(resource.getProjectUuid()).isEqualTo("ABCD");
    assertThat(resource.getPath()).isNull();
    assertThat(resource.getName()).isEqualTo("Struts");
    assertThat(resource.getLongName()).isEqualTo("Apache Struts");
    assertThat(resource.getScope()).isEqualTo("PRJ");
    assertThat(resource.getDescription()).isEqualTo("the description");
    assertThat(resource.getLanguage()).isEqualTo("java");
    assertThat(resource.isEnabled()).isTrue();
    assertThat(resource.getAuthorizationUpdatedAt()).isNotNull();
    assertThat(resource.getCreatedAt()).isNotNull();
  }

  @Test
  public void get_resource_path_and_module_key() {
    setupData("fixture");

    ResourceDto dir = dao.getResource(3L);
    assertThat(dir.getPath()).isEqualTo("src/org/struts");

    ResourceDto file = dao.getResource(4L);
    assertThat(file.getPath()).isEqualTo("src/org/struts/RequestContext.java");
  }

  @Test
  public void get_uuid() {
    setupData("fixture");

    ResourceDto file = dao.getResource(4L);
    assertThat(file.getUuid()).isEqualTo("DEFG");
    assertThat(file.getProjectUuid()).isEqualTo("ABCD");
    assertThat(file.getModuleUuid()).isEqualTo("BCDE");
    assertThat(file.getModuleUuidPath()).isEqualTo("ABCD.BCDE");
  }

  @Test
  public void getResource_not_found() {
    setupData("fixture");

    assertThat(dao.getResource(987654321L)).isNull();
  }

  @Test
  public void getResources_all() {
    setupData("fixture");

    List<ResourceDto> resources = dao.getResources(ResourceQuery.create());

    assertThat(resources).hasSize(4);
  }

  @Test
  public void getResources_filter_by_qualifier() {
    setupData("fixture");

    List<ResourceDto> resources = dao.getResources(ResourceQuery.create().setQualifiers(new String[] {"TRK", "BRC"}));
    assertThat(resources).onProperty("qualifier").containsOnly("TRK", "BRC");

    resources = dao.getResources(ResourceQuery.create().setQualifiers(new String[] {"XXX"}));
    assertThat(resources).isEmpty();

    resources = dao.getResources(ResourceQuery.create().setQualifiers(new String[] {}));
    assertThat(resources).hasSize(4);
  }

  @Test
  public void getResources_filter_by_key() {
    setupData("fixture");

    ResourceQuery query = ResourceQuery.create().setKey("org.struts:struts-core");
    List<ResourceDto> resources = dao.getResources(query);
    assertThat(resources).hasSize(1);
    assertThat(resources.get(0).getKey()).isEqualTo("org.struts:struts-core");

    assertThat(dao.getResource(query).getKey()).isEqualTo("org.struts:struts-core");
  }

  @Test
  public void getResourceIds_all() {
    setupData("fixture");

    List<Long> ids = dao.getResourceIds(ResourceQuery.create());

    assertThat(ids).hasSize(4);
  }

  @Test
  public void getResourceIds_filter_by_qualifier() {
    setupData("fixture");

    List<Long> ids = dao.getResourceIds(ResourceQuery.create().setQualifiers(new String[] {"TRK", "BRC"}));
    assertThat(ids).containsOnly(1L, 2L);

    ids = dao.getResourceIds(ResourceQuery.create().setQualifiers(new String[] {"XXX"}));
    assertThat(ids).isEmpty();

    ids = dao.getResourceIds(ResourceQuery.create().setQualifiers(new String[] {}));
    assertThat(ids).hasSize(4);
  }

  @Test
  public void getResources_exclude_disabled() {
    setupData("getResources_exclude_disabled");

    assertThat(dao.getResourceIds(ResourceQuery.create().setExcludeDisabled(false))).containsOnly(1L, 2L);
    assertThat(dao.getResourceIds(ResourceQuery.create().setExcludeDisabled(true))).containsOnly(2L);
  }

  @Test
  public void find_root_project_by_component_key() {
    setupData("fixture");

    assertThat(dao.getRootProjectByComponentKey("org.struts:struts-core:src/org/struts/RequestContext.java").getKey()).isEqualTo("org.struts:struts");
    assertThat(dao.getRootProjectByComponentKey("org.struts:struts-core:src/org/struts").getKey()).isEqualTo("org.struts:struts");
    assertThat(dao.getRootProjectByComponentKey("org.struts:struts-core").getKey()).isEqualTo("org.struts:struts");
    assertThat(dao.getRootProjectByComponentKey("org.struts:struts").getKey()).isEqualTo("org.struts:struts");

    assertThat(dao.getRootProjectByComponentKey("unknown")).isNull();
  }

  @Test
  public void find_root_project_by_component_Id() {
    setupData("fixture");

    assertThat(dao.getRootProjectByComponentId(4l).getKey()).isEqualTo("org.struts:struts");
    assertThat(dao.getRootProjectByComponentId(3l).getKey()).isEqualTo("org.struts:struts");
    assertThat(dao.getRootProjectByComponentId(2l).getKey()).isEqualTo("org.struts:struts");
    assertThat(dao.getRootProjectByComponentId(1l).getKey()).isEqualTo("org.struts:struts");
  }

  @Test
  public void find_parent_by_component_id() {
    setupData("fixture");

    assertThat(dao.getParentModuleByComponentId(4l, session).getKey()).isEqualTo("org.struts:struts");
    assertThat(dao.getParentModuleByComponentId(3l, session).getKey()).isEqualTo("org.struts:struts");
    assertThat(dao.getParentModuleByComponentId(2l, session).getKey()).isEqualTo("org.struts:struts");
    assertThat(dao.getParentModuleByComponentId(1l, session).getKey()).isEqualTo("org.struts:struts");
  }

  @Test
  public void should_update() {
    setupData("update");

    ResourceDto project = new ResourceDto()
      .setKey("org.struts:struts")
      .setDeprecatedKey("deprecated key").setScope(Scopes.PROJECT).setQualifier(Qualifiers.PROJECT)
      .setName("Struts").setLongName("Apache Struts").setLanguage("java").setDescription("MVC Framework")
      .setPath("/foo/bar")
      .setId(1L);

    dao.insertOrUpdate(project);

    assertThat(project.getId()).isNotNull();
    checkTables("update", "projects");
  }

  @Test
  public void should_insert() {
    setupData("insert");

    ResourceDto file1 = new ResourceDto()
      .setUuid("ABCD").setProjectUuid("EFGH")
      .setKey("org.struts:struts:/src/main/java/org/struts/Action.java")
      .setDeprecatedKey("org.struts:struts:org.struts.Action").setScope(Scopes.FILE).setQualifier(Qualifiers.FILE)
      .setLanguage("java").setName("Action").setLongName("org.struts.Action").setPath("/foo/bar");
    ResourceDto file2 = new ResourceDto()
      .setUuid("BCDE").setProjectUuid("FGHI")
      .setKey("org.struts:struts:/src/main/java/org/struts/Filter.java")
      .setDeprecatedKey("org.struts:struts:org.struts.Filter").setScope(Scopes.FILE).setQualifier(Qualifiers.FILE)
      .setLanguage("java").setName("Filter").setLongName("org.struts.Filter");

    dao.insertOrUpdate(file1, file2);

    assertThat(file1.getId()).isNotNull();
    assertThat(file2.getId()).isNotNull();
    checkTables("insert", "projects");

    // SONAR-3636 : created_at must be fed when inserting a new entry in the 'projects' table
    ResourceDto fileLoadedFromDB = dao.getResource(file1.getId());
    assertThat(fileLoadedFromDB.getCreatedAt()).isNotNull();
    assertThat(fileLoadedFromDB.getAuthorizationUpdatedAt()).isNotNull();
  }

  @Test
  public void should_insert_using_existing_session() throws Exception {
    setupData("insert");

    ResourceDto file1 = new ResourceDto().setUuid("ABCD")
      .setKey("org.struts:struts:/src/main/java/org/struts/Action.java")
      .setDeprecatedKey("org.struts:struts:org.struts.Action").setScope(Scopes.FILE).setQualifier(Qualifiers.FILE)
      .setLanguage("java").setName("Action").setLongName("org.struts.Action");
    ResourceDto file2 = new ResourceDto().setUuid("BCDE")
      .setKey("org.struts:struts:/src/main/java/org/struts/Filter.java")
      .setDeprecatedKey("org.struts:struts:org.struts.Filter").setScope(Scopes.FILE).setQualifier(Qualifiers.FILE)
      .setLanguage("java").setName("Filter").setLongName("org.struts.Filter");

    SqlSession session = getMyBatis().openSession();

    dao.insertUsingExistingSession(file1, session);
    dao.insertUsingExistingSession(file2, session);

    session.rollback();

    assertEmptyTables("projects");
  }

  @Test
  public void insert_add_uuids_on_project_if_missing() {
    setupData("insert");

    ResourceDto project = new ResourceDto()
      .setKey("org.struts:struts:struts")
      .setScope(Scopes.PROJECT)
      .setQualifier(Qualifiers.PROJECT);

    ResourceDto file = new ResourceDto()
      .setKey("org.struts:struts:/src/main/java/org/struts/Action.java")
      .setScope(Scopes.FILE)
      .setQualifier(Qualifiers.FILE);

    dao.insertOrUpdate(project, file);

    assertThat(project.getUuid()).isNotNull();
    assertThat(project.getProjectUuid()).isEqualTo(project.getUuid());

    assertThat(file.getUuid()).isNull();
    assertThat(file.getProjectUuid()).isNull();
  }

  @Test
  public void should_find_component_by_key() {
    setupData("fixture");

    assertThat(dao.findByKey("org.struts:struts")).isNotNull();
    Component<?> component = dao.findByKey("org.struts:struts-core:src/org/struts/RequestContext.java");
    assertThat(component).isNotNull();
    assertThat(component.path()).isEqualTo("src/org/struts/RequestContext.java");
    assertThat(dao.findByKey("unknown")).isNull();
  }

  @Test
  public void should_find_component_by_id() {
    setupData("fixture");

    assertThat(dao.findById(1L, session)).isNotNull();
    assertThat(dao.findById(4L, session)).isNotNull();
    assertThat(dao.findById(555L, session)).isNull();
  }

  @Test
  public void should_select_projects_by_qualifiers() {
    setupData("fixture-including-ghost-projects-and-technical-project");

    List<Component> components = dao.selectProjectsByQualifiers(newArrayList("TRK"));
    assertThat(components).hasSize(1);
    assertThat(components.get(0).key()).isEqualTo("org.struts:struts");
    assertThat(((ComponentDto) components.get(0)).getId()).isEqualTo(1L);

    assertThat(dao.selectProjectsIncludingNotCompletedOnesByQualifiers(newArrayList("unknown"))).isEmpty();
    assertThat(dao.selectProjectsIncludingNotCompletedOnesByQualifiers(Collections.<String>emptyList())).isEmpty();
  }

  @Test
  public void should_select_projects_including_not_finished_by_qualifiers() {
    setupData("fixture-including-ghost-projects-and-technical-project");

    List<Component> components = dao.selectProjectsIncludingNotCompletedOnesByQualifiers(newArrayList("TRK"));
    assertThat(getKeys(components)).containsOnly("org.struts:struts", "org.apache.shindig", "org.sample:sample");

    assertThat(dao.selectProjectsIncludingNotCompletedOnesByQualifiers(newArrayList("unknown"))).isEmpty();
    assertThat(dao.selectProjectsIncludingNotCompletedOnesByQualifiers(Collections.<String>emptyList())).isEmpty();
  }

  @Test
  public void should_select_ghosts_projects_by_qualifiers() {
    setupData("fixture-including-ghost-projects-and-technical-project");

    List<Component> components = dao.selectGhostsProjects(newArrayList("TRK"));
    assertThat(components).hasSize(1);
    assertThat(getKeys(components)).containsOnly("org.apache.shindig");

    assertThat(dao.selectGhostsProjects(newArrayList("unknown"))).isEmpty();
    assertThat(dao.selectGhostsProjects(Collections.<String>emptyList())).isEmpty();
  }

  @Test
  public void should_select_provisioned_projects_by_qualifiers() {
    setupData("fixture-including-ghost-projects-and-technical-project");

    List<ResourceDto> components = dao.selectProvisionedProjects(newArrayList("TRK"));
    assertThat(components).hasSize(1);
    assertThat(components.get(0).getKey()).isEqualTo("org.sample:sample");

    assertThat(dao.selectProvisionedProjects(newArrayList("unknown"))).isEmpty();
    assertThat(dao.selectProvisionedProjects(Collections.<String>emptyList())).isEmpty();
  }

  @Test
  public void should_select_provisioned_project_by_key() {
    setupData("fixture-including-ghost-projects-and-technical-project");

    String key = "org.sample:sample";
    assertThat(dao.selectProvisionedProject(key).getKey()).isEqualTo(key);
    assertThat(dao.selectProvisionedProject("unknown")).isNull();
  }

  @Test
  public void get_last_snapshot_by_component_uuid() {
    setupData("get_last_snapshot_by_component_uuid");

    SnapshotDto snapshotDto = dao.getLastSnapshotByResourceUuid("ABCD", session);
    assertThat(snapshotDto.getId()).isEqualTo(1);

    assertThat(snapshotDto.getPeriodMode(1)).isEqualTo("previous_analysis");
    assertThat(snapshotDto.getPeriodModeParameter(1)).isNull();
    assertThat(snapshotDto.getPeriodDate(1)).isNull();

    assertThat(snapshotDto.getPeriodMode(2)).isEqualTo("days");
    assertThat(snapshotDto.getPeriodModeParameter(2)).isEqualTo("30");
    assertThat(snapshotDto.getPeriodDate(2)).isEqualTo(DateUtils.parseDate("2011-09-24"));

    assertThat(snapshotDto.getPeriodMode(3)).isEqualTo("days");
    assertThat(snapshotDto.getPeriodModeParameter(3)).isEqualTo("90");
    assertThat(snapshotDto.getPeriodDate(3)).isEqualTo(DateUtils.parseDate("2011-07-26"));

    assertThat(snapshotDto.getPeriodMode(4)).isEqualTo("previous_analysis");
    assertThat(snapshotDto.getPeriodModeParameter(4)).isNull();
    assertThat(snapshotDto.getPeriodDate(4)).isNull();

    assertThat(snapshotDto.getPeriodMode(5)).isEqualTo("previous_version");
    assertThat(snapshotDto.getPeriodModeParameter(5)).isNull();
    assertThat(snapshotDto.getPeriodDate(5)).isNull();

    snapshotDto = dao.getLastSnapshotByResourceUuid("EFGH", session);
    assertThat(snapshotDto.getId()).isEqualTo(2L);

    snapshotDto = dao.getLastSnapshotByResourceUuid("GHIJ", session);
    assertThat(snapshotDto.getId()).isEqualTo(3L);

    assertThat(dao.getLastSnapshotByResourceUuid("UNKNOWN", session)).isNull();
  }

  @Test
  public void update_authorization_date() {
    setupData("update_authorization_date");

    when(system2.now()).thenReturn(DateUtils.parseDate("2014-09-03").getTime());
    dao.updateAuthorizationDate(1L, session);
    session.commit();

    checkTables("update_authorization_date", "projects");
  }

  private List<String> getKeys(final List<Component> components) {
    return newArrayList(Iterables.transform(components, new Function<Component, String>() {
      @Override
      public String apply(@Nullable Component input) {
        return input.key();
      }
    }));
  }
}
TOP

Related Classes of org.sonar.core.resource.ResourceDaoTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.