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,320 +1,495 @@
1
1
  shared_examples_for "rails_3_core_model" do
2
- describe User, "loaded plugin configuration" do
3
- after(:each) do
4
- User.sorcery_config.reset!
5
- end
6
-
7
- it "should enable configuration option 'username_attribute_names'" do
2
+
3
+ let(:user) { create_new_user }
4
+ let(:crypted_password) { user.send User.sorcery_config.crypted_password_attribute_name }
5
+
6
+ describe "loaded plugin configuration" do
7
+
8
+ after(:each) { User.sorcery_config.reset! }
9
+
10
+ it "enables configuration option 'username_attribute_names'" do
8
11
  sorcery_model_property_set(:username_attribute_names, :email)
9
- User.sorcery_config.username_attribute_names.should == [:email]
12
+
13
+ expect(User.sorcery_config.username_attribute_names).to eq [:email]
10
14
  end
11
-
12
- it "should enable configuration option 'password_attribute_name'" do
15
+
16
+ it "enables configuration option 'password_attribute_name'" do
13
17
  sorcery_model_property_set(:password_attribute_name, :mypassword)
14
- User.sorcery_config.password_attribute_name.should equal(:mypassword)
18
+
19
+ expect(User.sorcery_config.password_attribute_name).to eq :mypassword
15
20
  end
16
-
17
- it "should enable configuration option 'email_attribute_name'" do
21
+
22
+ it "enables configuration option 'email_attribute_name'" do
18
23
  sorcery_model_property_set(:email_attribute_name, :my_email)
19
- User.sorcery_config.email_attribute_name.should equal(:my_email)
24
+
25
+ expect(User.sorcery_config.email_attribute_name).to eq :my_email
20
26
  end
21
-
22
- it "should enable configuration option 'crypted_password_attribute_name'" do
27
+
28
+ it "enables configuration option 'crypted_password_attribute_name'" do
23
29
  sorcery_model_property_set(:crypted_password_attribute_name, :password)
24
- User.sorcery_config.crypted_password_attribute_name.should equal(:password)
30
+
31
+ expect(User.sorcery_config.crypted_password_attribute_name).to eq :password
25
32
  end
26
-
27
- it "should enable configuration option 'salt_attribute_name'" do
33
+
34
+ it "enables configuration option 'salt_attribute_name'" do
28
35
  sorcery_model_property_set(:salt_attribute_name, :my_salt)
29
- User.sorcery_config.salt_attribute_name.should equal(:my_salt)
36
+
37
+ expect(User.sorcery_config.salt_attribute_name).to eq :my_salt
30
38
  end
31
-
32
- it "should enable configuration option 'encryption_algorithm'" do
39
+
40
+ it "enables configuration option 'encryption_algorithm'" do
33
41
  sorcery_model_property_set(:encryption_algorithm, :none)
34
- User.sorcery_config.encryption_algorithm.should equal(:none)
42
+
43
+ expect(User.sorcery_config.encryption_algorithm).to eq :none
35
44
  end
36
-
37
- it "should enable configuration option 'encryption_key'" do
45
+
46
+ it "enables configuration option 'encryption_key'" do
38
47
  sorcery_model_property_set(:encryption_key, 'asdadas424234242')
39
- User.sorcery_config.encryption_key.should == 'asdadas424234242'
48
+
49
+ expect(User.sorcery_config.encryption_key).to eq 'asdadas424234242'
40
50
  end
41
-
42
- it "should enable configuration option 'custom_encryption_provider'" do
51
+
52
+ it "enables configuration option 'custom_encryption_provider'" do
43
53
  sorcery_model_property_set(:encryption_algorithm, :custom)
44
54
  sorcery_model_property_set(:custom_encryption_provider, Array)
45
- User.sorcery_config.custom_encryption_provider.should equal(Array)
55
+
56
+ expect(User.sorcery_config.custom_encryption_provider).to eq Array
46
57
  end
