Commit 7967704379ae6b6ebb534d9f55fad9f1a0aa1578
Exists in
master
and in
29 other branches
Merge branch 'update-client' into merging_configuration
Showing
14 changed files
with
239 additions
and
18 deletions
Show diff stats
plugins/mezuro/lib/kalibro/client/metric_configuration_client.rb
0 → 100644
| ... | ... | @@ -0,0 +1,28 @@ |
| 1 | +class Kalibro::Client::MetricConfigurationClient | |
| 2 | + | |
| 3 | + def initialize | |
| 4 | + @port = Kalibro::Client::Port.new('MetricConfiguration') | |
| 5 | + end | |
| 6 | + | |
| 7 | + def save(metric_configuration, configuration_name) | |
| 8 | + @port.request(:save_metric_configuration, { | |
| 9 | + :metric_configuration => metric_configuration.to_hash, | |
| 10 | + :configuration_name => configuration_name}) | |
| 11 | + end | |
| 12 | + | |
| 13 | + def metric_configuration(configuration_name, metric_name) | |
| 14 | + hash = @port.request(:get_metric_configuration, { | |
| 15 | + :configuration_name => configuration_name, | |
| 16 | + :metric_name => metric_name | |
| 17 | + })[:metric_configuration] | |
| 18 | + Kalibro::Entities::MetricConfiguration.from_hash(hash) | |
| 19 | + end | |
| 20 | + | |
| 21 | + def remove (configuration_name, metric_name) | |
| 22 | + @port.request(:remove_metric_configuration, { | |
| 23 | + :configuration_name => configuration_name, | |
| 24 | + :metric_name=> metric_name | |
| 25 | + }) | |
| 26 | + end | |
| 27 | + | |
| 28 | +end | |
| 0 | 29 | \ No newline at end of file | ... | ... |
plugins/mezuro/lib/kalibro/client/port.rb
| ... | ... | @@ -7,7 +7,8 @@ end |
| 7 | 7 | class Kalibro::Client::Port |
| 8 | 8 | |
| 9 | 9 | def initialize(endpoint) |
| 10 | - @client = Savon::Client.new("#{service_address}#{endpoint}Endpoint/?wsdl") | |
| 10 | + @endpoint = endpoint | |
| 11 | + initialize_client | |
| 11 | 12 | end |
| 12 | 13 | |
| 13 | 14 | def service_address |
| ... | ... | @@ -18,9 +19,20 @@ class Kalibro::Client::Port |
| 18 | 19 | @service_address |
| 19 | 20 | end |
| 20 | 21 | |
| 22 | + def service_address=(address) | |
| 23 | + @service_address = address | |
| 24 | + initialize_client | |
| 25 | + end | |
| 26 | + | |
| 21 | 27 | def request(action, request_body = nil) |
| 22 | 28 | response = @client.request(:kalibro, action) { soap.body = request_body } |
| 23 | 29 | response.to_hash["#{action}_response".to_sym] |
| 24 | 30 | end |
| 25 | 31 | |
| 32 | + private | |
| 33 | + | |
| 34 | + def initialize_client | |
| 35 | + @client = Savon::Client.new("#{service_address}#{@endpoint}Endpoint/?wsdl") | |
| 36 | + end | |
| 37 | + | |
| 26 | 38 | end | ... | ... |
plugins/mezuro/lib/kalibro/entities/entity.rb
| ... | ... | @@ -2,7 +2,7 @@ class Kalibro::Entities::Entity |
| 2 | 2 | |
| 3 | 3 | def self.from_hash(hash) |
| 4 | 4 | entity = self.new |
| 5 | - hash.each { |field, value| entity.set(field, value) } | |
| 5 | + hash.each { |field, value| entity.set(field, value) if field != :attributes!} | |
| 6 | 6 | entity |
| 7 | 7 | end |
| 8 | 8 | |
| ... | ... | @@ -24,16 +24,16 @@ class Kalibro::Entities::Entity |
| 24 | 24 | fields.each do |field| |
| 25 | 25 | field_value = self.get(field) |
| 26 | 26 | hash[field] = convert_to_hash(field_value) if ! field_value.nil? |
| 27 | + if need_xml_type?(field_value) | |
| 28 | + hash = {:attributes! => {}}.merge(hash) | |
| 29 | + hash[:attributes!][field.to_sym] = { | |
| 30 | + 'xmlns:xsi'=> 'http://www.w3.org/2001/XMLSchema-instance', | |
| 31 | + 'xsi:type' => 'kalibro:' + xml_class_name(field_value) } | |
| 32 | + end | |
| 27 | 33 | end |
| 28 | 34 | hash |
| 29 | 35 | end |
| 30 | 36 | |
| 31 | - def convert_to_hash(value) | |
| 32 | - return value.collect { |element| convert_to_hash(element) } if value.kind_of?(Array) | |
| 33 | - return value.to_hash if value.kind_of?(Kalibro::Entities::Entity) | |
| 34 | - value | |
| 35 | - end | |
| 36 | - | |
| 37 | 37 | def ==(other) |
| 38 | 38 | begin |
| 39 | 39 | fields.each.inject(true) { |equal, field| equal && (self.get(field) == other.get(field)) } |
| ... | ... | @@ -42,6 +42,8 @@ class Kalibro::Entities::Entity |
| 42 | 42 | end |
| 43 | 43 | end |
| 44 | 44 | |
| 45 | + protected | |
| 46 | + | |
| 45 | 47 | def fields |
| 46 | 48 | instance_variable_names.each.collect { |variable| variable.to_s.sub(/@/, '').to_sym } |
| 47 | 49 | end |
| ... | ... | @@ -50,4 +52,23 @@ class Kalibro::Entities::Entity |
| 50 | 52 | send("#{field}") |
| 51 | 53 | end |
| 52 | 54 | |
| 55 | + def convert_to_hash(value) | |
| 56 | + return value.collect { |element| convert_to_hash(element) } if value.is_a?(Array) | |
| 57 | + return value.to_hash if value.is_a?(Kalibro::Entities::Entity) | |
| 58 | + return 'INF' if value.is_a?(Float) and value.infinite? == 1 | |
| 59 | + return '-INF' if value.is_a?(Float) and value.infinite? == -1 | |
| 60 | + value | |
| 61 | + end | |
| 62 | + | |
| 63 | + def need_xml_type?(value) | |
| 64 | + value.is_a?(Kalibro::Entities::Entity) and value.class.superclass != Kalibro::Entities::Entity | |
| 65 | + end | |
| 66 | + | |
| 67 | + def xml_class_name(entity) | |
| 68 | + xml_name = entity.class.name | |
| 69 | + xml_name["Kalibro::Entities::"] = "" | |
| 70 | + xml_name[0..0] = xml_name[0..0].downcase | |
| 71 | + xml_name + "Xml" | |
| 72 | + end | |
| 73 | + | |
| 53 | 74 | end | ... | ... |
plugins/mezuro/lib/kalibro/entities/metric_configuration.rb
plugins/mezuro/lib/kalibro/entities/native_metric.rb
plugins/mezuro/lib/kalibro/entities/range.rb
| ... | ... | @@ -2,4 +2,14 @@ class Kalibro::Entities::Range < Kalibro::Entities::Entity |
| 2 | 2 | |
| 3 | 3 | attr_accessor :beginning, :end, :label, :grade, :color, :comments |
| 4 | 4 | |
| 5 | + def beginning=(value) | |
| 6 | + @beginning = value.to_f | |
| 7 | + @beginning = -1.0/0.0 if value == "-INF" | |
| 8 | + end | |
| 9 | + | |
| 10 | + def end=(value) | |
| 11 | + @end = value.to_f | |
| 12 | + @end = 1.0/0.0 if value == "INF" | |
| 13 | + end | |
| 14 | + | |
| 5 | 15 | end |
| 6 | 16 | \ No newline at end of file | ... | ... |
plugins/mezuro/test/fixtures/compound_metric_with_error_fixtures.rb
| ... | ... | @@ -10,7 +10,10 @@ class CompoundMetricWithErrorFixtures |
| 10 | 10 | end |
| 11 | 11 | |
| 12 | 12 | def self.create_hash |
| 13 | - {:metric => CompoundMetricFixtures.sc_hash, :error => ErrorFixtures.create_hash} | |
| 13 | + {:metric => CompoundMetricFixtures.sc_hash, :error => ErrorFixtures.create_hash, | |
| 14 | + :attributes! => {:metric => { | |
| 15 | + 'xmlns:xsi'=> 'http://www.w3.org/2001/XMLSchema-instance', | |
| 16 | + 'xsi:type' => 'kalibro:compoundMetricXml' }}} | |
| 14 | 17 | end |
| 15 | 18 | |
| 16 | 19 | end | ... | ... |
plugins/mezuro/test/fixtures/metric_configuration_fixtures.rb
| ... | ... | @@ -25,12 +25,18 @@ class MetricConfigurationFixtures |
| 25 | 25 | |
| 26 | 26 | def self.amloc_configuration_hash |
| 27 | 27 | {:metric => NativeMetricFixtures.amloc_hash, :code => 'amloc', :weight => 1.0, |
| 28 | - :aggregation_form => 'AVERAGE', :range => | |
| 29 | - [RangeFixtures.amloc_excellent_hash, RangeFixtures.amloc_bad_hash]} | |
| 28 | + :aggregation_form => 'AVERAGE', | |
| 29 | + :range => [RangeFixtures.amloc_excellent_hash, RangeFixtures.amloc_bad_hash], | |
| 30 | + :attributes! => {:metric => { | |
| 31 | + 'xmlns:xsi'=> 'http://www.w3.org/2001/XMLSchema-instance', | |
| 32 | + 'xsi:type' => 'kalibro:nativeMetricXml' }}} | |
| 30 | 33 | end |
| 31 | 34 | |
| 32 | 35 | def self.sc_configuration_hash |
| 33 | - {:metric => CompoundMetricFixtures.sc_hash, :code => 'sc', :weight => 1.0, :aggregation_form => 'AVERAGE'} | |
| 36 | + {:metric => CompoundMetricFixtures.sc_hash, :code => 'sc', :weight => 1.0, :aggregation_form => 'AVERAGE', | |
| 37 | + :attributes! => {:metric => { | |
| 38 | + 'xmlns:xsi'=> 'http://www.w3.org/2001/XMLSchema-instance', | |
| 39 | + 'xsi:type' => 'kalibro:compoundMetricXml' }}} | |
| 34 | 40 | end |
| 35 | 41 | |
| 36 | 42 | end | ... | ... |
plugins/mezuro/test/fixtures/metric_result_fixtures.rb
| ... | ... | @@ -23,11 +23,17 @@ class MetricResultFixtures |
| 23 | 23 | |
| 24 | 24 | def self.amloc_result_hash |
| 25 | 25 | {:metric => NativeMetricFixtures.amloc_hash, :value => 0.0, :descendent_result => [40.0, 42.0], |
| 26 | - :range => RangeFixtures.amloc_excellent_hash} | |
| 26 | + :range => RangeFixtures.amloc_excellent_hash, | |
| 27 | + :attributes! => {:metric => { | |
| 28 | + 'xmlns:xsi'=> 'http://www.w3.org/2001/XMLSchema-instance', | |
| 29 | + 'xsi:type' => 'kalibro:nativeMetricXml' }}} | |
| 27 | 30 | end |
| 28 | 31 | |
| 29 | 32 | def self.sc_result_hash |
| 30 | - {:metric => CompoundMetricFixtures.sc_hash, :value => 1.0, :descendent_result => [2.0, 42.0]} | |
| 33 | + {:metric => CompoundMetricFixtures.sc_hash, :value => 1.0, :descendent_result => [2.0, 42.0], | |
| 34 | + :attributes! => {:metric => { | |
| 35 | + 'xmlns:xsi'=> 'http://www.w3.org/2001/XMLSchema-instance', | |
| 36 | + 'xsi:type' => 'kalibro:compoundMetricXml' }}} | |
| 31 | 37 | end |
| 32 | 38 | |
| 33 | 39 | end | ... | ... |
plugins/mezuro/test/fixtures/native_metric_fixtures.rb
| ... | ... | @@ -5,12 +5,12 @@ class NativeMetricFixtures |
| 5 | 5 | total_cof.name = 'Total Coupling Factor' |
| 6 | 6 | total_cof.scope = 'APPLICATION' |
| 7 | 7 | total_cof.origin = 'Analizo' |
| 8 | - total_cof.language = 'JAVA' | |
| 8 | + total_cof.languages = ['JAVA'] | |
| 9 | 9 | total_cof |
| 10 | 10 | end |
| 11 | 11 | |
| 12 | 12 | def self.total_cof_hash |
| 13 | - {:name => 'Total Coupling Factor', :scope => 'APPLICATION', :origin => 'Analizo', :language => 'JAVA'} | |
| 13 | + {:name => 'Total Coupling Factor', :scope => 'APPLICATION', :origin => 'Analizo', :language => ['JAVA']} | |
| 14 | 14 | end |
| 15 | 15 | |
| 16 | 16 | def self.amloc |
| ... | ... | @@ -18,12 +18,12 @@ class NativeMetricFixtures |
| 18 | 18 | total_cof.name = 'Average Method LOC' |
| 19 | 19 | total_cof.scope = 'CLASS' |
| 20 | 20 | total_cof.origin = 'Analizo' |
| 21 | - total_cof.language = 'JAVA' | |
| 21 | + total_cof.languages = ['JAVA'] | |
| 22 | 22 | total_cof |
| 23 | 23 | end |
| 24 | 24 | |
| 25 | 25 | def self.amloc_hash |
| 26 | - {:name => 'Average Method LOC', :scope => 'CLASS', :origin => 'Analizo', :language => 'JAVA'} | |
| 26 | + {:name => 'Average Method LOC', :scope => 'CLASS', :origin => 'Analizo', :language => ['JAVA']} | |
| 27 | 27 | end |
| 28 | 28 | |
| 29 | 29 | end |
| 30 | 30 | \ No newline at end of file | ... | ... |
| ... | ... | @@ -0,0 +1,29 @@ |
| 1 | +require "test_helper" | |
| 2 | +require File.dirname(__FILE__) + '/fake_port' | |
| 3 | + | |
| 4 | +class BaseToolClientTest < ActiveSupport::TestCase | |
| 5 | + | |
| 6 | + def setup | |
| 7 | + fake_port = FakePort.new('BaseTool') | |
| 8 | + Kalibro::Client::Port.expects(:new).with('BaseTool').returns(fake_port) | |
| 9 | + @client = Kalibro::Client::BaseToolClient.new | |
| 10 | + end | |
| 11 | + | |
| 12 | + should 'get base tool names' do | |
| 13 | + assert_equal ['Analizo', 'Checkstyle'], @client.base_tool_names | |
| 14 | + end | |
| 15 | + | |
| 16 | + should 'get base tool by name' do | |
| 17 | + analizo = @client.base_tool('Analizo') | |
| 18 | + assert_equal 'Analizo', analizo.name | |
| 19 | + assert_equal 'Analizo description', analizo.description | |
| 20 | + assert_equal 1, analizo.supported_metrics.size | |
| 21 | + metric = analizo.supported_metrics[0] | |
| 22 | + assert_equal 'Analizo', metric.origin | |
| 23 | + assert_equal 'Analizo metric', metric.name | |
| 24 | + assert_equal 'Analizo metric description', metric.description | |
| 25 | + assert_equal 'METHOD', metric.scope | |
| 26 | + assert_equal ['CPP', 'JAVA'], metric.languages | |
| 27 | + end | |
| 28 | + | |
| 29 | +end | |
| 0 | 30 | \ No newline at end of file | ... | ... |
plugins/mezuro/test/functional/metric_configuration_client_test.rb
0 → 100644
| ... | ... | @@ -0,0 +1,43 @@ |
| 1 | +require "test_helper" | |
| 2 | +require File.dirname(__FILE__) + '/fake_port' | |
| 3 | + | |
| 4 | +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/metric_configuration_fixtures" | |
| 5 | + | |
| 6 | +class MetricConfigurationClientTest < ActiveSupport::TestCase | |
| 7 | + | |
| 8 | + def setup | |
| 9 | + fake_port = FakePort.new('MetricConfiguration') | |
| 10 | + Kalibro::Client::Port.expects(:new).with('MetricConfiguration').returns(fake_port) | |
| 11 | + @client = Kalibro::Client::MetricConfigurationClient.new | |
| 12 | + end | |
| 13 | + | |
| 14 | + should 'save metric configuration' do | |
| 15 | + configuration = MetricConfigurationFixtures.amloc_configuration | |
| 16 | + @client.save(configuration, 'Configuration X') | |
| 17 | + end | |
| 18 | + | |
| 19 | + should 'get metric configuration by name' do | |
| 20 | + configuration = @client.metric_configuration('C', 'native') | |
| 21 | + assert_equal 'metricOfC', configuration.code | |
| 22 | + assert_equal 1.0, configuration.weight | |
| 23 | + assert_equal 'AVERAGE', configuration.aggregation_form | |
| 24 | + assert_equal 1, configuration.ranges.size | |
| 25 | + | |
| 26 | + range = configuration.ranges[0] | |
| 27 | + assert_equal -1.0/0.0, range.beginning | |
| 28 | + assert_equal 1.0/0.0, range.end | |
| 29 | + | |
| 30 | + metric = configuration.metric | |
| 31 | + puts metric | |
| 32 | + assert metric.is_a?(Kalibro::Entities::NativeMetric) | |
| 33 | + assert_equal 'Metric of C', metric.name | |
| 34 | + assert_equal 'METHOD', metric.scope | |
| 35 | + assert_equal ['JAVA'], metric.languages | |
| 36 | + assert_equal 'Metric of C description', metric.description | |
| 37 | + end | |
| 38 | + | |
| 39 | + should 'remove metric configuration by name' do | |
| 40 | + @client.remove('Configuration X', 'Metric X') | |
| 41 | + end | |
| 42 | + | |
| 43 | +end | |
| 0 | 44 | \ No newline at end of file | ... | ... |
plugins/mezuro/test/unit/kalibro/client/metric_configuration_client_test.rb
0 → 100644
| ... | ... | @@ -0,0 +1,44 @@ |
| 1 | +require "test_helper" | |
| 2 | + | |
| 3 | +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/metric_configuration_fixtures" | |
| 4 | + | |
| 5 | +class MetricConfigurationClientTest < ActiveSupport::TestCase | |
| 6 | + | |
| 7 | + def setup | |
| 8 | + @port = mock | |
| 9 | + Kalibro::Client::Port.expects(:new).with('MetricConfiguration').returns(@port) | |
| 10 | + @client = Kalibro::Client::MetricConfigurationClient.new | |
| 11 | + end | |
| 12 | + | |
| 13 | + should 'save metric configuration' do | |
| 14 | + configuration = MetricConfigurationFixtures.amloc_configuration | |
| 15 | + @port.expects(:request).with(:save_metric_configuration, { | |
| 16 | + :metric_configuration => configuration.to_hash, | |
| 17 | + :configuration_name => 'x' | |
| 18 | + }) | |
| 19 | + @client.save(configuration, 'x') | |
| 20 | + end | |
| 21 | + | |
| 22 | + should 'get metric configuration by name' do | |
| 23 | + configuration = MetricConfigurationFixtures.amloc_configuration | |
| 24 | + request_body = { | |
| 25 | + :configuration_name => 'configuration.name', | |
| 26 | + :metric_name => configuration.metric.name | |
| 27 | + } | |
| 28 | + response_hash = {:metric_configuration => configuration.to_hash} | |
| 29 | + @port.expects(:request).with(:get_metric_configuration, request_body).returns(response_hash) | |
| 30 | + assert_equal configuration, @client.metric_configuration('configuration.name', configuration.metric.name) | |
| 31 | + end | |
| 32 | + | |
| 33 | + should 'remove metric configuration by name' do | |
| 34 | + metric_name = 'MetricConfigurationClientTest' | |
| 35 | + configuration_name = 'xxxx' | |
| 36 | + request_body = { | |
| 37 | + :configuration_name => configuration_name, | |
| 38 | + :metric_name => metric_name | |
| 39 | + } | |
| 40 | + @port.expects(:request).with(:remove_metric_configuration, request_body) | |
| 41 | + @client.remove(configuration_name, metric_name) | |
| 42 | + end | |
| 43 | + | |
| 44 | +end | |
| 0 | 45 | \ No newline at end of file | ... | ... |