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) } |