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

+
+ + + + + + + <%= render partial: 'created_metric', collection: metric_configurations, as: 'metric_configuration' %> + +
NameCode
+
+
\ 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

-
- - - - - - - <% @metric_configurations.each do |metric_configuration| %> - - - - - <% end %> - -
NameCode
<%= metric_configuration.metric.name %><%= metric_configuration.code %>
-
-
+<%= 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