diff --git a/app/controllers/hotspot_metric_configurations_controller.rb b/app/controllers/hotspot_metric_configurations_controller.rb index c83e27c..121439a 100644 --- a/app/controllers/hotspot_metric_configurations_controller.rb +++ b/app/controllers/hotspot_metric_configurations_controller.rb @@ -1,3 +1,41 @@ class HotspotMetricConfigurationsController < BaseMetricConfigurationsController - def create; end -end \ No newline at end of file + def create + super + @metric_configuration.metric = KalibroClient::Entities::Processor::MetricCollectorDetails.find_by_name(params[:metric_collector_name]).find_metric_by_code params[:metric_code] + respond_to do |format| + if @metric_configuration.save + format.html do + redirect_to kalibro_configuration_path(@metric_configuration.kalibro_configuration_id), + notice: t('successfully_created', record: t(@metric_configuration.class)) + end + else + failed_action(format) + end + end + clear_caches + end + + protected + + def update_metric_configuration(new_metric_configuration) + @kalibro_configuration_id = params[:kalibro_configuration_id] + @metric_configuration = new_metric_configuration + end + + def metric_configuration_params + { kalibro_configuration_id: params[:kalibro_configuration_id] } + end + + private + + def failed_action(format) + @kalibro_configuration_id = params[:kalibro_configuration_id] + format.html { redirect_to kalibro_configuration_choose_metric_path } + format.json { render json: @metric_configuration.kalibro_errors, status: :unprocessable_entity } + end + + def clear_caches + Rails.cache.delete("#{params[:kalibro_configuration_id]}_tree_metric_configurations") + Rails.cache.delete("#{params[:kalibro_configuration_id]}_hotspot_metric_configurations") + end +end diff --git a/app/views/metric_configurations/choose_metric.html.erb b/app/views/metric_configurations/choose_metric.html.erb index f20e4c9..0322be1 100644 --- a/app/views/metric_configurations/choose_metric.html.erb +++ b/app/views/metric_configurations/choose_metric.html.erb @@ -12,7 +12,10 @@

<%= metric_collector_name %>

<% supported_metrics_of(metric_collector_name).each do |code, metric| %> - <%= link_to metric.name, '#', onclick: "MetricCollector.choose_metric(\"#{code}\", \"#{metric_collector_name}\");", remote: true %>
+ <%= metric.type %> + <%= link_to metric.name, "#", + onclick: "MetricCollector.choose_metric(\"#{code}\", \"#{metric_collector_name}\", \"#{choose_metric_path(metric, @kalibro_configuration.id)}\");", + remote: true %>
<% end %>
<% end %> diff --git a/features/hotspot_metric_configuration/create.feature b/features/hotspot_metric_configuration/create.feature index 6c4e005..4cbcc45 100644 --- a/features/hotspot_metric_configuration/create.feature +++ b/features/hotspot_metric_configuration/create.feature @@ -11,8 +11,6 @@ Feature: Hotspot Metric Configuration Creation And I am at the Sample Configuration page And I click the Add Metric link And I click the "MetricFu" h3 - And I click the Duplicate Code link - When I fill the Weight field with "2" - And I press the Save button + When I click the Duplicate Code link Then I should see "Hotspot Metrics" And I should see "Duplicate Code" diff --git a/spec/controllers/hotspot_metric_configuration_controller_spec.rb b/spec/controllers/hotspot_metric_configuration_controller_spec.rb new file mode 100644 index 0000000..493fb55 --- /dev/null +++ b/spec/controllers/hotspot_metric_configuration_controller_spec.rb @@ -0,0 +1,44 @@ +require 'rails_helper' + +describe HotspotMetricConfigurationsController, :type => :controller do + let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration, :with_id) } + describe 'create' do + let!(:metric_configuration) { FactoryGirl.build(:hotspot_metric_configuration) } + let(:metric_configuration_params) { metric_configuration.to_hash } + let(:metric_collector) { FactoryGirl.build(:metric_collector) } + + before do + sign_in FactoryGirl.create(:user) + end + + context 'when the current user owns the metric configuration' do + before :each do + subject.expects(:kalibro_configuration_owner?).returns true + end + + context 'with valid fields' do + before :each do + MetricConfiguration.any_instance.expects(:save).returns(true) + KalibroClient::Entities::Processor::MetricCollectorDetails.expects(:find_by_name).with(metric_collector.name).returns(metric_collector) + metric_collector.expects(:find_metric_by_code).with(metric_configuration.metric.code).returns(metric_configuration.metric) + + post :create, kalibro_configuration_id: kalibro_configuration.id, metric_configuration: metric_configuration_params, metric_collector_name: metric_collector.name, metric_code: metric_configuration.metric.code + end + + it { is_expected.to respond_with(:redirect) } + end + + context 'with invalid fields' do + before :each do + MetricConfiguration.any_instance.expects(:save).returns(false) + KalibroClient::Entities::Processor::MetricCollectorDetails.expects(:find_by_name).with(metric_collector.name).returns(metric_collector) + metric_collector.expects(:find_metric_by_code).with(metric_configuration.metric.code).returns(metric_configuration.metric) + + post :create, kalibro_configuration_id: kalibro_configuration.id, metric_configuration: metric_configuration_params, metric_collector_name: metric_collector.name, metric_code: metric_configuration.metric.code + end + + it { is_expected.to respond_with(:redirect) } + end + end + end +end -- libgit2 0.21.2