aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-server
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@gmail.com>2013-02-06 16:01:41 +0100
committerSimon Brandhof <simon.brandhof@gmail.com>2013-02-06 17:59:16 +0100
commit832ae2cdcc88755e8130dcff00c1bca33ae24a04 (patch)
tree064452ea98ceab12523be5c8851bc1ee515681b4 /sonar-server
parentb2dcc7cc73f725e89731532ae97c4681fe706ca5 (diff)
downloadsonarqube-832ae2cdcc88755e8130dcff00c1bca33ae24a04.tar.gz
sonarqube-832ae2cdcc88755e8130dcff00c1bca33ae24a04.zip
SONAR-2501 add first draft of web services /tests
Diffstat (limited to 'sonar-server')
-rw-r--r--sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java3
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/controllers/api/tests_controller.rb79
2 files changed, 72 insertions, 10 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java b/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java
index 082e08fb34f..d113ab03a37 100644
--- a/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java
+++ b/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java
@@ -556,4 +556,7 @@ public final class JRubyFacade {
return get(SnapshotPerspectives.class).as(MutableTestable.class, snapshotId);
}
+ public Testable testable(String componentKey) {
+ return get(SnapshotPerspectives.class).as(MutableTestable.class, componentKey);
+ }
}
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/tests_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/tests_controller.rb
index 8c2eda47153..b5d97f0fa7f 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/tests_controller.rb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/tests_controller.rb
@@ -17,6 +17,8 @@
# License along with Sonar; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
#
+# EXPERIMENTAL
+#
class Api::TestsController < Api::ApiController
# GET /api/tests/plan?resource=<test file id or key>
@@ -40,26 +42,33 @@ class Api::TestsController < Api::ApiController
plan = java_facade.testPlan(resource.key)
json = {}
if plan
- json[:type] = plan.type
- json[:test_cases] = plan.testCases.map do |test_case|
+ resource = plan.component
+ json[:key] = resource.key
+ json[:name] = resource.name
+ json[:longName] = resource.longName
+ json[:testCases] = plan.testCases.map do |test_case|
test_case_json = {:name => test_case.name}
- test_case_json[:message] = test_case.message if test_case.message
- test_case_json[:durationInMs] = test_case.durationInMs if test_case.durationInMs
+ test_case_json[:type] = test_case.type
+ test_case_json[:message] = test_case.message
+ test_case_json[:durationInMs] = test_case.durationInMs
test_case_json[:status] = test_case.status.to_s if test_case.status
- test_case_json[:stackTrace] = test_case.stackTrace if test_case.stackTrace
+ test_case_json[:stackTrace] = test_case.stackTrace
if test_case.doesCover()
- test_case_json[:covers] = test_case.covers.map do |cover|
+ test_case_json[:coverages] = test_case.coverageBlocks.map do |cover|
cover_json = {}
resource = cover.testable.component
- cover_json[:resourceKey] = resource.key
- cover_json[:resourceName] = resource.name
- cover_json[:resourceQualifier] = resource.qualifier
- cover_json[:lines] = cover.lines
+ cover_json[:key] = resource.key
+ cover_json[:name] = resource.name if resource.name
+ cover_json[:longName] = resource.longName if resource.longName
+ cover_json[:lines] = cover.lines if cover.lines
+ cover_json.delete_if { |k, v| v.nil? }
cover_json
end
end
+ test_case_json.delete_if { |k, v| v.nil? }
test_case_json
end
+ json.delete_if { |k, v| v.nil? }
respond_to do |format|
format.json { render :json => jsonp(json) }
@@ -68,4 +77,54 @@ class Api::TestsController < Api::ApiController
end
end
end
+
+ # GET /api/tests/testable?resource=<test file id or key>
+ #
+ # Get the details of a given test plan :
+ # - test cases
+ # - resources covered by test cases
+ #
+ # Since v.3.5
+ #
+ # ==== Examples
+ # - get the test plan defined by the file com/mycompany/FooTest.c of my_project : GET /api/tests/plan?resource=my_project:com/mycompany/FooTest.c
+ #
+ def testable
+ require_parameters :resource
+
+ resource=Project.by_key(params[:resource])
+ not_found("Not found: #{params[:resource]}") unless resource
+ access_denied unless has_role?(:user, resource)
+
+ testable = java_facade.testable(resource.key)
+ json = {}
+ if testable
+ resource = testable.component
+ json[:key] = resource.key
+ json[:name] = resource.name if resource.name
+ json[:longName] = resource.longName if resource.longName
+ json[:coveredLines] = testable.testedLines
+
+ json[:coverages] = testable.coverageBlocks.map do |coverage|
+ test_case = coverage.testCase
+ coverage_json = {}
+ coverage_json[:lines] = coverage.lines
+ coverage_json[:name] = test_case.name
+ coverage_json[:status] = test_case.status.to_s if test_case.status
+ coverage_json[:durationInMs] = test_case.durationInMs
+ coverage_json[:testPlan] = test_case.testPlan.component.key
+
+ coverage_json.delete_if { |k, v| v.nil? }
+ coverage_json
+ end
+
+ end
+ json.delete_if { |k, v| v.nil? }
+
+ respond_to do |format|
+ format.json { render :json => jsonp(json) }
+ format.xml { render :xml => xml_not_supported }
+ format.text { render :text => text_not_supported }
+ end
+ end
end \ No newline at end of file