47
-
48
- it "should enable configuration option 'salt_join_token'" do
58
+
59
+ it "enables configuration option 'salt_join_token'" do
49
60
  salt_join_token = "--%%*&-"
50
61
  sorcery_model_property_set(:salt_join_token, salt_join_token)
51
- User.sorcery_config.salt_join_token.should equal(salt_join_token)
62
+
63
+ expect(User.sorcery_config.salt_join_token).to eq salt_join_token
52
64
  end
53
-
54
- it "should enable configuration option 'stretches'" do
65
+
66
+ it "enables configuration option 'stretches'" do
55
67
  stretches = 15
56
68
  sorcery_model_property_set(:stretches, stretches)
57
- User.sorcery_config.stretches.should equal(stretches)
58
- end
59
- end
60
-
61
- # ----------------- PLUGIN ACTIVATED -----------------------
62
- describe User, "when activated with sorcery" do
63
- before(:all) do
64
- sorcery_reload!()
69
+
70
+ expect(User.sorcery_config.stretches).to eq stretches
65
71
  end
66
-
67
- before(:each) do
68
- User.delete_all
72
+
73
+ it 'respond to username=' do
74
+ expect(User.new).to respond_to(:username=)
69
75
  end
70
-
71
- it "should respond to class method authenticate" do
72
- ActiveRecord::Base.should_not respond_to(:authenticate) if defined?(ActiveRecord)
73
- User.should respond_to(:authenticate)
76
+ end
77
+
78
+ describe "when activated with sorcery" do
79
+ before(:all) { sorcery_reload! }
80
+ before(:each) { User.sorcery_adapter.delete_all }
81
+
82
+ it "does not add authenticate method to base class", active_record: true do
83
+ expect(ActiveRecord::Base).not_to respond_to(:authenticate) if defined?(ActiveRecord)
74
84
  end
75
-
76
- it "authenticate should return true if credentials are good" do
77
- create_new_user
78
- User.authenticate(@user.send(User.sorcery_config.username_attribute_names.first), 'secret').should be_true
85
+
86
+ it "responds to class method authenticate" do
87
+ expect(User).to respond_to :authenticate
79
88
  end
80
-
81
- it "authenticate should return false if credentials are bad" do
82
- create_new_user
83
- User.authenticate(@user.send(User.sorcery_config.username_attribute_names.first), 'wrong!').should be_false
89
+
90
+ describe "#authenticate" do
91
+ it "returns user if credentials are good" do
92
+ expect(User.authenticate user.email, 'secret').to eq user
93
+ end
94
+
95
+ it "returns nil if credentials are bad" do
96
+ expect(User.authenticate user.email, 'wrong!').to be nil
97
+ end
98
+
99
+ context "with empty credentials" do
100
+ before do
101
+ sorcery_model_property_set(:downcase_username_before_authenticating, true)
102
+ end
103
+
104
+ after do
105
+ sorcery_reload!
106
+ end
107
+
108
+ it "don't downcase empty credentials" do
109
+ expect(User.authenticate(nil, 'wrong!')).to be_falsy
110
+ end
111
+ end
112
+
113
+ context "and model implements active_for_authentication?" do
114
+
115
+ it "authenticates returns user if active_for_authentication? returns true" do
116
+ allow_any_instance_of(User).to receive(:active_for_authentication?) { true }
117
+
118
+ expect(User.authenticate user.email, 'secret').to eq user
119
+ end
120
+
121
+ it "authenticate returns nil if active_for_authentication? returns false" do
122
+ allow_any_instance_of(User).to receive(:active_for_authentication?) { false }
123
+
124
+ expect(User.authenticate user.email, 'secret').to be_nil
125
+ end
126
+ end
84
127
  end
85
-
86
- specify { User.should respond_to(:encrypt) }
87
-
88
- it "subclass should inherit config if defined so" do
128
+
129
+ specify { expect(User).to respond_to(:encrypt) }
130
+
131
+ it "subclass inherits config if defined so" do
89
132
  sorcery_reload!([],{:subclasses_inherit_config => true})
