sorcery 0.8.1 → 0.9.1

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 (353) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +56 -0
  3. data/.travis.yml +130 -1
  4. data/CHANGELOG.md +279 -0
  5. data/Gemfile +18 -23
  6. data/README.md +372 -0
  7. data/Rakefile +3 -78
  8. data/gemfiles/active_record-rails40.gemfile +7 -0
  9. data/gemfiles/active_record-rails41.gemfile +7 -0
  10. data/gemfiles/mongo_mapper-rails40.gemfile +9 -0
  11. data/gemfiles/mongo_mapper-rails41.gemfile +9 -0
  12. data/gemfiles/mongoid-rails40.gemfile +9 -0
  13. data/gemfiles/mongoid-rails41.gemfile +9 -0
  14. data/gemfiles/mongoid3-rails32.gemfile +9 -0
  15. data/lib/generators/sorcery/USAGE +1 -1
  16. data/lib/generators/sorcery/helpers.rb +40 -0
  17. data/lib/generators/sorcery/install_generator.rb +38 -20
  18. data/lib/generators/sorcery/templates/initializer.rb +53 -16
  19. data/lib/generators/sorcery/templates/migration/activity_logging.rb +3 -10
  20. data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +3 -7
  21. data/lib/generators/sorcery/templates/migration/core.rb +5 -8
  22. data/lib/generators/sorcery/templates/migration/external.rb +3 -5
  23. data/lib/generators/sorcery/templates/migration/remember_me.rb +2 -9
  24. data/lib/generators/sorcery/templates/migration/reset_password.rb +2 -10
  25. data/lib/generators/sorcery/templates/migration/user_activation.rb +2 -10
  26. data/lib/sorcery/adapters/active_record_adapter.rb +120 -0
  27. data/lib/sorcery/adapters/base_adapter.rb +30 -0
  28. data/lib/sorcery/adapters/data_mapper_adapter.rb +176 -0
  29. data/lib/sorcery/adapters/mongo_mapper_adapter.rb +110 -0
  30. data/lib/sorcery/adapters/mongoid_adapter.rb +97 -0
  31. data/lib/sorcery/controller/config.rb +65 -0
  32. data/lib/sorcery/controller/submodules/activity_logging.rb +27 -21
  33. data/lib/sorcery/controller/submodules/brute_force_protection.rb +6 -6
  34. data/lib/sorcery/controller/submodules/external.rb +107 -75
  35. data/lib/sorcery/controller/submodules/remember_me.rb +5 -5
  36. data/lib/sorcery/controller/submodules/session_timeout.rb +11 -7
  37. data/lib/sorcery/controller.rb +27 -76
  38. data/lib/sorcery/model/config.rb +96 -0
  39. data/lib/sorcery/model/submodules/activity_logging.rb +32 -12
  40. data/lib/sorcery/model/submodules/brute_force_protection.rb +36 -36
  41. data/lib/sorcery/model/submodules/external.rb +53 -9
  42. data/lib/sorcery/model/submodules/remember_me.rb +15 -19
  43. data/lib/sorcery/model/submodules/reset_password.rb +36 -33
  44. data/lib/sorcery/model/submodules/user_activation.rb +51 -48
  45. data/lib/sorcery/model/temporary_token.rb +4 -4
  46. data/lib/sorcery/model.rb +85 -175
  47. data/lib/sorcery/protocols/oauth.rb +42 -0
  48. data/lib/sorcery/protocols/oauth2.rb +47 -0
  49. data/lib/sorcery/providers/base.rb +38 -0
  50. data/lib/sorcery/providers/facebook.rb +74 -0
  51. data/lib/sorcery/providers/github.rb +60 -0
  52. data/lib/sorcery/providers/google.rb +51 -0
  53. data/lib/sorcery/providers/heroku.rb +57 -0
  54. data/lib/sorcery/providers/jira.rb +77 -0
  55. data/lib/sorcery/providers/linkedin.rb +66 -0
  56. data/lib/sorcery/providers/liveid.rb +53 -0
  57. data/lib/sorcery/providers/salesforce.rb +50 -0
  58. data/lib/sorcery/providers/twitter.rb +59 -0
  59. data/lib/sorcery/providers/vk.rb +63 -0
  60. data/lib/sorcery/providers/xing.rb +64 -0
  61. data/lib/sorcery/railties/tasks.rake +1 -7
  62. data/lib/sorcery/test_helpers/internal/rails.rb +17 -6
  63. data/lib/sorcery/test_helpers/internal.rb +27 -6
  64. data/lib/sorcery/test_helpers/rails/controller.rb +21 -0
  65. data/lib/sorcery/test_helpers/rails/integration.rb +26 -0
  66. data/lib/sorcery/version.rb +3 -0
  67. data/lib/sorcery.rb +83 -57
  68. data/sorcery.gemspec +24 -363
  69. data/spec/active_record/user_activation_spec.rb +18 -0
  70. data/spec/active_record/user_activity_logging_spec.rb +17 -0
  71. data/spec/{rails3/spec → active_record}/user_brute_force_protection_spec.rb +6 -5
  72. data/spec/{rails3/spec → active_record}/user_oauth_spec.rb +6 -5
  73. data/spec/{rails3/spec → active_record}/user_remember_me_spec.rb +5 -4
  74. data/spec/{rails3/spec → active_record}/user_reset_password_spec.rb +7 -7
  75. data/spec/active_record/user_spec.rb +37 -0
  76. data/spec/controllers/controller_activity_logging_spec.rb +124 -0
  77. data/spec/controllers/controller_brute_force_protection_spec.rb +43 -0
  78. data/spec/controllers/controller_http_basic_auth_spec.rb +68 -0
  79. data/spec/controllers/controller_oauth2_spec.rb +429 -0
  80. data/spec/controllers/controller_oauth_spec.rb +240 -0
  81. data/spec/controllers/controller_remember_me_spec.rb +117 -0
  82. data/spec/controllers/controller_session_timeout_spec.rb +80 -0
  83. data/spec/controllers/controller_spec.rb +218 -0
  84. data/spec/data_mapper/user_activation_spec.rb +10 -0
  85. data/spec/data_mapper/user_activity_logging_spec.rb +14 -0
  86. data/spec/data_mapper/user_brute_force_protection_spec.rb +9 -0
  87. data/spec/data_mapper/user_oauth_spec.rb +9 -0
  88. data/spec/data_mapper/user_remember_me_spec.rb +8 -0
  89. data/spec/data_mapper/user_reset_password_spec.rb +8 -0
  90. data/spec/data_mapper/user_spec.rb +27 -0
  91. data/spec/mongo_mapper/user_activation_spec.rb +9 -0
  92. data/spec/mongo_mapper/user_activity_logging_spec.rb +8 -0
  93. data/spec/mongo_mapper/user_brute_force_protection_spec.rb +8 -0
  94. data/spec/mongo_mapper/user_oauth_spec.rb +8 -0
  95. data/spec/mongo_mapper/user_remember_me_spec.rb +8 -0
  96. data/spec/mongo_mapper/user_reset_password_spec.rb +8 -0
  97. data/spec/mongo_mapper/user_spec.rb +37 -0
  98. data/spec/mongoid/user_activation_spec.rb +9 -0
  99. data/spec/mongoid/user_activity_logging_spec.rb +8 -0
  100. data/spec/mongoid/user_brute_force_protection_spec.rb +8 -0
  101. data/spec/mongoid/user_oauth_spec.rb +8 -0
  102. data/spec/mongoid/user_remember_me_spec.rb +8 -0
  103. data/spec/mongoid/user_reset_password_spec.rb +8 -0
  104. data/spec/mongoid/user_spec.rb +51 -0
  105. data/spec/orm/active_record.rb +21 -0
  106. data/spec/orm/data_mapper.rb +48 -0
  107. data/spec/orm/mongo_mapper.rb +10 -0
  108. data/spec/orm/mongoid.rb +22 -0
  109. data/spec/{rails3/app/models → rails_app/app/active_record}/user.rb +1 -2
  110. data/spec/rails_app/app/active_record/user_provider.rb +3 -0
  111. data/spec/rails_app/app/controllers/sorcery_controller.rb +285 -0
  112. data/spec/rails_app/app/data_mapper/authentication.rb +8 -0
  113. data/spec/rails_app/app/data_mapper/user.rb +7 -0
  114. data/spec/{rails3_mongo_mapper/app/models → rails_app/app/mongo_mapper}/user.rb +2 -0
  115. data/spec/{rails3_mongoid/app/models → rails_app/app/mongoid}/user.rb +2 -0
  116. data/spec/rails_app/app/views/sorcery_mailer/send_unlock_token_email.text.erb +1 -0
  117. data/spec/{rails3_mongo_mapper → rails_app}/config/application.rb +13 -8
  118. data/spec/rails_app/config/boot.rb +4 -0
  119. data/spec/rails_app/config/database.yml +22 -0
  120. data/spec/{rails3_mongo_mapper → rails_app}/config/environments/test.rb +2 -0
  121. data/spec/{rails3_mongoid → rails_app}/config/initializers/session_store.rb +4 -0
  122. data/spec/rails_app/config/routes.rb +51 -0
  123. data/spec/{rails3_mongo_mapper → rails_app}/config.ru +1 -1
  124. data/spec/{rails3 → rails_app}/db/migrate/activation/20101224223622_add_activation_to_users.rb +3 -3
  125. data/spec/{rails3 → rails_app}/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +2 -0
  126. data/spec/{rails3 → rails_app}/db/migrate/core/20101224223620_create_users.rb +2 -2
  127. data/spec/rails_app/db/migrate/external/20101224223628_create_authentications_and_user_providers.rb +22 -0
  128. data/spec/rails_app/log/development.log +1791 -0
  129. data/spec/shared_examples/user_activation_shared_examples.rb +137 -98
  130. data/spec/shared_examples/user_activity_logging_shared_examples.rb +86 -13
  131. data/spec/shared_examples/user_brute_force_protection_shared_examples.rb +140 -21
  132. data/spec/shared_examples/user_oauth_shared_examples.rb +21 -16
  133. data/spec/shared_examples/user_remember_me_shared_examples.rb +36 -24
  134. data/spec/shared_examples/user_reset_password_shared_examples.rb +163 -130
  135. data/spec/shared_examples/user_shared_examples.rb +370 -195
  136. data/spec/sorcery_crypto_providers_spec.rb +74 -72
  137. data/spec/spec_helper.rb +32 -4
  138. metadata +259 -425
  139. data/Gemfile.lock +0 -192
  140. data/README.rdoc +0 -261
  141. data/VERSION +0 -1
  142. data/lib/sorcery/controller/submodules/external/protocols/oauth1.rb +0 -35
  143. data/lib/sorcery/controller/submodules/external/protocols/oauth2.rb +0 -45
  144. data/lib/sorcery/controller/submodules/external/providers/facebook.rb +0 -97
  145. data/lib/sorcery/controller/submodules/external/providers/github.rb +0 -91
  146. data/lib/sorcery/controller/submodules/external/providers/google.rb +0 -90
  147. data/lib/sorcery/controller/submodules/external/providers/linkedin.rb +0 -101
  148. data/lib/sorcery/controller/submodules/external/providers/liveid.rb +0 -91
  149. data/lib/sorcery/controller/submodules/external/providers/twitter.rb +0 -92
  150. data/lib/sorcery/controller/submodules/external/providers/vk.rb +0 -99
  151. data/lib/sorcery/model/adapters/active_record.rb +0 -49
  152. data/lib/sorcery/model/adapters/mongo_mapper.rb +0 -56
  153. data/lib/sorcery/model/adapters/mongoid.rb +0 -88
  154. data/lib/sorcery/test_helpers/rails.rb +0 -16
  155. data/lib/sorcery/test_helpers.rb +0 -5
  156. data/spec/Gemfile +0 -12
  157. data/spec/Gemfile.lock +0 -129
  158. data/spec/README.md +0 -31
  159. data/spec/Rakefile +0 -12
  160. data/spec/rails3/.gitignore +0 -4
  161. data/spec/rails3/.rspec +0 -1
  162. data/spec/rails3/Gemfile +0 -15
  163. data/spec/rails3/Gemfile.lock +0 -162
  164. data/spec/rails3/README +0 -256
  165. data/spec/rails3/Rakefile +0 -11
  166. data/spec/rails3/app/controllers/application_controller.rb +0 -208
  167. data/spec/rails3/app/views/sorcery_mailer/send_unlock_token_email.text.erb +0 -1
  168. data/spec/rails3/config/application.rb +0 -46
  169. data/spec/rails3/config/boot.rb +0 -13
  170. data/spec/rails3/config/database.yml +0 -27
  171. data/spec/rails3/config/environments/development.rb +0 -26
  172. data/spec/rails3/config/environments/in_memory.rb +0 -35
  173. data/spec/rails3/config/environments/production.rb +0 -49
  174. data/spec/rails3/config/environments/test.rb +0 -35
  175. data/spec/rails3/config/initializers/session_store.rb +0 -8
  176. data/spec/rails3/config/routes.rb +0 -59
  177. data/spec/rails3/config.ru +0 -4
  178. data/spec/rails3/db/migrate/external/20101224223628_create_authentications.rb +0 -14
  179. data/spec/rails3/lib/tasks/.gitkeep +0 -0
  180. data/spec/rails3/public/404.html +0 -26
  181. data/spec/rails3/public/422.html +0 -26
  182. data/spec/rails3/public/500.html +0 -26
  183. data/spec/rails3/public/favicon.ico +0 -0
  184. data/spec/rails3/public/images/rails.png +0 -0
  185. data/spec/rails3/public/javascripts/application.js +0 -2
  186. data/spec/rails3/public/javascripts/controls.js +0 -965
  187. data/spec/rails3/public/javascripts/dragdrop.js +0 -974
  188. data/spec/rails3/public/javascripts/effects.js +0 -1123
  189. data/spec/rails3/public/javascripts/prototype.js +0 -6001
  190. data/spec/rails3/public/javascripts/rails.js +0 -175
  191. data/spec/rails3/public/robots.txt +0 -5
  192. data/spec/rails3/public/stylesheets/.gitkeep +0 -0
  193. data/spec/rails3/script/rails +0 -6
  194. data/spec/rails3/spec/controller_activity_logging_spec.rb +0 -115
  195. data/spec/rails3/spec/controller_brute_force_protection_spec.rb +0 -88
  196. data/spec/rails3/spec/controller_http_basic_auth_spec.rb +0 -50
  197. data/spec/rails3/spec/controller_oauth2_spec.rb +0 -380
  198. data/spec/rails3/spec/controller_oauth_spec.rb +0 -206
  199. data/spec/rails3/spec/controller_remember_me_spec.rb +0 -96
  200. data/spec/rails3/spec/controller_session_timeout_spec.rb +0 -55
  201. data/spec/rails3/spec/controller_spec.rb +0 -177
  202. data/spec/rails3/spec/integration_spec.rb +0 -23
  203. data/spec/rails3/spec/spec.opts +0 -2
  204. data/spec/rails3/spec/spec_helper.orig.rb +0 -27
  205. data/spec/rails3/spec/spec_helper.rb +0 -71
  206. data/spec/rails3/spec/user_activation_spec.rb +0 -16
  207. data/spec/rails3/spec/user_activity_logging_spec.rb +0 -8
  208. data/spec/rails3/spec/user_spec.rb +0 -36
  209. data/spec/rails3/vendor/plugins/.gitkeep +0 -0
  210. data/spec/rails3_mongo_mapper/.gitignore +0 -4
  211. data/spec/rails3_mongo_mapper/.rspec +0 -1
  212. data/spec/rails3_mongo_mapper/Gemfile +0 -16
  213. data/spec/rails3_mongo_mapper/Gemfile.lock +0 -156
  214. data/spec/rails3_mongo_mapper/Rakefile +0 -11
  215. data/spec/rails3_mongo_mapper/app/controllers/application_controller.rb +0 -122
  216. data/spec/rails3_mongo_mapper/app/helpers/application_helper.rb +0 -2
  217. data/spec/rails3_mongo_mapper/app/mailers/sorcery_mailer.rb +0 -25
  218. data/spec/rails3_mongo_mapper/app/views/layouts/application.html.erb +0 -14
  219. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.html.erb +0 -17
  220. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.text.erb +0 -9
  221. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_success_email.text.erb +0 -9
  222. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.html.erb +0 -16
  223. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.text.erb +0 -8
  224. data/spec/rails3_mongo_mapper/config/boot.rb +0 -13
  225. data/spec/rails3_mongo_mapper/config/environment.rb +0 -5
  226. data/spec/rails3_mongo_mapper/config/environments/development.rb +0 -30
  227. data/spec/rails3_mongo_mapper/config/environments/in_memory.rb +0 -0
  228. data/spec/rails3_mongo_mapper/config/environments/production.rb +0 -49
  229. data/spec/rails3_mongo_mapper/config/initializers/backtrace_silencers.rb +0 -7
  230. data/spec/rails3_mongo_mapper/config/initializers/inflections.rb +0 -10
  231. data/spec/rails3_mongo_mapper/config/initializers/mime_types.rb +0 -5
  232. data/spec/rails3_mongo_mapper/config/initializers/mongo.rb +0 -2
  233. data/spec/rails3_mongo_mapper/config/initializers/secret_token.rb +0 -7
  234. data/spec/rails3_mongo_mapper/config/initializers/session_store.rb +0 -8
  235. data/spec/rails3_mongo_mapper/config/locales/en.yml +0 -5
  236. data/spec/rails3_mongo_mapper/config/routes.rb +0 -59
  237. data/spec/rails3_mongo_mapper/db/schema.rb +0 -23
  238. data/spec/rails3_mongo_mapper/db/seeds.rb +0 -7
  239. data/spec/rails3_mongo_mapper/lib/tasks/.gitkeep +0 -0
  240. data/spec/rails3_mongo_mapper/public/404.html +0 -26
  241. data/spec/rails3_mongo_mapper/public/422.html +0 -26
  242. data/spec/rails3_mongo_mapper/public/500.html +0 -26
  243. data/spec/rails3_mongo_mapper/public/favicon.ico +0 -0
  244. data/spec/rails3_mongo_mapper/public/images/rails.png +0 -0
  245. data/spec/rails3_mongo_mapper/public/javascripts/application.js +0 -2
  246. data/spec/rails3_mongo_mapper/public/javascripts/controls.js +0 -965
  247. data/spec/rails3_mongo_mapper/public/javascripts/dragdrop.js +0 -974
  248. data/spec/rails3_mongo_mapper/public/javascripts/effects.js +0 -1123
  249. data/spec/rails3_mongo_mapper/public/javascripts/prototype.js +0 -6001
  250. data/spec/rails3_mongo_mapper/public/javascripts/rails.js +0 -175
  251. data/spec/rails3_mongo_mapper/public/robots.txt +0 -5
  252. data/spec/rails3_mongo_mapper/public/stylesheets/.gitkeep +0 -0
  253. data/spec/rails3_mongo_mapper/script/rails +0 -6
  254. data/spec/rails3_mongo_mapper/spec/controller_spec.rb +0 -170
  255. data/spec/rails3_mongo_mapper/spec/spec.opts +0 -2
  256. data/spec/rails3_mongo_mapper/spec/spec_helper.orig.rb +0 -27
  257. data/spec/rails3_mongo_mapper/spec/spec_helper.rb +0 -55
  258. data/spec/rails3_mongo_mapper/spec/user_activation_spec.rb +0 -9
  259. data/spec/rails3_mongo_mapper/spec/user_activity_logging_spec.rb +0 -8
  260. data/spec/rails3_mongo_mapper/spec/user_brute_force_protection_spec.rb +0 -8
  261. data/spec/rails3_mongo_mapper/spec/user_oauth_spec.rb +0 -8
  262. data/spec/rails3_mongo_mapper/spec/user_remember_me_spec.rb +0 -8
  263. data/spec/rails3_mongo_mapper/spec/user_reset_password_spec.rb +0 -8
  264. data/spec/rails3_mongo_mapper/spec/user_spec.rb +0 -37
  265. data/spec/rails3_mongo_mapper/vendor/plugins/.gitkeep +0 -0
  266. data/spec/rails3_mongoid/.gitignore +0 -4
  267. data/spec/rails3_mongoid/.rspec +0 -1
  268. data/spec/rails3_mongoid/Gemfile +0 -15
  269. data/spec/rails3_mongoid/Gemfile.lock +0 -146
  270. data/spec/rails3_mongoid/Rakefile +0 -11
  271. data/spec/rails3_mongoid/app/controllers/application_controller.rb +0 -127
  272. data/spec/rails3_mongoid/app/helpers/application_helper.rb +0 -2
  273. data/spec/rails3_mongoid/app/mailers/sorcery_mailer.rb +0 -25
  274. data/spec/rails3_mongoid/app/views/layouts/application.html.erb +0 -14
  275. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_email.html.erb +0 -17
  276. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_email.text.erb +0 -9
  277. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_success_email.html.erb +0 -17
  278. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_success_email.text.erb +0 -9
  279. data/spec/rails3_mongoid/app/views/sorcery_mailer/reset_password_email.html.erb +0 -16
  280. data/spec/rails3_mongoid/app/views/sorcery_mailer/reset_password_email.text.erb +0 -8
  281. data/spec/rails3_mongoid/config/application.rb +0 -51
  282. data/spec/rails3_mongoid/config/boot.rb +0 -13
  283. data/spec/rails3_mongoid/config/environment.rb +0 -5
  284. data/spec/rails3_mongoid/config/environments/development.rb +0 -26
  285. data/spec/rails3_mongoid/config/environments/in_memory.rb +0 -0
  286. data/spec/rails3_mongoid/config/environments/production.rb +0 -49
  287. data/spec/rails3_mongoid/config/environments/test.rb +0 -35
  288. data/spec/rails3_mongoid/config/initializers/backtrace_silencers.rb +0 -7
  289. data/spec/rails3_mongoid/config/initializers/inflections.rb +0 -10
  290. data/spec/rails3_mongoid/config/initializers/mime_types.rb +0 -5
  291. data/spec/rails3_mongoid/config/initializers/secret_token.rb +0 -7
  292. data/spec/rails3_mongoid/config/locales/en.yml +0 -5
  293. data/spec/rails3_mongoid/config/mongoid.yml +0 -7
  294. data/spec/rails3_mongoid/config/routes.rb +0 -59
  295. data/spec/rails3_mongoid/config.ru +0 -4
  296. data/spec/rails3_mongoid/db/schema.rb +0 -23
  297. data/spec/rails3_mongoid/db/seeds.rb +0 -7
  298. data/spec/rails3_mongoid/lib/tasks/.gitkeep +0 -0
  299. data/spec/rails3_mongoid/public/404.html +0 -26
  300. data/spec/rails3_mongoid/public/422.html +0 -26
  301. data/spec/rails3_mongoid/public/500.html +0 -26
  302. data/spec/rails3_mongoid/public/favicon.ico +0 -0
  303. data/spec/rails3_mongoid/public/images/rails.png +0 -0
  304. data/spec/rails3_mongoid/public/javascripts/application.js +0 -2
  305. data/spec/rails3_mongoid/public/javascripts/controls.js +0 -965
  306. data/spec/rails3_mongoid/public/javascripts/dragdrop.js +0 -974
  307. data/spec/rails3_mongoid/public/javascripts/effects.js +0 -1123
  308. data/spec/rails3_mongoid/public/javascripts/prototype.js +0 -6001
  309. data/spec/rails3_mongoid/public/javascripts/rails.js +0 -175
  310. data/spec/rails3_mongoid/public/robots.txt +0 -5
  311. data/spec/rails3_mongoid/public/stylesheets/.gitkeep +0 -0
  312. data/spec/rails3_mongoid/script/rails +0 -6
  313. data/spec/rails3_mongoid/spec/controller_activity_logging_spec.rb +0 -105
  314. data/spec/rails3_mongoid/spec/controller_spec.rb +0 -181
  315. data/spec/rails3_mongoid/spec/spec.opts +0 -2
  316. data/spec/rails3_mongoid/spec/spec_helper.orig.rb +0 -27
  317. data/spec/rails3_mongoid/spec/spec_helper.rb +0 -55
  318. data/spec/rails3_mongoid/spec/user_activation_spec.rb +0 -9
  319. data/spec/rails3_mongoid/spec/user_activity_logging_spec.rb +0 -8
  320. data/spec/rails3_mongoid/spec/user_brute_force_protection_spec.rb +0 -8
  321. data/spec/rails3_mongoid/spec/user_oauth_spec.rb +0 -8
  322. data/spec/rails3_mongoid/spec/user_remember_me_spec.rb +0 -8
  323. data/spec/rails3_mongoid/spec/user_reset_password_spec.rb +0 -8
  324. data/spec/rails3_mongoid/spec/user_spec.rb +0 -38
  325. data/spec/rails3_mongoid/vendor/plugins/.gitkeep +0 -0
  326. data/spec/shared_examples/controller_oauth2_shared_examples.rb +0 -56
  327. data/spec/shared_examples/controller_oauth_shared_examples.rb +0 -55
  328. /data/lib/sorcery/{controller/submodules/external/protocols → protocols}/certs/ca-bundle.crt +0 -0
  329. /data/spec/{rails3/app/models → rails_app/app/active_record}/authentication.rb +0 -0
  330. /data/spec/{rails3 → rails_app}/app/helpers/application_helper.rb +0 -0
  331. /data/spec/{rails3 → rails_app}/app/mailers/sorcery_mailer.rb +0 -0
  332. /data/spec/{rails3_mongo_mapper/app/models → rails_app/app/mongo_mapper}/authentication.rb +0 -0
  333. /data/spec/{rails3_mongoid/app/models → rails_app/app/mongoid}/authentication.rb +0 -0
  334. /data/spec/{rails3 → rails_app}/app/views/application/index.html.erb +0 -0
  335. /data/spec/{rails3 → rails_app}/app/views/layouts/application.html.erb +0 -0
  336. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/activation_email.html.erb +0 -0
  337. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/activation_email.text.erb +0 -0
  338. /data/spec/{rails3/app/views/sorcery_mailer/activation_success_email.html.erb → rails_app/app/views/sorcery_mailer/activation_needed_email.html.erb} +0 -0
  339. /data/spec/{rails3_mongo_mapper → rails_app}/app/views/sorcery_mailer/activation_success_email.html.erb +0 -0
  340. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/activation_success_email.text.erb +0 -0
  341. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/reset_password_email.html.erb +0 -0
  342. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/reset_password_email.text.erb +0 -0
  343. /data/spec/{rails3 → rails_app}/config/environment.rb +0 -0
  344. /data/spec/{rails3 → rails_app}/config/initializers/backtrace_silencers.rb +0 -0
  345. /data/spec/{rails3 → rails_app}/config/initializers/inflections.rb +0 -0
  346. /data/spec/{rails3 → rails_app}/config/initializers/mime_types.rb +0 -0
  347. /data/spec/{rails3 → rails_app}/config/initializers/secret_token.rb +0 -0
  348. /data/spec/{rails3 → rails_app}/config/locales/en.yml +0 -0
  349. /data/spec/{rails3 → rails_app}/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +0 -0
  350. /data/spec/{rails3 → rails_app}/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +0 -0
  351. /data/spec/{rails3 → rails_app}/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +0 -0
  352. /data/spec/{rails3 → rails_app}/db/schema.rb +0 -0
  353. /data/spec/{rails3 → rails_app}/db/seeds.rb +0 -0
