package org.sonar.server.rule2;
import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
import org.junit.After;
import org.junit.Before;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.RuleStatus;
import org.sonar.api.rule.Severity;
-import org.sonar.api.server.rule.RuleParamType;
import org.sonar.check.Cardinality;
import org.sonar.core.permission.GlobalPermissions;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.MyBatis;
import org.sonar.core.rule.RuleDto;
-import org.sonar.core.rule.RuleParamDto;
import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.rule2.index.RuleIndex;
import org.sonar.server.user.MockUserSession;
import java.util.Collections;
-import java.util.List;
import java.util.Set;
import static org.fest.assertions.Assertions.assertThat;
public class RuleServiceMediumTest {
@ClassRule
- public static ServerTester tester = new ServerTester()
- .setProperty("sonar.es.http.port","9200");
+ public static ServerTester tester = new ServerTester();
- MyBatis myBatis = tester.get(MyBatis.class);
RuleDao dao = tester.get(RuleDao.class);
RuleIndex index = tester.get(RuleIndex.class);
RuleService service = tester.get(RuleService.class);
@Before
public void before() {
tester.clearDataStores();
- dbSession = myBatis.openSession(false);
+ dbSession = tester.get(MyBatis.class).openSession(false);
}
@After
dbSession.close();
}
- @Test
- public void insert_in_db_and_index_in_es() throws InterruptedException {
- // insert db
- RuleKey ruleKey = RuleKey.of("javascript", "S001");
- dao.insert(newRuleDto(ruleKey), dbSession);
- dbSession.commit();
-
- // verify that rule is persisted in db
- RuleDto persistedDto = dao.getByKey(ruleKey, dbSession);
- assertThat(persistedDto).isNotNull();
- assertThat(persistedDto.getId()).isGreaterThanOrEqualTo(0);
- assertThat(persistedDto.getRuleKey()).isEqualTo(ruleKey.rule());
- assertThat(persistedDto.getLanguage()).isEqualTo("js");
- assertThat(persistedDto.getTags()).containsOnly("tag1", "tag2");
- assertThat(persistedDto.getSystemTags()).containsOnly("systag1", "systag2");
- assertThat(persistedDto.getCreatedAt()).isNotNull();
- assertThat(persistedDto.getUpdatedAt()).isNotNull();
-
- // verify that rule is indexed in es
- index.refresh();
- Rule hit = index.getByKey(ruleKey);
- assertThat(hit).isNotNull();
- assertThat(hit.key().repository()).isEqualTo(ruleKey.repository());
- assertThat(hit.key().rule()).isEqualTo(ruleKey.rule());
- assertThat(hit.language()).isEqualTo("js");
- assertThat(hit.name()).isEqualTo("Rule S001");
- assertThat(hit.htmlDescription()).isEqualTo("Description S001");
- assertThat(hit.status()).isEqualTo(RuleStatus.READY);
- assertThat(hit.createdAt()).isNotNull();
- assertThat(hit.updatedAt()).isNotNull();
- assertThat(hit.internalKey()).isEqualTo("InternalKeyS001");
- assertThat(hit.severity()).isEqualTo("INFO");
- assertThat(hit.template()).isFalse();
- assertThat(hit.tags()).containsOnly("tag1", "tag2");
- assertThat(hit.systemTags()).containsOnly("systag1", "systag2");
- }
-
- @Test
- public void insert_and_index_rule_parameters() throws InterruptedException {
- // insert db
- RuleKey ruleKey = RuleKey.of("javascript", "S001");
- RuleDto ruleDto = newRuleDto(ruleKey);
- dao.insert(ruleDto, dbSession);
- dbSession.commit();
-
- RuleParamDto minParamDto = new RuleParamDto()
- .setName("min")
- .setType(RuleParamType.INTEGER.type())
- .setDefaultValue("2")
- .setDescription("Minimum");
- dao.addRuleParam(ruleDto, minParamDto, dbSession);
- RuleParamDto maxParamDto = new RuleParamDto()
- .setName("max")
- .setType(RuleParamType.INTEGER.type())
- .setDefaultValue("10")
- .setDescription("Maximum");
- dao.addRuleParam(ruleDto, maxParamDto, dbSession);
- dbSession.commit();
-
- //Verify that RuleDto has date from insertion
- RuleDto theRule = dao.getByKey(ruleKey, dbSession);
- assertThat(theRule.getCreatedAt()).isNotNull();
- assertThat(theRule.getUpdatedAt()).isNotNull();
-
- // verify that parameters are persisted in db
- List<RuleParamDto> persistedDtos = dao.findRuleParamsByRuleKey(theRule.getKey(), dbSession);
- assertThat(persistedDtos).hasSize(2);
-
- // verify that parameters are indexed in es
- index.refresh();
-
- Rule hit = index.getByKey(ruleKey);
- assertThat(hit).isNotNull();
- assertThat(hit.key()).isNotNull();
-
- RuleService service = tester.get(RuleService.class);
- Rule rule = service.getByKey(ruleKey);
-
- assertThat(rule.params()).hasSize(2);
- assertThat(Iterables.getLast(rule.params(), null).key()).isEqualTo("max");
- }
-
- @Test
- public void insert_and_update_rule() {
-
- // insert db
- RuleKey ruleKey = RuleKey.of("javascript", "S001");
- RuleDto ruleDto = newRuleDto(ruleKey)
- .setTags(ImmutableSet.of("hello"))
- .setName("first name");
- dao.insert(ruleDto, dbSession);
- dbSession.commit();
-
- // verify that parameters are indexed in es
- index.refresh();
- Rule hit = index.getByKey(ruleKey);
- assertThat(hit.tags()).containsExactly("hello");
- assertThat(hit.name()).isEqualTo("first name");
-
- //Update in DB
- ruleDto.setTags(ImmutableSet.of("world"))
- .setName("second name");
- dao.update(ruleDto, dbSession);
- dbSession.commit();
-
- // verify that parameters are updated in es
- index.refresh();
- hit = index.getByKey(ruleKey);
- assertThat(hit.tags()).containsExactly("world");
- assertThat(hit.name()).isEqualTo("second name");
- }
-
- @Test
- public void insert_and_update_rule_param() throws InterruptedException {
-
- // insert db
- RuleKey ruleKey = RuleKey.of("javascript", "S001");
- RuleDto ruleDto = newRuleDto(ruleKey)
- .setTags(ImmutableSet.of("hello"))
- .setName("first name");
- dao.insert(ruleDto, dbSession);
- dbSession.commit();
-
- RuleParamDto minParamDto = new RuleParamDto()
- .setName("min")
- .setType(RuleParamType.INTEGER.type())
- .setDefaultValue("2")
- .setDescription("Minimum");
- dao.addRuleParam(ruleDto, minParamDto, dbSession);
-
- RuleParamDto maxParamDto = new RuleParamDto()
- .setName("max")
- .setType(RuleParamType.INTEGER.type())
- .setDefaultValue("10")
- .setDescription("Maximum");
- dao.addRuleParam(ruleDto, maxParamDto, dbSession);
- dbSession.commit();
-
- // verify that parameters are indexed in es
- index.refresh();
-
- Rule hit = index.getByKey(ruleKey);
- assertThat(hit.params()).hasSize(2);
-
- RuleParam param = hit.params().get(0);
- assertThat(param.key()).isEqualTo("min");
- assertThat(param.defaultValue()).isEqualTo("2");
- assertThat(param.description()).isEqualTo("Minimum");
-
-
- //Update in DB
- minParamDto
- .setDefaultValue("0.5")
- .setDescription("new description");
- dao.updateRuleParam(ruleDto, minParamDto, dbSession);
- dbSession.commit();
-
- // verify that parameters are updated in es
- index.refresh();
-
- hit = index.getByKey(ruleKey);
- assertThat(hit.params()).hasSize(2);
-
- param = hit.params().get(0);
- assertThat(param.key()).isEqualTo("min");
- assertThat(param.defaultValue()).isEqualTo("0.5");
- assertThat(param.description()).isEqualTo("new description");
- }
-
@Test
public void setTags() throws InterruptedException {
MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN);
dao.insert(newRuleDto(rule1)
.setTags(Sets.newHashSet("security"))
.setSystemTags(Collections.<String>emptySet()),
- dbSession
- );
+ dbSession);
RuleKey rule2 = RuleKey.of("java", "S001");
dao.insert(newRuleDto(rule2)
service.setTags(RuleKey.of("java", "S001"), Sets.newHashSet("bug", "security"));
fail();
} catch (NotFoundException e) {
- assertThat(e).hasMessage("Rule java:S001 not found");
+ assertThat(e).hasMessage("Key 'java:S001' not found");
}
}
}
}
+ @Test
+ public void setNote() throws Exception {
+ MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN).setLogin("marius");
+ RuleKey ruleKey = RuleKey.of("javascript", "S001");
+ dao.insert(newRuleDto(ruleKey), dbSession);
+ dbSession.commit();
+
+ // 1. CREATE NOTE
+ service.setNote(ruleKey, "my *note*");
+
+ // verify db
+ RuleDto dto = dao.getNonNullByKey(ruleKey, dbSession);
+ assertThat(dto.getNoteData()).isEqualTo("my *note*");
+ assertThat(dto.getNoteCreatedAt()).isNotNull();
+ assertThat(dto.getNoteUpdatedAt()).isNotNull();
+ assertThat(dto.getNoteUserLogin()).isEqualTo("marius");
+
+ // verify es
+ index.refresh();
+ Rule rule = index.getByKey(ruleKey);
+ // TODO
+// assertThat(rule.getNote()).isEqualTo("my *note*");
+// assertThat(rule.getNoteCreatedAt()).isNotNull();
+// assertThat(rule.getNoteUpdatedAt()).isNotNull();
+// assertThat(rule.getNoteUserLogin()).isEqualTo("marius");
+
+ // 2. DELETE NOTE
+ service.setNote(ruleKey, null);
+ dbSession.clearCache();
+ dto = dao.getNonNullByKey(ruleKey, dbSession);
+ assertThat(dto.getNoteData()).isNull();
+ assertThat(dto.getNoteCreatedAt()).isNull();
+ assertThat(dto.getNoteUpdatedAt()).isNull();
+ assertThat(dto.getNoteUserLogin()).isNull();
+ index.refresh();
+ rule = index.getByKey(ruleKey);
+ // TODO
+ // assertThat(rule.getNote()).isNull();
+// assertThat(rule.getNoteCreatedAt()).isNull();
+// assertThat(rule.getNoteUpdatedAt()).isNull();
+// assertThat(rule.getNoteUserLogin()).isNull();
+
+ }
+
private RuleDto newRuleDto(RuleKey ruleKey) {
return new RuleDto()
.setRuleKey(ruleKey.rule())
.setDefaultRemediationOffset("10h")
.setEffortToFixDescription(ruleKey.repository() + "." + ruleKey.rule() + ".effortToFix");
}
-}
+}
\ No newline at end of file