90
- class Admin < User
91
- end
92
- Admin.sorcery_config.should_not be_nil
93
- Admin.sorcery_config.should == User.sorcery_config
133
+ class Admin < User; end
134
+
135
+ expect(Admin.sorcery_config).not_to be_nil
136
+ expect(Admin.sorcery_config).to eq User.sorcery_config
94
137
  end
95
-
96
- it "subclass should not inherit config if not defined so" do
138
+
139
+ it "subclass does not inherit config if not defined so" do
97
140
  sorcery_reload!([],{:subclasses_inherit_config => false})
98
- class Admin2 < User
99
- end
100
- Admin2.sorcery_config.should be_nil
141
+ class Admin2 < User; end
142
+
143
+ expect(Admin2.sorcery_config).to be_nil
101
144
  end
102
145
  end
103
-
104
- # ----------------- REGISTRATION -----------------------
105
- describe User, "registration" do
106
-
107
- before(:all) do
108
- sorcery_reload!()
109
- end
110
146
 
111
- before(:each) do
112
- User.delete_all
113
- end
114
-
115
- it "by default, encryption_provider should not be nil" do
116
- User.sorcery_config.encryption_provider.should_not be_nil
147
+
148
+ describe "registration" do
149
+
150
+ before(:all) { sorcery_reload! }
151
+ before(:each) { User.sorcery_adapter.delete_all }
152
+
153
+ it "by default, encryption_provider is not nil" do
154
+ expect(User.sorcery_config.encryption_provider).not_to be_nil
117
155
  end
118
-
119
- it "should encrypt password when a new user is saved" do
120
- create_new_user
121
- User.sorcery_config.encryption_provider.matches?(@user.send(User.sorcery_config.crypted_password_attribute_name),'secret',@user.salt).should be_true
156
+
157
+ it "encrypts password when a new user is saved" do
158
+ expect(User.sorcery_config.encryption_provider.matches? crypted_password, 'secret', user.salt).to be true
122
159
  end
123
160
 
124
- it "should clear the virtual password field if the encryption process worked" do
125
- create_new_user
126
- @user.password.should be_nil
161
+ it "clears the virtual password field if the encryption process worked" do
162
+ expect(user.password).to be_nil
127
163
  end
128
-
129
- it "should not clear the virtual password field if save failed due to validity" do
130
- create_new_user
164
+
165
+ it "does not clear the virtual password field if save failed due to validity" do
131
166
  User.class_eval do
132
- validates_format_of :email, :with => /^(.)+@(.)+$/, :if => Proc.new {|r| r.email}, :message => "is invalid"
167
+ validates_format_of :email, :with => /\A(.)+@(.)+\Z/, :if => Proc.new {|r| r.email}, :message => "is invalid"
133
168
  end
134
- @user.password = 'blupush'
135
- @user.email = 'asd'
136
- @user.save
137
- @user.password.should_not be_nil
169
+
170
+ user.password = 'blupush'
171
+ user.email = 'asd'
172
+ user.save
173
+
174
+ expect(user.password).not_to be_nil
138
175
  end
139
-
140
- it "should not clear the virtual password field if save failed due to exception" do
141
- create_new_user
142
- @user.password = '4blupush'
143
- @user.username = nil
144
- User.class_eval do
145
- validates_presence_of :username
146
- end
176
+
177
+ it "does not clear the virtual password field if save failed due to exception" do
178
+ user.password = '4blupush'
179
+ user.username = nil
180
+
181
+ expect(user).to receive(:save) { raise RuntimeError }
182
+
147
183
  begin
148
- @user.save! # triggers validation exception since username field is required.
184
+ user.save
149
185
  rescue
150
186
  end
151
- @user.password.should_not be_nil
187
+
188
+ expect(user.password).not_to be_nil
152
189
  end
