diff --git a/app/controllers/compound_metric_configurations_controller.rb b/app/controllers/compound_metric_configurations_controller.rb
index 857b67d..37d9017 100644
--- a/app/controllers/compound_metric_configurations_controller.rb
+++ b/app/controllers/compound_metric_configurations_controller.rb
@@ -1,14 +1,17 @@
include OwnershipAuthentication
+include MetricConfigurationsConcern
class CompoundMetricConfigurationsController < ApplicationController
before_action :authenticate_user!, except: [:index]
before_action :mezuro_configuration_owner?, only: [:new, :create]
-
+ before_action :metric_configuration_owner?, only: [:edit]
+ before_action :set_metric_configuration, only: [:edit]
+ before_action :set_metric_configurations, only: [:new, :edit]
+
# GET mezuro_configurations/1/compound_metric_configurations/new
def new
@compound_metric_configuration = MetricConfiguration.new
@compound_metric_configuration.configuration_id = params[:mezuro_configuration_id].to_i
- @metric_configurations = MetricConfiguration.metric_configurations_of(params[:mezuro_configuration_id].to_i)
end
def create
@@ -20,6 +23,11 @@ class CompoundMetricConfigurationsController < ApplicationController
end
end
+ def edit
+ @compound_metric_configuration = @metric_configuration
+ @compound_metric_configuration.configuration_id = params[:mezuro_configuration_id].to_i
+ end
+
private
# Never trust parameters from the scary internet, only allow the white list through.
@@ -44,4 +52,8 @@ class CompoundMetricConfigurationsController < ApplicationController
end
end
+ def set_metric_configurations
+ @metric_configurations = MetricConfiguration.metric_configurations_of(params[:mezuro_configuration_id].to_i)
+ end
+
end
diff --git a/app/controllers/concerns/metric_configurations_concern.rb b/app/controllers/concerns/metric_configurations_concern.rb
new file mode 100644
index 0000000..5d703e8
--- /dev/null
+++ b/app/controllers/concerns/metric_configurations_concern.rb
@@ -0,0 +1,7 @@
+module MetricConfigurationsConcern
+ extend ActiveSupport::Concern
+
+ def set_metric_configuration
+ @metric_configuration = MetricConfiguration.find(params[:id].to_i)
+ end
+end
\ No newline at end of file
diff --git a/app/controllers/metric_configurations_controller.rb b/app/controllers/metric_configurations_controller.rb
index 08fe0f9..0ace880 100644
--- a/app/controllers/metric_configurations_controller.rb
+++ b/app/controllers/metric_configurations_controller.rb
@@ -1,4 +1,5 @@
include OwnershipAuthentication
+include MetricConfigurationsConcern
class MetricConfigurationsController < ApplicationController
before_action :authenticate_user!, except: [:index]
@@ -29,6 +30,7 @@ class MetricConfigurationsController < ApplicationController
end
def edit
+ #FIXME: set the configuration id just once!
@mezuro_configuration_id = params[:mezuro_configuration_id]
@metric_configuration.configuration_id = @mezuro_configuration_id
end
@@ -76,8 +78,4 @@ class MetricConfigurationsController < ApplicationController
failed_action(format, 'new')
end
end
-
- def set_metric_configuration
- @metric_configuration = MetricConfiguration.find(params[:id].to_i)
- end
end
diff --git a/app/views/compound_metric_configurations/_created_metric.html.erb b/app/views/compound_metric_configurations/_created_metric.html.erb
new file mode 100644
index 0000000..caea76e
--- /dev/null
+++ b/app/views/compound_metric_configurations/_created_metric.html.erb
@@ -0,0 +1,4 @@
+
+ <%= metric_configuration.metric.name %> |
+ <%= metric_configuration.code %> |
+
\ No newline at end of file
diff --git a/app/views/compound_metric_configurations/_created_metrics.html.erb b/app/views/compound_metric_configurations/_created_metrics.html.erb
new file mode 100644
index 0000000..695ba52
--- /dev/null
+++ b/app/views/compound_metric_configurations/_created_metrics.html.erb
@@ -0,0 +1,14 @@
+
+
Created Metrics
+
+
+
+ Name |
+ Code |
+
+
+ <%= render partial: 'created_metric', collection: metric_configurations, as: 'metric_configuration' %>
+
+
+
+
\ No newline at end of file
diff --git a/app/views/compound_metric_configurations/edit.html.erb b/app/views/compound_metric_configurations/edit.html.erb
new file mode 100644
index 0000000..77053d0
--- /dev/null
+++ b/app/views/compound_metric_configurations/edit.html.erb
@@ -0,0 +1,21 @@
+
+
+<%= render partial: 'created_metrics', locals: {metric_configurations: @metric_configurations} %>
+
+
+
+<%= form_for(@compound_metric_configuration, :url => mezuro_configuration_compound_metric_configuration_update_path(@compound_metric_configuration.configuration_id, @compound_metric_configuration.id)) do |f| %>
+ <%= render partial: 'form', locals: {f: f} %>
+<% end %>
+
+
\ No newline at end of file
diff --git a/app/views/compound_metric_configurations/new.html.erb b/app/views/compound_metric_configurations/new.html.erb
index 5f37546..6bb231f 100644
--- a/app/views/compound_metric_configurations/new.html.erb
+++ b/app/views/compound_metric_configurations/new.html.erb
@@ -2,25 +2,7 @@
New Compound Metric Configuration
-
-
Created Metrics
-
-
-
- Name |
- Code |
-
-
- <% @metric_configurations.each do |metric_configuration| %>
-
- <%= metric_configuration.metric.name %> |
- <%= metric_configuration.code %> |
-
- <% end %>
-
-
-
-
+<%= render partial: 'created_metrics', locals: {metric_configurations: @metric_configurations} %>
diff --git a/config/routes.rb b/config/routes.rb
index 3a57aaa..c041a07 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -16,7 +16,8 @@ Mezuro::Application.routes.draw do
get '/metric_configurations/:metric_name/:base_tool_name/new' => 'metric_configurations#new', as: :new_metric_configuration
put '/metric_configurations/:id' => 'metric_configurations#update', as: :metric_configuration_update
- resources :compound_metric_configurations, except: [:delete]
+ resources :compound_metric_configurations, except: [:destroy, :update]
+ put '/compound_metric_configurations/:id' => 'compound_metric_configurations#update', as: :compound_metric_configuration_update
end
resources :reading_groups do
diff --git a/features/compound_metric_configuration/edition.feature b/features/compound_metric_configuration/edition.feature
new file mode 100644
index 0000000..3a1fd9a
--- /dev/null
+++ b/features/compound_metric_configuration/edition.feature
@@ -0,0 +1,58 @@
+Feature: Compound Metric Configuration edition
+ In order to interact with compound metric configurations
+ As a regular user
+ I should edit the informations of compound metric configurations
+
+ @kalibro_restart
+ Scenario: the configuration is not mine
+ Given I am a regular user
+ And I am signed in
+ And I have a sample configuration
+ And I have a sample reading group
+ And I have a sample metric configuration within the given mezuro configuration
+ And I have a sample compound metric configuration within the given mezuro configuration
+ When I am at the Sample Configuration page
+ Then I should not see "Edit"
+
+ @kalibro_restart
+ Scenario: editing a metric configuration successfully
+ Given I am a regular user
+ And I am signed in
+ And I own a sample configuration
+ And I have a sample reading group
+ And I have a sample metric configuration within the given mezuro configuration
+ And I have a sample compound metric configuration within the given mezuro configuration
+ And I am at the Sample Configuration page
+ When I click the Edit link
+ And I fill the Code field with "Another_Code"
+ And I press the Save button
+ Then I should see "Another_Code"
+
+ @kalibro_restart @wip
+ Scenario: trying to edit with an existing code
+ Given I am a regular user
+ And I am signed in
+ And I own a sample configuration
+ And I have a sample reading group
+ And I have a sample metric configuration within the given mezuro configuration
+ And I have a sample compound metric configuration within the given mezuro configuration
+ And I have another compound metric configuration with code "Another_Code" within the given mezuro configuration
+ When I visit the sample compound metric configuration edit page
+ And I fill the Code field with "Another_Code"
+ And I press the Save button
+ Then I should see "Code There's already"
+
+ @kalibro_restart @wip
+ Scenario: trying to edit with blank fields
+ Given I am a regular user
+ And I am signed in
+ And I own a sample configuration
+ And I have a sample reading group
+ And I have a sample metric configuration within the given mezuro configuration
+ And I have a sample compound metric configuration within the given mezuro configuration
+ When I visit the sample compound metric configuration edit page
+ And I fill the Code field with " "
+ And I fill the Weight field with " "
+ And I press the Save button
+ Then I should see "Code can't be blank"
+ And I should see "Weight can't be blank"
\ No newline at end of file
diff --git a/features/step_definitions/compound_metric_configuration_steps.rb b/features/step_definitions/compound_metric_configuration_steps.rb
index 9dabe52..d90469a 100644
--- a/features/step_definitions/compound_metric_configuration_steps.rb
+++ b/features/step_definitions/compound_metric_configuration_steps.rb
@@ -6,3 +6,14 @@ Given(/^I see the sample metric configuration code$/) do
page.should have_content(@metric_configuration.code)
end
+Given(/^I have a sample compound metric configuration within the given mezuro configuration$/) do
+ @compound_metric_configuration = FactoryGirl.create(:compound_metric_configuration, {id: nil, configuration_id: @mezuro_configuration.id})
+end
+
+Given(/^I have another compound metric configuration with code "(.*?)" within the given mezuro configuration$/) do |code|
+ FactoryGirl.create(:compound_metric_configuration, {id: nil, configuration_id: @mezuro_configuration.id, code: code})
+end
+
+When(/^I visit the sample compound metric configuration edit page$/) do
+ visit edit_mezuro_configuration_compound_metric_configuration_path(@compound_metric_configuration.configuration_id, @compound_metric_configuration.id)
+end
diff --git a/spec/controllers/compound_metric_configurations_controller_spec.rb b/spec/controllers/compound_metric_configurations_controller_spec.rb
index c3602fb..9915699 100644
--- a/spec/controllers/compound_metric_configurations_controller_spec.rb
+++ b/spec/controllers/compound_metric_configurations_controller_spec.rb
@@ -66,4 +66,42 @@ describe CompoundMetricConfigurationsController do
end
end
end
+
+ describe 'edit' do
+ let(:compound_metric_configuration) { FactoryGirl.build(:compound_metric_configuration) }
+
+ context 'with an User logged in' do
+ before do
+ sign_in FactoryGirl.create(:user)
+ end
+
+ context 'when the user owns the compound metric configuration' do
+ before :each do
+ subject.expects(:metric_configuration_owner?).returns(true)
+ MetricConfiguration.expects(:find).at_least_once.with(compound_metric_configuration.id).returns(compound_metric_configuration)
+ get :edit, id: compound_metric_configuration.id, mezuro_configuration_id: compound_metric_configuration.configuration_id.to_s
+ end
+
+ it { should render_template(:edit) }
+ end
+
+ context 'when the user does not own the compound metric configuration' do
+ before do
+ get :edit, id: compound_metric_configuration.id, mezuro_configuration_id: compound_metric_configuration.configuration_id.to_s
+ end
+
+ it { should redirect_to(mezuro_configurations_path) } #FIXME : It should redirect to configuration show page
+ it { should respond_with(:redirect) }
+ it { should set_the_flash[:notice].to("You're not allowed to do this operation") }
+ end
+ end
+
+ context 'with no user logged in' do
+ before :each do
+ get :edit, id: compound_metric_configuration.id, mezuro_configuration_id: compound_metric_configuration.configuration_id.to_s
+ end
+
+ it { should redirect_to new_user_session_path }
+ end
+ end
end
diff --git a/spec/controllers/concerns/metric_configurations_concern_spec.rb b/spec/controllers/concerns/metric_configurations_concern_spec.rb
new file mode 100644
index 0000000..cf3a2a5
--- /dev/null
+++ b/spec/controllers/concerns/metric_configurations_concern_spec.rb
@@ -0,0 +1,17 @@
+require 'spec_helper'
+
+describe MetricConfigurationsConcern, type: :controller do
+ describe 'set_metric_configuration' do
+ let! (:metric_configuration){ FactoryGirl.build(:metric_configuration) }
+ let! (:metric_configurations_controller) { MetricConfigurationsController.new }
+
+ before :each do
+ MetricConfiguration.expects(:find).with(metric_configuration.id).returns(metric_configuration)
+ metric_configurations_controller.params = {id: metric_configuration.id}
+ end
+
+ it 'should assign metric_configuration' do
+ metric_configurations_controller.set_metric_configuration
+ end
+ end
+end
\ No newline at end of file
diff --git a/spec/factories/metric_configurations.rb b/spec/factories/metric_configurations.rb
index e848b70..6bcf0eb 100644
--- a/spec/factories/metric_configurations.rb
+++ b/spec/factories/metric_configurations.rb
@@ -1,7 +1,7 @@
FactoryGirl.define do
factory :metric_configuration, class: MetricConfiguration do
id 1
- code 'code'
+ code 'native'
metric {FactoryGirl.build(:metric)}
base_tool_name "Analizo"
weight 1
@@ -9,4 +9,14 @@ FactoryGirl.define do
reading_group_id 1
configuration_id 1
end
+
+ factory :compound_metric_configuration, class: MetricConfiguration do
+ id 1
+ code 'compound'
+ metric {FactoryGirl.build(:compound_metric, {script: 'native*2;'})}
+ weight 1
+ aggregation_form "AVERAGE"
+ reading_group_id 1
+ configuration_id 1
+ end
end
\ No newline at end of file
diff --git a/spec/factories/metrics.rb b/spec/factories/metrics.rb
index 5114bc8..804300a 100644
--- a/spec/factories/metrics.rb
+++ b/spec/factories/metrics.rb
@@ -16,4 +16,13 @@ FactoryGirl.define do
script ""
language ["C", "CPP", "JAVA"]
end
+
+ factory :compound_metric, class: KalibroGem::Entities::Metric do
+ name "Compound"
+ compound true
+ scope "CLASS"
+ description nil
+ script ""
+ language ["C", "CPP", "JAVA"]
+ end
end
\ No newline at end of file
diff --git a/spec/routing/compound_metric_configurations_routing_spec.rb b/spec/routing/compound_metric_configurations_routing_spec.rb
index 77074ce..c66f56d 100644
--- a/spec/routing/compound_metric_configurations_routing_spec.rb
+++ b/spec/routing/compound_metric_configurations_routing_spec.rb
@@ -14,5 +14,7 @@ describe CompoundMetricConfigurationsController do
to(controller: :compound_metric_configurations, action: :edit, mezuro_configuration_id: "1", id: "1") }
it { should route(:put, '/mezuro_configurations/1/compound_metric_configurations/1').
to(controller: :compound_metric_configurations, action: :update, mezuro_configuration_id: "1", id: "1") }
+ it { should_not route(:delete, '/mezuro_configurations/1/compound_metric_configurations/1').
+ to(controller: :compound_metric_configurations, action: :destroy, mezuro_configuration_id: "1", id: "1") }
end
end
--
libgit2 0.21.2