@@ -1,45 +1,53 @@
1
1
  shared_examples_for "rails_3_activation_model" do
2
- # ----------------- PLUGIN CONFIGURATION -----------------------
3
- describe User, "loaded plugin configuration" do
2
+ let(:user) { create_new_user }
3
+ let(:new_user) { build_new_user }
4
+
5
+ context "loaded plugin configuration" do
4
6
  before(:all) do
5
7
  sorcery_reload!([:user_activation], :user_activation_mailer => ::SorceryMailer)
6
8
  end
7
-
9
+
8
10
  after(:each) do
9
11
  User.sorcery_config.reset!
10
12
  sorcery_reload!([:user_activation], :user_activation_mailer => ::SorceryMailer)
11
13
  end
12
-
13
- it "should enable configuration option 'activation_state_attribute_name'" do
14
+
15
+ it "enables configuration option 'activation_state_attribute_name'" do
14
16
  sorcery_model_property_set(:activation_state_attribute_name, :status)
15
- User.sorcery_config.activation_state_attribute_name.should equal(:status)
17
+
18
+ expect(User.sorcery_config.activation_state_attribute_name).to eq :status
16
19
  end
17
-
18
- it "should enable configuration option 'activation_token_attribute_name'" do
20
+
21
+ it "enables configuration option 'activation_token_attribute_name'" do
19
22
  sorcery_model_property_set(:activation_token_attribute_name, :code)