153
-
154
- it "should not encrypt the password twice when a user is updated" do
155
- create_new_user
156
- @user.email = "blup@bla.com"
157
- @user.save!
158
- User.sorcery_config.encryption_provider.matches?(@user.send(User.sorcery_config.crypted_password_attribute_name),'secret',@user.salt).should be_true
190
+
191
+ it "does not encrypt the password twice when a user is updated" do
192
+ user.email = "blup@bla.com"
193
+ user.save
194
+
195
+ expect(User.sorcery_config.encryption_provider.matches? crypted_password, 'secret', user.salt).to be true
159
196
  end
160
197
 
161
- it "should replace the crypted_password in case a new password is set" do
162
- create_new_user
163
- @user.password = 'new_secret'
164
- @user.save!
165
- User.sorcery_config.encryption_provider.matches?(@user.send(User.sorcery_config.crypted_password_attribute_name),'secret',@user.salt).should be_false
198
+ it "replaces the crypted_password in case a new password is set" do
199
+ user.password = 'new_secret'
200
+ user.save
201
+
202
+ expect(User.sorcery_config.encryption_provider.matches? crypted_password, 'secret', user.salt).to be false
166
203
  end
167
204
 
205
+ describe "when user has password_confirmation_defined" do
206
+ before(:all) do
207
+ update_model { attr_accessor :password_confirmation }
208
+ end
209
+
210
+ after(:all) do
211
+ User.send(:remove_method, :password_confirmation)
212
+ User.send(:remove_method, :password_confirmation=)
213
+ end
214
+
215
+ it "clears the virtual password field if the encryption process worked" do
216
+ user = create_new_user(username: "u", password: "secret", password_confirmation: "secret", email: "email@example.com")
217
+
218
+ expect(user.password_confirmation).to be_nil
219
+ end
220
+
221
+ it "does not clear the virtual password field if save failed due to validity" do
222
+ User.class_eval do
223
+ validates_format_of :email, :with => /\A(.)+@(.)+\Z/
224
+ end
225
+ user = build_new_user(username: "u", password: "secret", password_confirmation: "secret", email: "asd")
226
+ user.save
227
+
228
+ expect(user.password_confirmation).not_to be_nil
229
+ end
230
+ end
168
231
  end
232
+
233
+ describe "password validation" do
234
+
235
+ let(:user_with_pass) { create_new_user({:username => 'foo_bar', :email => "foo@bar.com", :password => 'foobar'})}
236
+
237
+ specify { expect(user_with_pass).to respond_to :valid_password? }
238
+
239
+ it "returns true if password is correct" do
240
+ expect(user_with_pass.valid_password?("foobar")).to be true
241
+ end
169
242
 
170
- # ----------------- PASSWORD ENCRYPTION -----------------------
171
- describe User, "special encryption cases" do
243
+ it "returns false if password is incorrect" do
244
+ expect(user_with_pass.valid_password?("foobug")).to be false
245
+ end
246
+ end
247
+
248
+ describe "special encryption cases" do
172
249
  before(:all) do
173
250
  sorcery_reload!()
174
251
  @text = "Some Text!"
175
252
  end
176
-
253
+
177
254
  before(:each) do
178
- User.delete_all
255
+ User.sorcery_adapter.delete_all
179
256
  end
180
-
257
+
181
258
  after(:each) do
182
259
  User.sorcery_config.reset!
183
260
  end
184
-
185
- it "should work with no password encryption" do
261
+
262
+ it "works with no password encryption" do
186
263
  sorcery_model_property_set(:encryption_algorithm, :none)
187
- create_new_user
188
- User.authenticate(@user.send(User.sorcery_config.username_attribute_names.first), 'secret').should be_true
264
+ username = user.send(User.sorcery_config.username_attribute_names.first)
265
+
266
+ expect(User.authenticate username, 'secret').to be_truthy
189
267
  end
190
-
191
- it "should work with custom password encryption" do
268
+
269
+ it "works with custom password encryption" do
192
270
  class MyCrypto
193
271
  def self.encrypt(*tokens)
194
272
  tokens.flatten.join('').gsub(/e/,'A')
195
273
  end
