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 | 23 | @reading_group_id = params[:reading_group_id] |
| 24 | 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 | 40 | private |
| 27 | 41 | |
| 28 | 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 | 13 | end |
| 14 | 14 | |
| 15 | 15 | resources :reading_groups do |
| 16 | - resources :readings, except: [:index, :show, :update] | |
| 16 | + resources :readings, except: [:index, :update] | |
| 17 | 17 | put '/readings/:id' => 'readings#update', as: :reading_update |
| 18 | 18 | end |
| 19 | 19 | ... | ... |
features/reading/edit.feature
| ... | ... | @@ -3,7 +3,7 @@ Feature: Reading Edit |
| 3 | 3 | As a regular user |
| 4 | 4 | I should be able to edit my readings |
| 5 | 5 | |
| 6 | -@kalibro_restart @wip | |
| 6 | +@kalibro_restart @wip | |
| 7 | 7 | Scenario: editing a reading successfully |
| 8 | 8 | Given I am a regular user |
| 9 | 9 | And I am signed in |
| ... | ... | @@ -19,29 +19,29 @@ Feature: Reading Edit |
| 19 | 19 | And I should see "10.5" |
| 20 | 20 | And I should see "33dd33" |
| 21 | 21 | |
| 22 | - @kalibro_restart @wip | |
| 22 | + @kalibro_restart | |
| 23 | 23 | Scenario: editing a reading with blank fields |
| 24 | 24 | Given I am a regular user |
| 25 | 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 | 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 | 38 | Scenario: editing a reading with already taken name |
| 38 | 39 | Given I am a regular user |
| 39 | 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 | 46 | And I press the Save button |
| 47 | - Then I should see "There's already" | |
| 48 | 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 | 9 | Given(/^I am at the Edit Reading page$/) do |
| 10 | 10 | visit edit_reading_group_reading_url(@reading_group.id, @reading.id) |
| 11 | 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 | 102 | it { should redirect_to new_user_session_path } |
| 103 | 103 | end |
| 104 | 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 | 164 | end |
| 106 | 165 | \ No newline at end of file | ... | ... |
spec/routing/readings_routing_spec.rb
| ... | ... | @@ -8,7 +8,7 @@ describe ReadingsController do |
| 8 | 8 | to(controller: :readings, action: :new, reading_group_id: 1) } |
| 9 | 9 | it { should route(:get, '/reading_groups/1/readings/1/edit'). |
| 10 | 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 | 12 | to(controller: :readings, action: :show, reading_group_id: 1, id: 1) } |
| 13 | 13 | it { should route(:delete, '/reading_groups/1/readings/1'). |
| 14 | 14 | to(controller: :readings, action: :destroy, reading_group_id: 1, id: 1) } | ... | ... |