20
- User.sorcery_config.activation_token_attribute_name.should equal(:code)
23
+
24
+ expect(User.sorcery_config.activation_token_attribute_name).to eql :code
21
25
  end
22
-
23
- it "should enable configuration option 'user_activation_mailer'" do
26
+
27
+ it "enables configuration option 'user_activation_mailer'" do
24
28
  sorcery_model_property_set(:user_activation_mailer, TestMailer)
25
- User.sorcery_config.user_activation_mailer.should equal(TestMailer)
29
+
30
+ expect(User.sorcery_config.user_activation_mailer).to equal(TestMailer)
26
31
  end
27
-
28
- it "should enable configuration option 'activation_needed_email_method_name'" do
32
+
33
+ it "enables configuration option 'activation_needed_email_method_name'" do
29
34
  sorcery_model_property_set(:activation_needed_email_method_name, :my_activation_email)
30
- User.sorcery_config.activation_needed_email_method_name.should equal(:my_activation_email)
35
+
36
+ expect(User.sorcery_config.activation_needed_email_method_name).to eq :my_activation_email
31
37
  end
32
-
33
- it "should enable configuration option 'activation_success_email_method_name'" do
38
+
39
+ it "enables configuration option 'activation_success_email_method_name'" do
34
40
  sorcery_model_property_set(:activation_success_email_method_name, :my_activation_email)
