authpwn_rails 0.16.2 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -6
  3. data/Gemfile +7 -8
  4. data/Gemfile.lock +97 -113
  5. data/Gemfile.rails4 +8 -9
  6. data/{Gemfile.rails3 → Gemfile.rails41} +6 -7
  7. data/Gemfile.rails42 +17 -0
  8. data/README.rdoc +1 -2
  9. data/Rakefile +1 -1
  10. data/VERSION +1 -1
  11. data/app/models/credentials/email.rb +15 -37
  12. data/app/models/credentials/omni_auth_uid.rb +96 -0
  13. data/app/models/credentials/password.rb +0 -5
  14. data/app/models/tokens/base.rb +11 -38
  15. data/authpwn_rails.gemspec +35 -33
  16. data/lib/authpwn_rails/credential_model.rb +1 -5
  17. data/lib/authpwn_rails/generators/all_generator.rb +3 -1
  18. data/lib/authpwn_rails/generators/templates/001_create_users.rb +3 -3
  19. data/lib/authpwn_rails/generators/templates/003_create_credentials.rb +7 -7
  20. data/lib/authpwn_rails/generators/templates/credentials.yml +13 -13
  21. data/lib/authpwn_rails/generators/templates/omniauth_initializer.rb +13 -0
  22. data/lib/authpwn_rails/generators/templates/session_controller_test.rb +22 -0
  23. data/lib/authpwn_rails/generators/templates/session_mailer/email_verification_email.html.erb +3 -3
  24. data/lib/authpwn_rails/generators/templates/session_mailer/email_verification_email.text.erb +1 -1
  25. data/lib/authpwn_rails/generators/templates/session_mailer/reset_password_email.html.erb +3 -3
  26. data/lib/authpwn_rails/generators/templates/session_mailer/reset_password_email.text.erb +1 -1
  27. data/lib/authpwn_rails/generators/templates/session_mailer.rb +1 -1
  28. data/lib/authpwn_rails/generators/templates/session_mailer_test.rb +14 -4
  29. data/lib/authpwn_rails/generators/templates/user.rb +40 -5
  30. data/lib/authpwn_rails/http_basic.rb +6 -5
  31. data/lib/authpwn_rails/routes.rb +20 -7
  32. data/lib/authpwn_rails/session.rb +1 -1
  33. data/lib/authpwn_rails/session_controller.rb +48 -12
  34. data/lib/authpwn_rails/session_mailer.rb +13 -14
  35. data/lib/authpwn_rails/session_model.rb +4 -24
  36. data/lib/authpwn_rails/user_extensions/email_field.rb +5 -21
  37. data/lib/authpwn_rails/user_extensions/password_field.rb +0 -4
  38. data/lib/authpwn_rails/user_model.rb +46 -12
  39. data/lib/authpwn_rails.rb +0 -2
  40. data/test/cookie_controller_test.rb +1 -7
  41. data/test/credentials/omni_auth_uid_credential_test.rb +141 -0
  42. data/test/helpers/action_controller.rb +2 -8
  43. data/test/helpers/db_setup.rb +8 -16
  44. data/test/helpers/routes.rb +35 -30
  45. data/test/helpers/test_order.rb +3 -0
  46. data/test/http_basic_controller_test.rb +7 -18
  47. data/test/routes_test.rb +19 -10
  48. data/test/session_controller_api_test.rb +181 -30
  49. data/test/session_controller_test.rb +6 -0
  50. data/test/session_mailer_api_test.rb +18 -13
  51. data/test/session_mailer_test.rb +6 -0
  52. data/test/test_helper.rb +3 -3
  53. data/test/user_test.rb +54 -7
  54. metadata +65 -64
  55. data/app/models/credentials/facebook.rb +0 -63
  56. data/lib/authpwn_rails/facebook_session.rb +0 -33
  57. data/lib/authpwn_rails/user_extensions/facebook_fields.rb +0 -63
  58. data/test/credentials/facebook_credential_test.rb +0 -64
  59. data/test/facebook_controller_test.rb +0 -65
  60. data/test/user_extensions/facebook_fields_test.rb +0 -61
