xing_backend_token_auth 0.1.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +13 -0
  3. data/README.md +679 -0
  4. data/Rakefile +34 -0
  5. data/app/controllers/devise_token_auth/application_controller.rb +22 -0
  6. data/app/controllers/devise_token_auth/concerns/set_user_by_token.rb +110 -0
  7. data/app/controllers/devise_token_auth/confirmations_controller.rb +31 -0
  8. data/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb +169 -0
  9. data/app/controllers/devise_token_auth/passwords_controller.rb +107 -0
  10. data/app/controllers/devise_token_auth/registrations_controller.rb +99 -0
  11. data/app/controllers/devise_token_auth/sessions_controller.rb +50 -0
  12. data/app/controllers/devise_token_auth/token_validations_controller.rb +22 -0
  13. data/app/serializers/devise_token_auth/error_messages_serializer.rb +16 -0
  14. data/app/serializers/devise_token_auth/resource_errors_serializer.rb +24 -0
  15. data/app/serializers/devise_token_auth/resource_serializer.rb +17 -0
  16. data/app/serializers/devise_token_auth/success_message_serializer.rb +15 -0
  17. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  18. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  19. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  20. data/app/views/devise_token_auth/omniauth_failure.html.erb +2 -0
  21. data/app/views/devise_token_auth/omniauth_success.html.erb +8 -0
  22. data/app/views/layouts/omniauth_response.html.erb +31 -0
  23. data/config/initializers/devise.rb +207 -0
  24. data/config/initializers/token_auth_failure_app.rb +7 -0
  25. data/config/locales/devise.en.yml +59 -0
  26. data/config/routes.rb +5 -0
  27. data/lib/devise_token_auth.rb +9 -0
  28. data/lib/devise_token_auth/controllers/helpers.rb +129 -0
  29. data/lib/devise_token_auth/controllers/url_helpers.rb +8 -0
  30. data/lib/devise_token_auth/engine.rb +32 -0
  31. data/lib/devise_token_auth/models/token_authenticatable.rb +195 -0
  32. data/lib/devise_token_auth/rails/routes.rb +65 -0
  33. data/lib/generators/devise_token_auth/USAGE +31 -0
  34. data/lib/generators/devise_token_auth/install_generator.rb +100 -0
  35. data/lib/generators/devise_token_auth/install_views_generator.rb +16 -0
  36. data/lib/generators/devise_token_auth/templates/devise_token_auth.rb +22 -0
  37. data/lib/generators/devise_token_auth/templates/devise_token_auth_add_token_info_to_users.rb.erb +14 -0
  38. data/lib/tasks/devise_token_auth_tasks.rake +4 -0
  39. data/lib/xing_backend_token_auth.rb +1 -0
  40. data/test/controllers/demo_group_controller_test.rb +126 -0
  41. data/test/controllers/demo_mang_controller_test.rb +263 -0
  42. data/test/controllers/demo_user_controller_test.rb +262 -0
  43. data/test/controllers/devise_token_auth/confirmations_controller_test.rb +107 -0
  44. data/test/controllers/devise_token_auth/omniauth_callbacks_controller_test.rb +144 -0
  45. data/test/controllers/devise_token_auth/passwords_controller_test.rb +275 -0
  46. data/test/controllers/devise_token_auth/registrations_controller_test.rb +405 -0
  47. data/test/controllers/devise_token_auth/registrations_controller_test.rb.orig +494 -0
  48. data/test/controllers/devise_token_auth/sessions_controller_test.rb +169 -0
  49. data/test/controllers/overrides/confirmations_controller_test.rb +44 -0
  50. data/test/controllers/overrides/omniauth_callbacks_controller_test.rb +44 -0
  51. data/test/controllers/overrides/passwords_controller_test.rb +64 -0
  52. data/test/controllers/overrides/registrations_controller_test.rb +42 -0
  53. data/test/controllers/overrides/sessions_controller_test.rb +35 -0
  54. data/test/controllers/overrides/token_validations_controller_test.rb +38 -0
  55. data/test/dummy/README.rdoc +28 -0
  56. data/test/dummy/Rakefile +6 -0
  57. data/test/dummy/app/assets/images/logo.jpg +0 -0
  58. data/test/dummy/app/assets/images/omniauth-provider-settings.png +0 -0
  59. data/test/dummy/app/assets/javascripts/application.js +13 -0
  60. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  61. data/test/dummy/app/controllers/application_controller.rb +16 -0
  62. data/test/dummy/app/controllers/demo_group_controller.rb +13 -0
  63. data/test/dummy/app/controllers/demo_mang_controller.rb +12 -0
  64. data/test/dummy/app/controllers/demo_user_controller.rb +12 -0
  65. data/test/dummy/app/controllers/overrides/confirmations_controller.rb +32 -0
  66. data/test/dummy/app/controllers/overrides/omniauth_callbacks_controller.rb +14 -0
  67. data/test/dummy/app/controllers/overrides/passwords_controller.rb +39 -0
  68. data/test/dummy/app/controllers/overrides/registrations_controller.rb +27 -0
  69. data/test/dummy/app/controllers/overrides/sessions_controller.rb +26 -0
  70. data/test/dummy/app/controllers/overrides/token_validations_controller.rb +23 -0
  71. data/test/dummy/app/controllers/registrations_controller.rb +2 -0
  72. data/test/dummy/app/helpers/application_helper.rb +1065 -0
  73. data/test/dummy/app/models/evil_user.rb +5 -0
  74. data/test/dummy/app/models/mang.rb +5 -0
  75. data/test/dummy/app/models/user.rb +20 -0
  76. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  77. data/test/dummy/bin/bundle +3 -0
  78. data/test/dummy/bin/rails +8 -0
  79. data/test/dummy/bin/rake +8 -0
  80. data/test/dummy/bin/spring +18 -0
  81. data/test/dummy/config.ru +16 -0
  82. data/test/dummy/config/application.rb +23 -0
  83. data/test/dummy/config/boot.rb +5 -0
  84. data/test/dummy/config/database.yml +31 -0
  85. data/test/dummy/config/environment.rb +5 -0
  86. data/test/dummy/config/environments/development.rb +44 -0
  87. data/test/dummy/config/environments/production.rb +82 -0
  88. data/test/dummy/config/environments/test.rb +40 -0
  89. data/test/dummy/config/initializers/assets.rb +8 -0
  90. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  91. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  92. data/test/dummy/config/initializers/devise_token_auth.rb +22 -0
  93. data/test/dummy/config/initializers/figaro.rb +1 -0
  94. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  95. data/test/dummy/config/initializers/inflections.rb +16 -0
  96. data/test/dummy/config/initializers/mime_types.rb +4 -0
  97. data/test/dummy/config/initializers/omniauth.rb +8 -0
  98. data/test/dummy/config/initializers/session_store.rb +3 -0
  99. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  100. data/test/dummy/config/locales/en.yml +23 -0
  101. data/test/dummy/config/routes.rb +32 -0
  102. data/test/dummy/config/secrets.yml +22 -0
  103. data/test/dummy/config/spring.rb +1 -0
  104. data/test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb +56 -0
  105. data/test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb +56 -0
  106. data/test/dummy/db/migrate/20140829044006_add_operating_thetan_to_user.rb +6 -0
  107. data/test/dummy/db/migrate/20140916224624_add_favorite_color_to_mangs.rb +5 -0
  108. data/test/dummy/db/migrate/20140928231203_devise_token_auth_create_evil_users.rb +57 -0
  109. data/test/dummy/db/schema.rb +111 -0
  110. data/test/dummy/public/404.html +67 -0
  111. data/test/dummy/public/422.html +67 -0
  112. data/test/dummy/public/500.html +66 -0
  113. data/test/dummy/public/favicon.ico +0 -0
  114. data/test/fixtures/evil_users.yml +29 -0
  115. data/test/fixtures/mangs.yml +29 -0
  116. data/test/fixtures/users.yml +29 -0
  117. data/test/integration/navigation_test.rb +10 -0
  118. data/test/lib/generators/devise_token_auth/install_generator_test.rb +131 -0
  119. data/test/lib/generators/devise_token_auth/install_views_generator_test.rb +23 -0
  120. data/test/models/user_test.rb +81 -0
  121. data/test/test_helper.rb +60 -0
  122. metadata +320 -0
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/422.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The change you wanted was rejected.</h1>
62
+ <p>Maybe you tried to change something you didn't have access to.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,66 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/500.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>We're sorry, but something went wrong.</h1>
62
+ </div>
63
+ <p>If you are the application owner check the logs for more information.</p>
64
+ </div>
65
+ </body>
66
+ </html>
File without changes
@@ -0,0 +1,29 @@
1
+ <% timestamp = DateTime.parse(2.weeks.ago.to_s).to_time.strftime("%F %T") %>
2
+ <% @email = Faker::Internet.email %>
3
+ confirmed_email_user:
4
+ uid: "<%= @email %>"
5
+ email: "<%= @email %>"
6
+ provider: 'email'
7
+ confirmed_at: '<%= timestamp %>'
8
+ created_at: '<%= timestamp %>'
9
+ updated_at: '<%= timestamp %>'
10
+ encrypted_password: <%= User.new.send(:password_digest, 'secret123') %>
11
+
12
+ <% @fb_email = Faker::Internet.email %>
13
+ duplicate_email_facebook_user:
14
+ uid: "<%= Faker::Number.number(10) %>"
15
+ email: "<%= @fb_email %>"
16
+ provider: 'facebook'
17
+ created_at: '<%= timestamp %>'
18
+ updated_at: '<%= timestamp %>'
19
+ confirmed_at: '<%= timestamp %>'
20
+ encrypted_password: <%= User.new.send(:password_digest, 'secret123') %>
21
+
22
+ <% @unconfirmed_email = Faker::Internet.email %>
23
+ unconfirmed_email_user:
24
+ uid: "<%= @unconfirmed_email %>"
25
+ email: "<%= @unconfirmed_email %>"
26
+ provider: 'email'
27
+ created_at: '<%= timestamp %>'
28
+ updated_at: '<%= timestamp %>'
29
+ encrypted_password: <%= User.new.send(:password_digest, 'secret123') %>
@@ -0,0 +1,29 @@
1
+ <% timestamp = DateTime.parse(2.weeks.ago.to_s).to_time.strftime("%F %T") %>
2
+ <% @email = Faker::Internet.email %>
3
+ confirmed_email_user:
4
+ uid: "<%= @email %>"
5
+ email: "<%= @email %>"
6
+ provider: 'email'
7
+ confirmed_at: '<%= timestamp %>'
8
+ created_at: '<%= timestamp %>'
9
+ updated_at: '<%= timestamp %>'
10
+ encrypted_password: <%= Mang.new.send(:password_digest, 'secret123') %>
11
+
12
+ <% @fb_email = Faker::Internet.email %>
13
+ duplicate_email_facebook_user:
14
+ uid: "<%= Faker::Number.number(10) %>"
15
+ email: "<%= @fb_email %>"
16
+ provider: 'facebook'
17
+ created_at: '<%= timestamp %>'
18
+ updated_at: '<%= timestamp %>'
19
+ confirmed_at: '<%= timestamp %>'
20
+ encrypted_password: <%= Mang.new.send(:password_digest, 'secret123') %>
21
+
22
+ <% @unconfirmed_email = Faker::Internet.email %>
23
+ unconfirmed_email_user:
24
+ uid: "<%= @unconfirmed_email %>"
25
+ email: "<%= @unconfirmed_email %>"
26
+ provider: 'email'
27
+ created_at: '<%= timestamp %>'
28
+ updated_at: '<%= timestamp %>'
29
+ encrypted_password: <%= Mang.new.send(:password_digest, 'secret123') %>
@@ -0,0 +1,29 @@
1
+ <% timestamp = DateTime.parse(2.weeks.ago.to_s).to_time.strftime("%F %T") %>
2
+ <% @email = Faker::Internet.email %>
3
+ confirmed_email_user:
4
+ uid: "<%= @email %>"
5
+ email: "<%= @email %>"
6
+ provider: 'email'
7
+ confirmed_at: '<%= timestamp %>'
8
+ created_at: '<%= timestamp %>'
9
+ updated_at: '<%= timestamp %>'
10
+ encrypted_password: <%= User.new.send(:password_digest, 'secret123') %>
11
+
12
+ <% @fb_email = Faker::Internet.email %>
13
+ duplicate_email_facebook_user:
14
+ uid: "<%= Faker::Number.number(10) %>"
15
+ email: "<%= @fb_email %>"
16
+ provider: 'facebook'
17
+ created_at: '<%= timestamp %>'
18
+ updated_at: '<%= timestamp %>'
19
+ confirmed_at: '<%= timestamp %>'
20
+ encrypted_password: <%= User.new.send(:password_digest, 'secret123') %>
21
+
22
+ <% @unconfirmed_email = Faker::Internet.email %>
23
+ unconfirmed_email_user:
24
+ uid: "<%= @unconfirmed_email %>"
25
+ email: "<%= @unconfirmed_email %>"
26
+ provider: 'email'
27
+ created_at: '<%= timestamp %>'
28
+ updated_at: '<%= timestamp %>'
29
+ encrypted_password: <%= User.new.send(:password_digest, 'secret123') %>
@@ -0,0 +1,10 @@
1
+ require 'test_helper'
2
+
3
+ class NavigationTest < ActionDispatch::IntegrationTest
4
+ fixtures :all
5
+
6
+ # test "the truth" do
7
+ # assert true
8
+ # end
9
+ end
10
+
@@ -0,0 +1,131 @@
1
+ require 'test_helper'
2
+ require 'fileutils'
3
+ require 'generators/devise_token_auth/install_generator'
4
+
5
+ module DeviseTokenAuth
6
+ class InstallGeneratorTest < Rails::Generators::TestCase
7
+ tests InstallGenerator
8
+ destination Rails.root.join('tmp/generators')
9
+
10
+ describe 'default values, clean install' do
11
+ setup :prepare_destination
12
+
13
+ before do
14
+ run_generator
15
+ end
16
+
17
+ test 'initializer is created' do
18
+ assert_file 'config/initializers/devise_token_auth.rb'
19
+ end
20
+
21
+ test 'migration is created' do
22
+ assert_migration 'db/migrate/devise_token_auth_add_token_info_to_users.rb'
23
+ end
24
+
25
+ test 'subsequent runs raise no errors' do
26
+ run_generator
27
+ end
28
+ end
29
+
30
+ describe 'routes' do
31
+ setup :prepare_destination
32
+
33
+ before do
34
+ @dir = File.join(destination_root, "config")
35
+
36
+ @fname = File.join(@dir, "routes.rb")
37
+
38
+ # make dir if not exists
39
+ FileUtils.mkdir_p(@dir)
40
+
41
+ @f = File.open(@fname, 'w') {|f|
42
+ f.write <<-RUBY
43
+ Rails.application.routes.draw do
44
+ patch '/chong', to: 'bong#index'
45
+ end
46
+ RUBY
47
+ }
48
+
49
+ run_generator
50
+ end
51
+
52
+ test 'route method is appended to routes file' do
53
+ assert_file 'config/routes.rb' do |routes|
54
+ assert_match(/mount_devise_token_auth_for 'User', at: '\/auth'/, routes)
55
+ end
56
+ end
57
+
58
+ test 'subsequent runs do not modify file' do
59
+ run_generator
60
+ assert_file 'config/routes.rb' do |routes|
61
+ matches = routes.scan(/mount_devise_token_auth_for 'User', at: '\/auth'/m).size
62
+ assert_equal 1, matches
63
+ end
64
+ end
65
+
66
+ describe 'subsequent models' do
67
+ before do
68
+ run_generator %w(Mang /mangs)
69
+ end
70
+
71
+ test 'migration is created' do
72
+ assert_migration 'db/migrate/devise_token_auth_add_token_info_to_mangs.rb'
73
+ end
74
+
75
+ test 'route method is appended to routes file' do
76
+ assert_file 'config/routes.rb' do |routes|
77
+ assert_match(/mount_devise_token_auth_for 'Mang', at: '\/mangs'/, routes)
78
+ end
79
+ end
80
+
81
+ test 'devise_for block is appended to routes file' do
82
+ assert_file 'config/routes.rb' do |routes|
83
+ assert_match(/as :mang do/, routes)
84
+ assert_match(/# Define routes for Mang within this block./, routes)
85
+ end
86
+ end
87
+ end
88
+ end
89
+
90
+ describe 'application controller' do
91
+ setup :prepare_destination
92
+
93
+ before do
94
+ @dir = File.join(destination_root, "app", "controllers")
95
+
96
+ @fname = File.join(@dir, "application_controller.rb")
97
+
98
+ # make dir if not exists
99
+ FileUtils.mkdir_p(@dir)
100
+
101
+ @f = File.open(@fname, 'w') {|f|
102
+ f.write <<-RUBY
103
+ class ApplicationController < ActionController::Base
104
+ respond_to :json
105
+
106
+ def whatever
107
+ 'whatever'
108
+ end
109
+ end
110
+ RUBY
111
+ }
112
+
113
+ run_generator
114
+ end
115
+
116
+ test 'controller concern is appended to application controller' do
117
+ assert_file 'app/controllers/application_controller.rb' do |controller|
118
+ assert_match(/include DeviseTokenAuth::Concerns::SetUserByToken/, controller)
119
+ end
120
+ end
121
+
122
+ test 'subsequent runs do not modify file' do
123
+ run_generator
124
+ assert_file 'app/controllers/application_controller.rb' do |controller|
125
+ matches = controller.scan(/include DeviseTokenAuth::Concerns::SetUserByToken/m).size
126
+ assert_equal 1, matches
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,23 @@
1
+ require 'test_helper'
2
+ require 'fileutils'
3
+ require 'generators/devise_token_auth/install_views_generator'
4
+
5
+ module DeviseTokenAuth
6
+ class InstallViewsGeneratorTest < Rails::Generators::TestCase
7
+ tests InstallViewsGenerator
8
+ destination Rails.root.join('tmp/generators')
9
+
10
+ describe 'default values, clean install' do
11
+ setup :prepare_destination
12
+
13
+ before do
14
+ run_generator
15
+ end
16
+
17
+ test "files are copied" do
18
+ assert_file 'app/views/devise/mailer/reset_password_instructions.html.erb'
19
+ assert_file 'app/views/devise/mailer/confirmation_instructions.html.erb'
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,81 @@
1
+ require 'test_helper'
2
+
3
+ class UserTest < ActiveSupport::TestCase
4
+ describe User do
5
+ before do
6
+ @password = Faker::Internet.password(10, 20)
7
+ @email = Faker::Internet.email
8
+ @success_url = Faker::Internet.url
9
+ @user = User.new()
10
+ end
11
+
12
+ describe 'serialization' do
13
+ test 'hash should not include sensitive info' do
14
+ refute @user.as_json[:tokens]
15
+ end
16
+ end
17
+
18
+ describe 'email registration' do
19
+ test 'model should not save if email is blank' do
20
+ @user.provider = 'email'
21
+ @user.password = @password
22
+ @user.password_confirmation = @password
23
+
24
+ refute @user.save
25
+ assert @user.errors.messages[:email]
26
+ end
27
+ end
28
+
29
+ describe 'oauth2 authentication' do
30
+ test 'model should save even if email is blank' do
31
+ @user.provider = 'facebook'
32
+ @user.email = @email
33
+ @user.password = @password
34
+ @user.password_confirmation = @password
35
+ @user.confirm_success_url = @success_url
36
+
37
+ assert @user.save
38
+ end
39
+ end
40
+
41
+ describe 'token expiry' do
42
+ before do
43
+ @user = users(:confirmed_email_user)
44
+ @user.skip_confirmation!
45
+ @user.save!
46
+
47
+ @auth_headers = @user.create_new_auth_token
48
+
49
+ @token = @auth_headers['access-token']
50
+ @client_id = @auth_headers['client']
51
+ end
52
+
53
+ test 'should properly indicate whether token is current' do
54
+ assert @user.token_is_current?(@token, @client_id)
55
+ # we want to update the expiry without forcing a cleanup (see below)
56
+ @user.tokens[@client_id]['expiry'] = Time.now.to_i - 10.seconds
57
+ refute @user.token_is_current?(@token, @client_id)
58
+ end
59
+ end
60
+
61
+ describe 'expired tokens are destroyed on save' do
62
+ before do
63
+ @user = users(:confirmed_email_user)
64
+ @user.skip_confirmation!
65
+ @user.save!
66
+
67
+ @old_auth_headers = @user.create_new_auth_token
68
+ @new_auth_headers = @user.create_new_auth_token
69
+ expire_token(@user, @old_auth_headers['client'])
70
+ end
71
+
72
+ test 'expired token was removed' do
73
+ refute @user.tokens[@old_auth_headers['client']]
74
+ end
75
+
76
+ test 'current token was not removed' do
77
+ assert @user.tokens[@new_auth_headers['client']]
78
+ end
79
+ end
80
+ end
81
+ end