Commit 4e7213ba1eba2a78cbbf891da0c73e8a88e59a09
Exists in
master
and in
29 other branches
[Mezuro] Merge branch 'merging_configuration' into 'mezuro'
Conflicts: plugins/mezuro/lib/kalibro/client/kalibro_client.rb plugins/mezuro/views/content_viewer/_module_result.rhtml
Showing
51 changed files
with
874 additions
and
95 deletions
Show diff stats
plugins/mezuro/controllers/mezuro_plugin_profile_controller.rb
... | ... | @@ -35,4 +35,93 @@ class MezuroPluginProfileController < ProfileController |
35 | 35 | render :partial =>'content_viewer/source_tree', :locals => { :source_tree => source_tree, :project_name => content.project.name} |
36 | 36 | end |
37 | 37 | |
38 | + def choose_base_tool | |
39 | + @configuration_name = params[:configuration_name] | |
40 | + @tool_names = Kalibro::Client::BaseToolClient.new | |
41 | + end | |
42 | + | |
43 | + def choose_metric | |
44 | + @configuration_name = params[:configuration_name] | |
45 | + @collector_name = params[:collector_name] | |
46 | + @collector = Kalibro::Client::BaseToolClient.new.base_tool(@collector_name) | |
47 | + end | |
48 | + | |
49 | + def new_metric_configuration | |
50 | + metric_name = params[:metric_name] | |
51 | + collector_name = params[:collector_name] | |
52 | + collector = Kalibro::Client::BaseToolClient.new.base_tool(collector_name) | |
53 | + @metric = collector.supported_metrics.find {|metric| metric.name == metric_name} | |
54 | + @configuration_name = params[:configuration_name] | |
55 | + end | |
56 | + | |
57 | + def edit_metric_configuration | |
58 | + metric_name = params[:metric_name] | |
59 | + @configuration_name = params[:configuration_name] | |
60 | + @metric_configuration = Kalibro::Client::MetricConfigurationClient.new.metric_configuration(@configuration_name, metric_name) | |
61 | + @metric = @metric_configuration.metric | |
62 | + end | |
63 | + | |
64 | + def create_metric_configuration | |
65 | + @configuration_name = params[:configuration_name] | |
66 | + metric_configuration = new_metric_configuration_instance | |
67 | + Kalibro::Client::MetricConfigurationClient.new.save(metric_configuration, @configuration_name) | |
68 | + redirect_to "/#{profile.identifier}/#{@configuration_name.downcase.gsub(/\s/, '-')}" | |
69 | + end | |
70 | + | |
71 | + def update_metric_configuration | |
72 | + @configuration_name = params[:configuration_name] | |
73 | + metric_configuration = new_metric_configuration_instance | |
74 | + Kalibro::Client::MetricConfigurationClient.new.save(metric_configuration, @configuration_name) | |
75 | + redirect_to "/#{profile.identifier}/#{@configuration_name.downcase.gsub(/\s/, '-')}" | |
76 | + end | |
77 | + | |
78 | + def new_range | |
79 | + @metric_name = params[:metric_name] | |
80 | + @configuration_name = params[:configuration_name] | |
81 | + end | |
82 | + | |
83 | + def create_range | |
84 | + @range = new_range_instance | |
85 | + configuration_name = params[:configuration_name] | |
86 | + metric_name = params[:metric_name] | |
87 | + metric_configuration_client = Kalibro::Client::MetricConfigurationClient.new | |
88 | + metric_configuration = metric_configuration_client.metric_configuration(configuration_name, metric_name) | |
89 | + metric_configuration.add_range(@range) | |
90 | + metric_configuration_client.save(metric_configuration, configuration_name) | |
91 | + end | |
92 | + | |
93 | + def remove_metric_configuration | |
94 | + configuration_name = params[:configuration_name] | |
95 | + metric_name = params[:metric_name] | |
96 | + Kalibro::Client::MetricConfigurationClient.new.remove(configuration_name, metric_name) | |
97 | + redirect_to "/#{profile.identifier}/#{configuration_name.downcase.gsub(/\s/, '-')}" | |
98 | + end | |
99 | + | |
100 | + private | |
101 | + | |
102 | + def new_metric_configuration_instance | |
103 | + metric_configuration = Kalibro::Entities::MetricConfiguration.new | |
104 | + metric_configuration.metric = Kalibro::Entities::NativeMetric.new | |
105 | + metric_configuration.metric.name = params[:metric][:name] | |
106 | + metric_configuration.metric.description = params[:description] | |
107 | + metric_configuration.metric.origin = params[:metric][:origin] | |
108 | + metric_configuration.metric.scope = params[:scope] | |
109 | + metric_configuration.metric.language = params[:language] | |
110 | + metric_configuration.code = params[:metric_configuration][:code] | |
111 | + metric_configuration.weight = params[:metric_configuration][:weight] | |
112 | + metric_configuration.aggregation_form = params[:metric_configuration][:aggregation] | |
113 | + metric_configuration | |
114 | + end | |
115 | + | |
116 | + def new_range_instance | |
117 | + range = Kalibro::Entities::Range.new | |
118 | + range.beginning = params[:range][:beginning] | |
119 | + range.end = params[:range][:end] | |
120 | + range.label = params[:range][:label] | |
121 | + range.grade = params[:range][:grade] | |
122 | + range.color = params[:range][:color] | |
123 | + range.comments = params[:range][:comments] | |
124 | + range | |
125 | + end | |
38 | 126 | end |
127 | + | ... | ... |
plugins/mezuro/lib/kalibro/client/base_tool_client.rb
plugins/mezuro/lib/kalibro/client/kalibro_client.rb
1 | 1 | class Kalibro::Client::KalibroClient |
2 | + | |
3 | + def self.process_project(project_name) | |
4 | + new.process_project(project_name) | |
5 | + end | |
2 | 6 | |
3 | 7 | def initialize |
4 | 8 | @port = Kalibro::Client::Port.new('Kalibro') |
... | ... | @@ -12,16 +16,16 @@ class Kalibro::Client::KalibroClient |
12 | 16 | @port.request(:process_project, {:project_name => project_name}) |
13 | 17 | end |
14 | 18 | |
15 | - def process_periodically(project_name, days) | |
16 | - @port.request(:process_periodically, {:project_name => project_name, :period_in_days => days}) | |
17 | - end | |
19 | + def process_periodically(project_name, period_in_days) | |
20 | + @port.request(:process_periodically, {:project_name => project_name, :period_in_days => period_in_days}) | |
21 | + end | |
22 | + | |
23 | + def process_period(project_name) | |
24 | + @port.request(:get_process_period, {:project_name => project_name})[:period] | |
25 | + end | |
18 | 26 | |
19 | - def self.process_project(project_name, days) | |
20 | - if days.to_i.zero? | |
21 | - new.process_project(project_name) | |
22 | - else | |
23 | - new.process_periodically(project_name, days) | |
24 | - end | |
27 | + def cancel_periodic_process(project_name) | |
28 | + @port.request(:cancel_periodic_process, {:project_name => project_name}) | |
25 | 29 | end |
26 | 30 | |
27 | 31 | end | ... | ... |
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/module_result_client.rb
... | ... | @@ -13,7 +13,7 @@ class Kalibro::Client::ModuleResultClient |
13 | 13 | def module_result(project_name, module_name, date) |
14 | 14 | hash = @port.request(:get_module_result, |
15 | 15 | {:project_name => project_name, :module_name => module_name, |
16 | - :date => date_with_milliseconds(date)})[:module_result] | |
16 | + :date => Kalibro::Entities::Entity.date_with_milliseconds(date)})[:module_result] | |
17 | 17 | Kalibro::Entities::ModuleResult.from_hash(hash) |
18 | 18 | end |
19 | 19 | |
... | ... | @@ -23,11 +23,4 @@ class Kalibro::Client::ModuleResultClient |
23 | 23 | Kalibro::Entities::Entity.new.to_entity_array(value, Kalibro::Entities::ModuleResult) |
24 | 24 | end |
25 | 25 | |
26 | - private | |
27 | - | |
28 | - def date_with_milliseconds(date) | |
29 | - milliseconds = "." + (date.sec_fraction * 60 * 60 * 24 * 1000).to_s | |
30 | - date.to_s[0..18] + milliseconds + date.to_s[19..-1] | |
31 | - end | |
32 | - | |
33 | 26 | end |
34 | 27 | \ 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/configuration.rb
... | ... | @@ -7,7 +7,11 @@ class Kalibro::Entities::Configuration < Kalibro::Entities::Entity |
7 | 7 | end |
8 | 8 | |
9 | 9 | def metric_configurations |
10 | - @metric_configuration | |
10 | + if @metric_configuration != nil | |
11 | + @metric_configuration | |
12 | + else | |
13 | + [] | |
14 | + end | |
11 | 15 | end |
12 | 16 | |
13 | 17 | def metric_configurations=(metric_configurations) | ... | ... |
plugins/mezuro/lib/kalibro/entities/entity.rb
... | ... | @@ -2,10 +2,19 @@ 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 is_valid?(field) } | |
6 | 6 | entity |
7 | 7 | end |
8 | 8 | |
9 | + def self.is_valid?(field) | |
10 | + field.to_s[0] != '@' and field != :attributes! | |
11 | + end | |
12 | + | |
13 | + def self.date_with_milliseconds(date) | |
14 | + milliseconds = "." + (date.sec_fraction * 60 * 60 * 24 * 1000).to_s | |
15 | + date.to_s[0..18] + milliseconds + date.to_s[19..-1] | |
16 | + end | |
17 | + | |
9 | 18 | def set(field, value) |
10 | 19 | send("#{field}=", value) if not field.to_s.start_with? '@' |
11 | 20 | end |
... | ... | @@ -24,16 +33,16 @@ class Kalibro::Entities::Entity |
24 | 33 | fields.each do |field| |
25 | 34 | field_value = self.get(field) |
26 | 35 | hash[field] = convert_to_hash(field_value) if ! field_value.nil? |
36 | + if need_xml_type?(field_value) | |
37 | + hash = {:attributes! => {}}.merge(hash) | |
38 | + hash[:attributes!][field.to_sym] = { | |
39 | + 'xmlns:xsi'=> 'http://www.w3.org/2001/XMLSchema-instance', | |
40 | + 'xsi:type' => 'kalibro:' + xml_class_name(field_value) } | |
41 | + end | |
27 | 42 | end |
28 | 43 | hash |
29 | 44 | end |
30 | 45 | |
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 | 46 | def ==(other) |
38 | 47 | begin |
39 | 48 | fields.each.inject(true) { |equal, field| equal && (self.get(field) == other.get(field)) } |
... | ... | @@ -42,6 +51,8 @@ class Kalibro::Entities::Entity |
42 | 51 | end |
43 | 52 | end |
44 | 53 | |
54 | + protected | |
55 | + | |
45 | 56 | def fields |
46 | 57 | instance_variable_names.each.collect { |variable| variable.to_s.sub(/@/, '').to_sym } |
47 | 58 | end |
... | ... | @@ -50,4 +61,24 @@ class Kalibro::Entities::Entity |
50 | 61 | send("#{field}") |
51 | 62 | end |
52 | 63 | |
64 | + def convert_to_hash(value) | |
65 | + return value.collect { |element| convert_to_hash(element) } if value.is_a?(Array) | |
66 | + return value.to_hash if value.is_a?(Kalibro::Entities::Entity) | |
67 | + return self.class.date_with_milliseconds(value) if value.is_a?(DateTime) | |
68 | + return 'INF' if value.is_a?(Float) and value.infinite? == 1 | |
69 | + return '-INF' if value.is_a?(Float) and value.infinite? == -1 | |
70 | + value | |
71 | + end | |
72 | + | |
73 | + def need_xml_type?(value) | |
74 | + value.is_a?(Kalibro::Entities::Entity) and value.class.superclass != Kalibro::Entities::Entity | |
75 | + end | |
76 | + | |
77 | + def xml_class_name(entity) | |
78 | + xml_name = entity.class.name | |
79 | + xml_name["Kalibro::Entities::"] = "" | |
80 | + xml_name[0..0] = xml_name[0..0].downcase | |
81 | + xml_name + "Xml" | |
82 | + end | |
83 | + | |
53 | 84 | end | ... | ... |
plugins/mezuro/lib/kalibro/entities/error.rb
1 | 1 | class Kalibro::Entities::Error < Kalibro::Entities::Entity |
2 | 2 | |
3 | - attr_accessor :message, :stack_trace_element | |
3 | + attr_accessor :error_class, :message, :stack_trace_element | |
4 | 4 | |
5 | 5 | def stack_trace_element=(value) |
6 | 6 | @stack_trace_element = to_entity_array(value, Kalibro::Entities::StackTraceElement) | ... | ... |
plugins/mezuro/lib/kalibro/entities/metric.rb
plugins/mezuro/lib/kalibro/entities/metric_configuration.rb
... | ... | @@ -11,10 +11,19 @@ class Kalibro::Entities::MetricConfiguration < Kalibro::Entities::Entity |
11 | 11 | end |
12 | 12 | end |
13 | 13 | |
14 | + def weight=(value) | |
15 | + @weight = value.to_f | |
16 | + end | |
17 | + | |
14 | 18 | def range=(value) |
15 | 19 | @range = to_entity_array(value, Kalibro::Entities::Range) |
16 | 20 | end |
17 | 21 | |
22 | + def add_range(new_range) | |
23 | + @range = [] if @range.nil? | |
24 | + @range << new_range | |
25 | + end | |
26 | + | |
18 | 27 | def ranges |
19 | 28 | @range |
20 | 29 | end |
... | ... | @@ -23,4 +32,4 @@ class Kalibro::Entities::MetricConfiguration < Kalibro::Entities::Entity |
23 | 32 | @range = ranges |
24 | 33 | end |
25 | 34 | |
26 | -end | |
27 | 35 | \ No newline at end of file |
36 | +end | ... | ... |
plugins/mezuro/lib/kalibro/entities/metric_result.rb
... | ... | @@ -14,12 +14,17 @@ class Kalibro::Entities::MetricResult < Kalibro::Entities::Entity |
14 | 14 | end |
15 | 15 | end |
16 | 16 | |
17 | + def value=(value) | |
18 | + @value = value.to_f | |
19 | + end | |
20 | + | |
17 | 21 | def range=(value) |
18 | 22 | @range = to_entity(value, Kalibro::Entities::Range) |
19 | 23 | end |
20 | 24 | |
21 | 25 | def descendent_result=(value) |
22 | - @descendent_result = to_entity_array(value) | |
26 | + array = value.kind_of?(Array) ? value : [value] | |
27 | + @descendent_result = array.collect {|element| element.to_f} | |
23 | 28 | end |
24 | 29 | |
25 | 30 | def descendent_results | ... | ... |
plugins/mezuro/lib/kalibro/entities/module_result.rb
... | ... | @@ -6,6 +6,15 @@ class Kalibro::Entities::ModuleResult < Kalibro::Entities::Entity |
6 | 6 | @module = to_entity(value, Kalibro::Entities::Module) |
7 | 7 | end |
8 | 8 | |
9 | + def date=(value) | |
10 | + @date = value | |
11 | + @date = DateTime.parse(value) if value.is_a?(String) | |
12 | + end | |
13 | + | |
14 | + def grade=(value) | |
15 | + @grade = value.to_f | |
16 | + end | |
17 | + | |
9 | 18 | def metric_result=(value) |
10 | 19 | @metric_result = to_entity_array(value, Kalibro::Entities::MetricResult) |
11 | 20 | end | ... | ... |
plugins/mezuro/lib/kalibro/entities/native_metric.rb
... | ... | @@ -2,4 +2,16 @@ class Kalibro::Entities::NativeMetric < Kalibro::Entities::Metric |
2 | 2 | |
3 | 3 | attr_accessor :origin, :language |
4 | 4 | |
5 | + def languages | |
6 | + @language | |
7 | + end | |
8 | + | |
9 | + def languages=(languages) | |
10 | + @language = languages | |
11 | + end | |
12 | + | |
13 | + def language=(value) | |
14 | + @language = to_entity_array(value) | |
15 | + end | |
16 | + | |
5 | 17 | end | ... | ... |
plugins/mezuro/lib/kalibro/entities/project_result.rb
... | ... | @@ -6,6 +6,19 @@ class Kalibro::Entities::ProjectResult < Kalibro::Entities::Entity |
6 | 6 | @project = to_entity(value, Kalibro::Entities::Project) |
7 | 7 | end |
8 | 8 | |
9 | + def date=(value) | |
10 | + @date = value | |
11 | + @date = DateTime.parse(value) if value.is_a?(String) | |
12 | + end | |
13 | + | |
14 | + def load_time=(value) | |
15 | + @load_time = value.to_i | |
16 | + end | |
17 | + | |
18 | + def analysis_time=(value) | |
19 | + @analysis_time = value.to_i | |
20 | + end | |
21 | + | |
9 | 22 | def source_tree=(value) |
10 | 23 | @source_tree = to_entity(value, Kalibro::Entities::ModuleNode) |
11 | 24 | end | ... | ... |
plugins/mezuro/lib/kalibro/entities/range.rb
... | ... | @@ -2,4 +2,18 @@ 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 | + | |
15 | + def grade=(value) | |
16 | + @grade = value.to_f | |
17 | + end | |
18 | + | |
5 | 19 | end |
6 | 20 | \ No newline at end of file | ... | ... |
plugins/mezuro/lib/kalibro/entities/stack_trace_element.rb
plugins/mezuro/lib/mezuro_plugin/configuration_content.rb
... | ... | @@ -8,7 +8,7 @@ class MezuroPlugin::ConfigurationContent < Article |
8 | 8 | 'Sets of thresholds to interpret metrics' |
9 | 9 | end |
10 | 10 | |
11 | - settings_items :description | |
11 | + settings_items :description, :metrics | |
12 | 12 | |
13 | 13 | include ActionView::Helpers::TagHelper |
14 | 14 | def to_html(options = {}) | ... | ... |
plugins/mezuro/lib/mezuro_plugin/metric_configuration_content.rb
0 → 100644
... | ... | @@ -0,0 +1,37 @@ |
1 | +class MezuroPlugin::MetricConfigurationContent < Article | |
2 | + | |
3 | + def self.short_description | |
4 | + 'Kalibro Configurated Metric' | |
5 | + end | |
6 | + | |
7 | + def self.description | |
8 | + 'Sets of thresholds to interpret a metric' | |
9 | + end | |
10 | + | |
11 | + settings_items :description, :code, :weight, :scope, :aggregation_form, :range | |
12 | + | |
13 | + include ActionView::Helpers::TagHelper | |
14 | + def to_html(options = {}) | |
15 | + lambda do | |
16 | + render :file => 'content_viewer/show_configuration.rhtml' | |
17 | + end | |
18 | + end | |
19 | + | |
20 | + def metric_configuration | |
21 | + Kalibro::Client::MetricConfigurationClient.metric_configuration(name) | |
22 | + end | |
23 | + | |
24 | + after_save :send_metric_configuration_to_service | |
25 | + after_destroy :remove_metric_configuration_from_service | |
26 | + | |
27 | + private | |
28 | + | |
29 | + def send_metric_configuration_to_service | |
30 | + Kalibro::Client::MetricConfigurationClient.save(self) | |
31 | + end | |
32 | + | |
33 | + def remove_metric_configuration_from_service | |
34 | + Kalibro::Client::MetricConfigurationClient.remove(name) | |
35 | + end | |
36 | + | |
37 | +end | ... | ... |
plugins/mezuro/public/javascripts/project_content.js
... | ... | @@ -80,4 +80,10 @@ function showLoadingProcess(firstLoad){ |
80 | 80 | |
81 | 81 | showProjectTree("<img src='/images/loading-small.gif'/>"); |
82 | 82 | showModuleResult("<img src='/images/loading-small.gif'/>"); |
83 | -} | |
83 | +} | |
84 | + | |
85 | +function sourceNodeToggle(id){ | |
86 | + var suffixes = ['_hidden', '_plus', '_minus']; | |
87 | + for (var i in suffixes) | |
88 | + jQuery('#' + id + suffixes[i]).toggle(); | |
89 | +} | ... | ... |
plugins/mezuro/test/fixtures/base_tool_fixtures.rb
plugins/mezuro/test/fixtures/compound_metric_fixtures.rb
... | ... | @@ -4,12 +4,12 @@ class CompoundMetricFixtures |
4 | 4 | sc = Kalibro::Entities::CompoundMetric.new |
5 | 5 | sc.name = 'Structural Complexity' |
6 | 6 | sc.scope = 'CLASS' |
7 | - sc.script = 'return cbo * lcom4;' | |
7 | + sc.script = 'return 42;' | |
8 | 8 | sc |
9 | 9 | end |
10 | 10 | |
11 | 11 | def self.sc_hash |
12 | - {:name => 'Structural Complexity', :scope => 'CLASS', :script => 'return cbo * lcom4;'} | |
12 | + {:name => 'Structural Complexity', :scope => 'CLASS', :script => 'return 42;'} | |
13 | 13 | end |
14 | 14 | |
15 | 15 | end | ... | ... |
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/error_fixtures.rb
... | ... | @@ -4,6 +4,7 @@ class ErrorFixtures |
4 | 4 | |
5 | 5 | def self.create |
6 | 6 | error = Kalibro::Entities::Error.new |
7 | + error.error_class = 'java.lang.Exception' | |
7 | 8 | error.message = 'Error message from ErrorTest' |
8 | 9 | error.stack_trace = [ |
9 | 10 | StackTraceElementFixtures.create('my method 1', 42), |
... | ... | @@ -12,7 +13,8 @@ class ErrorFixtures |
12 | 13 | end |
13 | 14 | |
14 | 15 | def self.create_hash |
15 | - {:message => 'Error message from ErrorTest', :stack_trace_element => [ | |
16 | + {:error_class => 'java.lang.Exception', :message => 'Error message from ErrorTest', | |
17 | + :stack_trace_element => [ | |
16 | 18 | StackTraceElementFixtures.create_hash('my method 1', 42), |
17 | 19 | StackTraceElementFixtures.create_hash('my method 2', 84)]} |
18 | 20 | end | ... | ... |
plugins/mezuro/test/fixtures/metric_configuration_fixtures.rb
... | ... | @@ -14,6 +14,15 @@ class MetricConfigurationFixtures |
14 | 14 | amloc |
15 | 15 | end |
16 | 16 | |
17 | + def self.metric_configuration_without_ranges | |
18 | + amloc = Kalibro::Entities::MetricConfiguration.new | |
19 | + amloc.metric = NativeMetricFixtures.amloc | |
20 | + amloc.code = 'amloc' | |
21 | + amloc.weight = 1.0 | |
22 | + amloc.aggregation_form = 'AVERAGE' | |
23 | + amloc | |
24 | + end | |
25 | + | |
17 | 26 | def self.sc_configuration |
18 | 27 | sc = Kalibro::Entities::MetricConfiguration.new |
19 | 28 | sc.metric = CompoundMetricFixtures.sc |
... | ... | @@ -25,12 +34,18 @@ class MetricConfigurationFixtures |
25 | 34 | |
26 | 35 | def self.amloc_configuration_hash |
27 | 36 | {:metric => NativeMetricFixtures.amloc_hash, :code => 'amloc', :weight => 1.0, |
28 | - :aggregation_form => 'AVERAGE', :range => | |
29 | - [RangeFixtures.amloc_excellent_hash, RangeFixtures.amloc_bad_hash]} | |
37 | + :aggregation_form => 'AVERAGE', | |
38 | + :range => [RangeFixtures.amloc_excellent_hash, RangeFixtures.amloc_bad_hash], | |
39 | + :attributes! => {:metric => { | |
40 | + 'xmlns:xsi'=> 'http://www.w3.org/2001/XMLSchema-instance', | |
41 | + 'xsi:type' => 'kalibro:nativeMetricXml' }}} | |
30 | 42 | end |
31 | 43 | |
32 | 44 | def self.sc_configuration_hash |
33 | - {:metric => CompoundMetricFixtures.sc_hash, :code => 'sc', :weight => 1.0, :aggregation_form => 'AVERAGE'} | |
45 | + {:metric => CompoundMetricFixtures.sc_hash, :code => 'sc', :weight => 1.0, :aggregation_form => 'AVERAGE', | |
46 | + :attributes! => {:metric => { | |
47 | + 'xmlns:xsi'=> 'http://www.w3.org/2001/XMLSchema-instance', | |
48 | + 'xsi:type' => 'kalibro:compoundMetricXml' }}} | |
34 | 49 | end |
35 | 50 | |
36 | 51 | 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/module_node_fixtures.rb
... | ... | @@ -5,17 +5,17 @@ class ModuleNodeFixtures |
5 | 5 | node.module = ModuleFixtures.qt_calculator |
6 | 6 | org_node = new_node('org', 'PACKAGE') |
7 | 7 | org_node.children = [new_node('org.Window', 'CLASS')] |
8 | - node.children = [new_node('Dialog', 'CLASS'), new_node('main', 'CLASS'), org_node] | |
8 | + node.children = [org_node, new_node('Dialog', 'CLASS'), new_node('main', 'CLASS')] | |
9 | 9 | node |
10 | 10 | end |
11 | 11 | |
12 | 12 | def self.qt_calculator_tree_hash |
13 | 13 | {:module => ModuleFixtures.qt_calculator_hash, |
14 | 14 | :child => [ |
15 | - {:module => {:name => 'Dialog', :granularity => 'CLASS'}}, | |
16 | - {:module => {:name => 'main', :granularity => 'CLASS'}}, | |
17 | 15 | {:module => {:name => 'org', :granularity => 'PACKAGE'}, |
18 | - :child => [{:module => {:name => 'org.Window', :granularity => 'CLASS'}}]} | |
16 | + :child => [{:module => {:name => 'org.Window', :granularity => 'CLASS'}}]}, | |
17 | + {:module => {:name => 'Dialog', :granularity => 'CLASS'}}, | |
18 | + {:module => {:name => 'main', :granularity => 'CLASS'}} | |
19 | 19 | ] |
20 | 20 | } |
21 | 21 | end | ... | ... |
plugins/mezuro/test/fixtures/module_result_fixtures.rb
... | ... | @@ -18,7 +18,7 @@ class ModuleResultFixtures |
18 | 18 | |
19 | 19 | def self.create_hash |
20 | 20 | {:module => ModuleFixtures.qt_calculator_hash, |
21 | - :date => DateTime.parse('Thu, 20 Oct 2011 18:26:43.151 +0000'), :grade => 10.0, :metric_result => [ | |
21 | + :date => '2011-10-20T18:26:43.151+00:00', :grade => 10.0, :metric_result => [ | |
22 | 22 | MetricResultFixtures.amloc_result_hash, |
23 | 23 | MetricResultFixtures.sc_result_hash], |
24 | 24 | :compound_metric_with_error => [CompoundMetricWithErrorFixtures.create_hash]} | ... | ... |
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 | ... | ... |
plugins/mezuro/test/fixtures/project_result_fixtures.rb
... | ... | @@ -15,7 +15,7 @@ class ProjectResultFixtures |
15 | 15 | end |
16 | 16 | |
17 | 17 | def self.qt_calculator_hash |
18 | - {:project => ProjectFixtures.qt_calculator_hash, :date => ModuleResultFixtures.create.date, | |
18 | + {:project => ProjectFixtures.qt_calculator_hash, :date => ModuleResultFixtures.create_hash[:date], | |
19 | 19 | :load_time => 14878, :analysis_time => 1022, :source_tree => ModuleNodeFixtures.qt_calculator_tree_hash} |
20 | 20 | end |
21 | 21 | ... | ... |
plugins/mezuro/test/fixtures/range_fixtures.rb
... | ... | @@ -27,7 +27,7 @@ class RangeFixtures |
27 | 27 | end |
28 | 28 | |
29 | 29 | def self.amloc_bad_hash |
30 | - {:beginning => 19.5, :end => Infinity, :label => 'Bad',:grade => 0.0, :color => 'ffff0000'} | |
30 | + {:beginning => 19.5, :end => "INF", :label => 'Bad',:grade => 0.0, :color => 'ffff0000'} | |
31 | 31 | end |
32 | 32 | |
33 | 33 | end | ... | ... |
... | ... | @@ -0,0 +1,88 @@ |
1 | +require "test_helper" | |
2 | + | |
3 | +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/base_tool_fixtures" | |
4 | +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/configuration_fixtures" | |
5 | +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/module_result_fixtures" | |
6 | +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/project_result_fixtures" | |
7 | + | |
8 | +class EchoPortTest < ActiveSupport::TestCase | |
9 | + | |
10 | + def setup | |
11 | + @port = Kalibro::Client::Port.new('Echo') | |
12 | + @port.service_address=('http://valinhos.ime.usp.br:50688/KalibroFake/'); | |
13 | + end | |
14 | + | |
15 | + should 'echo base tool' do | |
16 | + test BaseToolFixtures.analizo, 'BaseTool' do |base_tool| | |
17 | + base_tool.name = "echo " + base_tool.name | |
18 | + end | |
19 | + end | |
20 | + | |
21 | + should 'echo configuration' do | |
22 | + test ConfigurationFixtures.kalibro_configuration, 'Configuration' do |configuration| | |
23 | + configuration.name = "echo " + configuration.name | |
24 | + end | |
25 | + end | |
26 | + | |
27 | + should 'echo metric configuration' do | |
28 | + test_metric_configuration(MetricConfigurationFixtures.amloc_configuration) | |
29 | + test_metric_configuration(MetricConfigurationFixtures.sc_configuration) | |
30 | + end | |
31 | + | |
32 | + should 'echo module result' do | |
33 | + test ModuleResultFixtures.create, 'ModuleResult' do |module_result| | |
34 | + module_result.module.name = "echo." + module_result.module.name | |
35 | + end | |
36 | + end | |
37 | + | |
38 | + should 'echo project' do | |
39 | + test(ProjectFixtures.qt_calculator, 'Project') do |project| | |
40 | + project.name = "echo " + project.name | |
41 | + end | |
42 | + end | |
43 | + | |
44 | + should 'echo project result' do | |
45 | + test(ProjectResultFixtures.qt_calculator, 'ProjectResult') do |project_result| | |
46 | + project_result.project.name = "echo " + project_result.project.name | |
47 | + end | |
48 | + end | |
49 | + | |
50 | + should 'echo raw project' do | |
51 | + project = ProjectFixtures.qt_calculator | |
52 | + echoed = @port.request(:echo_raw_project, {:project => project.to_hash})[:project] | |
53 | + project.name = "echo " + project.name | |
54 | + project.state = nil | |
55 | + project.error = nil | |
56 | + assert_equal project, Kalibro::Entities::Project.from_hash(echoed) | |
57 | + end | |
58 | + | |
59 | + should 'work with enums' do | |
60 | + test_granularity("METHOD", "CLASS") | |
61 | + test_granularity("CLASS", "PACKAGE") | |
62 | + test_granularity("PACKAGE", "PACKAGE") | |
63 | + test_granularity("APPLICATION", "APPLICATION") | |
64 | + end | |
65 | + | |
66 | + private | |
67 | + | |
68 | + def test_metric_configuration(fixture) | |
69 | + test fixture, 'MetricConfiguration' do |metric_configuration| | |
70 | + metric_configuration.code = "echo_" + metric_configuration.code | |
71 | + end | |
72 | + end | |
73 | + | |
74 | + def test(fixture, entity_name) | |
75 | + entity_symbol = entity_name.underscore.to_sym | |
76 | + request_body = {entity_symbol => fixture.to_hash} | |
77 | + echoed = @port.request("echo_#{entity_symbol}".to_sym, request_body)[entity_symbol] | |
78 | + yield fixture | |
79 | + entity_class = "Kalibro::Entities::#{entity_name}".constantize | |
80 | + assert_equal fixture, entity_class.from_hash(echoed) | |
81 | + end | |
82 | + | |
83 | + def test_granularity(granularity, parent) | |
84 | + body = {:granularity => granularity} | |
85 | + assert_equal parent, @port.request(:infer_parent_granularity, body)[:parent_granularity] | |
86 | + end | |
87 | + | |
88 | +end | |
0 | 89 | \ No newline at end of file | ... | ... |
plugins/mezuro/test/functional/mezuro_plugin_profile_controller_test.rb
... | ... | @@ -3,6 +3,9 @@ require 'test_helper' |
3 | 3 | require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/module_result_fixtures" |
4 | 4 | require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/project_result_fixtures" |
5 | 5 | require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/error_fixtures" |
6 | +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/base_tool_fixtures" | |
7 | +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/native_metric_fixtures" | |
8 | +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/metric_configuration_fixtures" | |
6 | 9 | |
7 | 10 | class MezuroPluginProfileControllerTest < ActionController::TestCase |
8 | 11 | |
... | ... | @@ -16,6 +19,12 @@ class MezuroPluginProfileControllerTest < ActionController::TestCase |
16 | 19 | @module_result = ModuleResultFixtures.create |
17 | 20 | @project = @project_result.project |
18 | 21 | @name = @project.name |
22 | + | |
23 | + @collector = BaseToolFixtures.analizo | |
24 | + @base_tool_client = Kalibro::Client::BaseToolClient.new | |
25 | + @metric = NativeMetricFixtures.amloc | |
26 | + @metric_configuration_client = Kalibro::Client::MetricConfigurationClient.new | |
27 | + @metric_configuration = MetricConfigurationFixtures.amloc_configuration | |
19 | 28 | end |
20 | 29 | |
21 | 30 | should 'not find module result for inexistent project content' do |
... | ... | @@ -65,6 +74,91 @@ class MezuroPluginProfileControllerTest < ActionController::TestCase |
65 | 74 | assert_select('h5', 'Metric results for: Qt-Calculator (APPLICATION)') |
66 | 75 | end |
67 | 76 | |
77 | + should 'assign configuration name in choose_base_tool' do | |
78 | + get :choose_base_tool, :profile => @profile.identifier, :configuration_name => "test name" | |
79 | + assert_equal assigns(:configuration_name), "test name" | |
80 | + end | |
81 | + | |
82 | + should 'create base tool client' do | |
83 | + get :choose_base_tool, :profile => @profile.identifier, :configuration_name => "test name" | |
84 | + assert assigns(:tool_names).instance_of?(Kalibro::Client::BaseToolClient) | |
85 | + end | |
86 | + | |
87 | + should 'assign configuration and collector name in choose_metric' do | |
88 | + Kalibro::Client::BaseToolClient.expects(:new).returns(@base_tool_client) | |
89 | + @base_tool_client.expects(:base_tool).with(@collector.name).returns(@collector) | |
90 | + get :choose_metric, :profile => @profile.identifier, :configuration_name => "test name", :collector_name => "Analizo" | |
91 | + assert_equal assigns(:configuration_name), "test name" | |
92 | + assert_equal assigns(:collector_name), "Analizo" | |
93 | + end | |
94 | + | |
95 | + should 'get collector by name' do | |
96 | + Kalibro::Client::BaseToolClient.expects(:new).returns(@base_tool_client) | |
97 | + @base_tool_client.expects(:base_tool).with(@collector.name).returns(@collector) | |
98 | + get :choose_metric, :profile => @profile.identifier, :configuration_name => "test name", :collector_name => "Analizo" | |
99 | + assert_equal assigns(:collector), @collector | |
100 | + end | |
101 | + | |
102 | + should 'get choosed native metric and configuration name' do | |
103 | + Kalibro::Client::BaseToolClient.expects(:new).returns(@base_tool_client) | |
104 | + @base_tool_client.expects(:base_tool).with(@collector.name).returns(@collector) | |
105 | + get :new_metric_configuration, :profile => @profile.identifier, :configuration_name => "test name", :collector_name => "Analizo", :metric_name => @metric.name | |
106 | + assert_equal assigns(:configuration_name), "test name" | |
107 | + assert_equal assigns(:metric), @metric | |
108 | + end | |
109 | + | |
110 | + should 'assign configuration name and get metric_configuration' do | |
111 | + Kalibro::Client::MetricConfigurationClient.expects(:new).returns(@metric_configuration_client) | |
112 | + @metric_configuration_client.expects(:metric_configuration).with("test name", @metric.name).returns(@metric_configuration) | |
113 | + get :edit_metric_configuration, :profile => @profile.identifier, :configuration_name => "test name", :metric_name => @metric.name | |
114 | + assert_equal assigns(:configuration_name), "test name" | |
115 | + assert_equal assigns(:metric_configuration), @metric_configuration | |
116 | + assert_equal assigns(:metric), @metric_configuration.metric | |
117 | + end | |
118 | + | |
119 | + should 'test metric creation' do | |
120 | + Kalibro::Client::MetricConfigurationClient.expects(:new).returns(@metric_configuration_client) | |
121 | + @metric_configuration_client.expects(:save) | |
122 | + get :create_metric_configuration, :profile => @profile.identifier, :configuration_name => "test name", :description => @metric.description, | |
123 | + :scope => @metric.scope, :language => @metric.language, :metric => { :name => @metric.name, :origin => @metric.origin}, | |
124 | + :metric_configuration => { :code => @metric_configuration.code, :weight => @metric_configuration.code, :aggregation => @metric_configuration.aggregation_form } | |
125 | + assert_equal assigns(:configuration_name), "test name" | |
126 | + assert_response 302 | |
127 | + end | |
128 | + | |
129 | + should 'test metric edition' do | |
130 | + Kalibro::Client::MetricConfigurationClient.expects(:new).returns(@metric_configuration_client) | |
131 | + @metric_configuration_client.expects(:save) | |
132 | + get :create_metric_configuration, :profile => @profile.identifier, :configuration_name => "test name", :description => @metric.description, | |
133 | + :scope => @metric.scope, :language => @metric.language, :metric => { :name => @metric.name, :origin => @metric.origin}, | |
134 | + :metric_configuration => { :code => @metric_configuration.code, :weight => @metric_configuration.code, :aggregation => @metric_configuration.aggregation_form } | |
135 | + assert_equal assigns(:configuration_name), "test name" | |
136 | + assert_response 302 | |
137 | + end | |
138 | + | |
139 | + should 'assign configuration name and metric name to new range' do | |
140 | + get :new_range, :profile => @profile.identifier, :configuration_name => "test name", :metric_name => @metric.name | |
141 | + assert_equal assigns(:configuration_name), "test name" | |
142 | + assert_equal assigns(:metric_name), @metric.name | |
143 | + end | |
144 | + | |
145 | + should 'create instance range' do | |
146 | + Kalibro::Client::MetricConfigurationClient.expects(:new).returns(@metric_configuration_client) | |
147 | + @metric_configuration_client.expects(:metric_configuration).with("test name", @metric.name).returns(@metric_configuration) | |
148 | + @metric_configuration_client.expects(:save) | |
149 | + range = @metric_configuration.ranges[0] | |
150 | + get :create_range, :profile => @profile.identifier, :range => { :beginning => range.beginning, :end => range.end, :label => range.label, | |
151 | + :grade => range.grade, :color => range.color, :comments => range.comments }, :configuration_name => "test name", :metric_name => @metric.name | |
152 | + assert assigns(:range).instance_of?(Kalibro::Entities::Range) | |
153 | + end | |
154 | + | |
155 | + should 'redirect from remove metric configuration' do | |
156 | + Kalibro::Client::MetricConfigurationClient.expects(:new).returns(@metric_configuration_client) | |
157 | + @metric_configuration_client.expects(:remove) | |
158 | + get :remove_metric_configuration, :profile => @profile.identifier, :configuration_name => "test name", :metric_name => @metric.name | |
159 | + assert_response 302 | |
160 | + end | |
161 | + | |
68 | 162 | private |
69 | 163 | |
70 | 164 | def create_project_content | ... | ... |
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 | ... | ... |
plugins/mezuro/test/unit/kalibro/client/project_result_client_test.rb
... | ... | @@ -13,59 +13,46 @@ class ProjectResultClientTest < ActiveSupport::TestCase |
13 | 13 | @project_name = @result.project.name |
14 | 14 | @date = @result.date |
15 | 15 | @flag = DateTime.now.sec % 2 == 0 |
16 | + | |
17 | + @request = {:project_name => @project_name} | |
18 | + @request_with_date = {:project_name => @project_name, :date => @date} | |
19 | + @flag_response = {:has_results => @flag} | |
20 | + @result_response = {:project_result => @result.to_hash} | |
16 | 21 | end |
17 | 22 | |
18 | 23 | should 'retrieve if project has results' do |
19 | - @port.expects(:request).with(:has_results_for, request).returns(flag_response) | |
24 | + @port.expects(:request).with(:has_results_for, @request).returns(@flag_response) | |
20 | 25 | assert_equal @flag, @client.has_results_for(@project_name) |
21 | 26 | end |
22 | 27 | |
23 | 28 | should 'retrieve if project has results before date' do |
24 | - @port.expects(:request).with(:has_results_before, request_with_date).returns(flag_response) | |
29 | + @port.expects(:request).with(:has_results_before, @request_with_date).returns(@flag_response) | |
25 | 30 | assert_equal @flag, @client.has_results_before(@project_name, @date) |
26 | 31 | end |
27 | 32 | |
28 | 33 | should 'retrieve if project has results after date' do |
29 | - @port.expects(:request).with(:has_results_after, request_with_date).returns(flag_response) | |
34 | + @port.expects(:request).with(:has_results_after, @request_with_date).returns(@flag_response) | |
30 | 35 | assert_equal @flag, @client.has_results_after(@project_name, @date) |
31 | 36 | end |
32 | 37 | |
33 | 38 | should 'get first result of project' do |
34 | - @port.expects(:request).with(:get_first_result_of, request).returns(result_response) | |
39 | + @port.expects(:request).with(:get_first_result_of, @request).returns(@result_response) | |
35 | 40 | assert_equal @result, @client.first_result(@project_name) |
36 | 41 | end |
37 | 42 | |
38 | 43 | should 'get last result of project' do |
39 | - @port.expects(:request).with(:get_last_result_of, request).returns(result_response) | |
44 | + @port.expects(:request).with(:get_last_result_of, @request).returns(@result_response) | |
40 | 45 | assert_equal @result, @client.last_result(@project_name) |
41 | 46 | end |
42 | 47 | |
43 | 48 | should 'get first result of project after date' do |
44 | - @port.expects(:request).with(:get_first_result_after, request_with_date).returns(result_response) | |
49 | + @port.expects(:request).with(:get_first_result_after, @request_with_date).returns(@result_response) | |
45 | 50 | assert_equal @result, @client.first_result_after(@project_name, @date) |
46 | 51 | end |
47 | 52 | |
48 | 53 | should 'get last result of project before date' do |
49 | - @port.expects(:request).with(:get_last_result_before, request_with_date).returns(result_response) | |
54 | + @port.expects(:request).with(:get_last_result_before, @request_with_date).returns(@result_response) | |
50 | 55 | assert_equal @result, @client.last_result_before(@project_name, @date) |
51 | 56 | end |
52 | 57 | |
53 | - private | |
54 | - | |
55 | - def request | |
56 | - {:project_name => @project_name} | |
57 | - end | |
58 | - | |
59 | - def request_with_date | |
60 | - {:project_name => @project_name, :date => @date} | |
61 | - end | |
62 | - | |
63 | - def flag_response | |
64 | - {:has_results => @flag} | |
65 | - end | |
66 | - | |
67 | - def result_response | |
68 | - {:project_result => @result.to_hash} | |
69 | - end | |
70 | - | |
71 | 58 | end |
72 | 59 | \ No newline at end of file | ... | ... |
plugins/mezuro/test/unit/kalibro/entities/configuration_test.rb
plugins/mezuro/test/unit/kalibro/entities/metric_configuration_test.rb
1 | 1 | require "test_helper" |
2 | 2 | |
3 | 3 | require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/metric_configuration_fixtures" |
4 | +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/range_fixtures" | |
4 | 5 | |
5 | 6 | class MetricConfigurationTest < ActiveSupport::TestCase |
6 | 7 | |
7 | 8 | def setup |
8 | 9 | @hash = MetricConfigurationFixtures.amloc_configuration_hash |
9 | - @range = MetricConfigurationFixtures.amloc_configuration | |
10 | + @metric_configuration = MetricConfigurationFixtures.amloc_configuration | |
11 | + @metric_configuration_without_ranges = MetricConfigurationFixtures.metric_configuration_without_ranges | |
12 | + @range1 = RangeFixtures.amloc_excellent | |
13 | + @range2 = RangeFixtures.amloc_bad | |
10 | 14 | end |
11 | 15 | |
12 | 16 | should 'create metric configuration from hash' do |
13 | - assert_equal @range, Kalibro::Entities::MetricConfiguration.from_hash(@hash) | |
17 | + assert_equal @metric_configuration, Kalibro::Entities::MetricConfiguration.from_hash(@hash) | |
14 | 18 | end |
15 | 19 | |
16 | 20 | should 'convert metric configuration to hash' do |
17 | - assert_equal @hash, @range.to_hash | |
21 | + assert_equal @hash, @metric_configuration.to_hash | |
18 | 22 | end |
19 | 23 | |
20 | 24 | should 'create appropriate metric type' do |
... | ... | @@ -24,4 +28,16 @@ class MetricConfigurationTest < ActiveSupport::TestCase |
24 | 28 | assert sc.metric.instance_of?(Kalibro::Entities::CompoundMetric) |
25 | 29 | end |
26 | 30 | |
31 | + should 'add a range to an empty range list' do | |
32 | + @metric_configuration_without_ranges.add_range @range1 | |
33 | + assert_equal @metric_configuration_without_ranges.ranges, [@range1] | |
34 | + end | |
35 | + | |
36 | + should 'add a range to an non-empty range list' do | |
37 | + @metric_configuration_without_ranges.ranges = [@range1] | |
38 | + @metric_configuration_without_ranges.add_range @range2 | |
39 | + assert_equal @metric_configuration_without_ranges.ranges, [@range1, @range2] | |
40 | + end | |
41 | + | |
42 | + | |
27 | 43 | end | ... | ... |
plugins/mezuro/test/unit/kalibro/entities/project_result_test.rb
... | ... | @@ -27,12 +27,12 @@ class ProjectResultTest < ActiveSupport::TestCase |
27 | 27 | |
28 | 28 | should 'retrieve module node' do |
29 | 29 | node = @result.get_node("main") |
30 | - assert_equal @hash[:source_tree][:child][1], node.to_hash | |
30 | + assert_equal @hash[:source_tree][:child][2], node.to_hash | |
31 | 31 | end |
32 | 32 | |
33 | 33 | should 'retrive complex module' do |
34 | 34 | node = @result.get_node("org.Window") |
35 | - assert_equal @hash[:source_tree][:child][2][:child].first, node.to_hash | |
35 | + assert_equal @hash[:source_tree][:child][0][:child].first, node.to_hash | |
36 | 36 | end |
37 | 37 | |
38 | 38 | should 'return source tree node when nil is given' do |
... | ... | @@ -44,6 +44,6 @@ class ProjectResultTest < ActiveSupport::TestCase |
44 | 44 | end |
45 | 45 | |
46 | 46 | should 'return correct node when module name is given' do |
47 | - assert_equal @hash[:source_tree][:child][1], @result.node_of("main").to_hash | |
47 | + assert_equal @hash[:source_tree][:child][2], @result.node_of("main").to_hash | |
48 | 48 | end |
49 | 49 | end | ... | ... |
plugins/mezuro/test/unit/mezuro_plugin/configuration_content_test.rb
... | ... | @@ -42,7 +42,7 @@ class ConfigurationContentTest < ActiveSupport::TestCase |
42 | 42 | @content.send :send_configuration_to_service |
43 | 43 | end |
44 | 44 | |
45 | - should 'remove project from service' do | |
45 | + should 'remove configuration from service' do | |
46 | 46 | Kalibro::Client::ConfigurationClient.expects(:remove).with(@content.name) |
47 | 47 | @content.send :remove_configuration_from_service |
48 | 48 | end | ... | ... |
plugins/mezuro/views/cms/mezuro_plugin/_configuration_content.html.erb
1 | 1 | <h1> <%= _(MezuroPlugin::ConfigurationContent.short_description) %> </h1> |
2 | 2 | |
3 | 3 | <% |
4 | - begin | |
5 | - @configuration = @article.title.nil? ? nil : Kalibro::Client::ConfigurationClient.new.configuration(@article.title) | |
6 | - rescue | |
7 | - @configuration = nil | |
8 | - end | |
4 | +begin | |
5 | + @configuration = @article.title.nil? ? nil : Kalibro::Client::ConfigurationClient.new.configuration(@article.title) | |
6 | +rescue | |
7 | + @configuration = nil | |
8 | +end | |
9 | 9 | %> |
10 | 10 | |
11 | 11 | <%= error_messages_for 'kalibro_configuration' %> | ... | ... |
plugins/mezuro/views/content_viewer/_module_result.rhtml
... | ... | @@ -19,7 +19,7 @@ |
19 | 19 | <% range = metric_result.range %> |
20 | 20 | <tr> |
21 | 21 | <td><a href="#" data-show=".<%= metric_result.metric.name.delete("() ")%>"><%= metric_result.metric.name %></a></td> |
22 | - <td><%= MezuroPlugin::Helpers::ContentViewerHelper.format_grade(metric_result.value) %></td> <!--FIXME: Move to helper eventually--> | |
22 | + <td><%= "%.02f" % metric_result.value %></td> | |
23 | 23 | <td><%= metric_result.weight %></td> |
24 | 24 | <% if range.nil? %> |
25 | 25 | <td></td> |
... | ... | @@ -29,7 +29,7 @@ |
29 | 29 | </tr> |
30 | 30 | <tr class="<%= metric_result.metric.name.delete("() ")%>" style="display: none;"> |
31 | 31 | <td colspan="4" align="right"> |
32 | - <%= range.comments.nil? ? 'comment empty' : range.comments %> | |
32 | + <%= range.nil? or range.comments.nil? ? 'comment empty' : range.comments %> | |
33 | 33 | </td> |
34 | 34 | </tr> |
35 | 35 | <% end %> |
... | ... | @@ -39,7 +39,7 @@ |
39 | 39 | <td colspan = "4" align = "right"> |
40 | 40 | <strong> |
41 | 41 | <%= _('Grade:') %> |
42 | - <%= MezuroPlugin::Helpers::ContentViewerHelper.format_grade(module_result.grade) %> <!--FIXME: Move to helper eventually --> | |
42 | + <%= "%.02f" % module_result.grade %> | |
43 | 43 | </strong> |
44 | 44 | </td> |
45 | 45 | </tr> | ... | ... |
plugins/mezuro/views/content_viewer/show_configuration.rhtml
1 | -<% @configuration = @page.configuration %> | |
1 | +<% @configuration_content = @page | |
2 | +@configuration = Kalibro::Client::ConfigurationClient.new.configuration(@configuration_content.name) %> | |
2 | 3 | |
3 | 4 | <table id="project_info"> |
4 | 5 | <tr> |
... | ... | @@ -10,3 +11,27 @@ |
10 | 11 | <td><%= @configuration.description %></td> |
11 | 12 | </tr> |
12 | 13 | </table> |
14 | + | |
15 | +<br/> | |
16 | + | |
17 | +<%= link_to "#{image_tag ('/plugins/mezuro/images/plus.png')}Add Metric", :controller => "mezuro_plugin_profile", | |
18 | +:action => "choose_base_tool", :params => {:configuration_name => @configuration.name} %><br/> | |
19 | + | |
20 | +<table> | |
21 | + <tr class="titles"> | |
22 | + <td><h5>Metric Name</h5></td> | |
23 | + <td><h5>Collector Name</h5></td> | |
24 | + <td><h5>Metric Code</h5></td> | |
25 | + </tr> | |
26 | + <% @configuration.metric_configurations.each do |metric_configuration| %> | |
27 | + <tr class="metric"> | |
28 | + <td><%= metric_configuration.metric.name %></td> | |
29 | + <td><%= metric_configuration.metric.origin %></td> | |
30 | + <td><%= metric_configuration.code %></td> | |
31 | + <td><%= link_to "Edit", :controller => "mezuro_plugin_profile", :action => "edit_metric_configuration", :params => | |
32 | + {:configuration_name => @configuration.name, :metric_name => metric_configuration.metric.name} %></td> | |
33 | + <td><%= link_to "Remove", :controller => "mezuro_plugin_profile", :action => "remove_metric_configuration", :params => | |
34 | + {:configuration_name => @configuration.name, :metric_name => metric_configuration.metric.name} %></td> | |
35 | + </tr> | |
36 | +<% end %> | |
37 | +</table> | ... | ... |
plugins/mezuro/views/mezuro_plugin_profile/_new_range.html.erb
0 → 100644
... | ... | @@ -0,0 +1,55 @@ |
1 | +<% remote_form_for :range, :url => {:action =>"create_range", :controller => "mezuro_plugin_profile"}, :method => :get do |f| %> | |
2 | + <%= hidden_field_tag :configuration_name, configuration_name %> | |
3 | + <%= hidden_field_tag :metric_name, metric_name %> | |
4 | + <table> | |
5 | + <tr> | |
6 | + <td> | |
7 | + <%= f.label :label, "Label:" %> | |
8 | + </td> | |
9 | + <td> | |
10 | + <%= f.text_field :label %> | |
11 | + </td> | |
12 | + </tr> | |
13 | + <tr> | |
14 | + <td> | |
15 | + <%= f.label :beginning, "Beginning:" %> | |
16 | + </td> | |
17 | + <td> | |
18 | + <%= f.text_field :beginning %> | |
19 | + </td> | |
20 | + </tr> | |
21 | + <tr> | |
22 | + <td> | |
23 | + <%= f.label :end, "End:" %> | |
24 | + </td> | |
25 | + <td> | |
26 | + <%= f.text_field :end %> | |
27 | + </td> | |
28 | + </tr> | |
29 | + <tr> | |
30 | + <td> | |
31 | + <%= f.label :grade, "Grade:" %> | |
32 | + </td> | |
33 | + <td> | |
34 | + <%= f.text_field :grade %> | |
35 | + </td> | |
36 | + </tr> | |
37 | + <tr> | |
38 | + <td> | |
39 | + <%= f.label :color, "Color:" %> | |
40 | + </td> | |
41 | + <td> | |
42 | + <%= f.text_field :color %> | |
43 | + </td> | |
44 | + </tr> | |
45 | + <tr> | |
46 | + <td> | |
47 | + <%= f.label :comments, "Comments:" %> | |
48 | + </td> | |
49 | + <td> | |
50 | + <%= f.text_field :comments %> | |
51 | + </td> | |
52 | + </tr> | |
53 | + </table> | |
54 | + <%= f.submit "Save Range" %> | |
55 | +<% end %> | ... | ... |
plugins/mezuro/views/mezuro_plugin_profile/_range.html.erb
0 → 100644
plugins/mezuro/views/mezuro_plugin_profile/choose_base_tool.html.erb
0 → 100644
... | ... | @@ -0,0 +1,13 @@ |
1 | +<h2><%= @configuration_name%> Configuration</h2> | |
2 | + | |
3 | +<h5>Base Tools:</h5> | |
4 | +<table id="project_info"> | |
5 | + <% @tool_names.base_tool_names.each do |collector_name| %> | |
6 | + <tr> | |
7 | + <td> | |
8 | + <%= link_to collector_name, :controller => "mezuro_plugin_profile", :action => "choose_metric", :params => | |
9 | + {:configuration_name => @configuration_name, :collector_name => collector_name} %> | |
10 | + </td> | |
11 | + </tr> | |
12 | + <% end %> | |
13 | +</table> | ... | ... |
plugins/mezuro/views/mezuro_plugin_profile/choose_metric.html.erb
0 → 100644
... | ... | @@ -0,0 +1,18 @@ |
1 | +<h2><%= @configuration_name %> Configuration</h2> | |
2 | + | |
3 | +<table id="project_info"> | |
4 | + <tr> | |
5 | + <h5>Metric Collector: <%= @collector_name %></h5> | |
6 | + </tr> | |
7 | + <tr> | |
8 | + <h5>Choose a metric to add:</h5> | |
9 | + </tr> | |
10 | + <% @collector.supported_metrics.each do |metric| %> | |
11 | + <tr class="metric" title="<%= metric.name %>"> | |
12 | + <td> | |
13 | + <%= link_to metric.name, :controller => "mezuro_plugin_profile", :action => "new_metric_configuration", :params => {:metric_name => metric.name, | |
14 | + :collector_name => @collector_name, :configuration_name => @configuration_name} %> | |
15 | + </td> | |
16 | + </tr> | |
17 | + <% end %> | |
18 | +</table> | ... | ... |
plugins/mezuro/views/mezuro_plugin_profile/create_range.rjs
0 → 100644
plugins/mezuro/views/mezuro_plugin_profile/edit_metric_configuration.html.erb
0 → 100644
... | ... | @@ -0,0 +1,77 @@ |
1 | +<h2><%= @configuration_name %> Configuration</h2> | |
2 | + | |
3 | +<% form_for :metric_configuration, :url => {:action =>"update_metric_configuration", :controller => "mezuro_plugin_profile"}, :method => :get do |f| %> | |
4 | + <%= hidden_field_tag :configuration_name, @configuration_name %> | |
5 | + <%= hidden_field_tag :scope, @metric.scope %> | |
6 | + | |
7 | + <% @metric.language.each do |language| %> | |
8 | + <%= hidden_field_tag "language[]", language %> | |
9 | + <% end %> | |
10 | + | |
11 | + <p> | |
12 | + <%= f.label :origin, "Collector Name:" %> | |
13 | + <%= @metric.origin %> | |
14 | + <%= hidden_field_tag "metric[origin]", @metric.origin %> | |
15 | + </p> | |
16 | + <p> | |
17 | + <%= f.label :metric_name, "Metric Name:" %> | |
18 | + <%= @metric.name %> | |
19 | + <%= hidden_field_tag "metric[name]", @metric.name %> | |
20 | + </p> | |
21 | + <p> | |
22 | + <%= f.label :description, "Description:" %> | |
23 | + <%= @metric.description %> | |
24 | + <%= text_field_tag "metric[description]", @metric.description %> | |
25 | + </p> | |
26 | + <p> | |
27 | + <%= f.label :code, "Code:" %> | |
28 | + <%= @metric_configuration.code %> | |
29 | + <%= f.hidden_field :code, :value => @metric_configuration.code %> | |
30 | + </p> | |
31 | + <p> | |
32 | + <%= f.label :aggregation_form, "Aggregation Form:" %> | |
33 | + <%= f.select :aggregation_form, [["Average","AVERAGE"], ["Median", "MEDIAN"], ["Maximum", "MAXIMUM"], ["Minimum", "MINIMUM"], | |
34 | + ["Count", "COUNT"], ["Standard Deviation", "STANDARD_DEVIATION"]] %> | |
35 | + </p> | |
36 | + <p> | |
37 | + <%= f.label :weight, "Weight:" %> | |
38 | + <%= f.text_field :weight %> | |
39 | + </p> | |
40 | + | |
41 | + <p> | |
42 | + <%= f.submit "Save" %> | |
43 | + </p> | |
44 | +<% end %> | |
45 | + | |
46 | + | |
47 | +<h5> Ranges </h5><br/> | |
48 | + | |
49 | +<table id="ranges"> | |
50 | + <tr> | |
51 | + <td> | |
52 | + Label | |
53 | + </td> | |
54 | + <td> | |
55 | + Beginning | |
56 | + </td> | |
57 | + <td> | |
58 | + End | |
59 | + </td> | |
60 | + <td> | |
61 | + Grade | |
62 | + </td> | |
63 | + <td> | |
64 | + Color | |
65 | + </td> | |
66 | + </tr> | |
67 | + <% if (@metric_configuration.ranges!=nil) | |
68 | + @metric_configuration.ranges.each do |range| %> | |
69 | + <%= render :partial => "range", :locals => {:range => range} %> | |
70 | + <% end | |
71 | + end %> | |
72 | +</table> | |
73 | + | |
74 | +<br/> | |
75 | +<%= link_to_remote "New Range", :url => {:action =>"new_range", :controller => "mezuro_plugin_profile", :configuration_name => @configuration_name, :metric_name => @metric.name} %> | |
76 | +<div id="new_range" style="display:none"></div> | |
77 | + | ... | ... |
plugins/mezuro/views/mezuro_plugin_profile/new_metric_configuration.html.erb
0 → 100644
... | ... | @@ -0,0 +1,44 @@ |
1 | +<h2><%= @configuration_name %> Configuration</h2> | |
2 | + | |
3 | +<% form_for :metric_configuration, :url => {:action =>"create_metric_configuration", :controller => "mezuro_plugin_profile"}, :method => :get do |f| %> | |
4 | + <%= hidden_field_tag :configuration_name, @configuration_name %> | |
5 | + <%= hidden_field_tag :scope, @metric.scope %> | |
6 | + | |
7 | + <% @metric.language.each do |language| %> | |
8 | + <%= hidden_field_tag "language[]", language %> | |
9 | + <% end %> | |
10 | + | |
11 | + <p> | |
12 | + <%= f.label :origin, "Collector Name:" %> | |
13 | + <%= @metric.origin %> | |
14 | + <%= hidden_field_tag "metric[origin]", @metric.origin %> | |
15 | + </p> | |
16 | + <p> | |
17 | + <%= f.label :metric_name, "Metric Name:" %> | |
18 | + <%= @metric.name %> | |
19 | + <%= hidden_field_tag "metric[name]", @metric.name %> | |
20 | + </p> | |
21 | + <p> | |
22 | + <%= f.label :description, "Description:" %> | |
23 | + <%= @metric.description %> | |
24 | + <%= text_field_tag :description %> | |
25 | + </p> | |
26 | + <p> | |
27 | + <%= f.label :code, "Code:" %> | |
28 | + <%= f.text_field :code %> | |
29 | + </p> | |
30 | + <p> | |
31 | + <%= f.label :aggregation, "Aggregation:" %> | |
32 | + <%= f.select :aggregation, [["Average","AVERAGE"], ["Median", "MEDIAN"], ["Maximum", "MAXIMUM"], ["Minimum", "MINIMUM"], | |
33 | + ["Count", "COUNT"], ["Standard Deviation", "STANDARD_DEVIATION"]] %> | |
34 | + </p> | |
35 | + <p> | |
36 | + <%= f.label :weight, "Weight:" %> | |
37 | + <%= f.text_field :weight %> | |
38 | + </p> | |
39 | + | |
40 | + <p> | |
41 | + <%= f.submit "Add" %> | |
42 | + </p> | |
43 | + | |
44 | +<% end %> | ... | ... |
plugins/mezuro/views/mezuro_plugin_profile/new_range.rjs
0 → 100644
plugins/mezuro/views/mezuro_plugin_profile/teste.html.erb
0 → 100644
... | ... | @@ -0,0 +1 @@ |
1 | +<h3><%= @configuration_name %></h3> | ... | ... |