196
-
274
+
197
275
  def self.matches?(crypted,*tokens)
198
276
  crypted == encrypt(*tokens)
199
277
  end
200
278
  end
201
279
  sorcery_model_property_set(:encryption_algorithm, :custom)
202
280
  sorcery_model_property_set(:custom_encryption_provider, MyCrypto)
203
- create_new_user
204
- User.authenticate(@user.send(User.sorcery_config.username_attribute_names.first), 'secret').should be_true
281
+
282
+ username = user.send(User.sorcery_config.username_attribute_names.first)
283
+
284
+ expect(User.authenticate username, 'secret').to be_truthy
205
285
  end
206
-
207
- it "if encryption algo is aes256, it should set key to crypto provider" do
286
+
287
+ it "if encryption algo is aes256, it sets key to crypto provider" do
208
288
  sorcery_model_property_set(:encryption_algorithm, :aes256)
209
289
  sorcery_model_property_set(:encryption_key, nil)
210
- expect{User.encrypt(@text)}.to raise_error(ArgumentError)
290
+
291
+ expect { User.encrypt @text }.to raise_error(ArgumentError)
292
+
211
293
  sorcery_model_property_set(:encryption_key, "asd234dfs423fddsmndsflktsdf32343")
212
- expect{User.encrypt(@text)}.to_not raise_error(ArgumentError)
294
+
295
+ expect { User.encrypt @text }.not_to raise_error
213
296
  end
214
-
215
- it "if encryption algo is aes256, it should set key to crypto provider, even if attributes are set in reverse" do
297
+
298
+ it "if encryption algo is aes256, it sets key to crypto provider, even if attributes are set in reverse" do
216
299
  sorcery_model_property_set(:encryption_key, nil)
217
300
  sorcery_model_property_set(:encryption_algorithm, :none)
218
301
  sorcery_model_property_set(:encryption_key, "asd234dfs423fddsmndsflktsdf32343")
219
302
  sorcery_model_property_set(:encryption_algorithm, :aes256)
220
- expect{User.encrypt(@text)}.to_not raise_error(ArgumentError)
303
+
304
+ expect { User.encrypt @text }.not_to raise_error
221
305
  end
222
-
223
- it "if encryption algo is md5 it should work" do
306
+
307
+ it "if encryption algo is md5 it works" do
224
308
  sorcery_model_property_set(:encryption_algorithm, :md5)
225
- User.encrypt(@text).should == Sorcery::CryptoProviders::MD5.encrypt(@text)
309
+
310
+ expect(User.encrypt @text).to eq Sorcery::CryptoProviders::MD5.encrypt(@text)
226
311
  end
227
-
228
- it "if encryption algo is sha1 it should work" do
312
+
313
+ it "if encryption algo is sha1 it works" do
229
314
  sorcery_model_property_set(:encryption_algorithm, :sha1)
230
- User.encrypt(@text).should == Sorcery::CryptoProviders::SHA1.encrypt(@text)
315
+
316
+ expect(User.encrypt @text).to eq Sorcery::CryptoProviders::SHA1.encrypt(@text)
231
317
  end
232
-
233
- it "if encryption algo is sha256 it should work" do
318
+
319
+ it "if encryption algo is sha256 it works" do
234
320
  sorcery_model_property_set(:encryption_algorithm, :sha256)
235
- User.encrypt(@text).should == Sorcery::CryptoProviders::SHA256.encrypt(@text)
321
+
322
+ expect(User.encrypt @text).to eq Sorcery::CryptoProviders::SHA256.encrypt(@text)
236
323
  end
237
-
238
- it "if encryption algo is sha512 it should work" do
324
+
325
+ it "if encryption algo is sha512 it works" do
239
326
  sorcery_model_property_set(:encryption_algorithm, :sha512)
240
- User.encrypt(@text).should == Sorcery::CryptoProviders::SHA512.encrypt(@text)
327
+
328
+ expect(User.encrypt @text).to eq Sorcery::CryptoProviders::SHA512.encrypt(@text)
241
329
  end
