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