diff --git a/plugins/mezuro/controllers/mezuro_plugin_myprofile_controller.rb b/plugins/mezuro/controllers/mezuro_plugin_myprofile_controller.rb new file mode 100644 index 0000000..1b470c8 --- /dev/null +++ b/plugins/mezuro/controllers/mezuro_plugin_myprofile_controller.rb @@ -0,0 +1,141 @@ +class MezuroPluginMyprofileController < ProfileController + + append_view_path File.join(File.dirname(__FILE__) + '/../views') + + + def choose_base_tool + @configuration_name = params[:configuration_name] + @tool_names = Kalibro::Client::BaseToolClient.new + end + + def choose_metric + @configuration_name = params[:configuration_name] + @collector_name = params[:collector_name] + @collector = Kalibro::Client::BaseToolClient.new.base_tool(@collector_name) + end + def new_metric_configuration + metric_name = params[:metric_name] + collector_name = params[:collector_name] + collector = Kalibro::Client::BaseToolClient.new.base_tool(collector_name) + @metric = collector.supported_metrics.find {|metric| metric.name == metric_name} + @configuration_name = params[:configuration_name] + end + def edit_metric_configuration + metric_name = params[:metric_name] + @configuration_name = params[:configuration_name] + @metric_configuration = Kalibro::Client::MetricConfigurationClient.new.metric_configuration(@configuration_name, metric_name) + @metric = @metric_configuration.metric + end + def create_metric_configuration + @configuration_name = params[:configuration_name] + metric_configuration = new_metric_configuration_instance + Kalibro::Client::MetricConfigurationClient.new.save(metric_configuration, @configuration_name) + redirect_to "/#{profile.identifier}/#{@configuration_name.downcase.gsub(/\s/, '-')}" + end + + def update_metric_configuration + @configuration_name = params[:configuration_name] + metric_name = params[:metric][:name] + metric_configuration = Kalibro::Client::MetricConfigurationClient.new.metric_configuration(@configuration_name, metric_name) + assign_metric_configuration_instance (metric_configuration) + Kalibro::Client::MetricConfigurationClient.new.save(metric_configuration, @configuration_name) + redirect_to "/#{profile.identifier}/#{@configuration_name.downcase.gsub(/\s/, '-')}" + end + + def new_range + @metric_name = params[:metric_name] + @configuration_name = params[:configuration_name] + end + + def edit_range + @metric_name = params[:metric_name] + @configuration_name = params[:configuration_name] + @beginning_id = params[:beginning_id] + + metric_configuration_client = Kalibro::Client::MetricConfigurationClient.new + metric_configuration = metric_configuration_client.metric_configuration(@configuration_name, @metric_name) + @range = metric_configuration.ranges.find{ |range| range.beginning == @beginning_id.to_f } + end + + def create_range + @range = new_range_instance + configuration_name = params[:configuration_name] + metric_name = params[:metric_name] + beginning_id = params[:beginning_id] + metric_configuration_client = Kalibro::Client::MetricConfigurationClient.new + metric_configuration = metric_configuration_client.metric_configuration(configuration_name, metric_name) + metric_configuration.add_range(@range) + metric_configuration_client.save(metric_configuration, configuration_name) + end + + def update_range + metric_name = params[:metric_name] + configuration_name = params[:configuration_name] + beginning_id = params[:beginning_id] + metric_configuration_client = Kalibro::Client::MetricConfigurationClient.new + metric_configuration = metric_configuration_client.metric_configuration(configuration_name, metric_name) + index = metric_configuration.ranges.index{ |range| range.beginning == beginning_id.to_f } + metric_configuration.ranges[index] = new_range_instance + Kalibro::Client::MetricConfigurationClient.new.save(metric_configuration, configuration_name) + end + + def remove_range + configuration_name = params[:configuration_name] + metric_name = params[:metric_name] + beginning_id = params[:range_beginning] + metric_configuration_client = Kalibro::Client::MetricConfigurationClient.new + metric_configuration = metric_configuration_client.metric_configuration(configuration_name, metric_name) + metric_configuration.ranges.delete_if { |range| range.beginning == beginning_id.to_f }.inspect + Kalibro::Client::MetricConfigurationClient.new.save(metric_configuration, configuration_name) + formatted_configuration_name = configuration_name.gsub(/\s/, '+') + formatted_metric_name = metric_name.gsub(/\s/, '+') + redirect_to "/myprofile/#{profile.identifier}/plugins/mezuro/edit_metric_configuration?configuration_name=#{formatted_configuration_name}&metric_name=#{formatted_metric_name}" + end + + def remove_metric_configuration + configuration_name = params[:configuration_name] + metric_name = params[:metric_name] + Kalibro::Client::MetricConfigurationClient.new.remove(configuration_name, metric_name) + redirect_to "/#{profile.identifier}/#{configuration_name.downcase.gsub(/\s/, '-')}" + end + + def module_metrics_history + metric_name = params[:metric_name] + content = profile.articles.find(params[:id]) + module_history = content.result_history(params[:module_name]) + date_history = module_history.collect { |x| x.date } + metric_history = module_history.collect { |x| (x.metric_results.select { |y| y.metric.name.delete("() ") == metric_name })[0] } + render :partial => 'content_viewer/metric_history', :locals => {:metric_history => metric_history, :date_history => date_history } + end + private + + def new_metric_configuration_instance + metric_configuration = Kalibro::Entities::MetricConfiguration.new + metric_configuration.metric = Kalibro::Entities::NativeMetric.new + assign_metric_configuration_instance (metric_configuration) + end + + def assign_metric_configuration_instance (metric_configuration) + metric_configuration.metric.name = params[:metric][:name] + metric_configuration.metric.description = params[:description] + metric_configuration.metric.origin = params[:metric][:origin] + metric_configuration.metric.scope = params[:scope] + metric_configuration.metric.language = params[:language] + metric_configuration.code = params[:metric_configuration][:code] + metric_configuration.weight = params[:metric_configuration][:weight] + metric_configuration.aggregation_form = params[:metric_configuration][:aggregation_form] + metric_configuration + end + + def new_range_instance + range = Kalibro::Entities::Range.new + range.beginning = params[:range][:beginning] + range.end = params[:range][:end] + range.label = params[:range][:label] + range.grade = params[:range][:grade] + range.color = params[:range][:color] + range.comments = params[:range][:comments] + range + end + +end diff --git a/plugins/mezuro/test/functional/mezuro_plugin_myprofile_controller_test.rb b/plugins/mezuro/test/functional/mezuro_plugin_myprofile_controller_test.rb new file mode 100644 index 0000000..8f1d110 --- /dev/null +++ b/plugins/mezuro/test/functional/mezuro_plugin_myprofile_controller_test.rb @@ -0,0 +1,108 @@ +require 'test_helper' + +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/error_fixtures" +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/base_tool_fixtures" +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/native_metric_fixtures" +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/metric_configuration_fixtures" + +class MezuroPluginMyprofileControllerTest < ActionController::TestCase + + def setup + @controller = MezuroPluginMyprofileController.new + @request = ActionController::TestRequest.new + @response = ActionController::TestResponse.new + @profile = fast_create(Community) + + @collector = BaseToolFixtures.analizo + @base_tool_client = Kalibro::Client::BaseToolClient.new + @metric = NativeMetricFixtures.amloc + @metric_configuration_client = Kalibro::Client::MetricConfigurationClient.new + @metric_configuration = MetricConfigurationFixtures.amloc_configuration + end + + should 'assign configuration name in choose_base_tool' do + get :choose_base_tool, :profile => @profile.identifier, :configuration_name => "test name" + assert_equal assigns(:configuration_name), "test name" + end + + should 'create base tool client' do + get :choose_base_tool, :profile => @profile.identifier, :configuration_name => "test name" + assert assigns(:tool_names).instance_of?(Kalibro::Client::BaseToolClient) + end + + should 'assign configuration and collector name in choose_metric' do + Kalibro::Client::BaseToolClient.expects(:new).returns(@base_tool_client) + @base_tool_client.expects(:base_tool).with(@collector.name).returns(@collector) + get :choose_metric, :profile => @profile.identifier, :configuration_name => "test name", :collector_name => "Analizo" + assert_equal assigns(:configuration_name), "test name" + assert_equal assigns(:collector_name), "Analizo" + end + + should 'get collector by name' do + Kalibro::Client::BaseToolClient.expects(:new).returns(@base_tool_client) + @base_tool_client.expects(:base_tool).with(@collector.name).returns(@collector) + get :choose_metric, :profile => @profile.identifier, :configuration_name => "test name", :collector_name => "Analizo" + assert_equal assigns(:collector), @collector + end + + should 'get choosed native metric and configuration name' do + Kalibro::Client::BaseToolClient.expects(:new).returns(@base_tool_client) + @base_tool_client.expects(:base_tool).with(@collector.name).returns(@collector) + get :new_metric_configuration, :profile => @profile.identifier, :configuration_name => "test name", :collector_name => "Analizo", :metric_name => @metric.name + assert_equal assigns(:configuration_name), "test name" + assert_equal assigns(:metric), @metric + end + + should 'assign configuration name and get metric_configuration' do + Kalibro::Client::MetricConfigurationClient.expects(:new).returns(@metric_configuration_client) + @metric_configuration_client.expects(:metric_configuration).with("test name", @metric.name).returns(@metric_configuration) + get :edit_metric_configuration, :profile => @profile.identifier, :configuration_name => "test name", :metric_name => @metric.name + assert_equal assigns(:configuration_name), "test name" + assert_equal assigns(:metric_configuration), @metric_configuration + assert_equal assigns(:metric), @metric_configuration.metric + end + + should 'test metric creation' do + Kalibro::Client::MetricConfigurationClient.expects(:new).returns(@metric_configuration_client) + @metric_configuration_client.expects(:save) + get :create_metric_configuration, :profile => @profile.identifier, :configuration_name => "test name", :description => @metric.description, + :scope => @metric.scope, :language => @metric.language, :metric => { :name => @metric.name, :origin => @metric.origin}, + :metric_configuration => { :code => @metric_configuration.code, :weight => @metric_configuration.code, :aggregation => @metric_configuration.aggregation_form } + assert_equal assigns(:configuration_name), "test name" + assert_response 302 + end + + should 'test metric edition' do + Kalibro::Client::MetricConfigurationClient.expects(:new).returns(@metric_configuration_client) + @metric_configuration_client.expects(:save) + get :create_metric_configuration, :profile => @profile.identifier, :configuration_name => "test name", :description => @metric.description, + :scope => @metric.scope, :language => @metric.language, :metric => { :name => @metric.name, :origin => @metric.origin}, + :metric_configuration => { :code => @metric_configuration.code, :weight => @metric_configuration.code, :aggregation => @metric_configuration.aggregation_form } + assert_equal assigns(:configuration_name), "test name" + assert_response 302 + end + + should 'assign configuration name and metric name to new range' do + get :new_range, :profile => @profile.identifier, :configuration_name => "test name", :metric_name => @metric.name + assert_equal assigns(:configuration_name), "test name" + assert_equal assigns(:metric_name), @metric.name + end + + should 'create instance range' do + Kalibro::Client::MetricConfigurationClient.expects(:new).returns(@metric_configuration_client) + @metric_configuration_client.expects(:metric_configuration).with("test name", @metric.name).returns(@metric_configuration) + @metric_configuration_client.expects(:save) + range = @metric_configuration.ranges[0] + get :create_range, :profile => @profile.identifier, :range => { :beginning => range.beginning, :end => range.end, :label => range.label, + :grade => range.grade, :color => range.color, :comments => range.comments }, :configuration_name => "test name", :metric_name => @metric.name + assert assigns(:range).instance_of?(Kalibro::Entities::Range) + end + + should 'redirect from remove metric configuration' do + Kalibro::Client::MetricConfigurationClient.expects(:new).returns(@metric_configuration_client) + @metric_configuration_client.expects(:remove) + get :remove_metric_configuration, :profile => @profile.identifier, :configuration_name => "test name", :metric_name => @metric.name + assert_response 302 + end + +end diff --git a/plugins/mezuro/views/mezuro_plugin_myprofile/_edit_range.html.erb b/plugins/mezuro/views/mezuro_plugin_myprofile/_edit_range.html.erb new file mode 100644 index 0000000..494ed66 --- /dev/null +++ b/plugins/mezuro/views/mezuro_plugin_myprofile/_edit_range.html.erb @@ -0,0 +1,4 @@ +<% remote_form_for :range, :url => {:action =>"update_range", :controller => "mezuro_plugin_myprofile"}, :method => :get do |f| %> + <%= hidden_field_tag :beginning_id, beginning_id %> + <%= render :partial => "range_form", :locals => {:f => f, :metric_name => metric_name, :configuration_name => configuration_name, :beginning_id => beginning_id, :range => range } %> +<% end %> diff --git a/plugins/mezuro/views/mezuro_plugin_myprofile/_new_range.html.erb b/plugins/mezuro/views/mezuro_plugin_myprofile/_new_range.html.erb new file mode 100644 index 0000000..471aaea --- /dev/null +++ b/plugins/mezuro/views/mezuro_plugin_myprofile/_new_range.html.erb @@ -0,0 +1,3 @@ +<% remote_form_for :range, :url => {:action =>"create_range", :controller => "mezuro_plugin_myprofile"}, :method => :get do |f| %> + <%= render :partial => "range_form", :locals => {:f => f, :metric_name => metric_name, :configuration_name => configuration_name } %> +<% end %> diff --git a/plugins/mezuro/views/mezuro_plugin_myprofile/_range.html.erb b/plugins/mezuro/views/mezuro_plugin_myprofile/_range.html.erb new file mode 100644 index 0000000..d99fcb4 --- /dev/null +++ b/plugins/mezuro/views/mezuro_plugin_myprofile/_range.html.erb @@ -0,0 +1,17 @@ +
+ <%= f.label :label, "Label:" %> + | ++ <%= f.text_field :label %> + | +
+ <%= f.label :beginning, "Beginning:" %> + | ++ <%= f.text_field :beginning %> + | +
+ <%= f.label :end, "End:" %> + | ++ <%= f.text_field :end %> + | +
+ <%= f.label :grade, "Grade:" %> + | ++ <%= f.text_field :grade %> + | +
+ <%= f.label :color, "Color:" %> + | ++ <%= f.text_field :color %> + | +
+ <%= f.label :comments, "Comments:" %> + | ++ <%= f.text_field :comments %> + | +
+ <%= link_to collector_name, :controller => "mezuro_plugin_myprofile", :action => "choose_metric", :params => + {:configuration_name => @configuration_name, :collector_name => collector_name} %> + | +
+ <%= link_to metric.name, :controller => "mezuro_plugin_myprofile", :action => "new_metric_configuration", :params => {:metric_name => metric.name, + :collector_name => @collector_name, :configuration_name => @configuration_name} %> + | +
+ <%= f.label :origin, "Collector Name:" %> + <%= @metric.origin %> + <%= hidden_field_tag "metric[origin]", @metric.origin %> +
++ <%= f.label :metric_name, "Metric Name:" %> + <%= @metric.name %> + <%= hidden_field_tag "metric[name]", @metric.name %> +
++ <%= f.label :description, "Description:" %> + <%= @metric.description %> + <%= text_field_tag "metric[description]", @metric.description %> +
++ <%= f.label :code, "Code:" %> + <%= @metric_configuration.code %> + <%= f.hidden_field :code, :value => @metric_configuration.code %> +
++ <%= f.label :aggregation_form, "Aggregation Form:" %> + <%= f.select :aggregation_form, [["Average","AVERAGE"], ["Median", "MEDIAN"], ["Maximum", "MAXIMUM"], ["Minimum", "MINIMUM"], + ["Count", "COUNT"], ["Standard Deviation", "STANDARD_DEVIATION"]] %> +
++ <%= f.label :weight, "Weight:" %> + <%= f.text_field :weight %> +
+ ++ <%= f.submit "Save" %> +
+<% end %> + + ++ Label + | ++ Beginning + | ++ End + | ++ Grade + | ++ Color + | +
+ <%= f.label :origin, "Collector Name:" %> + <%= @metric.origin %> + <%= hidden_field_tag "metric[origin]", @metric.origin %> +
++ <%= f.label :metric_name, "Metric Name:" %> + <%= @metric.name %> + <%= hidden_field_tag "metric[name]", @metric.name %> +
++ <%= f.label :description, "Description:" %> + <%= @metric.description %> + <%= text_field_tag :description %> +
++ <%= f.label :code, "Code:" %> + <%= f.text_field :code %> +
++ <%= f.label :aggregation_form, "Aggregation:" %> + <%= f.select :aggregation_form, [["Average","AVERAGE"], ["Median", "MEDIAN"], ["Maximum", "MAXIMUM"], ["Minimum", "MINIMUM"], + ["Count", "COUNT"], ["Standard Deviation", "STANDARD_DEVIATION"]] %> +
++ <%= f.label :weight, "Weight:" %> + <%= f.text_field :weight %> +
+ ++ <%= f.submit "Add" %> +
+ +<% end %> diff --git a/plugins/mezuro/views/mezuro_plugin_myprofile/new_range.rjs b/plugins/mezuro/views/mezuro_plugin_myprofile/new_range.rjs new file mode 100644 index 0000000..65c2f64 --- /dev/null +++ b/plugins/mezuro/views/mezuro_plugin_myprofile/new_range.rjs @@ -0,0 +1,2 @@ +page.replace_html 'range_form', :partial => "new_range", :locals => {:metric_name => @metric_name, :configuration_name => @configuration_name, :beginning_id => "bolinha" } +page.visual_effect :slide_down, "range_form" diff --git a/plugins/mezuro/views/mezuro_plugin_myprofile/update_range.rjs b/plugins/mezuro/views/mezuro_plugin_myprofile/update_range.rjs new file mode 100644 index 0000000..5b95d3b --- /dev/null +++ b/plugins/mezuro/views/mezuro_plugin_myprofile/update_range.rjs @@ -0,0 +1 @@ +page.reload() -- libgit2 0.21.2