data/test/routes_test.rb CHANGED
@@ -6,26 +6,35 @@ require 'authpwn_rails/generators/templates/session_controller.rb'
6
6
  class RoutesTest < ActionController::TestCase
7
7
  tests SessionController
8
8
 
9
- test "authpwn_session routes" do
10
- assert_routing({path: "/session", method: :get},
9
+ test 'authpwn_session routes' do
10
+ assert_routing({path: '/session', method: :get},
11
11
  {controller: 'session', action: 'show'})
12
- assert_routing({path: "/session/new", method: :get},
12
+ assert_routing({path: '/session/new', method: :get},
13
13
  {controller: 'session', action: 'new'})
14
- assert_routing({path: "/session", method: :post},
14
+ assert_routing({path: '/session', method: :post},
15
15
  {controller: 'session', action: 'create'})
16
- assert_routing({path: "/session", method: :delete},
16
+ assert_routing({path: '/session', method: :delete},
17
17
  {controller: 'session', action: 'destroy'})
18
- assert_routing({path: "/session", method: :delete},
18
+ assert_routing({path: '/session', method: :delete},
19
19
  {controller: 'session', action: 'destroy'})
20
- assert_routing({path: "/session/change_password", method: :get},
20
+ assert_routing({path: '/session/change_password', method: :get},
21
21
  {controller: 'session', action: 'password_change'})
22
- assert_routing({path: "/session/change_password", method: :post},
22
+ assert_routing({path: '/session/change_password', method: :post},
23
23
  {controller: 'session', action: 'change_password'})
24
- assert_routing({path: "/session/reset_password", method: :post},
24
+ assert_routing({path: '/session/reset_password', method: :post},
25
25
  {controller: 'session', action: 'reset_password'})
26
-
26
+
27
27
  code = 'YZ-Fo8HX6_NyU6lVZXYi6cMDLV5eAgt35UTF5l8bD6A'
28
28
  assert_routing({path: "/session/token/#{code}", method: :get},
29
29
  {controller: 'session', action: 'token', code: code})
30
+
31
+ assert_routing({path: '/auth/failure', method: :get},
32
+ {controller: 'session', action: 'omniauth_failure'})
33
+ assert_routing({path: '/auth/twitter/callback', method: :get},
34
+ {controller: 'session', action: 'omniauth',
35
+ provider: 'twitter'})
36
+ assert_routing({path: '/auth/twitter/callback', method: :post},
37
+ {controller: 'session', action: 'omniauth',
38
+ provider: 'twitter'})
30
39
  end
31
40
  end
@@ -1,10 +1,5 @@
1
1
  require File.expand_path('../test_helper', __FILE__)
2
2
 
3
- require 'authpwn_rails/generators/templates/session_controller.rb'
4
-
5
- # Run the tests in the generator, to make sure they pass.
6
- require 'authpwn_rails/generators/templates/session_controller_test.rb'
7
-
8
3
  class BareSessionController < ApplicationController
9
4
  include Authpwn::SessionController
10
5
  self.append_view_path File.expand_path('../fixtures', __FILE__)
@@ -19,6 +14,7 @@ class SessionControllerApiTest < ActionController::TestCase
19
14
  @email_credential = credentials(:jane_email)
20
15
  @password_credential = credentials(:jane_password)
21
16
  @token_credential = credentials(:jane_token)
17
+ @omniauth_credential = credentials(:jane_omniauth_developer)
22
18
  @_auto_purge_sessions = BareSessionController.auto_purge_sessions
23
19
  end
24
20
 
@@ -55,7 +51,15 @@ class SessionControllerApiTest < ActionController::TestCase
55
51
  assert_response :ok
56
52
  data = ActiveSupport::JSON.decode response.body
57
53
  assert_equal @user.exuid, data['user']['exuid']
58
- assert_equal session[:_csrf_token], data['csrf']
54
+
55
+ if @controller.respond_to? :valid_authenticity_token?, true
56
+ # Rails 4.2+ uses variable CSRF tokens.
57
+ assert @controller.send(:valid_authenticity_token?, session,
58
+ data['csrf'])
59
+ else
60
+ # Rails 4.0 and 4.1 store the CSRF token in the session.
61
+ assert_equal session[:_csrf_token], data['csrf']
62
+ end
59
63
  end
60
64
 
61
65
  test "new redirects to session#show when a user is logged in" do
@@ -75,7 +79,7 @@ class SessionControllerApiTest < ActionController::TestCase
75
79
  get :new, {}, {}, { auth_redirect_url: url }
76
80
  assert_template :new
77
81
  assert_select 'form' do
78
- assert_select "input[name=redirect_url][value=#{url}]"
82
+ assert_select "input[name=\"redirect_url\"][value=\"#{url}\"]"
79
83
  end
80
84
  end
81
85
 
@@ -98,6 +102,18 @@ class SessionControllerApiTest < ActionController::TestCase
98
102
  assert_redirected_to session_url
99
103
  end
100
104
 
105
+ test "create logs in with good account details and no User-Agent" do
106
+ request.headers['User-Agent'] = nil
107
+
108
+ post :create, session: { email: @email_credential.email,
109
+ password: 'pa55w0rd' }
110
+ assert_equal @user, assigns(:current_user), 'instance variable'
111
+ assert_equal @user, session_current_user, 'session'
112
+ assert_nil flash[:alert], 'no alert'
113
+ assert_nil flash[:auth_redirect_url], 'no redirect URL in flash'
114
+ assert_redirected_to session_url
115
+ end
116
+
101
117
  test "create purges sessions when logging in" do
102
118
  BareSessionController.auto_purge_sessions = true
103
119
  old_token = credentials(:jane_session_token)
@@ -127,9 +143,17 @@ class SessionControllerApiTest < ActionController::TestCase
127
143
  assert_response :ok
128
144
  data = ActiveSupport::JSON.decode response.body
129
145
  assert_equal @user.exuid, data['user']['exuid']
130
- assert_equal session[:_csrf_token], data['csrf']
131
146
  assert_equal @user, assigns(:current_user), 'instance variable'
132
147
  assert_equal @user, session_current_user, 'session'
148
+
149
+ if @controller.respond_to? :valid_authenticity_token?, true
150
+ # Rails 4.2+ uses variable CSRF tokens.
151
+ assert @controller.send(:valid_authenticity_token?, session,
152
+ data['csrf'])
153
+ else
154
+ # Rails 4.0 and 4.1 store the CSRF token in the session.
155
+ assert_equal session[:_csrf_token], data['csrf']
156
+ end
133
157
  end
134
158
 
135
159
  test "create by json purges sessions when logging in" do
@@ -199,8 +223,11 @@ class SessionControllerApiTest < ActionController::TestCase
199
223
  end
200
224
 
201
225
  test "create uses User.authenticate_signin" do
202
- User.expects(:authenticate_signin).at_least_once.
203
- with('em@ail.com', 'fail').returns @email_credential.user
226
+ signin = Session.new email: 'em@ail.com', password: 'fail'
227
+ Session.expects(:new).at_least_once.with(
228
+ email: 'em@ail.com', password: 'fail').returns signin
229
+ User.expects(:authenticate_signin).at_least_once.with(signin).
230
+ returns @email_credential.user
204
231
  post :create, email: 'em@ail.com', password: 'fail'
205
232
  assert_equal @user, assigns(:current_user), 'instance variable'
206
233
  assert_equal @user, session_current_user, 'session'
@@ -273,6 +300,19 @@ class SessionControllerApiTest < ActionController::TestCase
273
300
  'one-time credential is spent'
274
301
  end
275
302
 
303
+ test "token logs in with good token and no user-agent" do
304
+ request.headers['User-Agent'] = nil
305
+
306
+ @controller.expects(:home_with_token).once.with(@token_credential).
307
+ returns(nil)
308
+ get :token, code: @token_credential.code
309
+ assert_redirected_to session_url
310
+ assert_equal @user, assigns(:current_user), 'instance variable'
311
+ assert_equal @user, session_current_user, 'session'
312
+ assert_nil Tokens::Base.with_code(@token_credential.code).first,
313
+ 'one-time credential is spent'
314
+ end
315
+
276
316
  test "token by json logs in with good token" do
277
317
  @controller.expects(:home_with_token).once.with(@token_credential).
278
318
  returns(nil)
@@ -280,11 +320,19 @@ class SessionControllerApiTest < ActionController::TestCase
280
320
  assert_response :ok
281
321
  data = ActiveSupport::JSON.decode response.body
282
322
  assert_equal @user.exuid, data['user']['exuid']
283
- assert_equal session[:_csrf_token], data['csrf']
284
323
  assert_equal @user, assigns(:current_user), 'instance variable'
285
324
  assert_equal @user, session_current_user, 'session'
286
325
  assert_nil Tokens::Base.with_code(@token_credential.code).first,
287
326
  'one-time credential is spent'
327
+
328
+ if @controller.respond_to? :valid_authenticity_token?, true
329
+ # Rails 4.2+ uses variable CSRF tokens.
330
+ assert @controller.send(:valid_authenticity_token?, session,
331
+ data['csrf'])
332
+ else
333
+ # Rails 4.0 and 4.1 store the CSRF token in the session.
334
+ assert_equal session[:_csrf_token], data['csrf']
335
+ end
288
336
  end
289
337
 
290
338
  test "token does not log in with random token" do
@@ -376,8 +424,8 @@ class SessionControllerApiTest < ActionController::TestCase
376
424
  password: 'hacks', password_confirmation: 'hacks'}
377
425
  assert_redirected_to session_url
378
426
  assert_equal @password_credential, assigns(:credential)
379
- assert_equal @user, User.authenticate_signin(@email_credential.email,
380
- 'hacks'), 'password not changed'
427
+ assert_equal @user, User.authenticate_signin(Session.new(email:
428
+ @email_credential.email, password: 'hacks')), 'password not changed'
381
429
  end
382
430
 
383
431
  test "change_password works with correct input and extra form input" do
@@ -387,8 +435,8 @@ class SessionControllerApiTest < ActionController::TestCase
387
435
  commit: 'Change Password'
388
436
  assert_redirected_to session_url
389
437
  assert_equal @password_credential, assigns(:credential)
390
- assert_equal @user, User.authenticate_signin(@email_credential.email,
391
- 'hacks'), 'password not changed'
438
+ assert_equal @user, User.authenticate_signin(Session.new(email:
439
+ @email_credential.email, password: 'hacks')), 'password not changed'
392
440
  end
393
441
 
394
442
  test "change_password rejects bad old password" do
@@ -398,8 +446,9 @@ class SessionControllerApiTest < ActionController::TestCase
398
446
  assert_response :ok
399
447
  assert_template :password_change
400
448
  assert_equal @password_credential, assigns(:credential)
401
- assert_equal @user, User.authenticate_signin(@email_credential.email,
402
- 'pa55w0rd'), 'password wrongly changed'
449
+ assert_equal @user, User.authenticate_signin(Session.new(email:
450
+ @email_credential.email, password: 'pa55w0rd')),
451
+ 'password wrongly changed'
403
452
  end
404
453
 
405
454
  test "change_password rejects un-confirmed password" do
@@ -409,8 +458,9 @@ class SessionControllerApiTest < ActionController::TestCase
409
458
  assert_response :ok
410
459
  assert_template :password_change
411
460
  assert_equal @password_credential, assigns(:credential)
412
- assert_equal @user, User.authenticate_signin( @email_credential.email,
413
- 'pa55w0rd'), 'password wrongly changed'
461
+ assert_equal @user, User.authenticate_signin(Session.new(email:
462
+ @email_credential.email, password: 'pa55w0rd')),
463
+ 'password wrongly changed'
414
464
  end
415
465
 
416
466
  test "change_password works for password recovery" do
@@ -419,8 +469,8 @@ class SessionControllerApiTest < ActionController::TestCase
419
469
  post :change_password, credential: { password: 'hacks',
420
470
  password_confirmation: 'hacks' }
421
471
  assert_redirected_to session_url
422
- assert_equal @user, User.authenticate_signin(@email_credential.email,
423
- 'hacks'), 'password not changed'
472
+ assert_equal @user, User.authenticate_signin(Session.new(email:
473
+ @email_credential.email, password: 'hacks')), 'password not changed'
424
474
  end
425
475
 
426
476
  test "change_password rejects un-confirmed password on recovery" do
@@ -449,8 +499,8 @@ class SessionControllerApiTest < ActionController::TestCase
449
499
  credential: { old_password: 'pa55w0rd', password: 'hacks',
450
500
  password_confirmation: 'hacks' }
451
501
  assert_response :ok
452
- assert_equal @user, User.authenticate_signin(@email_credential.email,
453
- 'hacks'), 'password not changed'
502
+ assert_equal @user, User.authenticate_signin(Session.new(email:
503
+ @email_credential.email, password: 'hacks')), 'password not changed'
454
504
  end
455
505
 
456
506
  test "change_password by json rejects bad old password" do
@@ -462,8 +512,9 @@ class SessionControllerApiTest < ActionController::TestCase
462
512
  data = ActiveSupport::JSON.decode response.body
463
513
  assert_equal 'invalid', data['error']
464
514
  assert_equal @password_credential, assigns(:credential)
465
- assert_equal @user, User.authenticate_signin(@email_credential.email,
466
- 'pa55w0rd'), 'password wrongly changed'
515
+ assert_equal @user, User.authenticate_signin(Session.new(email:
516
+ @email_credential.email, password: 'pa55w0rd')),
517
+ 'password wrongly changed'
467
518
  end
468
519
 
469
520
  test "change_password by json rejects un-confirmed password" do
@@ -474,8 +525,9 @@ class SessionControllerApiTest < ActionController::TestCase
474
525
  assert_response :ok
475
526
  data = ActiveSupport::JSON.decode response.body
476
527
  assert_equal 'invalid', data['error']
477
- assert_equal @user, User.authenticate_signin(@email_credential.email,
478
- 'pa55w0rd'), 'password wrongly changed'
528
+ assert_equal @user, User.authenticate_signin(Session.new(email:
529
+ @email_credential.email, password: 'pa55w0rd')),
530
+ 'password wrongly changed'
479
531
  end
480
532
 
481
533
  test "change_password by json works for password recovery" do
@@ -484,8 +536,8 @@ class SessionControllerApiTest < ActionController::TestCase
484
536
  post :change_password, format: 'json',
485
537
  credential: { password: 'hacks', password_confirmation: 'hacks' }
486
538
  assert_response :ok
487
- assert_equal @user, User.authenticate_signin(
488
- @email_credential.email, 'hacks'), 'password not changed'
539
+ assert_equal @user, User.authenticate_signin(Session.new(email:
540
+ @email_credential.email, password: 'hacks')), 'password not changed'
489
541
  end
490
542
 
491
543
  test "change_password by json rejects un-confirmed password on recovery" do
@@ -502,7 +554,7 @@ class SessionControllerApiTest < ActionController::TestCase
502
554
 
503
555
  test "reset_password for good e-mail" do
504
556
  ActionMailer::Base.deliveries = []
505
- @request.host = 'mail.test.host:1234'
557
+ request.host = 'mail.test.host:1234'
506
558
 
507
559
  assert_difference 'Credential.count', 1 do
508
560
  post :reset_password, session: { email: @email_credential.email }
@@ -578,6 +630,105 @@ class SessionControllerApiTest < ActionController::TestCase
578
630
  assert_equal @user, token.user, 'password reset token user'
579
631
  end
580
632
 
633
+ test "OmniAuth failure" do
634
+ get :omniauth_failure
635
+
636
+ assert_redirected_to new_session_url
637
+ assert_match(/failed/, flash[:alert])
638
+ end
639
+
640
+ test "omniauth logs in with good account details" do
641
+ request.env['omniauth.auth'] =
642
+ { 'provider' => @omniauth_credential.provider,
643
+ 'uid' => @omniauth_credential.uid }
644
+ post :omniauth, provider: @omniauth_credential.provider
645
+ assert_equal @user, assigns(:current_user), 'instance variable'
646
+ assert_equal @user, session_current_user, 'session'
647
+ assert_nil flash[:alert], 'no alert'
648
+ assert_nil flash[:auth_redirect_url], 'no redirect URL in flash'
649
+ assert_redirected_to session_url
650
+ end
651
+
652
+ test "omniauth logs in with good account details and no User-Agent" do
653
+ request.headers['User-Agent'] = nil
654
+
655
+ request.env['omniauth.auth'] =
656
+ { 'provider' => @omniauth_credential.provider,
657
+ 'uid' => @omniauth_credential.uid }
658
+ post :omniauth, provider: @omniauth_credential.provider
659
+ assert_equal @user, assigns(:current_user), 'instance variable'
660
+ assert_equal @user, session_current_user, 'session'
661
+ assert_nil flash[:alert], 'no alert'
662
+ assert_nil flash[:auth_redirect_url], 'no redirect URL in flash'
663
+ assert_redirected_to session_url
664
+ end
665
+
666
+ test "omniauth purges sessions when logging in" do
667
+ BareSessionController.auto_purge_sessions = true
668
+ old_token = credentials(:jane_session_token)
669
+ old_token.updated_at = Time.now - 1.year
670
+ old_token.save!
671
+ request.env['omniauth.auth'] =
672
+ { 'provider' => @omniauth_credential.provider,
673
+ 'uid' => @omniauth_credential.uid }
674
+ post :omniauth, provider: @omniauth_credential.provider
675
+ assert_equal @user, session_current_user, 'session'
676
+ assert_nil Tokens::Base.with_code(old_token.code).first,
677
+ 'old session not purged'
678
+ end
679
+
680
+ test "omniauth does not purge sessions if auto_purge_sessions is false" do
681
+ BareSessionController.auto_purge_sessions = false
682
+ old_token = credentials(:jane_session_token)
683
+ old_token.updated_at = Time.now - 1.year
684
+ old_token.save!
685
+ request.env['omniauth.auth'] =
686
+ { 'provider' => @omniauth_credential.provider,
687
+ 'uid' => @omniauth_credential.uid }
688
+ post :omniauth, provider: @omniauth_credential.provider
689
+ assert_equal @user, session_current_user, 'session'
690
+ assert_equal old_token, Tokens::Base.with_code(old_token.code).first,
691
+ 'old session purged'
692
+ end
693
+
694
+ test "omniauth does not purge sessions if not logged in" do
695
+ BareSessionController.auto_purge_sessions = true
696
+ old_token = credentials(:jane_session_token)
697
+ old_token.updated_at = Time.now - 1.year
698
+ old_token.save!
699
+ request.env['omniauth.auth'] =
700
+ { 'provider' => @omniauth_credential.provider, 'uid' => 'fail' }
701
+ post :omniauth, provider: @omniauth_credential.provider
702
+ assert_nil session_current_user, 'session'
703
+ assert_equal old_token, Tokens::Base.with_code(old_token.code).first,
704
+ 'old session purged'
705
+ end
706
+
707
+ test "omniauth does not log in blocked accounts" do
708
+ request.env['omniauth.auth'] =
709
+ { 'provider' => @omniauth_credential.provider,
710
+ 'uid' => @omniauth_credential.uid }
711
+ with_blocked_credential @omniauth_credential do
712
+ post :omniauth, provider: @omniauth_credential.provider
713
+ end
714
+ assert_redirected_to new_session_url
715
+ assert_nil assigns(:current_user), 'instance variable'
716
+ assert_nil session_current_user, 'session'
717
+ assert_match(/ blocked/, flash[:alert])
718
+ assert_nil flash[:auth_redirect_url], 'no redirect URL in flash'
719
+ end
720
+
721
+ test "omniauth uses Credentials::OmniAuthUid.authenticate" do
722
+ omniauth_hash = { 'provider' => 'fail', 'uid' => 'fail' }
723
+ request.env['omniauth.auth'] = omniauth_hash
724
+ Credentials::OmniAuthUid.expects(:authenticate).at_least_once.
725
+ with(omniauth_hash).returns @omniauth_credential.user
726
+ post :omniauth, provider: @omniauth_credential.provider
727
+ assert_equal @user, assigns(:current_user), 'instance variable'
728
+ assert_equal @user, session_current_user, 'session'
729
+ assert_redirected_to session_url
730
+ end
731
+
581
732
  test "auth_controller? is true" do
582
733
  assert_equal true, @controller.auth_controller?
583
734
  end
@@ -0,0 +1,6 @@
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ require 'authpwn_rails/generators/templates/session_controller.rb'
4
+
5
+ # Run the tests in the generator, to make sure they pass.
6
+ require 'authpwn_rails/generators/templates/session_controller_test.rb'
@@ -1,10 +1,5 @@
1
1
  require File.expand_path('../test_helper', __FILE__)
2
2
 
3
- require 'authpwn_rails/generators/templates/session_mailer.rb'
4
-
5
- # Run the tests in the generator, to make sure they pass.
6
- require 'authpwn_rails/generators/templates/session_mailer_test.rb'
7
-
8
3
  class SessionMailerApiTest < ActionMailer::TestCase
9
4
  setup do
10
5
  @reset_email = credentials(:jane_email).email
@@ -30,7 +25,7 @@ class SessionMailerApiTest < ActionMailer::TestCase
30
25
  end
31
26
  end
32
27
  end
33
-
28
+
34
29
  teardown do
35
30
  SessionMailer.class_eval do
36
31
  undef :email_verification_from
@@ -44,10 +39,15 @@ class SessionMailerApiTest < ActionMailer::TestCase
44
39
  end
45
40
 
46
41
  test 'email verification email contents' do
47
- email = SessionMailer.email_verification_email(@verification_token,
48
- @root_url).deliver
42
+ email_draft = SessionMailer.email_verification_email @verification_token,
43
+ @root_url
44
+ if email_draft.respond_to? :deliver_now
45
+ email = email_draft.deliver_now
46
+ else
47
+ email = email_draft.deliver
48
+ end
49
49
  assert !ActionMailer::Base.deliveries.empty?
50
-
50
+
51
51
  assert_equal 'test.host e-mail verification', email.subject
52
52
  assert_equal ['email_check@test.host'], email.from
53
53
  assert_equal [@verification_email], email.to
@@ -56,14 +56,19 @@ class SessionMailerApiTest < ActionMailer::TestCase
56
56
  end
57
57
 
58
58
  test 'password reset email contents' do
59
- email = SessionMailer.reset_password_email(@reset_email, @reset_token,
60
- @root_url).deliver
59
+ email_draft = SessionMailer.reset_password_email @reset_email,
60
+ @reset_token, @root_url
61
+ if email_draft.respond_to? :deliver_now
62
+ email = email_draft.deliver_now
63
+ else
64
+ email = email_draft.deliver
65
+ end
61
66
  assert !ActionMailer::Base.deliveries.empty?
62
-
67
+
63
68
  assert_equal 'test.host password reset', email.subject
64
69
  assert_equal ['reset@test.host'], email.from
65
70
  assert_equal [@reset_email], email.to
66
- assert_match @reset_token.code, email.encoded
71
+ assert_match @reset_token.code, email.encoded
67
72
  assert_match 'hxxp://test.host:8808/session/token/', email.encoded
68
73
  end
69
74
  end
@@ -0,0 +1,6 @@
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ require 'authpwn_rails/generators/templates/session_mailer.rb'
4
+
5
+ # Run the tests in the generator, to make sure they pass.
6
+ require 'authpwn_rails/generators/templates/session_mailer_test.rb'
data/test/test_helper.rb CHANGED
@@ -1,13 +1,12 @@
1
1
  require 'rubygems'
2
- require 'test/unit'
2
+ require 'minitest/autorun'
3
3
 
4
4
  require 'action_controller'
5
5
  require 'action_mailer'
6
6
  require 'active_record'
7
+ require 'active_support/core_ext'
7
8
  require 'rails'
8
9
 
9
- require 'fbgraph_rails'
10
- require 'fbgraph_rails/controller'
11
10
  require 'sqlite3'
12
11
 
13
12
  require 'mocha/setup'
@@ -25,6 +24,7 @@ require 'helpers/fbgraph.rb'
25
24
  require 'helpers/i18n.rb'
26
25
  require 'helpers/rails.rb'
27
26
  require 'helpers/routes.rb'
27
+ require 'helpers/test_order.rb'
28
28
 
29
29
  # Simulate Rails' initializer loading.
30
30
  require 'authpwn_rails/generators/templates/initializer.rb'
data/test/user_test.rb CHANGED
@@ -56,14 +56,61 @@ class UserTest < ActiveSupport::TestCase
56
56
  assert_equal nil, User.find_by_param(nil)
57
57
  end
58
58
 
59
- test 'authenticate_signin' do
60
- assert_equal users(:jane),
61
- User.authenticate_signin('jane@gmail.com', 'pa55w0rd')
62
- assert_equal :invalid,
63
- User.authenticate_signin('jane@gmail.com', 'password'),
59
+ test 'authenticate_signin with valid data' do
60
+ signin = Session.new email: 'jane@gmail.com', password: 'pa55w0rd'
61
+ assert_equal users(:jane), User.authenticate_signin(signin)
62
+ end
63
+
64
+ test 'authenticate_signin with wrong password' do
65
+ signin = Session.new email: 'jane@gmail.com', password: 'password'
66
+ assert_equal :invalid, User.authenticate_signin(signin),
64
67
  "John's password on Jane's account"
65
- assert_equal :blocked,
66
- User.authenticate_signin('john@gmail.com', 'password')
68
+ end
69
+
70
+ test 'authenticate_signin on blocked e-mail' do
71
+ signin = Session.new email: 'john@gmail.com', password: 'pa55w0rd'
72
+ assert_equal :blocked, User.authenticate_signin(signin)
73
+ end
74
+
75
+ test 'related_to_omniauth without e-mail' do
76
+ assert_equal nil, User.related_to_omniauth('provider' => 'developer',
77
+ 'uid' => 'john@gmail.com')
78
+ assert_equal nil, User.related_to_omniauth('provider' => 'developer',
79
+ 'uid' => 'john@gmail.com',
80
+ 'info' => {})
81
+ end
82
+
83
+ test 'related_to_omniauth with existing e-mail' do
84
+ Credentials::OmniAuthUid.destroy_all
85
+ assert_equal users(:john), User.related_to_omniauth(
86
+ 'provider' => 'developer', 'uid' => 'john_gmail_com_uid',
87
+ 'info' => { 'email' => 'john@gmail.com' })
88
+ end
89
+
90
+ test 'related_to_omniauth with non-existing e-mail' do
91
+ assert_equal nil, User.related_to_omniauth('provider' => 'developer',
92
+ 'uid' => 'new_user@gmail.com',
93
+ 'info' => { 'email' => 'new_user@gmail.com' })
94
+ end
95
+
96
+ test 'create_from_omniauth without e-mail' do
97
+ assert_equal nil, User.create_from_omniauth('provider' => 'developer',
98
+ 'uid' => 'newuser@gmail.com')
99
+ assert_equal nil, User.create_from_omniauth('provider' => 'developer',
100
+ 'uid' => 'newuser@gmail.com',
101
+ 'info' => {})
102
+ end
103
+
104
+ test 'create_from_omniauth with e-mail' do
105
+ omniauth_hash = { 'provider' => 'developer',
106
+ 'uid' => 'newuser_gmail_com_uid',
107
+ 'info' => { 'email' => 'newuser@gmail.com' } }
108
+ user = User.create_from_omniauth omniauth_hash
109
+ assert_not_nil user
110
+ email_credential = Credentials::Email.where(user: user).first
111
+ assert_not_nil email_credential
112
+ assert_equal 'newuser@gmail.com', email_credential.email
113
+ assert_equal true, email_credential.valid?
67
114
  end
68
115
 
69
116
  test 'autosaves credentials' do