From 52d84ce721d4cb6122a19de03d5d1691c7a6d985 Mon Sep 17 00:00:00 2001 From: Fellipe Souto Sampaio Date: Thu, 6 Feb 2014 16:51:52 -0200 Subject: [PATCH] Edit feature for metric configuration --- app/controllers/metric_configurations_controller.rb | 9 +++++++-- app/models/metric_configuration.rb | 4 ++++ app/views/metric_configurations/edit.html.erb | 7 +++++++ spec/controllers/metric_configurations_controller_spec.rb | 42 +++++++++++++++++++++++++++++++++++++++++- 4 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 app/views/metric_configurations/edit.html.erb diff --git a/app/controllers/metric_configurations_controller.rb b/app/controllers/metric_configurations_controller.rb index fe928ba..d1647b3 100644 --- a/app/controllers/metric_configurations_controller.rb +++ b/app/controllers/metric_configurations_controller.rb @@ -2,8 +2,8 @@ include OwnershipAuthentication class MetricConfigurationsController < ApplicationController before_action :authenticate_user!, except: [:index] - before_action :set_metric_configuration, only: [:destroy] - before_action :metric_configuration_owner?, only: [:destroy] + before_action :set_metric_configuration, only: [:edit, :destroy] + before_action :metric_configuration_owner?, only: [:edit, :destroy] before_action :mezuro_configuration_owner?, only: [:new, :create, :choose_metric] def choose_metric @@ -28,6 +28,11 @@ class MetricConfigurationsController < ApplicationController end end + def edit + @mezuro_configuration_id = params[:mezuro_configuration_id] + @metric_configuration.configuration_id = @mezuro_configuration_id + end + def destroy @metric_configuration.destroy respond_to do |format| diff --git a/app/models/metric_configuration.rb b/app/models/metric_configuration.rb index 0652d29..a20f55e 100644 --- a/app/models/metric_configuration.rb +++ b/app/models/metric_configuration.rb @@ -9,4 +9,8 @@ class MetricConfiguration < KalibroGem::Entities::MetricConfiguration validates :weight, presence: true validates :aggregation_form, presence: true + def persisted? + self.id != nil #FIXME: create method exists in KalibroGem + end + end diff --git a/app/views/metric_configurations/edit.html.erb b/app/views/metric_configurations/edit.html.erb new file mode 100644 index 0000000..4d7c200 --- /dev/null +++ b/app/views/metric_configurations/edit.html.erb @@ -0,0 +1,7 @@ + + +<%= form_for(@metric_configuration, :url => mezuro_configuration_metric_configuration_update_url(@mezuro_configuration_id, @metric_configuration.id), method: :put) do |f| %> + <%= render partial: 'form', locals: {f: f} %> +<% end %> diff --git a/spec/controllers/metric_configurations_controller_spec.rb b/spec/controllers/metric_configurations_controller_spec.rb index 52bb072..2ec346d 100644 --- a/spec/controllers/metric_configurations_controller_spec.rb +++ b/spec/controllers/metric_configurations_controller_spec.rb @@ -85,6 +85,46 @@ describe MetricConfigurationsController do end end + describe 'edit' do + let(:metric_configuration) { FactoryGirl.build(:metric_configuration) } + + context 'with an User logged in' do + before do + sign_in FactoryGirl.create(:user) + end + + context 'when the user owns the metric configuration' do + before :each do + subject.expects(:metric_configuration_owner?).returns true + MetricConfiguration.expects(:find).at_least_once.with(metric_configuration.id).returns(metric_configuration) + get :edit, id: metric_configuration.id, mezuro_configuration_id: metric_configuration.configuration_id.to_s + end + + it { should render_template(:edit) } + end + + context 'when the user does not own the metric configuration' do + before do + MetricConfiguration.expects(:find).at_least_once.with(metric_configuration.id).returns(metric_configuration) + get :edit, id: metric_configuration.id, mezuro_configuration_id: 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: metric_configuration.id, mezuro_configuration_id: metric_configuration.configuration_id.to_s + end + + it { should redirect_to new_user_session_path } + end + end + + describe 'destroy' do let(:metric_configuration) { FactoryGirl.build(:metric_configuration) } @@ -110,7 +150,7 @@ describe MetricConfigurationsController do before :each do MetricConfiguration.expects(:find).at_least_once.with(metric_configuration.id).returns(metric_configuration) - delete :destroy, id: metric_configuration.id, mezuro_configuration_id: mezuro_configuration.id.to_s + delete :destroy, id: metric_configuration.id, mezuro_configuration_id: metric_configuration.configuration_id.to_s end it { should redirect_to(mezuro_configurations_path) } #FIXME : It should redirect to configuration show page -- libgit2 0.21.2