diff options
author | Simon Brandhof <simon.brandhof@gmail.com> | 2013-02-06 16:01:41 +0100 |
---|---|---|
committer | Simon Brandhof <simon.brandhof@gmail.com> | 2013-02-06 17:59:16 +0100 |
commit | 832ae2cdcc88755e8130dcff00c1bca33ae24a04 (patch) | |
tree | 064452ea98ceab12523be5c8851bc1ee515681b4 /sonar-server | |
parent | b2dcc7cc73f725e89731532ae97c4681fe706ca5 (diff) | |
download | sonarqube-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.java | 3 | ||||
-rw-r--r-- | sonar-server/src/main/webapp/WEB-INF/app/controllers/api/tests_controller.rb | 79 |
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 |