242
-
243
- it "salt should be random for each user and saved in db" do
330
+
331
+ it "salt is random for each user and saved in db" do
244
332
  sorcery_model_property_set(:salt_attribute_name, :salt)
245
- create_new_user
246
- @user.salt.should_not be_nil
333
+
334
+ expect(user.salt).not_to be_nil
247
335
  end
248
-
249
- it "if salt is set should use it to encrypt" do
336
+
337
+ it "if salt is set uses it to encrypt" do
250
338
  sorcery_model_property_set(:salt_attribute_name, :salt)
251
339
  sorcery_model_property_set(:encryption_algorithm, :sha512)
252
- create_new_user
253
- @user.crypted_password.should_not == Sorcery::CryptoProviders::SHA512.encrypt('secret')
254
- @user.crypted_password.should == Sorcery::CryptoProviders::SHA512.encrypt('secret',@user.salt)
340
+
341
+ expect(user.crypted_password).not_to eq Sorcery::CryptoProviders::SHA512.encrypt('secret')
342
+ expect(user.crypted_password).to eq Sorcery::CryptoProviders::SHA512.encrypt('secret',user.salt)
255
343
  end
256
-
257
- it "if salt_join_token is set should use it to encrypt" do
344
+
345
+ it "if salt_join_token is set uses it to encrypt" do
258
346
  sorcery_model_property_set(:salt_attribute_name, :salt)
259
347
  sorcery_model_property_set(:salt_join_token, "-@=>")
260
348
  sorcery_model_property_set(:encryption_algorithm, :sha512)
261
- create_new_user
262
- @user.crypted_password.should_not == Sorcery::CryptoProviders::SHA512.encrypt('secret')
349
+
350
+ expect(user.crypted_password).not_to eq Sorcery::CryptoProviders::SHA512.encrypt('secret')
351
+
263
352
  Sorcery::CryptoProviders::SHA512.join_token = ""
264
- @user.crypted_password.should_not == Sorcery::CryptoProviders::SHA512.encrypt('secret',@user.salt)
353
+
354
+ expect(user.crypted_password).not_to eq Sorcery::CryptoProviders::SHA512.encrypt('secret',user.salt)
355
+
265
356
  Sorcery::CryptoProviders::SHA512.join_token = User.sorcery_config.salt_join_token
266
- @user.crypted_password.should == Sorcery::CryptoProviders::SHA512.encrypt('secret',@user.salt)
357
+
358
+ expect(user.crypted_password).to eq Sorcery::CryptoProviders::SHA512.encrypt('secret',user.salt)
267
359
  end
268
-
269
360
  end
270
-
271
- describe User, "ORM adapter" do
361
+
362
+ describe "ORM adapter" do
272
363
  before(:all) do
273
364
  sorcery_reload!()
274
- User.delete_all
275
- end
276
-
277
- before(:each) do
278
- create_new_user
365
+ User.sorcery_adapter.delete_all
279
366
  end
280
367
 
368
+ before(:each) { user }
369
+
281
370
  after(:each) do
282
- User.delete_all
371
+ User.sorcery_adapter.delete_all
283
372
  User.sorcery_config.reset!
284
373
  end
285
374
 
286
- it "find_by_username should work as expected" do
287
- User.find_by_username("gizmo").should == @user
375
+
376
+ it "find_by_username works as expected" do
377
+ sorcery_model_property_set(:username_attribute_names, [:username])
378
+
379
+ expect(User.sorcery_adapter.find_by_username "gizmo").to eq user
288
380
  end
289
381
 
290
- it "find_by_username should work as expected with multiple username attributes" do
382
+ it "find_by_username works as expected with multiple username attributes" do
291
383
  sorcery_model_property_set(:username_attribute_names, [:username, :email])
292
- User.find_by_username("gizmo").should == @user
384
+
385
+ expect(User.sorcery_adapter.find_by_username "gizmo").to eq user
293
386
  end
294
387
 
