Package org.sonar.server.component.ws

Source Code of org.sonar.server.component.ws.ComponentAppActionTest$IssuesExtension

/*
* 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.server.component.ws;

import com.google.common.collect.HashMultiset;
import com.google.common.collect.LinkedHashMultiset;
import com.google.common.collect.Multiset;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.sonar.api.i18n.I18n;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.utils.DateUtils;
import org.sonar.api.utils.Duration;
import org.sonar.api.utils.Durations;
import org.sonar.api.web.NavigationSection;
import org.sonar.api.web.Page;
import org.sonar.api.web.UserRole;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.component.SnapshotDto;
import org.sonar.core.measure.db.MeasureDto;
import org.sonar.core.measure.db.MeasureKey;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.properties.PropertiesDao;
import org.sonar.core.properties.PropertyDto;
import org.sonar.core.properties.PropertyQuery;
import org.sonar.core.resource.ResourceDao;
import org.sonar.core.rule.RuleDto;
import org.sonar.core.timemachine.Periods;
import org.sonar.server.component.ComponentTesting;
import org.sonar.server.component.db.ComponentDao;
import org.sonar.server.db.DbClient;
import org.sonar.server.issue.IssueService;
import org.sonar.server.issue.RulesAggregation;
import org.sonar.server.measure.persistence.MeasureDao;
import org.sonar.server.rule.Rule;
import org.sonar.server.rule.RuleService;
import org.sonar.server.rule.index.RuleQuery;
import org.sonar.server.search.QueryContext;
import org.sonar.server.search.Result;
import org.sonar.server.ui.ViewProxy;
import org.sonar.server.ui.Views;
import org.sonar.server.user.MockUserSession;
import org.sonar.server.ws.WsTester;

import java.util.Date;
import java.util.List;
import java.util.Locale;

import static com.google.common.collect.Lists.newArrayList;
import static org.fest.assertions.Assertions.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyListOf;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.isNull;
import static org.mockito.Mockito.*;

@RunWith(MockitoJUnitRunner.class)
public class ComponentAppActionTest {

  static final String SUB_PROJECT_KEY = "org.codehaus.sonar:sonar-plugin-api";
  static final String COMPONENT_KEY = "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/Plugin.java";

  @Mock
  DbSession session;

  @Mock
  ComponentDao componentDao;

  @Mock
  ResourceDao resourceDao;

  @Mock
  PropertiesDao propertiesDao;

  @Mock
  MeasureDao measureDao;

  @Mock
  IssueService issueService;

  @Mock
  Views views;

  @Mock
  RuleService ruleService;

  @Mock
  Periods periods;

  @Mock
  Durations durations;

  @Mock
  I18n i18n;

  @Captor
  ArgumentCaptor<List<String>> measureKeysCaptor;

  List<MeasureDto> measures = newArrayList();

  WsTester tester;

  ComponentDto project;

  @Before
  public void setUp() throws Exception {
    DbClient dbClient = mock(DbClient.class);
    when(dbClient.openSession(false)).thenReturn(session);
    when(dbClient.componentDao()).thenReturn(componentDao);
    when(dbClient.resourceDao()).thenReturn(resourceDao);
    when(dbClient.propertiesDao()).thenReturn(propertiesDao);
    when(dbClient.measureDao()).thenReturn(measureDao);

    project = ComponentTesting.newProjectDto()
      .setId(1L)
      .setName("SonarQube")
      .setLongName("SonarQube")
      .setKey("org.codehaus.sonar:sonar");

    when(issueService.findSeveritiesByComponent(anyString(), any(Date.class), eq(session))).thenReturn(mock(Multiset.class));
    when(issueService.findRulesByComponent(anyString(), any(Date.class), eq(session))).thenReturn(mock(RulesAggregation.class));
    when(measureDao.findByComponentKeyAndMetricKeys(anyString(), anyListOf(String.class), eq(session))).thenReturn(measures);

    tester = new WsTester(new ComponentsWs(new ComponentAppAction(dbClient, issueService, views, ruleService, periods, durations, i18n)));
  }

  @Test
  public void app() throws Exception {
    MockUserSession.set().setLogin("john").addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY);

    ComponentDto file = ComponentTesting.newFileDto(project)
      .setId(10L)
      .setKey(COMPONENT_KEY)
      .setName("Plugin.java")
      .setLongName("src/main/java/org/sonar/api/Plugin.java")
      .setPath("src/main/java/org/sonar/api/Plugin.java")
      .setSubProjectId(5L);
    when(componentDao.getNullableByKey(session, COMPONENT_KEY)).thenReturn(file);
    when(componentDao.getById(5L, session)).thenReturn(new ComponentDto().setId(5L).setLongName("SonarQube :: Plugin API").setKey(SUB_PROJECT_KEY));
    when(componentDao.getByUuid(session, project.uuid())).thenReturn(project);
    when(propertiesDao.selectByQuery(any(PropertyQuery.class), eq(session))).thenReturn(newArrayList(new PropertyDto()));

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY);
    request.execute().assertJson(getClass(), "app.json");
  }

  @Test
  public void app_without_sub_project() throws Exception {
    String componentKey = "org.codehaus.sonar:sonar";
    MockUserSession.set().setLogin("john").addComponentPermission(UserRole.USER, componentKey, componentKey);

    when(componentDao.getNullableByKey(session, componentKey)).thenReturn(project);
    when(componentDao.getByUuid(session, project.uuid())).thenReturn(project);
    when(propertiesDao.selectByQuery(any(PropertyQuery.class), eq(session))).thenReturn(newArrayList(new PropertyDto()));

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", componentKey);
    request.execute().assertJson(getClass(), "app_without_sub_project.json");
  }

  @Test
  public void app_with_sub_project_equals_to_project() throws Exception {
    MockUserSession.set().setLogin("john").addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY);

    ComponentDto file = ComponentTesting.newFileDto(project)
      .setId(10L)
      .setKey(COMPONENT_KEY)
      .setName("Plugin.java")
      .setLongName(null)
      .setPath("src/main/java/org/sonar/api/Plugin.java")
      .setSubProjectId(1L);
    when(componentDao.getNullableByKey(session, COMPONENT_KEY)).thenReturn(file);
    when(componentDao.getById(project.getId(), session)).thenReturn(project);
    when(componentDao.getByUuid(session, project.uuid())).thenReturn(project);
    when(propertiesDao.selectByQuery(any(PropertyQuery.class), eq(session))).thenReturn(newArrayList(new PropertyDto()));

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY);
    request.execute().assertJson(getClass(), "app_with_sub_project_equals_to_project.json");
  }

  @Test
  public void app_with_tabs() throws Exception {
    MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY);
    addComponent();

    addMeasure(CoreMetrics.COVERAGE_KEY, 1.0);
    addMeasure(CoreMetrics.DUPLICATED_LINES_KEY, 2);
    addMeasure(CoreMetrics.SCM_AUTHORS_BY_LINE_KEY, 3);

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY);
    request.execute().assertJson(getClass(), "app_with_tabs.json");
  }

  @Test
  public void app_with_measures() throws Exception {
    MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY);
    addComponent();

    addMeasure(CoreMetrics.NCLOC_KEY, 200);
    addMeasure(CoreMetrics.COVERAGE_KEY, 95.4);
    addMeasure(CoreMetrics.DUPLICATED_LINES_DENSITY_KEY, 7.4);
    addMeasure(CoreMetrics.SQALE_RATING_KEY, "C");
    addMeasure(CoreMetrics.SQALE_DEBT_RATIO_KEY, 35d);

    measures.add(MeasureDto.createFor(MeasureKey.of(COMPONENT_KEY, CoreMetrics.TECHNICAL_DEBT_KEY)).setValue(182.0));
    when(durations.format(any(Locale.class), any(Duration.class), eq(Durations.DurationFormat.SHORT))).thenReturn("3h 2min");

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY);
    request.execute().assertJson(getClass(), "app_with_measures.json");

    verify(measureDao).findByComponentKeyAndMetricKeys(eq(COMPONENT_KEY), measureKeysCaptor.capture(), eq(session));
    assertThat(measureKeysCaptor.getValue()).contains(CoreMetrics.NCLOC_KEY, CoreMetrics.COVERAGE_KEY, CoreMetrics.DUPLICATED_LINES_DENSITY_KEY,
      CoreMetrics.TECHNICAL_DEBT_KEY);
  }

  @Test
  public void app_with_measures_when_period_is_set() throws Exception {
    MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY);
    addComponent();
    addPeriod();

    addVariationMeasure(CoreMetrics.NCLOC_KEY, 2, 1);
    addVariationMeasure(CoreMetrics.COVERAGE_KEY, 5d, 1);
    addVariationMeasure(CoreMetrics.DUPLICATED_LINES_DENSITY_KEY, 1.2, 1);
    addVariationMeasure(CoreMetrics.SQALE_DEBT_RATIO_KEY, 5d, 1);

    measures.add(MeasureDto.createFor(MeasureKey.of(COMPONENT_KEY, CoreMetrics.TECHNICAL_DEBT_KEY)).setVariation(1, 10.0));
    when(durations.format(any(Locale.class), any(Duration.class), eq(Durations.DurationFormat.SHORT))).thenReturn("10min");

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY).setParam("period", "1");
    request.execute().assertJson(getClass(), "app_with_measures_when_period_is_set.json");

    verify(measureDao).findByComponentKeyAndMetricKeys(eq(COMPONENT_KEY), measureKeysCaptor.capture(), eq(session));
    assertThat(measureKeysCaptor.getValue()).contains(CoreMetrics.NCLOC_KEY, CoreMetrics.COVERAGE_KEY, CoreMetrics.DUPLICATED_LINES_DENSITY_KEY,
      CoreMetrics.TECHNICAL_DEBT_KEY);
  }

  @Test
  public void app_with_issues_measures() throws Exception {
    MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY);
    addComponent();

    Multiset<String> severities = LinkedHashMultiset.create();
    severities.add("BLOCKER", 1);
    severities.add("CRITICAL", 2);
    severities.add("MAJOR", 5);
    severities.add("MINOR", 4);
    severities.add("INFO", 2);
    when(issueService.findSeveritiesByComponent(COMPONENT_KEY, null, session)).thenReturn(severities);
    when(i18n.message(any(Locale.class), eq("severity.BLOCKER"), isNull(String.class))).thenReturn("Blocker");
    when(i18n.message(any(Locale.class), eq("severity.CRITICAL"), isNull(String.class))).thenReturn("Critical");
    when(i18n.message(any(Locale.class), eq("severity.MAJOR"), isNull(String.class))).thenReturn("Major");
    when(i18n.message(any(Locale.class), eq("severity.MINOR"), isNull(String.class))).thenReturn("Minor");
    when(i18n.message(any(Locale.class), eq("severity.INFO"), isNull(String.class))).thenReturn("Info");

    when(i18n.formatInteger(any(Locale.class), eq(14))).thenReturn("14");
    when(i18n.formatInteger(any(Locale.class), eq(1))).thenReturn("1");
    when(i18n.formatInteger(any(Locale.class), eq(2))).thenReturn("2");
    when(i18n.formatInteger(any(Locale.class), eq(5))).thenReturn("5");
    when(i18n.formatInteger(any(Locale.class), eq(4))).thenReturn("4");

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY);
    request.execute().assertJson(getClass(), "app_with_issues_measures.json");
  }

  @Test
  public void app_with_issues_measures_when_period_is_set() throws Exception {
    MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY);
    addComponent();
    addPeriod();

    Multiset<String> severities = LinkedHashMultiset.create();
    severities.add("BLOCKER", 1);
    severities.add("CRITICAL", 2);
    severities.add("MAJOR", 5);
    severities.add("MINOR", 4);
    severities.add("INFO", 2);
    when(issueService.findSeveritiesByComponent(eq(COMPONENT_KEY), any(Date.class), eq(session))).thenReturn(severities);

    when(i18n.message(any(Locale.class), eq("severity.BLOCKER"), isNull(String.class))).thenReturn("Blocker");
    when(i18n.message(any(Locale.class), eq("severity.CRITICAL"), isNull(String.class))).thenReturn("Critical");
    when(i18n.message(any(Locale.class), eq("severity.MAJOR"), isNull(String.class))).thenReturn("Major");
    when(i18n.message(any(Locale.class), eq("severity.MINOR"), isNull(String.class))).thenReturn("Minor");
    when(i18n.message(any(Locale.class), eq("severity.INFO"), isNull(String.class))).thenReturn("Info");

    when(i18n.formatInteger(any(Locale.class), eq(14))).thenReturn("14");
    when(i18n.formatInteger(any(Locale.class), eq(1))).thenReturn("1");
    when(i18n.formatInteger(any(Locale.class), eq(2))).thenReturn("2");
    when(i18n.formatInteger(any(Locale.class), eq(5))).thenReturn("5");
    when(i18n.formatInteger(any(Locale.class), eq(4))).thenReturn("4");

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY).setParam("period", "1");
    request.execute().assertJson(getClass(), "app_with_issues_measures_when_period_is_set.json");
  }

  @Test
  public void app_with_tests_measure() throws Exception {
    String componentKey = "org.codehaus.sonar:sonar-server:src/test/java/org/sonar/server/issue/PlanActionTest.java";
    MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, componentKey);

    ComponentDto file = ComponentTesting.newFileDto(project)
      .setId(10L)
      .setQualifier("UTS")
      .setLongName(null)
      .setKey(componentKey).setName("PlanActionTest.java")
      .setPath("src/test/java/org/sonar/server/issue/PlanActionTest.java")
      .setSubProjectId(5L);
    when(componentDao.getNullableByKey(session, componentKey)).thenReturn(file);
    when(componentDao.getById(5L, session)).thenReturn(new ComponentDto().setId(5L).setLongName("SonarQube :: Plugin API").setKey(SUB_PROJECT_KEY));
    when(componentDao.getByUuid(session, project.uuid())).thenReturn(project);

    addMeasure(CoreMetrics.TESTS_KEY, 10);

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", componentKey);
    request.execute().assertJson(getClass(), "app_with_tests_measure.json");

    verify(measureDao).findByComponentKeyAndMetricKeys(eq(componentKey), measureKeysCaptor.capture(), eq(session));
    assertThat(measureKeysCaptor.getValue()).contains(CoreMetrics.TESTS_KEY);
  }

  @Test
  public void app_with_overall_measure() throws Exception {
    MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY);
    addComponent();

    addMeasure(CoreMetrics.OVERALL_COVERAGE_KEY, 90.1);
    addMeasure(CoreMetrics.COVERAGE_KEY, 95.4);
    addMeasure(CoreMetrics.IT_COVERAGE_KEY, 85.2);

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY);
    request.execute().assertJson(getClass(), "app_with_overall_measure.json");
  }

  @Test
  public void app_with_ut_measure() throws Exception {
    MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY);
    addComponent();

    addMeasure(CoreMetrics.COVERAGE_KEY, 95.4);
    addMeasure(CoreMetrics.IT_COVERAGE_KEY, 85.2);

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY);
    request.execute().assertJson(getClass(), "app_with_ut_measure.json");
  }

  @Test
  public void app_with_it_measure() throws Exception {
    MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY);
    addComponent();

    addMeasure(CoreMetrics.IT_COVERAGE_KEY, 85.2);

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY);
    request.execute().assertJson(getClass(), "app_with_it_measure.json");
  }

  @Test
  public void app_with_periods() throws Exception {
    MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY);

    ComponentDto file = addComponent();

    when(resourceDao.getLastSnapshotByResourceUuid(file.projectUuid(), session)).thenReturn(
      new SnapshotDto().setPeriodMode(1, "previous_analysis").setPeriodDate(1, DateUtils.parseDate("2014-05-08"))
      );
    when(periods.label(anyString(), anyString(), any(Date.class))).thenReturn("since previous analysis (May 08 2014)");

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY);
    request.execute().assertJson(getClass(), "app_with_periods.json");
  }

  @Test
  public void app_with_severities() throws Exception {
    MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY);

    addComponent();

    Multiset<String> severities = HashMultiset.create();
    severities.add("MAJOR", 5);
    when(issueService.findSeveritiesByComponent(COMPONENT_KEY, null, session)).thenReturn(severities);
    when(i18n.message(any(Locale.class), eq("severity.MAJOR"), isNull(String.class))).thenReturn("Major");

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY);
    request.execute().assertJson(getClass(), "app_with_severities.json");
  }

  @Test
  public void app_with_severities_when_period_is_set() throws Exception {
    MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY);
    addComponent();
    addPeriod();

    Multiset<String> severities = HashMultiset.create();
    severities.add("MAJOR", 5);
    when(issueService.findSeveritiesByComponent(eq(COMPONENT_KEY), any(Date.class), eq(session))).thenReturn(severities);
    when(i18n.message(any(Locale.class), eq("severity.MAJOR"), isNull(String.class))).thenReturn("Major");

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY).setParam("period", "1");
    request.execute().assertJson(getClass(), "app_with_severities_when_period_is_set.json");
  }

  @Test
  public void app_with_rules() throws Exception {
    MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY);

    addComponent();
    when(issueService.findRulesByComponent(COMPONENT_KEY, null, session)).thenReturn(
      new RulesAggregation().add(new RuleDto().setRuleKey("AvoidCycle").setRepositoryKey("squid").setName("Avoid Cycle"))
      );

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY);
    request.execute().assertJson(getClass(), "app_with_rules.json");
  }

  @Test
  public void app_with_rules_when_period_is_set() throws Exception {
    MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY);

    addComponent();

    Date periodDate = DateUtils.parseDate("2014-05-08");
    when(resourceDao.getLastSnapshotByResourceUuid(project.uuid(), session)).thenReturn(
      new SnapshotDto().setPeriodMode(1, "previous_analysis").setPeriodDate(1, periodDate)
      );
    when(periods.label(anyString(), anyString(), any(Date.class))).thenReturn("since previous analysis (May 08 2014)");

    when(issueService.findRulesByComponent(COMPONENT_KEY, periodDate, session)).thenReturn(
      new RulesAggregation().add(new RuleDto().setRuleKey("AvoidCycle").setRepositoryKey("squid").setName("Avoid Cycle"))
      );

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY).setParam("period", "1");
    request.execute().assertJson(getClass(), "app_with_rules_when_period_is_set.json");
  }

  @Test
  public void app_with_extension() throws Exception {
    MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY);
    addComponent();

    when(views.getPages(anyString(), anyString(), anyString(), anyString(), any(String[].class))).thenReturn(
      // Issues extension will be ignore
      newArrayList(new ViewProxy<Page>(new MyExtension()), new ViewProxy<Page>(new MyExtension()), new ViewProxy<Page>(new IssuesExtension())));

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY);
    request.execute().assertJson(getClass(), "app_with_extension.json");
  }

  @Test
  public void app_with_extension_having_permission() throws Exception {
    MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY);
    addComponent();

    when(views.getPages(anyString(), anyString(), anyString(), anyString(), any(String[].class))).thenReturn(
      newArrayList(new ViewProxy<Page>(new MyExtensionWithRole())));

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY);
    request.execute().assertJson(getClass(), "app_with_extension_having_permission.json");
  }

  @Test
  public void app_with_manual_rules() throws Exception {
    MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY);
    addComponent();

    Result<Rule> result = mock(Result.class);
    Rule rule = mock(Rule.class);
    when(rule.key()).thenReturn(RuleKey.of("manual", "API"));
    when(rule.name()).thenReturn("API");
    when(result.getHits()).thenReturn(newArrayList(rule));
    when(ruleService.search(any(RuleQuery.class), any(QueryContext.class))).thenReturn(result);

    WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY);
    request.execute().assertJson(getClass(), "app_with_manual_rules.json");
  }

  private ComponentDto addComponent() {
    ComponentDto file = ComponentTesting.newFileDto(project)
      .setId(10L)
      .setQualifier("FIL")
      .setKey(COMPONENT_KEY)
      .setName("Plugin.java")
      .setLongName("src/main/java/org/sonar/api/Plugin.java")
      .setPath("src/main/java/org/sonar/api/Plugin.java")
      .setSubProjectId(5L);
    when(componentDao.getNullableByKey(session, COMPONENT_KEY)).thenReturn(file);
    when(componentDao.getById(5L, session)).thenReturn(new ComponentDto().setId(5L).setLongName("SonarQube :: Plugin API").setKey(SUB_PROJECT_KEY));
    when(componentDao.getByUuid(session, project.uuid())).thenReturn(project);
    return file;
  }

  private void addPeriod() {
    Date periodDate = DateUtils.parseDate("2014-05-08");
    when(resourceDao.getLastSnapshotByResourceUuid(project.uuid(), session)).thenReturn(
      new SnapshotDto().setPeriodMode(1, "previous_analysis").setPeriodDate(1, periodDate)
      );
    when(periods.label(anyString(), anyString(), any(Date.class))).thenReturn("since previous analysis (May 08 2014)");
  }

  private void addMeasure(String metricKey, Integer value) {
    measures.add(MeasureDto.createFor(MeasureKey.of(COMPONENT_KEY, metricKey)).setValue(value.doubleValue()));
    when(i18n.formatInteger(any(Locale.class), eq(value.intValue()))).thenReturn(Integer.toString(value));
  }

  private void addMeasure(String metricKey, Double value) {
    measures.add(MeasureDto.createFor(MeasureKey.of(COMPONENT_KEY, metricKey)).setValue(value));
    when(i18n.formatDouble(any(Locale.class), eq(value))).thenReturn(Double.toString(value));
  }

  private void addMeasure(String metricKey, String value) {
    measures.add(MeasureDto.createFor(MeasureKey.of(COMPONENT_KEY, metricKey)).setTextValue(value));
  }

  private void addVariationMeasure(String metricKey, Integer value, Integer periodIndex) {
    measures.add(MeasureDto.createFor(MeasureKey.of(COMPONENT_KEY, metricKey)).setVariation(periodIndex, value.doubleValue()));
    when(i18n.formatInteger(any(Locale.class), eq(value))).thenReturn(Integer.toString(value));
  }

  private void addVariationMeasure(String metricKey, Double value, Integer periodIndex) {
    measures.add(MeasureDto.createFor(MeasureKey.of(COMPONENT_KEY, metricKey)).setVariation(periodIndex, value));
    when(i18n.formatDouble(any(Locale.class), eq(value))).thenReturn(Double.toString(value));
  }

  @NavigationSection(NavigationSection.RESOURCE_TAB)
  private static class MyExtension implements Page {
    public String getId() {
      return "my-extension";
    }

    public String getTitle() {
      return "My extension";
    }
  }

  @NavigationSection(NavigationSection.RESOURCE_TAB)
  @UserRole(UserRole.USER)
  private static class MyExtensionWithRole implements Page {
    public String getId() {
      return "my-extension-with-permission";
    }

    public String getTitle() {
      return "My extension with permission";
    }
  }

  @NavigationSection(NavigationSection.RESOURCE_TAB)
  private static class IssuesExtension implements Page {
    public String getId() {
      return "issues";
    }

    public String getTitle() {
      return "Issues";
    }
  }

}
TOP

Related Classes of org.sonar.server.component.ws.ComponentAppActionTest$IssuesExtension

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.