35
- User.sorcery_config.activation_success_email_method_name.should equal(:my_activation_email)
41
+
42
+ expect(User.sorcery_config.activation_success_email_method_name).to eq :my_activation_email
36
43
  end
37
44
 
38
- it "should enable configuration option 'activation_mailer_disabled'" do
45
+ it "enables configuration option 'activation_mailer_disabled'" do
39
46
  sorcery_model_property_set(:activation_mailer_disabled, :my_activation_mailer_disabled)
40
- User.sorcery_config.activation_mailer_disabled.should equal(:my_activation_mailer_disabled)
47
+
48
+ expect(User.sorcery_config.activation_mailer_disabled).to eq :my_activation_mailer_disabled
41
49
  end
42
-
50
+
43
51
  it "if mailer is nil and mailer is enabled, throw exception!" do
44
52
  expect{sorcery_reload!([:user_activation], :activation_mailer_disabled => false)}.to raise_error(ArgumentError)
45
53
  end
@@ -49,72 +57,88 @@ shared_examples_for "rails_3_activation_model" do
49
57
  end
50
58
  end
51
59
 
52
- # ----------------- ACTIVATION PROCESS -----------------------
53
- describe User, "activation process" do
60
+
61
+ context "activation process" do
54
62
  before(:all) do
55
63
  sorcery_reload!([:user_activation], :user_activation_mailer => ::SorceryMailer)
