質問編集履歴

1

ログイン関連のソースコード(users_login_test.rb,sessions_controller_test.rb,sessions_controller.rb)を追記

2018/03/31 10:58

投稿

kinu221
kinu221

スコア26

test CHANGED
File without changes
test CHANGED
@@ -220,6 +220,210 @@
220
220
 
221
221
  ```
222
222
 
223
+ ```ruby
224
+
225
+ --sessions_controller.rb--
226
+
227
+ class SessionsController < ApplicationController
228
+
229
+
230
+
231
+ def new
232
+
233
+ end
234
+
235
+
236
+
237
+ def create
238
+
239
+ user = User.find_by(email: params[:session][:email].downcase)
240
+
241
+ if user && user.authenticate(params[:session][:password])
242
+
243
+ if user.activated?
244
+
245
+ log_in user
246
+
247
+ params[:session][:remember_me] == '1' ? remember(user) : forget(user)
248
+
249
+ redirect_back_or user
250
+
251
+ else
252
+
253
+ message = "Account not activated. "
254
+
255
+ message += "Check your email for the activation link."
256
+
257
+ flash[:warning] = message
258
+
259
+ redirect_to root_url
260
+
261
+ end
262
+
263
+ else
264
+
265
+ flash.now[:danger] = 'Invalid email/password combination'
266
+
267
+ render 'new'
268
+
269
+ end
270
+
271
+ end
272
+
273
+
274
+
275
+ def destroy
276
+
277
+ log_out if logged_in?
278
+
279
+ redirect_to root_url
280
+
281
+ end
282
+
283
+ end
284
+
285
+ ```
286
+
287
+ ```ruby
288
+
289
+ --sessions_controller_test.rb--
290
+
291
+ require 'test_helper'
292
+
293
+
294
+
295
+ class SessionsControllerTest < ActionDispatch::IntegrationTest
296
+
297
+ test "should get new" do
298
+
299
+ get login_path
300
+
301
+ assert_response :success
302
+
303
+ end
304
+
305
+
306
+
307
+ end
308
+
309
+ ```
310
+
311
+ ```ruby
312
+
313
+ --users_login_test.rb--
314
+
315
+ require 'test_helper'
316
+
317
+
318
+
319
+ class UsersLoginTest < ActionDispatch::IntegrationTest
320
+
321
+ def setup
322
+
323
+ @user = users(:michael)
324
+
325
+ end
326
+
327
+
328
+
329
+ test "login with invalid information" do
330
+
331
+ get login_path
332
+
333
+ assert_template 'sessions/new'
334
+
335
+ post login_path, params: { session: { email: "", password: "" } }
336
+
337
+ assert_template 'sessions/new'
338
+
339
+ assert_not flash.empty?
340
+
341
+ get root_path
342
+
343
+ assert flash.empty?
344
+
345
+ end
346
+
347
+
348
+
349
+ test "login with valid information followed by logout" do
350
+
351
+ get login_path
352
+
353
+ post login_path, params: { session: { email: @user.email,
354
+
355
+ password: 'password' } }
356
+
357
+ assert is_logged_in?
358
+
359
+ assert_redirected_to @user
360
+
361
+ follow_redirect!
362
+
363
+ assert_template 'users/show'
364
+
365
+ assert_select "a[href=?]", login_path, count: 0
366
+
367
+ assert_select "a[href=?]", logout_path
368
+
369
+ assert_select "a[href=?]", user_path(@user)
370
+
371
+
372
+
373
+ delete logout_path
374
+
375
+ assert_not is_logged_in?
376
+
377
+ assert_redirected_to root_url
378
+
379
+ # 2番目のウィンドウでログアウトをクリックするユーザーをシミュレートする
380
+
381
+ delete logout_path
382
+
383
+ follow_redirect!
384
+
385
+ assert_select "a[href=?]", login_path
386
+
387
+ assert_select "a[href=?]", logout_path, count: 0
388
+
389
+ assert_select "a[href=?]", user_path(@user), count: 0
390
+
391
+ end
392
+
393
+
394
+
395
+ test "login with remembering" do
396
+
397
+ log_in_as(@user, remember_me: '1')
398
+
399
+ assert_not_empty cookies['remember_token']
400
+
401
+ end
402
+
403
+
404
+
405
+ test "login without remembering" do
406
+
407
+ # クッキーを保存してログイン
408
+
409
+ log_in_as(@user, remember_me: '1')
410
+
411
+ delete logout_path
412
+
413
+ # クッキーを削除してログイン
414
+
415
+ log_in_as(@user, remember_me: '0')
416
+
417
+ assert_empty cookies['remember_token']
418
+
419
+ end
420
+
421
+ end
422
+
423
+
424
+
425
+ ```
426
+
223
427
  [試したこと]
224
428
 
225
429
  ・ネットで調べて、undefined method `id'or nil:NilClassエラーはユーザー登録がされていないため表示されているというQ&Aを見たので、ユーザーのsignupを行なったがトラブルシュートできず。