You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ProjectMeasuresQueryValidatorTest.java 6.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2019 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. package org.sonar.server.component.ws;
  21. import java.util.Arrays;
  22. import org.junit.Rule;
  23. import org.junit.Test;
  24. import org.junit.rules.ExpectedException;
  25. import org.sonar.server.measure.index.ProjectMeasuresQuery;
  26. import static org.sonar.server.measure.index.ProjectMeasuresQuery.MetricCriterion.create;
  27. public class ProjectMeasuresQueryValidatorTest {
  28. @Rule
  29. public ExpectedException expectedException = ExpectedException.none();
  30. @Test
  31. public void query_with_empty_metrics_is_valid() {
  32. ProjectMeasuresQueryValidator.validate(new ProjectMeasuresQuery());
  33. }
  34. @Test
  35. public void filter_by_ncloc_is_valid() {
  36. assertValidFilterKey("ncloc");
  37. }
  38. @Test
  39. public void filter_by_duplicated_lines_density_is_valid() {
  40. assertValidFilterKey("duplicated_lines_density");
  41. }
  42. @Test
  43. public void filter_by_coverage_is_valid() {
  44. assertValidFilterKey("coverage");
  45. }
  46. @Test
  47. public void filter_by_sqale_rating_is_valid() {
  48. assertValidFilterKey("sqale_rating");
  49. }
  50. @Test
  51. public void filter_by_reliability_rating_is_valid() {
  52. assertValidFilterKey("reliability_rating");
  53. }
  54. @Test
  55. public void filter_by_security_rating_is_valid() {
  56. assertValidFilterKey("security_rating");
  57. }
  58. @Test
  59. public void filter_by_alert_status_is_valid() {
  60. assertValidFilterKey("alert_status");
  61. }
  62. @Test
  63. public void filter_by_ncloc_language_distribution_is_valid() {
  64. assertValidFilterKey("ncloc_language_distribution");
  65. }
  66. @Test
  67. public void filter_by_new_security_rating_is_valid() {
  68. assertValidFilterKey("new_security_rating");
  69. }
  70. @Test
  71. public void filter_by_new_maintainability_rating_is_valid() {
  72. assertValidFilterKey("new_maintainability_rating");
  73. }
  74. @Test
  75. public void filter_by_new_coverage_is_valid() {
  76. assertValidFilterKey("new_coverage");
  77. }
  78. @Test
  79. public void filter_by_new_duplicated_lines_density_is_valid() {
  80. assertValidFilterKey("new_duplicated_lines_density");
  81. }
  82. @Test
  83. public void filter_by_new_lines_is_valid() {
  84. assertValidFilterKey("new_lines");
  85. }
  86. @Test
  87. public void filter_by_new_reliability_rating_is_valid() {
  88. assertValidFilterKey("new_reliability_rating");
  89. }
  90. @Test
  91. public void filter_by_bla_is_invalid() {
  92. assertInvalidFilterKey("bla");
  93. }
  94. @Test
  95. public void filter_by_bla_and_new_lines_is_invalid() {
  96. assertInvalidFilterKeys("Following metrics are not supported: 'bla'", "bla", "new_lines");
  97. }
  98. @Test
  99. public void filter_by_new_lines_and_bla_is_invalid() {
  100. assertInvalidFilterKeys("Following metrics are not supported: 'bla'", "new_lines", "bla");
  101. }
  102. @Test
  103. public void filter_by_NeW_LiNeS_is_invalid() {
  104. assertInvalidFilterKey("NeW_LiNeS");
  105. }
  106. @Test
  107. public void filter_by_empty_string_is_invalid() {
  108. assertInvalidFilterKey("");
  109. }
  110. @Test
  111. public void sort_by_ncloc_is_valid() {
  112. assertValidSortKey("ncloc");
  113. }
  114. @Test
  115. public void sort_by_duplicated_lines_density_is_valid() {
  116. assertValidSortKey("duplicated_lines_density");
  117. }
  118. @Test
  119. public void sort_by_coverage_is_valid() {
  120. assertValidSortKey("coverage");
  121. }
  122. @Test
  123. public void sort_by_sqale_rating_is_valid() {
  124. assertValidSortKey("sqale_rating");
  125. }
  126. @Test
  127. public void sort_by_reliability_rating_is_valid() {
  128. assertValidSortKey("reliability_rating");
  129. }
  130. @Test
  131. public void sort_by_security_rating_is_valid() {
  132. assertValidSortKey("security_rating");
  133. }
  134. @Test
  135. public void sort_by_alert_status_is_valid() {
  136. assertValidSortKey("alert_status");
  137. }
  138. @Test
  139. public void sort_by_ncloc_language_distribution_is_valid() {
  140. assertValidSortKey("ncloc_language_distribution");
  141. }
  142. @Test
  143. public void sort_by_new_security_rating_is_valid() {
  144. assertValidSortKey("new_security_rating");
  145. }
  146. @Test
  147. public void sort_by_new_maintainability_rating_is_valid() {
  148. assertValidSortKey("new_maintainability_rating");
  149. }
  150. @Test
  151. public void sort_by_new_coverage_is_valid() {
  152. assertValidSortKey("new_coverage");
  153. }
  154. @Test
  155. public void sort_by_new_duplicated_lines_density_is_valid() {
  156. assertValidSortKey("new_duplicated_lines_density");
  157. }
  158. @Test
  159. public void sort_by_new_lines_is_valid() {
  160. assertValidSortKey("new_lines");
  161. }
  162. @Test
  163. public void sort_by_new_reliability_rating_is_valid() {
  164. assertValidSortKey("new_reliability_rating");
  165. }
  166. @Test
  167. public void sort_by_bla_is_invalid() {
  168. assertInvalidSortKey("bla");
  169. }
  170. @Test
  171. public void sort_by_NeW_lInEs_is_invalid() {
  172. assertInvalidSortKey("NeW_lInEs");
  173. }
  174. @Test
  175. public void sort_by_empty_string_is_invalid() {
  176. assertInvalidSortKey("");
  177. }
  178. private void assertValidSortKey(String metricKey) {
  179. // do not expect an exception
  180. ProjectMeasuresQueryValidator.validate(new ProjectMeasuresQuery().setSort(metricKey));
  181. }
  182. private void assertInvalidSortKey(String metricKey) {
  183. expectedException.expect(IllegalArgumentException.class);
  184. expectedException.expectMessage("Following metrics are not supported: '" + metricKey + "'");
  185. ProjectMeasuresQueryValidator.validate(new ProjectMeasuresQuery().setSort(metricKey));
  186. }
  187. private static void assertValidFilterKey(String... metricKeys) {
  188. // do not expect an exception
  189. validateFilterKeys(metricKeys);
  190. }
  191. private void assertInvalidFilterKey(String metricKey) {
  192. assertInvalidFilterKeys("Following metrics are not supported: '" + metricKey + "'", metricKey);
  193. }
  194. private void assertInvalidFilterKeys(String message, String... metricKeys) {
  195. expectedException.expect(IllegalArgumentException.class);
  196. expectedException.expectMessage(message);
  197. validateFilterKeys(metricKeys);
  198. }
  199. private static void validateFilterKeys(String... metricKeys) {
  200. ProjectMeasuresQuery query = new ProjectMeasuresQuery();
  201. Arrays.stream(metricKeys).forEachOrdered(metricKey -> query.addMetricCriterion(create(metricKey, ProjectMeasuresQuery.Operator.LT, 80d)));
  202. ProjectMeasuresQueryValidator.validate(query);
  203. }
  204. }