Commit 073a83daea5cb9ccd0d2ebbaf28a4000389884f7
Committed by
Rafael Manzo
1 parent
f84f8d0b
Exists in
colab
and in
4 other branches
Reading update
Missing show Signed-off by: Rafael Reggiani Manzo <rr.manzo@gmail.com>
Showing
6 changed files
with
97 additions
and
20 deletions
Show diff stats
app/controllers/readings_controller.rb
| @@ -23,6 +23,20 @@ class ReadingsController < ApplicationController | @@ -23,6 +23,20 @@ class ReadingsController < ApplicationController | ||
| 23 | @reading_group_id = params[:reading_group_id] | 23 | @reading_group_id = params[:reading_group_id] |
| 24 | end | 24 | end |
| 25 | 25 | ||
| 26 | + # PUT /reading_groups/1/readings/1 | ||
| 27 | + # PUT /reading_groups/1/readings/1.json | ||
| 28 | + def update | ||
| 29 | + @reading.group_id = params[:reading_group_id].to_i | ||
| 30 | + respond_to do |format| | ||
| 31 | + if @reading.update(reading_params) | ||
| 32 | + format.html { redirect_to(reading_group_reading_path(params[:reading_group_id].to_i, @reading.id), notice: 'Reading was successfully updated.') } | ||
| 33 | + format.json { head :no_content } | ||
| 34 | + else | ||
| 35 | + failed_action(format, 'edit') | ||
| 36 | + end | ||
| 37 | + end | ||
| 38 | + end | ||
| 39 | + | ||
| 26 | private | 40 | private |
| 27 | 41 | ||
| 28 | # Never trust parameters from the scary internet, only allow the white list through. | 42 | # Never trust parameters from the scary internet, only allow the white list through. |
config/routes.rb
| @@ -13,7 +13,7 @@ Mezuro::Application.routes.draw do | @@ -13,7 +13,7 @@ Mezuro::Application.routes.draw do | ||
| 13 | end | 13 | end |
| 14 | 14 | ||
| 15 | resources :reading_groups do | 15 | resources :reading_groups do |
| 16 | - resources :readings, except: [:index, :show, :update] | 16 | + resources :readings, except: [:index, :update] |
| 17 | put '/readings/:id' => 'readings#update', as: :reading_update | 17 | put '/readings/:id' => 'readings#update', as: :reading_update |
| 18 | end | 18 | end |
| 19 | 19 |
features/reading/edit.feature
| @@ -3,7 +3,7 @@ Feature: Reading Edit | @@ -3,7 +3,7 @@ Feature: Reading Edit | ||
| 3 | As a regular user | 3 | As a regular user |
| 4 | I should be able to edit my readings | 4 | I should be able to edit my readings |
| 5 | 5 | ||
| 6 | -@kalibro_restart @wip | 6 | +@kalibro_restart @wip |
| 7 | Scenario: editing a reading successfully | 7 | Scenario: editing a reading successfully |
| 8 | Given I am a regular user | 8 | Given I am a regular user |
| 9 | And I am signed in | 9 | And I am signed in |
| @@ -19,29 +19,29 @@ Feature: Reading Edit | @@ -19,29 +19,29 @@ Feature: Reading Edit | ||
| 19 | And I should see "10.5" | 19 | And I should see "10.5" |
| 20 | And I should see "33dd33" | 20 | And I should see "33dd33" |
| 21 | 21 | ||
| 22 | - @kalibro_restart @wip | 22 | + @kalibro_restart |
| 23 | Scenario: editing a reading with blank fields | 23 | Scenario: editing a reading with blank fields |
| 24 | Given I am a regular user | 24 | Given I am a regular user |
| 25 | And I am signed in | 25 | And I am signed in |
| 26 | - And I own a sample project | ||
| 27 | - And I have a sample configuration with native metrics | ||
| 28 | - And I have a sample repository within the sample project named "QtCalculator" | ||
| 29 | - And I am at repository edit page | ||
| 30 | - When I fill the Name field with " " | ||
| 31 | - And I fill the Address field with " " | 26 | + And I own a sample reading group |
| 27 | + And I have a sample reading within the sample reading group | ||
| 28 | + And I am at the Edit Reading page | ||
| 29 | + When I fill the Label field with " " | ||
| 30 | + And I fill the Grade field with " " | ||
| 31 | + And I fill the Color field with " " | ||
| 32 | And I press the Save button | 32 | And I press the Save button |
| 33 | - Then I should see "Name can't be blank" | ||
| 34 | - And I should see "Address can't be blank" | 33 | + Then I should see "Label can't be blank" |
| 34 | + And I should see "Grade can't be blank" | ||
| 35 | + And I should see "Color can't be blank" | ||
| 35 | 36 | ||
| 36 | - @kalibro_restart @wip | 37 | + @kalibro_restart |
| 37 | Scenario: editing a reading with already taken name | 38 | Scenario: editing a reading with already taken name |
| 38 | Given I am a regular user | 39 | Given I am a regular user |
| 39 | And I am signed in | 40 | And I am signed in |
| 40 | - And I own a sample project | ||
| 41 | - And I have a sample configuration with native metrics | ||
| 42 | - And I have a sample repository within the sample project named "MedSquare" | ||
| 43 | - And I have a sample repository within the sample project named "QtCalculator" | ||
| 44 | - And I am at repository edit page | ||
| 45 | - When I fill the Name field with "MedSquare" | 41 | + And I own a sample reading group |
| 42 | + And I have a sample reading within the sample reading group labeled "Average" | ||
| 43 | + And I have a sample reading within the sample reading group labeled "Good" | ||
| 44 | + And I am at the Edit Reading page | ||
| 45 | + When I fill the Label field with "Average" | ||
| 46 | And I press the Save button | 46 | And I press the Save button |
| 47 | - Then I should see "There's already" | ||
| 48 | \ No newline at end of file | 47 | \ No newline at end of file |
| 48 | + Then I should see "There's already" |
features/step_definitions/reading_steps.rb
| @@ -9,3 +9,7 @@ end | @@ -9,3 +9,7 @@ end | ||
| 9 | Given(/^I am at the Edit Reading page$/) do | 9 | Given(/^I am at the Edit Reading page$/) do |
| 10 | visit edit_reading_group_reading_url(@reading_group.id, @reading.id) | 10 | visit edit_reading_group_reading_url(@reading_group.id, @reading.id) |
| 11 | end | 11 | end |
| 12 | + | ||
| 13 | +Given(/^I have a sample reading within the sample reading group labeled "(.*?)"$/) do |label| | ||
| 14 | + @reading = FactoryGirl.create(:reading, {label: label, group_id: @reading_group.id, id: nil}) | ||
| 15 | +end |
spec/controllers/readings_controller_spec.rb
| @@ -102,4 +102,63 @@ describe ReadingsController do | @@ -102,4 +102,63 @@ describe ReadingsController do | ||
| 102 | it { should redirect_to new_user_session_path } | 102 | it { should redirect_to new_user_session_path } |
| 103 | end | 103 | end |
| 104 | end | 104 | end |
| 105 | + | ||
| 106 | + describe 'update' do | ||
| 107 | + let(:reading) { FactoryGirl.build(:reading) } | ||
| 108 | + let(:reading_params) { Hash[FactoryGirl.attributes_for(:reading).map { |k,v| [k.to_s, v.to_s] }] } #FIXME: Mocha is creating the expectations with strings, but FactoryGirl returns everything with sybols and integers | ||
| 109 | + | ||
| 110 | + context 'when the user is logged in' do | ||
| 111 | + before do | ||
| 112 | + sign_in FactoryGirl.create(:user) | ||
| 113 | + end | ||
| 114 | + | ||
| 115 | + context 'when user owns the reading' do | ||
| 116 | + before :each do | ||
| 117 | + subject.expects(:reading_owner?).returns true | ||
| 118 | + end | ||
| 119 | + | ||
| 120 | + context 'with valid fields' do | ||
| 121 | + before :each do | ||
| 122 | + Reading.expects(:find).at_least_once.with(reading.id).returns(reading) | ||
| 123 | + Reading.any_instance.expects(:update).with(reading_params).returns(true) | ||
| 124 | + | ||
| 125 | + post :update, reading_group_id: reading_group.id, id: reading.id, reading: reading_params | ||
| 126 | + end | ||
| 127 | + | ||
| 128 | + it { should redirect_to(reading_group_reading_path(reading_group.id, reading.id)) } | ||
| 129 | + it { should respond_with(:redirect) } | ||
| 130 | + end | ||
| 131 | + | ||
| 132 | + context 'with an invalid field' do | ||
| 133 | + before :each do | ||
| 134 | + Reading.expects(:find).at_least_once.with(reading.id).returns(reading) | ||
| 135 | + Reading.any_instance.expects(:update).with(reading_params).returns(false) | ||
| 136 | + | ||
| 137 | + post :update, reading_group_id: reading_group.id, id: reading.id, reading: reading_params | ||
| 138 | + end | ||
| 139 | + | ||
| 140 | + it { should render_template(:edit) } | ||
| 141 | + end | ||
| 142 | + end | ||
| 143 | + | ||
| 144 | + context 'when the user does not own the reading' do | ||
| 145 | + before :each do | ||
| 146 | + Reading.expects(:find).at_least_once.with(reading.id).returns(reading) | ||
| 147 | + | ||
| 148 | + post :update, reading_group_id: reading_group.id, id: reading.id, reading: reading_params | ||
| 149 | + end | ||
| 150 | + | ||
| 151 | + it { should redirect_to reading_group_path(reading_group.id) } | ||
| 152 | + end | ||
| 153 | + end | ||
| 154 | + | ||
| 155 | + context 'with no user logged in' do | ||
| 156 | + before :each do | ||
| 157 | + post :update, reading_group_id: reading_group.id, id: reading.id, reading: reading_params | ||
| 158 | + end | ||
| 159 | + | ||
| 160 | + it { should redirect_to new_user_session_path } | ||
| 161 | + end | ||
| 162 | + end | ||
| 163 | + | ||
| 105 | end | 164 | end |
| 106 | \ No newline at end of file | 165 | \ No newline at end of file |
spec/routing/readings_routing_spec.rb
| @@ -8,7 +8,7 @@ describe ReadingsController do | @@ -8,7 +8,7 @@ describe ReadingsController do | ||
| 8 | to(controller: :readings, action: :new, reading_group_id: 1) } | 8 | to(controller: :readings, action: :new, reading_group_id: 1) } |
| 9 | it { should route(:get, '/reading_groups/1/readings/1/edit'). | 9 | it { should route(:get, '/reading_groups/1/readings/1/edit'). |
| 10 | to(controller: :readings, action: :edit, reading_group_id: 1, id: 1) } | 10 | to(controller: :readings, action: :edit, reading_group_id: 1, id: 1) } |
| 11 | - it { should_not route(:get, '/reading_groups/1/readings/1'). | 11 | + it { should route(:get, '/reading_groups/1/readings/1'). |
| 12 | to(controller: :readings, action: :show, reading_group_id: 1, id: 1) } | 12 | to(controller: :readings, action: :show, reading_group_id: 1, id: 1) } |
| 13 | it { should route(:delete, '/reading_groups/1/readings/1'). | 13 | it { should route(:delete, '/reading_groups/1/readings/1'). |
| 14 | to(controller: :readings, action: :destroy, reading_group_id: 1, id: 1) } | 14 | to(controller: :readings, action: :destroy, reading_group_id: 1, id: 1) } |