56
64
  end
57
-
58
- before(:each) do
59
- create_new_user
60
- end
61
-
62
- it "should initialize user state to 'pending'" do
63
- @user.activation_state.should == "pending"
65
+
66
+ it "initializes user state to 'pending'" do
67
+ expect(user.activation_state).to eq "pending"
64
68
  end
65
-
66
- specify { @user.should respond_to(:activate!) }
67
-
68
- it "should clear activation code and change state to 'active' on activation" do
69
- activation_token = @user.activation_token
70
- @user.activate!
71
- @user2 = User.find(@user.id) # go to db to make sure it was saved and not just in memory
72
- @user2.activation_token.should be_nil
73
- @user2.activation_state.should == "active"
74
- User.find_by_activation_token(activation_token).should be_nil
69
+
70
+ specify { expect(user).to respond_to :activate! }
71
+
72
+ it "clears activation code and change state to 'active' on activation" do
73
+ activation_token = user.activation_token
74
+ user.activate!
75
+ user2 = User.sorcery_adapter.find(user.id) # go to db to make sure it was saved and not just in memory
76
+
77
+ expect(user2.activation_token).to be_nil
78
+ expect(user2.activation_state).to eq "active"
79
+ expect(User.sorcery_adapter.find_by_activation_token activation_token).to be_nil
75
80
  end
76
81
 
77
82
 
78
83
  context "mailer is enabled" do
79
- it "should send the user an activation email" do
84
+ it "sends the user an activation email" do
80
85
  old_size = ActionMailer::Base.deliveries.size
81
86
  create_new_user
82
- ActionMailer::Base.deliveries.size.should == old_size + 1
87
+
88
+ expect(ActionMailer::Base.deliveries.size).to eq old_size + 1
89
+ end
90
+
91
+ it "calls send_activation_needed_email! method of user" do
92
+ expect(new_user).to receive(:send_activation_needed_email!).once
93
+
94
+ new_user.sorcery_adapter.save(:raise_on_failure => true)
83
95
  end
84
96
 
85
97
  it "subsequent saves do not send activation email" do
98
+ user
86
99
  old_size = ActionMailer::Base.deliveries.size
