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,494 @@
1
+ require 'test_helper'
2
+
3
+ # was the web request successful?
4
+ # was the user redirected to the right page?
5
+ # was the user successfully authenticated?
6
+ # was the correct object stored in the response?
7
+ # was the appropriate message delivered in the json payload?
8
+
9
+
10
+ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::IntegrationTest
11
+ describe DeviseTokenAuth::RegistrationsController do
12
+ describe "Successful registration" do
13
+ before do
14
+ <<<<<<< HEAD
15
+ xhr :post, :create, {
16
+ =======
17
+ @mails_sent = ActionMailer::Base.deliveries.count
18
+
19
+ post '/auth', {
20
+ email: Faker::Internet.email,
21
+ password: "secret123",
22
+ password_confirmation: "secret123",
23
+ >>>>>>> upstream/master
24
+ confirm_success_url: Faker::Internet.url,
25
+ user: {
26
+ email: Faker::Internet.email,
27
+ password: "secret123",
28
+ password_confirmation: "secret123",
29
+ unpermitted_param: '(x_x)'
30
+ }
31
+ }
32
+
33
+ @user = assigns(:user)
34
+ @data = JSON.parse(response.body)
35
+ @mail = ActionMailer::Base.deliveries.last
36
+ end
37
+
38
+ test "request should be successful" do
39
+ assert_equal 200, response.status
40
+ end
41
+
42
+ test "user should have been created" do
43
+ assert @user.id
44
+ end
45
+
46
+ test "user should not be confirmed" do
47
+ assert_nil @user.confirmed_at
48
+ end
49
+
50
+ test "new user data should be returned as json" do
51
+ assert @data['data']['email']
52
+ end
53
+
54
+ test "new user should receive confirmation email" do
55
+ assert_equal @user.email, @mail['to'].to_s
56
+ end
57
+
58
+ test "new user password should not be returned" do
59
+ assert_nil @data['data']['password']
60
+ end
61
+
62
+ test "only one email was sent" do
63
+ assert_equal @mails_sent + 1, ActionMailer::Base.deliveries.count
64
+ end
65
+ end
66
+
67
+ describe "Adding extra params" do
68
+ before do
69
+ @redirect_url = Faker::Internet.url
70
+ @operating_thetan = 2
71
+
72
+ <<<<<<< HEAD
73
+ xhr :post, :create, {
74
+ =======
75
+ post '/auth', {
76
+ email: Faker::Internet.email,
77
+ password: "secret123",
78
+ password_confirmation: "secret123",
79
+ >>>>>>> upstream/master
80
+ confirm_success_url: @redirect_url,
81
+ user: {
82
+ email: Faker::Internet.email,
83
+ password: "secret123",
84
+ password_confirmation: "secret123",
85
+ favorite_color: @fav_color,
86
+ operating_thetan: @operating_thetan
87
+ }
88
+ }
89
+
90
+ @user = assigns(:user)
91
+ @data = JSON.parse(response.body)
92
+ @mail = ActionMailer::Base.deliveries.last
93
+
94
+ @mail_reset_token = @mail.body.match(/confirmation_token=([^&]*)&/)[1]
95
+ @mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=(.*)\"/)[1])
96
+ @mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
97
+ end
98
+
99
+ test 'redirect_url is included as param in email' do
100
+ assert_equal @redirect_url, @mail_redirect_url
101
+ end
102
+
103
+ test "additional sign_up params should be considered" do
104
+ assert_equal @operating_thetan, @user.operating_thetan
105
+ end
106
+
107
+ test 'config_name param is included in the confirmation email link' do
108
+ assert @mail_config_name
109
+ end
110
+
111
+ test "client config name falls back to 'default'" do
112
+ assert_equal "default", @mail_config_name
113
+ end
114
+ end
115
+
116
+ describe "Mismatched passwords" do
117
+ before do
118
+ <<<<<<< HEAD
119
+ xhr :post, :create, {
120
+ confirm_success_url: Faker::Internet.url,
121
+ user: {
122
+ email: Faker::Internet.email,
123
+ password: "secret123",
124
+ password_confirmation: "bogus"
125
+ }
126
+ =======
127
+ post '/auth', {
128
+ email: Faker::Internet.email,
129
+ password: "secret123",
130
+ password_confirmation: "bogus",
131
+ confirm_success_url: Faker::Internet.url
132
+ >>>>>>> upstream/master
133
+ }
134
+
135
+ @user = assigns(:user)
136
+ @data = JSON.parse(response.body)
137
+ end
138
+
139
+ test "request should not be successful" do
140
+ assert_equal 403, response.status
141
+ end
142
+
143
+ test "user should have been created" do
144
+ assert_nil @user.id
145
+ end
146
+
147
+ test "error should be returned in the response" do
148
+ assert @data['errors'].length
149
+ end
150
+ end
151
+
152
+ describe "Existing users" do
153
+ before do
154
+ @existing_user = users(:confirmed_email_user)
155
+
156
+ <<<<<<< HEAD
157
+ xhr :post, :create, {
158
+ confirm_success_url: Faker::Internet.url,
159
+ user: {
160
+ email: @existing_user.email,
161
+ password: "secret123",
162
+ password_confirmation: "secret123"
163
+ }
164
+ =======
165
+ post "/auth", {
166
+ email: @existing_user.email,
167
+ password: "secret123",
168
+ password_confirmation: "secret123",
169
+ confirm_success_url: Faker::Internet.url
170
+ >>>>>>> upstream/master
171
+ }
172
+
173
+ @user = assigns(:user)
174
+ @data = JSON.parse(response.body)
175
+ end
176
+
177
+ test "request should not be successful" do
178
+ assert_equal 403, response.status
179
+ end
180
+
181
+ test "user should have been created" do
182
+ assert_nil @user.id
183
+ end
184
+
185
+ test "error should be returned in the response" do
186
+ assert @data['errors'].length
187
+ end
188
+ end
189
+
190
+
191
+ describe "Destroy user account" do
192
+ describe "success" do
193
+ before do
194
+ @existing_user = users(:confirmed_email_user)
195
+ @auth_headers = @existing_user.create_new_auth_token
196
+ @client_id = @auth_headers['client']
197
+
198
+ # ensure request is not treated as batch request
199
+ age_token(@existing_user, @client_id)
200
+
201
+ delete "/auth", {}, @auth_headers
202
+
203
+ @data = JSON.parse(response.body)
204
+ end
205
+
206
+ test 'request is successful' do
207
+ assert_equal 200, response.status
208
+ end
209
+
210
+ test "existing user should be deleted" do
211
+ refute User.where(id: @existing_user.id).first
212
+ end
213
+ end
214
+
215
+ describe 'failure: no auth headers' do
216
+ before do
217
+ delete "/auth"
218
+ @data = JSON.parse(response.body)
219
+ end
220
+
221
+ test 'request returns 404 (not found) status' do
222
+ assert_equal 404, response.status
223
+ end
224
+ end
225
+ end
226
+
227
+
228
+ describe "Update user account" do
229
+ describe "existing user" do
230
+ before do
231
+ @existing_user = users(:confirmed_email_user)
232
+ @auth_headers = @existing_user.create_new_auth_token
233
+ @client_id = @auth_headers['client']
234
+
235
+ # ensure request is not treated as batch request
236
+ age_token(@existing_user, @client_id)
237
+ end
238
+
239
+ describe "success" do
240
+ before do
241
+ # test valid update param
242
+ @new_operating_thetan = 1000000
243
+
244
+ <<<<<<< HEAD
245
+ xhr :put, :update, {
246
+ user: {
247
+ operating_thetan: @new_operating_thetan
248
+ }
249
+ }
250
+ =======
251
+ put "/auth", {
252
+ operating_thetan: @new_operating_thetan
253
+ }, @auth_headers
254
+ >>>>>>> upstream/master
255
+
256
+ @data = JSON.parse(response.body)
257
+ @existing_user.reload
258
+ end
259
+
260
+ test "Request was successful" do
261
+ assert_equal 200, response.status
262
+ end
263
+
264
+ test "User attribute was updated" do
265
+ assert_equal @new_operating_thetan, @existing_user.operating_thetan
266
+ end
267
+ end
268
+
269
+ describe "error" do
270
+ before do
271
+ # test invalid update param
272
+ @new_operating_thetan = "blegh"
273
+ <<<<<<< HEAD
274
+ xhr :put, :update, {
275
+ user: {
276
+ operating_thetan: @new_operating_thetan
277
+ }
278
+ }
279
+ =======
280
+ put "/auth", {
281
+ operating_thetan: @new_operating_thetan
282
+ }, @auth_headers
283
+ >>>>>>> upstream/master
284
+
285
+ @data = JSON.parse(response.body)
286
+ @existing_user.reload
287
+ end
288
+
289
+ test "Request was NOT successful" do
290
+ assert_equal 403, response.status
291
+ end
292
+
293
+ test "Errors were provided with response" do
294
+ assert @data["errors"].length
295
+ end
296
+ end
297
+ end
298
+
299
+ describe "invalid user" do
300
+ before do
301
+ @existing_user = users(:confirmed_email_user)
302
+ @auth_headers = @existing_user.create_new_auth_token
303
+ @client_id = @auth_headers['client']
304
+
305
+ # ensure request is not treated as batch request
306
+ expire_token(@existing_user, @client_id)
307
+
308
+ # test valid update param
309
+ @new_operating_thetan = 3
310
+
311
+ <<<<<<< HEAD
312
+ xhr :put, :update, {
313
+ user: {
314
+ operating_thetan: @new_operating_thetan
315
+ }
316
+ }
317
+ =======
318
+ put "/auth", {
319
+ operating_thetan: @new_operating_thetan
320
+ }, @auth_headers
321
+ >>>>>>> upstream/master
322
+
323
+ @data = JSON.parse(response.body)
324
+ @existing_user.reload
325
+ end
326
+
327
+ test "Response should return 404 status" do
328
+ assert_equal 404, response.status
329
+ end
330
+
331
+ test "User should not be updated" do
332
+ refute_equal @new_operating_thetan, @existing_user.operating_thetan
333
+ end
334
+ end
335
+ end
336
+
337
+ <<<<<<< HEAD
338
+ =======
339
+ describe "Ouath user has existing email" do
340
+ before do
341
+ @existing_user = users(:duplicate_email_facebook_user)
342
+
343
+ post "/auth", {
344
+ email: @existing_user.email,
345
+ password: "secret123",
346
+ password_confirmation: "secret123",
347
+ confirm_success_url: Faker::Internet.url
348
+ }
349
+
350
+ @user = assigns(:resource)
351
+ @data = JSON.parse(response.body)
352
+ end
353
+
354
+ test "request should be successful" do
355
+ assert_equal 200, response.status
356
+ end
357
+
358
+ test "user should have been created" do
359
+ assert @user.id
360
+ end
361
+
362
+ test "new user data should be returned as json" do
363
+ assert @data['data']['email']
364
+ end
365
+ end
366
+
367
+ >>>>>>> upstream/master
368
+ describe "Alternate user class" do
369
+ before do
370
+ <<<<<<< HEAD
371
+ xhr :post, :create, {
372
+ confirm_success_url: Faker::Internet.url,
373
+ mang: {
374
+ email: Faker::Internet.email,
375
+ password: "secret123",
376
+ password_confirmation: "secret123"
377
+ }
378
+ =======
379
+ post "/mangs", {
380
+ email: Faker::Internet.email,
381
+ password: "secret123",
382
+ password_confirmation: "secret123",
383
+ confirm_success_url: Faker::Internet.url
384
+ >>>>>>> upstream/master
385
+ }
386
+
387
+ @user = assigns(:mang)
388
+ @data = JSON.parse(response.body)
389
+ @mail = ActionMailer::Base.deliveries.last
390
+ end
391
+
392
+ test "request should be successful" do
393
+ assert_equal 200, response.status
394
+ end
395
+
396
+ test "use should be a Mang" do
397
+ assert_equal "Mang", @user.class.name
398
+ end
399
+
400
+ test "Mang should be destroyed" do
401
+ @user.confirm!
402
+ @auth_headers = @user.create_new_auth_token
403
+ @client_id = @auth_headers['client']
404
+
405
+ # ensure request is not treated as batch request
406
+ age_token(@user, @client_id)
407
+
408
+ delete "/mangs", {}, @auth_headers
409
+
410
+ assert_equal 200, response.status
411
+ refute Mang.where(id: @user.id).first
412
+ end
413
+ end
414
+
415
+ describe "Passing client config name" do
416
+ before do
417
+ @config_name = 'altUser'
418
+
419
+ <<<<<<< HEAD
420
+ xhr :post, :create, {
421
+ =======
422
+ post "/mangs", {
423
+ email: Faker::Internet.email,
424
+ password: "secret123",
425
+ password_confirmation: "secret123",
426
+ >>>>>>> upstream/master
427
+ confirm_success_url: Faker::Internet.url,
428
+ config_name: @config_name,
429
+ mang: {
430
+ email: Faker::Internet.email,
431
+ password: "secret123",
432
+ password_confirmation: "secret123"
433
+
434
+ }
435
+ }
436
+
437
+ @user = assigns(:mang)
438
+ @data = JSON.parse(response.body)
439
+ @mail = ActionMailer::Base.deliveries.last
440
+
441
+ @user.reload
442
+
443
+ @mail_reset_token = @mail.body.match(/confirmation_token=([^&]*)&/)[1]
444
+ @mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=(.*)\"/)[1])
445
+ @mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
446
+ end
447
+
448
+ test 'config_name param is included in the confirmation email link' do
449
+ assert_equal @config_name, @mail_config_name
450
+ end
451
+ end
452
+
453
+ describe "Skipped confirmation" do
454
+ setup do
455
+ User.set_callback(:create, :before, :skip_confirmation!)
456
+
457
+ post "/auth", {
458
+ email: Faker::Internet.email,
459
+ password: "secret123",
460
+ password_confirmation: "secret123",
461
+ confirm_success_url: Faker::Internet.url
462
+ }
463
+
464
+ @user = assigns(:user)
465
+ @token = response.headers["access-token"]
466
+ @client_id = response.headers["client"]
467
+ end
468
+
469
+ teardown do
470
+ User.skip_callback(:create, :before, :skip_confirmation!)
471
+ end
472
+
473
+ test "user was created" do
474
+ assert @user
475
+ end
476
+
477
+ test "user was confirmed" do
478
+ assert @user.confirmed?
479
+ end
480
+
481
+ test "auth headers were returned in response" do
482
+ assert response.headers["access-token"]
483
+ assert response.headers["token-type"]
484
+ assert response.headers["client"]
485
+ assert response.headers["expiry"]
486
+ assert response.headers["uid"]
487
+ end
488
+
489
+ test "response token is valid" do
490
+ assert @user.valid_token?(@token, @client_id)
491
+ end
492
+ end
493
+ end
494
+ end