sorcery 0.8.1 → 0.9.0

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