87
- @user.username = "Shauli"
88
- @user.save!
89
- ActionMailer::Base.deliveries.size.should == old_size
100
+ user.email = "Shauli"
101
+ user.sorcery_adapter.save(:raise_on_failure => true)
102
+
103
+ expect(ActionMailer::Base.deliveries.size).to eq old_size
90
104
  end
91
105
 
92
- it "should send the user an activation success email on successful activation" do
106
+ it "sends the user an activation success email on successful activation" do
107
+ user
93
108
  old_size = ActionMailer::Base.deliveries.size
94
- @user.activate!
95
- ActionMailer::Base.deliveries.size.should == old_size + 1
109
+ user.activate!
110
+
111
+ expect(ActionMailer::Base.deliveries.size).to eq old_size + 1
112
+ end
113
+
114
+ it "calls send_activation_success_email! method of user on activation" do
115
+ expect(user).to receive(:send_activation_success_email!).once
116
+
117
+ user.activate!
96
118
  end
97
119
 
98
120
  it "subsequent saves do not send activation success email" do
99
- @user.activate!
121
+ user.activate!
100
122
  old_size = ActionMailer::Base.deliveries.size
101
- @user.username = "Shauli"
102
- @user.save!
103
- ActionMailer::Base.deliveries.size.should == old_size
123
+ user.email = "Shauli"
124
+ user.sorcery_adapter.save(:raise_on_failure => true)
125
+
126
+ expect(ActionMailer::Base.deliveries.size).to eq old_size
104
127
  end
105
128
 
106
129
  it "activation needed email is optional" do
107
130
  sorcery_model_property_set(:activation_needed_email_method_name, nil)
108
131
  old_size = ActionMailer::Base.deliveries.size
109
- create_new_user
110
- ActionMailer::Base.deliveries.size.should == old_size
132
+
133
+ expect(ActionMailer::Base.deliveries.size).to eq old_size
111
134
  end
112
135
 
113
136
  it "activation success email is optional" do
114
137
  sorcery_model_property_set(:activation_success_email_method_name, nil)
115
138
  old_size = ActionMailer::Base.deliveries.size
116
- @user.activate!
117
- ActionMailer::Base.deliveries.size.should == old_size
139
+ user.activate!
140
+
141
+ expect(ActionMailer::Base.deliveries.size).to eq old_size
118
142
  end
119
143
  end
120
144
 
@@ -123,81 +147,96 @@ shared_examples_for "rails_3_activation_model" do
123
147
  sorcery_reload!([:user_activation], :activation_mailer_disabled => true, :user_activation_mailer => ::SorceryMailer)
124
148
  end
125
149
 
126
- it "should not send the user an activation email" do
150
+ it "does not send the user an activation email" do
127
151
  old_size = ActionMailer::Base.deliveries.size
128
- create_new_user
129
- ActionMailer::Base.deliveries.size.should == old_size
152
+
153
+ expect(ActionMailer::Base.deliveries.size).to eq old_size
130
154
  end
131
155
 
132
- it "should not send the user an activation success email on successful activation" do
156
+ it "does not call send_activation_needed_email! method of user" do
157
+ user = build_new_user
158
+
159
+ expect(user).to receive(:send_activation_needed_email!).never
160
+
161
+ user.sorcery_adapter.save(:raise_on_failure => true)
162
+ end
163
+
164
+ it "does not send the user an activation success email on successful activation" do
133
165
  old_size = ActionMailer::Base.deliveries.size
134
- @user.activate!
135
- ActionMailer::Base.deliveries.size.should == old_size
166
+ user.activate!
167
+
168
+ expect(ActionMailer::Base.deliveries.size).to eq old_size
169
+ end
170
+
171
+ it "calls send_activation_success_email! method of user on activation" do
172
+ expect(user).to receive(:send_activation_success_email!).never
173
+
174
+ user.activate!
136
175
  end
137
176
  end
138
177
  end
139
178
 
140
- describe User, "prevent non-active login feature" do
179
+ describe "prevent non-active login feature" do
141
180
  before(:all) do
142
181
  sorcery_reload!([:user_activation], :user_activation_mailer => ::SorceryMailer)
143
182
  end
144
183
 
145
184
  before(:each) do
146
- User.delete_all
147
- create_new_user
185
+ User.sorcery_adapter.delete_all
148
186
  end
149
187
 
150
- it "should not allow a non-active user to authenticate" do
151
- User.authenticate(@user.username,'secret').should be_false
188
+ it "does not allow a non-active user to authenticate" do
189
+ expect(User.authenticate user.email, 'secret').to be_falsy
152
190
  end
153
-
154
- it "should allow a non-active user to authenticate if configured so" do
191
+
192
+ it "allows a non-active user to authenticate if configured so" do
155
193
  sorcery_model_property_set(:prevent_non_active_users_to_login, false)
156
- User.authenticate(@user.username,'secret').should be_true
194
+
195
+ expect(User.authenticate user.email, 'secret').to be_truthy
157
196
  end
158
197
  end
159
-
160
- describe User, "load_from_activation_token" do
198
+
199
+ describe "load_from_activation_token" do
161
200
  before(:all) do
162
201
  sorcery_reload!([:user_activation], :user_activation_mailer => ::SorceryMailer)
163
202
  end
164
-
203
+
165
204
  after(:each) do
166
205
  Timecop.return
167
206
  end
168
-
169
- it "load_from_activation_token should return user when token is found" do
170
- create_new_user
171
- User.load_from_activation_token(@user.activation_token).should == @user
207
+
208
+ it "load_from_activation_token returns user when token is found" do
209
+ expect(User.load_from_activation_token user.activation_token).to eq user
172
210
  end
173
-
174
- it "load_from_activation_token should NOT return user when token is NOT found" do
175
- create_new_user
176
- User.load_from_activation_token("a").should == nil
211
+
212
+ it "load_from_activation_token does NOT return user when token is NOT found" do
213
+ expect(User.load_from_activation_token "a").to be_nil
177
214
  end
178
-
179
- it "load_from_activation_token should return user when token is found and not expired" do
215
+
216
+ it "load_from_activation_token returas user when token is found and not expired" do
180
217
  sorcery_model_property_set(:activation_token_expiration_period, 500)
181
- create_new_user
182
- User.load_from_activation_token(@user.activation_token).should == @user
218
+
219
+ expect(User.load_from_activation_token user.activation_token).to eq user
183
220
  end
184
-
185
- it "load_from_activation_token should NOT return user when token is found and expired" do
221
+
222
+ it "load_from_activation_token does NOT return user when token is found and expired" do
186
223
  sorcery_model_property_set(:activation_token_expiration_period, 0.1)
187
- create_new_user
224
+ user
225
+
188
226
  Timecop.travel(Time.now.in_time_zone+0.5)
189
- User.load_from_activation_token(@user.activation_token).should == nil
227
+
228
+ expect(User.load_from_activation_token user.activation_token).to be_nil
190
229
  end
