esSearch.addSort(SortBuilders.scoreSort());
} else {
esSearch.addSort(RuleNormalizer.RuleField.UPDATED_AT.key(), SortOrder.DESC);
+ // deterministic sort when exactly the same updated_at (same millisecond)
+ esSearch.addSort(RuleNormalizer.RuleField.KEY.key(), SortOrder.ASC);
}
/* integrate Option's Pagination */
*/
package org.sonar.server.rule2.ws;
+import com.google.common.base.Charsets;
import com.google.common.collect.ImmutableSet;
+import com.google.common.io.Resources;
+import org.apache.commons.io.IOUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
+import org.skyscreamer.jsonassert.JSONAssert;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.RuleStatus;
import org.sonar.api.rule.Severity;
WsTester.TestRequest request = wsTester.newGetRequest("api/rules2", "search");
WsTester.Result result = request.execute();
- result.assertJson(this.getClass(),"search_2_rules.json");
+ String json = result.outputAsString();
+ String expectedJson = Resources.toString(getClass().getResource("RulesWebServiceTest/search_2_rules.json"), Charsets.UTF_8);
+
+ JSONAssert.assertEquals(expectedJson, json, false);
}
{"total": 2, "p": 1, "ps": 25, "rules": [
+ {
+ "key": "javascript:S001",
+ "repo": "javascript",
+ "lang": "js",
+ "name": "Rule S001",
+ "htmlDesc": "Description S001",
+ "status": "READY",
+ "template": false,
+ "internalKey": "InternalKeyS001",
+ "severity": "INFO",
+ "tags": [],
+ "sysTags": [],
+ "debtRemediationFunctionType": "LINEAR",
+ "debtRemediationFunctionCoefficient": "1h",
+ "debtRemediationFunctionOffset": "5min",
+ "params": [],
+ "actives": []
+ },
{
"key": "javascript:S002",
"repo": "javascript",
"debtRemediationFunctionOffset": "5min",
"params": [],
"actives": []
- },
- {
- "key": "javascript:S001",
- "repo": "javascript",
- "lang": "js",
- "name": "Rule S001",
- "htmlDesc": "Description S001",
- "status": "READY",
- "template": false,
- "internalKey": "InternalKeyS001",
- "severity": "INFO",
- "tags": [],
- "sysTags": [],
- "debtRemediationFunctionType": "LINEAR",
- "debtRemediationFunctionCoefficient": "1h",
- "debtRemediationFunctionOffset": "5min",
- "params": [],
- "actives": []
}
]}