Commit f3027748b3180d24a30822dfe7cc506e79e444d7
Committed by
Rafael Manzo
1 parent
63e8cd70
Exists in
colab
and in
4 other branches
Finished tests for reading groups controller
Signed off by: Daniel Alves <danpaulalves@gmail.com> Signed off by: Diego Araújo <diegoamc90@gmail.com>
Showing
1 changed file
with
160 additions
and
166 deletions
Show diff stats
spec/controllers/reading_groups_controller_spec.rb
1 | require 'rails_helper' | 1 | require 'rails_helper' |
2 | 2 | ||
3 | describe ReadingGroupsController, :type => :controller do | 3 | describe ReadingGroupsController, :type => :controller do |
4 | - pending 'waiting for kalibro configurations integration' do | ||
5 | - describe 'new' do | ||
6 | - before :each do | ||
7 | - sign_in FactoryGirl.create(:user) | ||
8 | - get :new | ||
9 | - end | ||
10 | - | ||
11 | - it { is_expected.to respond_with(:success) } | ||
12 | - it { is_expected.to render_template(:new) } | 4 | + describe 'new' do |
5 | + before :each do | ||
6 | + sign_in FactoryGirl.create(:user) | ||
7 | + get :new | ||
13 | end | 8 | end |
14 | 9 | ||
15 | - describe 'create' do | ||
16 | - before do | ||
17 | - sign_in FactoryGirl.create(:user) | ||
18 | - end | ||
19 | - | ||
20 | - context 'with valid fields' do | ||
21 | - let(:reading_group) { FactoryGirl.build(:reading_group) } | ||
22 | - let(:subject_params) { Hash[FactoryGirl.attributes_for(:reading_group).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 | 10 | + it { is_expected.to respond_with(:success) } |
11 | + it { is_expected.to render_template(:new) } | ||
12 | + end | ||
23 | 13 | ||
24 | - before :each do | ||
25 | - ReadingGroup.any_instance.expects(:save).returns(true) | ||
26 | - end | 14 | + describe 'create' do |
15 | + before do | ||
16 | + sign_in FactoryGirl.create(:user) | ||
17 | + end | ||
27 | 18 | ||
28 | - context 'rendering the show' do | ||
29 | - before :each do | ||
30 | - ReadingGroup.expects(:exists?).returns(true) | 19 | + context 'with valid fields' do |
20 | + let(:reading_group) { FactoryGirl.build(:reading_group) } | ||
21 | + let(:subject_params) { Hash[FactoryGirl.attributes_for(:reading_group).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 | ||
31 | 22 | ||
32 | - post :create, :reading_group => subject_params | ||
33 | - end | 23 | + before :each do |
24 | + ReadingGroup.any_instance.expects(:save).returns(true) | ||
25 | + end | ||
34 | 26 | ||
35 | - it 'should redirect to the show view' do | ||
36 | - expect(response).to redirect_to reading_group_path(reading_group) | ||
37 | - end | 27 | + context 'rendering the show' do |
28 | + before :each do | ||
29 | + post :create, :reading_group => subject_params | ||
38 | end | 30 | end |
39 | 31 | ||
40 | - context 'without rendering the show view' do | ||
41 | - before :each do | ||
42 | - post :create, :reading_group => subject_params | ||
43 | - end | ||
44 | - | ||
45 | - it { is_expected.to respond_with(:redirect) } | 32 | + it 'should redirect to the show view' do |
33 | + expect(response).to redirect_to reading_group_path(reading_group.id) | ||
46 | end | 34 | end |
47 | end | 35 | end |
48 | 36 | ||
49 | - context 'with an invalid field' do | 37 | + context 'without rendering the show view' do |
50 | before :each do | 38 | before :each do |
51 | - @subject = FactoryGirl.build(:reading_group) | ||
52 | - @subject_params = Hash[FactoryGirl.attributes_for(:reading_group).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 | ||
53 | - | ||
54 | - ReadingGroup.expects(:new).at_least_once.with(@subject_params).returns(@subject) | ||
55 | - ReadingGroup.any_instance.expects(:save).returns(false) | ||
56 | - | ||
57 | - post :create, :reading_group => @subject_params | 39 | + post :create, :reading_group => subject_params |
58 | end | 40 | end |
59 | 41 | ||
60 | - it { is_expected.to render_template(:new) } | 42 | + it { is_expected.to respond_with(:redirect) } |
61 | end | 43 | end |
62 | end | 44 | end |
63 | 45 | ||
64 | - describe 'show' do | ||
65 | - let!(:reading_group) { FactoryGirl.build(:reading_group) } | ||
66 | - let(:reading) { FactoryGirl.build(:reading) } | 46 | + context 'with an invalid field' do |
67 | before :each do | 47 | before :each do |
68 | - subject.expects(:find_resource).with(ReadingGroup, reading_group.id).returns(reading_group) | ||
69 | - get :show, :id => reading_group.id | ||
70 | - end | 48 | + @subject = FactoryGirl.build(:reading_group) |
49 | + @subject_params = Hash[FactoryGirl.attributes_for(:reading_group).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 | ||
71 | 50 | ||
72 | - it { is_expected.to render_template(:show) } | ||
73 | - end | 51 | + ReadingGroup.expects(:new).at_least_once.with(@subject_params).returns(@subject) |
52 | + ReadingGroup.any_instance.expects(:save).returns(false) | ||
74 | 53 | ||
75 | - describe 'destroy' do | ||
76 | - before do | ||
77 | - @subject = FactoryGirl.build(:reading_group) | 54 | + post :create, :reading_group => @subject_params |
78 | end | 55 | end |
79 | 56 | ||
80 | - context 'with an User logged in' do | ||
81 | - before do | ||
82 | - sign_in FactoryGirl.create(:user) | ||
83 | - @ownership = FactoryGirl.build(:reading_group_ownership) | ||
84 | - @ownerships = [] | 57 | + it { is_expected.to render_template(:new) } |
58 | + end | ||
59 | + end | ||
85 | 60 | ||
86 | - end | 61 | + describe 'show' do |
62 | + let!(:reading_group) { FactoryGirl.build(:reading_group) } | ||
63 | + let(:reading) { FactoryGirl.build(:reading) } | ||
64 | + before :each do | ||
65 | + subject.expects(:find_resource).with(ReadingGroup, reading_group.id).returns(reading_group) | ||
66 | + get :show, :id => reading_group.id | ||
67 | + end | ||
87 | 68 | ||
88 | - context 'when the user owns the reading group' do | ||
89 | - before :each do | ||
90 | - @ownership.expects(:destroy) | ||
91 | - @subject.expects(:destroy) | 69 | + it { is_expected.to render_template(:show) } |
70 | + end | ||
92 | 71 | ||
93 | - #Those two mocks looks the same but they are necessary since params[:id] is a String and @ReadingGroup.id is an Integer :( | ||
94 | - @ownerships.expects(:find_by_reading_group_id).with("#{@subject.id}").returns(@ownership) | ||
95 | - @ownerships.expects(:find_by_reading_group_id).with(@subject.id).returns(@ownership) | 72 | + describe 'destroy' do |
73 | + before do | ||
74 | + @subject = FactoryGirl.build(:reading_group) | ||
75 | + end | ||
96 | 76 | ||
97 | - User.any_instance.expects(:reading_group_ownerships).at_least_once.returns(@ownerships) | 77 | + context 'with an User logged in' do |
78 | + before do | ||
79 | + sign_in FactoryGirl.create(:user) | ||
80 | + @ownership = FactoryGirl.build(:reading_group_ownership) | ||
81 | + @ownerships = [] | ||
98 | 82 | ||
99 | - subject.expects(:find_resource).with(ReadingGroup, @subject.id).returns(@subject) | ||
100 | - delete :destroy, :id => @subject.id | ||
101 | - end | 83 | + end |
102 | 84 | ||
103 | - it 'should redirect to the reading groups page' do | ||
104 | - expect(response).to redirect_to reading_groups_url | ||
105 | - end | 85 | + context 'when the user owns the reading group' do |
86 | + before :each do | ||
87 | + @ownership.expects(:destroy) | ||
88 | + @subject.expects(:destroy) | ||
106 | 89 | ||
107 | - it { is_expected.to respond_with(:redirect) } | ||
108 | - end | 90 | + #Those two mocks looks the same but they are necessary since params[:id] is a String and @ReadingGroup.id is an Integer :( |
91 | + @ownerships.expects(:find_by_reading_group_id).with("#{@subject.id}").returns(@ownership) | ||
92 | + @ownerships.expects(:find_by_reading_group_id).with(@subject.id).returns(@ownership) | ||
109 | 93 | ||
110 | - context "when the user doesn't own the reading group" do | ||
111 | - before :each do | ||
112 | - @ownerships.expects(:find_by_reading_group_id).with("#{@subject.id}").returns(nil) | ||
113 | - User.any_instance.expects(:reading_group_ownerships).at_least_once.returns(@ownerships) | 94 | + User.any_instance.expects(:reading_group_ownerships).at_least_once.returns(@ownerships) |
114 | 95 | ||
115 | - delete :destroy, :id => @subject.id | ||
116 | - end | 96 | + subject.expects(:find_resource).with(ReadingGroup, @subject.id).returns(@subject) |
97 | + delete :destroy, :id => @subject.id | ||
98 | + end | ||
117 | 99 | ||
118 | - it { is_expected.to redirect_to(reading_group_path) } | 100 | + it 'should redirect to the reading groups page' do |
101 | + expect(response).to redirect_to reading_groups_url | ||
119 | end | 102 | end |
103 | + | ||
104 | + it { is_expected.to respond_with(:redirect) } | ||
120 | end | 105 | end |
121 | 106 | ||
122 | - context 'with no User logged in' do | 107 | + context "when the user doesn't own the reading group" do |
123 | before :each do | 108 | before :each do |
109 | + @ownerships.expects(:find_by_reading_group_id).with("#{@subject.id}").returns(nil) | ||
110 | + User.any_instance.expects(:reading_group_ownerships).at_least_once.returns(@ownerships) | ||
111 | + | ||
124 | delete :destroy, :id => @subject.id | 112 | delete :destroy, :id => @subject.id |
125 | end | 113 | end |
126 | 114 | ||
127 | - it { is_expected.to redirect_to new_user_session_path } | 115 | + it { is_expected.to redirect_to(reading_group_path) } |
128 | end | 116 | end |
129 | end | 117 | end |
130 | 118 | ||
131 | - describe 'index' do | 119 | + context 'with no User logged in' do |
132 | before :each do | 120 | before :each do |
133 | - @subject = FactoryGirl.build(:reading_group) | ||
134 | - ReadingGroup.expects(:all).returns([@subject]) | ||
135 | - get :index | 121 | + delete :destroy, :id => @subject.id |
136 | end | 122 | end |
137 | 123 | ||
138 | - it { is_expected.to render_template(:index) } | 124 | + it { is_expected.to redirect_to new_user_session_path } |
139 | end | 125 | end |
126 | + end | ||
140 | 127 | ||
141 | - describe 'edit' do | ||
142 | - before do | ||
143 | - @subject = FactoryGirl.build(:reading_group) | ||
144 | - end | 128 | + describe 'index' do |
129 | + before :each do | ||
130 | + @subject = FactoryGirl.build(:reading_group) | ||
131 | + ReadingGroup.expects(:all).returns([@subject]) | ||
132 | + get :index | ||
133 | + end | ||
145 | 134 | ||
146 | - context 'with an User logged in' do | ||
147 | - before do | ||
148 | - @user = FactoryGirl.create(:user) | ||
149 | - @ownership = FactoryGirl.build(:reading_group_ownership) | ||
150 | - @ownerships = [] | 135 | + it { is_expected.to render_template(:index) } |
136 | + end | ||
151 | 137 | ||
152 | - User.any_instance.expects(:reading_group_ownerships).at_least_once.returns(@ownerships) | 138 | + describe 'edit' do |
139 | + before do | ||
140 | + @subject = FactoryGirl.build(:reading_group) | ||
141 | + end | ||
153 | 142 | ||
154 | - sign_in @user | ||
155 | - end | 143 | + context 'with an User logged in' do |
144 | + before do | ||
145 | + @user = FactoryGirl.create(:user) | ||
146 | + @ownership = FactoryGirl.build(:reading_group_ownership) | ||
147 | + @ownerships = [] | ||
156 | 148 | ||
157 | - context 'when the user owns the reading group' do | ||
158 | - before :each do | ||
159 | - subject.expects(:find_resource).with(ReadingGroup, @subject.id).returns(@subject) | ||
160 | - @ownerships.expects(:find_by_reading_group_id).with("#{@subject.id}").returns(@ownership) | 149 | + User.any_instance.expects(:reading_group_ownerships).at_least_once.returns(@ownerships) |
161 | 150 | ||
162 | - get :edit, :id => @subject.id | ||
163 | - end | 151 | + sign_in @user |
152 | + end | ||
164 | 153 | ||
165 | - it { is_expected.to render_template(:edit) } | 154 | + context 'when the user owns the reading group' do |
155 | + before :each do | ||
156 | + subject.expects(:find_resource).with(ReadingGroup, @subject.id).returns(@subject) | ||
157 | + @ownerships.expects(:find_by_reading_group_id).with("#{@subject.id}").returns(@ownership) | ||
166 | 158 | ||
167 | - it 'should assign to @reading group the @subject' do | ||
168 | - expect(assigns(:reading_group)).to eq(@subject) | ||
169 | - end | 159 | + get :edit, :id => @subject.id |
170 | end | 160 | end |
171 | 161 | ||
172 | - context 'when the user does not own the reading group' do | ||
173 | - before do | ||
174 | - @subject = FactoryGirl.build(:another_reading_group) | ||
175 | - @ownerships.expects(:find_by_reading_group_id).with("#{@subject.id}").returns(nil) | ||
176 | - | ||
177 | - get :edit, :id => @subject.id | ||
178 | - end | 162 | + it { is_expected.to render_template(:edit) } |
179 | 163 | ||
180 | - it { is_expected.to redirect_to(reading_group_path) } | ||
181 | - it { is_expected.to set_the_flash[:notice].to("You're not allowed to do this operation") } | 164 | + it 'should assign to @reading group the @subject' do |
165 | + expect(assigns(:reading_group)).to eq(@subject) | ||
182 | end | 166 | end |
183 | end | 167 | end |
184 | 168 | ||
185 | - context 'with no user logged in' do | ||
186 | - before :each do | 169 | + context 'when the user does not own the reading group' do |
170 | + before do | ||
171 | + @subject = FactoryGirl.build(:another_reading_group) | ||
172 | + @ownerships.expects(:find_by_reading_group_id).with("#{@subject.id}").returns(nil) | ||
173 | + | ||
187 | get :edit, :id => @subject.id | 174 | get :edit, :id => @subject.id |
188 | end | 175 | end |
189 | 176 | ||
190 | - it { is_expected.to redirect_to new_user_session_path } | 177 | + it { is_expected.to redirect_to(reading_group_path) } |
178 | + it { is_expected.to set_the_flash[:notice].to("You're not allowed to do this operation") } | ||
179 | + end | ||
180 | + end | ||
181 | + | ||
182 | + context 'with no user logged in' do | ||
183 | + before :each do | ||
184 | + get :edit, :id => @subject.id | ||
191 | end | 185 | end |
186 | + | ||
187 | + it { is_expected.to redirect_to new_user_session_path } | ||
188 | + end | ||
189 | + end | ||
190 | + | ||
191 | + describe 'update' do | ||
192 | + before do | ||
193 | + @subject = FactoryGirl.build(:reading_group) | ||
194 | + @subject_params = Hash[FactoryGirl.attributes_for(:reading_group).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 | ||
192 | end | 195 | end |
193 | 196 | ||
194 | - describe 'update' do | 197 | + context 'when the user is logged in' do |
195 | before do | 198 | before do |
196 | - @subject = FactoryGirl.build(:reading_group) | ||
197 | - @subject_params = Hash[FactoryGirl.attributes_for(:reading_group).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 | 199 | + sign_in FactoryGirl.create(:user) |
198 | end | 200 | end |
199 | 201 | ||
200 | - context 'when the user is logged in' do | 202 | + context 'when user owns the reading group' do |
201 | before do | 203 | before do |
202 | - sign_in FactoryGirl.create(:user) | ||
203 | - end | 204 | + @ownership = FactoryGirl.build(:reading_group_ownership) |
205 | + @ownerships = [] | ||
204 | 206 | ||
205 | - context 'when user owns the reading group' do | ||
206 | - before do | ||
207 | - @ownership = FactoryGirl.build(:reading_group_ownership) | ||
208 | - @ownerships = [] | 207 | + @ownerships.expects(:find_by_reading_group_id).with("#{@subject.id}").returns(@ownership) |
208 | + User.any_instance.expects(:reading_group_ownerships).at_least_once.returns(@ownerships) | ||
209 | + end | ||
209 | 210 | ||
210 | - @ownerships.expects(:find_by_reading_group_id).with("#{@subject.id}").returns(@ownership) | ||
211 | - User.any_instance.expects(:reading_group_ownerships).at_least_once.returns(@ownerships) | 211 | + context 'with valid fields' do |
212 | + before :each do | ||
213 | + subject.expects(:find_resource).with(ReadingGroup, @subject.id).returns(@subject) | ||
214 | + ReadingGroup.any_instance.expects(:save).with(@subject_params).returns(true) | ||
212 | end | 215 | end |
213 | 216 | ||
214 | - context 'with valid fields' do | 217 | + context 'rendering the show' do |
215 | before :each do | 218 | before :each do |
216 | - subject.expects(:find_resource).with(ReadingGroup, @subject.id).returns(@subject) | ||
217 | - ReadingGroup.any_instance.expects(:update).with(@subject_params).returns(true) | ||
218 | - end | ||
219 | - | ||
220 | - context 'rendering the show' do | ||
221 | - before :each do | ||
222 | - ReadingGroup.expects(:exists?).returns(true) | ||
223 | - | ||
224 | - post :update, :id => @subject.id, :reading_group => @subject_params | ||
225 | - end | ||
226 | - | ||
227 | - it 'should redirect to the show view' do | ||
228 | - expect(response).to redirect_to reading_group_path(@subject) | ||
229 | - end | 219 | + post :update, :id => @subject.id, :reading_group => @subject_params |
230 | end | 220 | end |
231 | 221 | ||
232 | - context 'without rendering the show view' do | ||
233 | - before :each do | ||
234 | - post :update, :id => @subject.id, :reading_group => @subject_params | ||
235 | - end | ||
236 | - | ||
237 | - it { is_expected.to respond_with(:redirect) } | 222 | + it 'should redirect to the show view' do |
223 | + expect(response).to redirect_to reading_group_path(@subject.id) | ||
238 | end | 224 | end |
239 | end | 225 | end |
240 | 226 | ||
241 | - context 'with an invalid field' do | 227 | + context 'without rendering the show view' do |
242 | before :each do | 228 | before :each do |
243 | - subject.expects(:find_resource).with(ReadingGroup, @subject.id).returns(@subject) | ||
244 | - ReadingGroup.any_instance.expects(:update).with(@subject_params).returns(false) | ||
245 | - | ||
246 | post :update, :id => @subject.id, :reading_group => @subject_params | 229 | post :update, :id => @subject.id, :reading_group => @subject_params |
247 | end | 230 | end |
248 | 231 | ||
249 | - it { is_expected.to render_template(:edit) } | 232 | + it { is_expected.to respond_with(:redirect) } |
250 | end | 233 | end |
251 | end | 234 | end |
252 | 235 | ||
253 | - context 'when the user does not own the reading group' do | 236 | + context 'with an invalid field' do |
254 | before :each do | 237 | before :each do |
238 | + subject.expects(:find_resource).with(ReadingGroup, @subject.id).returns(@subject) | ||
239 | + ReadingGroup.any_instance.expects(:save).with(@subject_params).returns(false) | ||
240 | + | ||
255 | post :update, :id => @subject.id, :reading_group => @subject_params | 241 | post :update, :id => @subject.id, :reading_group => @subject_params |
256 | end | 242 | end |
257 | 243 | ||
258 | - it { is_expected.to redirect_to reading_group_path } | 244 | + it { is_expected.to render_template(:edit) } |
259 | end | 245 | end |
260 | end | 246 | end |
261 | 247 | ||
262 | - context 'with no user logged in' do | 248 | + context 'when the user does not own the reading group' do |
263 | before :each do | 249 | before :each do |
264 | post :update, :id => @subject.id, :reading_group => @subject_params | 250 | post :update, :id => @subject.id, :reading_group => @subject_params |
265 | end | 251 | end |
266 | 252 | ||
267 | - it { is_expected.to redirect_to new_user_session_path } | 253 | + it { is_expected.to redirect_to reading_group_path } |
268 | end | 254 | end |
269 | end | 255 | end |
256 | + | ||
257 | + context 'with no user logged in' do | ||
258 | + before :each do | ||
259 | + post :update, :id => @subject.id, :reading_group => @subject_params | ||
260 | + end | ||
261 | + | ||
262 | + it { is_expected.to redirect_to new_user_session_path } | ||
263 | + end | ||
270 | end | 264 | end |
271 | end | 265 | end |