191
-
192
- it "load_from_activation_token should return nil if token is blank" do
193
- User.load_from_activation_token(nil).should == nil
194
- User.load_from_activation_token("").should == nil
230
+
231
+ it "load_from_activation_token returns nil if token is blank" do
232
+ expect(User.load_from_activation_token nil).to be_nil
233
+ expect(User.load_from_activation_token "").to be_nil
195
234
  end
196
-
197
- it "load_from_activation_token should always be valid if expiration period is nil" do
235
+
236
+ it "load_from_activation_token is always valid if expiration period is nil" do
198
237
  sorcery_model_property_set(:activation_token_expiration_period, nil)
199
- create_new_user
200
- User.load_from_activation_token(@user.activation_token).should == @user
238
+
239
+ expect(User.load_from_activation_token user.activation_token).to eq user
201
240
  end
202
241
  end
203
- end
242
+ end
@@ -1,27 +1,100 @@
1
1
  shared_examples_for "rails_3_activity_logging_model" do
2
- # ----------------- PLUGIN CONFIGURATION -----------------------
3
- describe User, "loaded plugin configuration" do
2
+ context "loaded plugin configuration" do
4
3
  before(:all) do
5
4
  sorcery_reload!([:activity_logging])
6
5
  end
7
-
6
+
8
7
  after(:each) do
9
8
  User.sorcery_config.reset!
10
9
  end
11
-
12
- it "should allow configuration option 'last_login_at_attribute_name'" do
10
+
11
+ it "allows configuration option 'last_login_at_attribute_name'" do
13
12
  sorcery_model_property_set(:last_login_at_attribute_name, :login_time)
14
- User.sorcery_config.last_login_at_attribute_name.should equal(:login_time)
13
+
14
+ expect(User.sorcery_config.last_login_at_attribute_name).to eq :login_time
15
15
  end
16
-
17
- it "should allow configuration option 'last_logout_at_attribute_name'" do
16
+
17
+ it "allows configuration option 'last_logout_at_attribute_name'" do
18
18
  sorcery_model_property_set(:last_logout_at_attribute_name, :logout_time)
19
- User.sorcery_config.last_logout_at_attribute_name.should equal(:logout_time)
19
+ expect(User.sorcery_config.last_logout_at_attribute_name).to eq :logout_time
20
20
  end
21
-
22
- it "should allow configuration option 'last_activity_at_attribute_name'" do
21
+
22
+ it "allows configuration option 'last_activity_at_attribute_name'" do
23
23
  sorcery_model_property_set(:last_activity_at_attribute_name, :activity_time)
24
- User.sorcery_config.last_activity_at_attribute_name.should equal(:activity_time)
24
+ expect(User.sorcery_config.last_activity_at_attribute_name).to eq :activity_time
25
+ end
26
+
27
+ it "allows configuration option 'last_login_from_ip_adress'" do
28
+ sorcery_model_property_set(:last_login_from_ip_address_name, :ip_address)
29
+ expect(User.sorcery_config.last_login_from_ip_address_name).to eq :ip_address
30
+ end
31
+
32
+ describe ".current_users" do
33
+ let(:user) { create_new_user }
34
+
35
+ it "is empty when no users are logged in" do
36
+ skip('unavailable in MongoMapper') if SORCERY_ORM == :mongo_mapper
37
+ expect(User.current_users).to be_empty
38
+ end
39
+
40
+ it "holds the user object when 1 user is logged in" do
41
+ skip('unavailable in MongoMapper') if SORCERY_ORM == :mongo_mapper
42
+ user.set_last_activity_at(Time.now.in_time_zone)
43
+
44
+ expect(User.current_users).to match([User.sorcery_adapter.find(user.id)])
45
+ end
46
+
47
+ it "'current_users' shows all current_users, whether they have logged out before or not." do
48
+ skip('unavailable in MongoMapper') if SORCERY_ORM == :mongo_mapper
49
+ User.sorcery_adapter.delete_all
50
+ user1 = create_new_user({:username => 'gizmo1', :email => "bla1@bla.com", :password => 'secret1'})
51
+ user2 = create_new_user({:username => 'gizmo2', :email => "bla2@bla.com", :password => 'secret2'})
52
+ user3 = create_new_user({:username => 'gizmo3', :email => "bla3@bla.com", :password => 'secret3'})
53
+
54
+ now = Time.now.in_time_zone
55
+ [user1, user2, user3].each do |user|
56
+ user.set_last_login_at(now)
57
+ user.set_last_activity_at(now)
58
+ end
59
+
60
+ expect(User.current_users.map(&:id)).to match_array([user1, user2, user3].map(&:id))
61
+ Timecop.travel now + 5
62
+ user1.set_last_logout_at(Time.now.in_time_zone)
63
+ expect(User.current_users.map(&:id)).to match_array([user2, user3].map(&:id))
64
+ Timecop.return
65
+ end
66
+
67
+ end
68
+
69
+ it '.set_last_login_at update last_login_at' do
70
+ user = create_new_user
71
+ now = Time.now.in_time_zone
72
+ expect(user.sorcery_adapter).to receive(:update_attribute).with(:last_login_at, now)
73
+
74
+ user.set_last_login_at(now)
75
+ end
76
+
77
+ it '.set_last_logout_at update last_logout_at' do
78
+ user = create_new_user
79
+ now = Time.now.in_time_zone
80
+ expect(user.sorcery_adapter).to receive(:update_attribute).with(:last_logout_at, now)
81
+
82
+ user.set_last_logout_at(now)
83
+ end
84
+
85
+ it '.set_last_activity_at update last_activity_at' do
86
+ user = create_new_user
87
+ now = Time.now.in_time_zone
88
+ expect(user.sorcery_adapter).to receive(:update_attribute).with(:last_activity_at, now)
89
+
90
+ user.set_last_activity_at(now)
91
+ end
92
+
93
+ it '.set_last_ip_addess update last_login_from_ip_address' do
94
+ user = create_new_user
95
+ expect(user.sorcery_adapter).to receive(:update_attribute).with(:last_login_from_ip_address, '0.0.0.0')
96
+
97
+ user.set_last_ip_addess('0.0.0.0')
25
98
  end
26
99
  end
27
- end
100
+ end
@@ -1,37 +1,156 @@
1
1
  shared_examples_for "rails_3_brute_force_protection_model" do
2
- # ----------------- PLUGIN CONFIGURATION -----------------------
3
- describe User, "loaded plugin configuration" do
4
-
2
+ let(:user) { create_new_user }
3
+ before(:each) do
4
+ User.sorcery_adapter.delete_all
5
+ end
6
+
7
+
8
+ context "loaded plugin configuration" do
9
+
10
+ let(:config) { User.sorcery_config }
11
+
5
12
  before(:all) do
6
13
  sorcery_reload!([:brute_force_protection])
7
- create_new_user
8
14
  end
9
-
15
+
10
16
  after(:each) do