295
- it "find_by_email should work as expected" do
296
- User.find_by_email("bla@bla.com").should == @user
388
+ it "find_by_email works as expected" do
389
+ expect(User.sorcery_adapter.find_by_email "bla@bla.com").to eq user
297
390
  end
298
391
  end
299
392
  end
300
393
 
301
394
  shared_examples_for "external_user" do
395
+ let(:user) { create_new_user }
396
+ let(:external_user) { create_new_external_user :twitter }
397
+
302
398
  before(:each) do
303
- User.delete_all
399
+ User.sorcery_adapter.delete_all
304
400
  end
305
-
306
- it "should respond to 'external?'" do
307
- create_new_user
308
- @user.should respond_to(:external?)
401
+
402
+ it "responds to 'external?'" do
403
+ expect(user).to respond_to(:external?)
309
404
  end
310
-
311
- it "external? should be false for regular users" do
312
- create_new_user
313
- @user.external?.should be_false
405
+
406
+ it "external? is false for regular users" do
407
+ expect(user.external?).to be false
314
408
  end
315
-
316
- it "external? should be true for external users" do
317
- create_new_external_user(:twitter)
318
- @user.external?.should be_true
409
+
410
+ it "external? is true for external users" do
411
+ expect(external_user.external?).to be true
319
412
  end
320
- end
413
+
414
+ describe ".create_from_provider" do
415
+
416
+ before(:all) do
417
+ if SORCERY_ORM == :active_record
418
+ ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/external")
419
+ User.reset_column_information
420
+ end
421
+
422
+ sorcery_reload!([:external])
423
+ end
424
+
425
+ after(:all) do
426
+ if SORCERY_ORM == :active_record
427
+ ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/external")
428
+ end
429
+ end
430
+
431
+ it 'supports nested attributes' do
432
+ sorcery_model_property_set(:authentications_class, Authentication)
433
+
434
+ expect { User.create_from_provider('facebook', '123', {username: 'Noam Ben Ari'}) }.to change { User.count }.by(1)
435
+ expect(User.first.username).to eq 'Noam Ben Ari'
436
+ end
437
+
438
+ context 'with block' do
439
+ it 'create user when block return true' do
440
+ expect {
441
+ User.create_from_provider('facebook', '123', {username: 'Noam Ben Ari'}) { true }
442
+ }.to change { User.count }.by(1)
443
+ end
444
+
445
+ it 'does not create user when block return false' do
446
+ expect {
447
+ User.create_from_provider('facebook', '123', {username: 'Noam Ben Ari'}) { false }
448
+ }.not_to change { User.count }
449
+ end
450
+ end
451
+
452
+ end
453
+
454
+ describe 'activation' do
455
+ before(:all) do
456
+ if SORCERY_ORM == :active_record
457
+ ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/external")
458
+ ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/activation")
459
+ end
460
+
461
+ sorcery_reload!([:user_activation,:external], :user_activation_mailer => ::SorceryMailer)
462
+ end
463
+
464
+ after(:all) do
465
+ if SORCERY_ORM == :active_record
466
+ ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/activation")
467
+ ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/external")
468
+ end
469
+ end
470
+
471
+ after(:each) do
472
+ User.sorcery_adapter.delete_all
473
+ end
474
+
475
+ [:facebook, :github, :google, :liveid].each do |provider|
476
+
477
+ it "does not send activation email to external users" do
478
+ old_size = ActionMailer::Base.deliveries.size
479
+ create_new_external_user(provider)
480
+
481
+ expect(ActionMailer::Base.deliveries.size).to eq old_size
482
+ end
483
+
484
+ it "does not send external users an activation success email" do
485
+ sorcery_model_property_set(:activation_success_email_method_name, nil)
486
+ create_new_external_user(provider)
487
+ old_size = ActionMailer::Base.deliveries.size
488
+ @user.activate!
489
+
490
+ expect(ActionMailer::Base.deliveries.size).to eq old_size
491
+ end
492
+ end
493
+
494
+ end
495
+ end