11
17
  User.sorcery_config.reset!
12
18
  end
13
-
14
- specify { @user.should respond_to(:failed_logins_count) }
15
- specify { @user.should respond_to(:lock_expires_at) }
16
-
17
- it "should enable configuration option 'failed_logins_count_attribute_name'" do
19
+
20
+ specify { expect(user).to respond_to(:failed_logins_count) }
21
+ specify { expect(user).to respond_to(:lock_expires_at) }
22
+
23
+ it "enables configuration option 'failed_logins_count_attribute_name'" do
18
24
  sorcery_model_property_set(:failed_logins_count_attribute_name, :my_count)
19
- User.sorcery_config.failed_logins_count_attribute_name.should equal(:my_count)
25
+ expect(config.failed_logins_count_attribute_name).to eq :my_count
20
26
  end
21
-
22
- it "should enable configuration option 'lock_expires_at_attribute_name'" do
27
+
28
+ it "enables configuration option 'lock_expires_at_attribute_name'" do
23
29
  sorcery_model_property_set(:lock_expires_at_attribute_name, :expires)
24
- User.sorcery_config.lock_expires_at_attribute_name.should equal(:expires)
30
+ expect(config.lock_expires_at_attribute_name).to eq :expires
25
31
  end
26
-
27
- it "should enable configuration option 'consecutive_login_retries_amount_allowed'" do
32
+
33
+ it "enables configuration option 'consecutive_login_retries_amount_allowed'" do
28
34
  sorcery_model_property_set(:consecutive_login_retries_amount_limit, 34)
29
- User.sorcery_config.consecutive_login_retries_amount_limit.should equal(34)
35
+ expect(config.consecutive_login_retries_amount_limit).to eq 34
30
36
  end
31
-
32
- it "should enable configuration option 'login_lock_time_period'" do
37
+
38
+ it "enables configuration option 'login_lock_time_period'" do
33
39
  sorcery_model_property_set(:login_lock_time_period, 2.hours)
34
- User.sorcery_config.login_lock_time_period.should == 2.hours
40
+ expect(config.login_lock_time_period).to eq 2.hours
41
+ end
42
+
43
+ describe "#locked?" do
44
+ it "is locked" do
45
+ user.send("#{config.lock_expires_at_attribute_name}=", Time.now + 5.days)
46
+ expect(user).to be_locked
47
+ end
48
+
49
+ it "isn't locked" do
50
+ user.send("#{config.lock_expires_at_attribute_name}=", nil)
51
+ expect(user).not_to be_locked
52
+ end
53
+ end
54
+ end
55
+
56
+ describe "#register_failed_login!" do
57
+ it "locks user when number of retries reached the limit" do
58
+ expect(user.lock_expires_at).to be_nil
59
+
60
+ sorcery_model_property_set(:consecutive_login_retries_amount_limit, 1)
61
+ user.register_failed_login!
62
+ lock_expires_at = User.sorcery_adapter.find_by_id(user.id).lock_expires_at
63
+
64
+ expect(lock_expires_at).not_to be_nil
65
+ end
66
+
67
+ context "unlock_token_mailer_disabled is true" do
68
+ it "does not automatically send unlock email" do
69
+ sorcery_model_property_set(:unlock_token_mailer_disabled, true)
70
+ sorcery_model_property_set(:consecutive_login_retries_amount_limit, 2)
71
+ sorcery_model_property_set(:login_lock_time_period, 0)
72
+ sorcery_model_property_set(:unlock_token_mailer, SorceryMailer)
73
+
74
+ 3.times { user.register_failed_login! }
75
+
76
+ expect(ActionMailer::Base.deliveries.size).to eq 0
77
+
78
+ end
79
+ end
80
+
81
+ context "unlock_token_mailer_disabled is false" do
82
+ before do
83
+ sorcery_model_property_set(:unlock_token_mailer_disabled, false)
84
+ sorcery_model_property_set(:consecutive_login_retries_amount_limit, 2)
85
+ sorcery_model_property_set(:login_lock_time_period, 0)
86
+ sorcery_model_property_set(:unlock_token_mailer, SorceryMailer)
87
+ end
88
+
89
+ it "does not automatically send unlock email" do
90
+ 3.times { user.register_failed_login! }
91
+
92
+ expect(ActionMailer::Base.deliveries.size).to eq 1
93
+ end
94
+
95
+ it "generates unlock token before mail is sent" do
96
+ 3.times { user.register_failed_login! }
97
+
98
+ expect(ActionMailer::Base.deliveries.last.body.to_s.match(user.unlock_token)).not_to be_nil
99
+ end
100
+ end
101
+ end
102
+
103
+ context ".authenticate" do
104
+
105
+ it "unlocks after lock time period passes" do
106
+ sorcery_model_property_set(:consecutive_login_retries_amount_limit, 2)
107
+ sorcery_model_property_set(:login_lock_time_period, 0.2)
108
+ 2.times { user.register_failed_login! }
109
+
110
+ lock_expires_at = User.sorcery_adapter.find_by_id(user.id).lock_expires_at
111
+ expect(lock_expires_at).not_to be_nil
112
+
113
+ Timecop.travel(Time.now.in_time_zone + 0.3)
114
+ User.authenticate('bla@bla.com', 'secret')
115
+
116
+ lock_expires_at = User.sorcery_adapter.find_by_id(user.id).lock_expires_at
117
+ expect(lock_expires_at).to be_nil
118
+ Timecop.return
119
+ end
120
+
121
+ it "doest not unlock if time period is 0 (permanent lock)" do
122
+ sorcery_model_property_set(:consecutive_login_retries_amount_limit, 2)
123
+ sorcery_model_property_set(:login_lock_time_period, 0)
124
+
125
+ 2.times { user.register_failed_login! }
126
+
127
+ unlock_date = user.lock_expires_at
128
+ Timecop.travel(Time.now.in_time_zone + 1)
129
+
130
+ user.register_failed_login!
131
+
132
+ expect(user.lock_expires_at.to_s).to eq unlock_date.to_s
133
+ Timecop.return
134
+ end
135
+
136
+ end
137
+
138
+ describe "#unlock!" do
139
+ it "unlocks after entering unlock token" do
140
+ sorcery_model_property_set(:consecutive_login_retries_amount_limit, 2)
141
+ sorcery_model_property_set(:login_lock_time_period, 0)
142
+ sorcery_model_property_set(:unlock_token_mailer, SorceryMailer)
143
+ 3.times { user.register_failed_login! }
144
+
145
+ expect(user.unlock_token).not_to be_nil
146
+
147
+ token = user.unlock_token
148
+ user = User.load_from_unlock_token(token)
149
+
150
+ expect(user).not_to be_nil
151
+
152
+ user.unlock!
153
+ expect(User.load_from_unlock_token(user.unlock_token)).to be_nil
35
154
  end
36
155
  end
37
- end
156
+ end