fat_free_crm 0.13.6 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of fat_free_crm might be problematic. Click here for more details.

Files changed (534) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -0
  3. data/.travis.yml +8 -5
  4. data/CHANGELOG +26 -0
  5. data/Gemfile +26 -26
  6. data/Gemfile.lock +280 -250
  7. data/Guardfile +0 -1
  8. data/README.md +7 -9
  9. data/Rakefile +1 -1
  10. data/app/assets/javascripts/application.js.erb +1 -0
  11. data/app/assets/javascripts/crm.js.coffee +6 -7
  12. data/app/assets/javascripts/search.js.coffee +7 -1
  13. data/app/assets/stylesheets/about.css.scss +10 -0
  14. data/app/assets/stylesheets/application.css.erb +2 -0
  15. data/app/assets/stylesheets/common.scss +1 -1
  16. data/app/controllers/admin/application_controller.rb +3 -3
  17. data/app/controllers/admin/field_groups_controller.rb +12 -7
  18. data/app/controllers/admin/fields_controller.rb +21 -17
  19. data/app/controllers/admin/groups_controller.rb +10 -4
  20. data/app/controllers/admin/plugins_controller.rb +1 -2
  21. data/app/controllers/admin/settings_controller.rb +1 -2
  22. data/app/controllers/admin/tags_controller.rb +10 -4
  23. data/app/controllers/admin/users_controller.rb +32 -12
  24. data/app/controllers/application_controller.rb +58 -38
  25. data/app/controllers/authentications_controller.rb +5 -8
  26. data/app/controllers/comments_controller.rb +15 -11
  27. data/app/controllers/emails_controller.rb +1 -2
  28. data/app/controllers/entities/accounts_controller.rb +20 -20
  29. data/app/controllers/entities/campaigns_controller.rb +25 -22
  30. data/app/controllers/entities/contacts_controller.rb +25 -24
  31. data/app/controllers/entities/leads_controller.rb +33 -31
  32. data/app/controllers/entities/opportunities_controller.rb +31 -28
  33. data/app/controllers/entities_controller.rb +26 -22
  34. data/app/controllers/home_controller.rb +18 -18
  35. data/app/controllers/lists_controller.rb +11 -7
  36. data/app/controllers/passwords_controller.rb +5 -6
  37. data/app/controllers/tasks_controller.rb +23 -18
  38. data/app/controllers/users_controller.rb +31 -7
  39. data/app/helpers/accounts_helper.rb +40 -42
  40. data/app/helpers/addresses_helper.rb +1 -3
  41. data/app/helpers/admin/application_helper.rb +4 -4
  42. data/app/helpers/admin/field_groups_helper.rb +5 -7
  43. data/app/helpers/admin/fields_helper.rb +2 -3
  44. data/app/helpers/admin/plugins_helper.rb +0 -1
  45. data/app/helpers/admin/settings_helper.rb +0 -1
  46. data/app/helpers/admin/tags_helper.rb +1 -1
  47. data/app/helpers/admin/users_helper.rb +16 -18
  48. data/app/helpers/application_helper.rb +127 -119
  49. data/app/helpers/authentications_helper.rb +0 -1
  50. data/app/helpers/campaigns_helper.rb +5 -7
  51. data/app/helpers/comments_helper.rb +0 -1
  52. data/app/helpers/contacts_helper.rb +0 -1
  53. data/app/helpers/home_helper.rb +14 -14
  54. data/app/helpers/javascript_helper.rb +30 -0
  55. data/app/helpers/leads_helper.rb +7 -7
  56. data/app/helpers/opportunities_helper.rb +8 -10
  57. data/app/helpers/passwords_helper.rb +0 -1
  58. data/app/helpers/tags_helper.rb +1 -3
  59. data/app/helpers/tasks_helper.rb +24 -26
  60. data/app/helpers/users_helper.rb +6 -7
  61. data/app/helpers/versions_helper.rb +3 -5
  62. data/app/inputs/date_pair_input.rb +6 -7
  63. data/app/inputs/date_time_input.rb +3 -4
  64. data/app/inputs/datetime_pair_input.rb +0 -1
  65. data/app/inputs/text_input.rb +2 -2
  66. data/app/mailers/dropbox_mailer.rb +4 -7
  67. data/app/mailers/subscription_mailer.rb +4 -5
  68. data/app/mailers/user_mailer.rb +7 -9
  69. data/app/models/entities/account.rb +31 -28
  70. data/app/models/entities/account_contact.rb +2 -1
  71. data/app/models/entities/account_opportunity.rb +1 -1
  72. data/app/models/entities/campaign.rb +22 -19
  73. data/app/models/entities/contact.rb +55 -53
  74. data/app/models/entities/contact_opportunity.rb +1 -1
  75. data/app/models/entities/lead.rb +49 -41
  76. data/app/models/entities/opportunity.rb +38 -38
  77. data/app/models/fields/custom_field.rb +21 -27
  78. data/app/models/fields/custom_field_date_pair.rb +7 -8
  79. data/app/models/fields/custom_field_datetime_pair.rb +0 -2
  80. data/app/models/fields/custom_field_pair.rb +8 -10
  81. data/app/models/fields/field.rb +29 -30
  82. data/app/models/fields/field_group.rb +4 -4
  83. data/app/models/list.rb +1 -1
  84. data/app/models/observers/entity_observer.rb +1 -1
  85. data/app/models/observers/lead_observer.rb +1 -1
  86. data/app/models/observers/opportunity_observer.rb +1 -1
  87. data/app/models/observers/task_observer.rb +1 -1
  88. data/app/models/polymorphic/address.rb +7 -7
  89. data/app/models/polymorphic/avatar.rb +8 -9
  90. data/app/models/polymorphic/comment.rb +16 -10
  91. data/app/models/polymorphic/email.rb +13 -6
  92. data/app/models/polymorphic/tag.rb +2 -2
  93. data/app/models/polymorphic/task.rb +45 -45
  94. data/{config/initializers/paper_trail.rb → app/models/polymorphic/version.rb} +26 -31
  95. data/app/models/setting.rb +12 -17
  96. data/app/models/users/ability.rb +5 -6
  97. data/app/models/users/authentication.rb +6 -5
  98. data/app/models/users/group.rb +1 -3
  99. data/app/models/users/permission.rb +3 -3
  100. data/app/models/users/preference.rb +7 -7
  101. data/app/models/users/user.rb +36 -43
  102. data/app/views/accounts/_top_section.html.haml +2 -2
  103. data/app/views/accounts/edit.js.haml +0 -1
  104. data/app/views/admin/fields/_field.html.haml +1 -1
  105. data/app/views/admin/tags/_tag.html.haml +1 -1
  106. data/app/views/admin/users/_user.html.haml +4 -4
  107. data/app/views/campaigns/_top_section.html.haml +1 -1
  108. data/app/views/campaigns/edit.js.haml +0 -2
  109. data/app/views/contacts/_top_section.html.haml +1 -1
  110. data/app/views/contacts/edit.js.haml +0 -1
  111. data/app/views/entities/_basic_search.html.haml +1 -1
  112. data/app/views/home/_account.html.haml +2 -2
  113. data/app/views/home/_opportunity.html.haml +2 -2
  114. data/app/views/layouts/_about.html.haml +1 -1
  115. data/app/views/leads/_top_section.html.haml +1 -1
  116. data/app/views/leads/edit.js.haml +0 -2
  117. data/app/views/lists/_sidebar.html.haml +1 -1
  118. data/app/views/opportunities/_top_section.html.haml +2 -2
  119. data/app/views/opportunities/edit.js.haml +0 -1
  120. data/app/views/shared/_tags.html.haml +2 -1
  121. data/app/views/tasks/_edit.html.haml +2 -3
  122. data/app/views/tasks/_top_section.html.haml +1 -1
  123. data/app/views/users/_user.html.haml +2 -1
  124. data/app/views/users/opportunities_overview.html.haml +2 -2
  125. data/bin/bundle +3 -0
  126. data/bin/rails +4 -0
  127. data/bin/rake +4 -0
  128. data/config/application.rb +16 -33
  129. data/config/boot.rb +1 -1
  130. data/config/database.mysql.mac.yml +1 -0
  131. data/config/database.mysql.yml +1 -0
  132. data/config/database.postgres.docker.yml +1 -1
  133. data/config/database.postgres.yml +1 -0
  134. data/config/database.sqlite.yml +1 -0
  135. data/config/deploy.example.rb +3 -5
  136. data/config/environments/development.rb +13 -14
  137. data/config/environments/production.rb +8 -7
  138. data/config/environments/staging.rb +43 -41
  139. data/config/environments/test.rb +12 -14
  140. data/config/initializers/assets.rb +14 -0
  141. data/config/initializers/backtrace_silencers.rb +7 -0
  142. data/config/initializers/cookies_serializer.rb +3 -0
  143. data/config/initializers/custom_field_ransack_translations.rb +1 -1
  144. data/config/initializers/filter_parameter_logging.rb +4 -0
  145. data/config/initializers/inflections.rb +16 -0
  146. data/config/initializers/mime_types.rb +0 -1
  147. data/config/initializers/paginate_arrays.rb +0 -1
  148. data/config/initializers/ransack.rb +5 -5
  149. data/config/initializers/session_store.rb +5 -0
  150. data/config/initializers/simple_form.rb +1 -1
  151. data/config/initializers/views.rb +33 -33
  152. data/config/initializers/wrap_parameters.rb +14 -0
  153. data/config/locales/cz_fat_free_crm.yml +1 -1
  154. data/config/locales/de_fat_free_crm.yml +2 -2
  155. data/config/locales/en-GB_fat_free_crm.yml +2 -3
  156. data/config/locales/en-US_fat_free_crm.yml +2 -3
  157. data/config/locales/en.yml +23 -0
  158. data/config/locales/es-CL.yml +227 -0
  159. data/config/locales/es-CL_fat_free_crm.yml +929 -0
  160. data/config/locales/es-CL_ransack.yml +91 -0
  161. data/config/locales/es.yml +53 -59
  162. data/config/locales/es_fat_free_crm.yml +708 -370
  163. data/config/locales/es_ransack.yml +91 -0
  164. data/config/locales/fr-CA_fat_free_crm.yml +7 -7
  165. data/config/locales/fr_fat_free_crm.yml +285 -81
  166. data/config/locales/it_fat_free_crm.yml +1 -1
  167. data/config/locales/ja_fat_free_crm.yml +1 -1
  168. data/config/locales/nl.yml +210 -0
  169. data/config/locales/nl_fat_free_crm.yml +920 -0
  170. data/config/locales/nl_ransack.yml +91 -0
  171. data/config/locales/pl_fat_free_crm.yml +1 -1
  172. data/config/locales/pt-BR_fat_free_crm.yml +111 -38
  173. data/config/locales/ru_fat_free_crm.yml +3 -4
  174. data/config/locales/sv-SE_fat_free_crm.yml +1 -1
  175. data/config/locales/th.rb +157 -158
  176. data/config/locales/th_fat_free_crm.yml +1 -1
  177. data/config/locales/zh-CN_fat_free_crm.yml +3 -4
  178. data/config/routes.rb +93 -94
  179. data/config/unicorn.rb +25 -2
  180. data/custom_plan.rb +0 -2
  181. data/db/demo/accounts.yml +4 -5
  182. data/db/demo/addresses.yml +5 -5
  183. data/db/demo/campaigns.yml +2 -2
  184. data/db/demo/comments.yml +1 -1
  185. data/db/demo/contacts.yml +8 -8
  186. data/db/demo/emails.yml +5 -5
  187. data/db/demo/leads.yml +10 -10
  188. data/db/demo/opportunities.yml +2 -2
  189. data/db/demo/tasks.yml +2 -2
  190. data/db/demo/users.yml +12 -16
  191. data/db/migrate/20100928030598_create_sessions.rb +1 -2
  192. data/db/migrate/20100928030599_create_users.rb +24 -25
  193. data/db/migrate/20100928030600_create_openid_tables.rb +11 -12
  194. data/db/migrate/20100928030601_create_accounts.rb +14 -15
  195. data/db/migrate/20100928030602_create_permissions.rb +2 -3
  196. data/db/migrate/20100928030603_create_settings.rb +4 -5
  197. data/db/migrate/20100928030604_create_preferences.rb +3 -4
  198. data/db/migrate/20100928030605_create_campaigns.rb +19 -20
  199. data/db/migrate/20100928030606_create_leads.rb +26 -27
  200. data/db/migrate/20100928030607_create_contacts.rb +26 -27
  201. data/db/migrate/20100928030608_create_opportunities.rb +15 -16
  202. data/db/migrate/20100928030609_create_account_contacts.rb +2 -3
  203. data/db/migrate/20100928030610_create_account_opportunities.rb +2 -3
  204. data/db/migrate/20100928030611_create_contact_opportunities.rb +3 -4
  205. data/db/migrate/20100928030612_create_tasks.rb +14 -15
  206. data/db/migrate/20100928030613_create_comments.rb +6 -7
  207. data/db/migrate/20100928030614_create_activities.rb +6 -7
  208. data/db/migrate/20100928030615_create_avatars.rb +5 -6
  209. data/db/migrate/20100928030616_rename_remember_token.rb +0 -1
  210. data/db/migrate/20100928030617_drop_openid_tables.rb +11 -11
  211. data/db/migrate/20100928030618_add_admin_to_users.rb +1 -2
  212. data/db/migrate/20100928030619_add_suspended_to_users.rb +0 -1
  213. data/db/migrate/20100928030620_remove_uuid.rb +3 -3
  214. data/db/migrate/20100928030621_add_email_to_accounts.rb +1 -2
  215. data/db/migrate/20100928030622_add_background_info_to_models.rb +0 -1
  216. data/db/migrate/20100928030623_create_addresses.rb +14 -16
  217. data/db/migrate/20100928030624_add_index_on_permissions.rb +2 -3
  218. data/db/migrate/20100928030625_create_emails.rb +15 -16
  219. data/db/migrate/20100928030626_add_state_to_timeline_objects.rb +2 -3
  220. data/db/migrate/20100928030627_acts_as_taggable_on_migration.rb +2 -3
  221. data/db/migrate/20101221123456_add_single_access_token_to_users.rb +0 -1
  222. data/db/migrate/20101221345678_add_rating_and_category_to_accounts.rb +2 -3
  223. data/db/migrate/20110719082054_add_skype_to_contacts_and_leads.rb +2 -3
  224. data/db/migrate/20111101083437_create_fields.rb +14 -15
  225. data/db/migrate/20111101090312_create_field_groups.rb +4 -5
  226. data/db/migrate/20111116091952_add_field_groups_tag_id.rb +0 -1
  227. data/db/migrate/20111117041311_change_fields_collection_to_text.rb +0 -1
  228. data/db/migrate/20111201030535_add_field_groups_klass_name.rb +4 -4
  229. data/db/migrate/20120121054235_create_lists.rb +1 -1
  230. data/db/migrate/20120216031616_create_versions.rb +5 -5
  231. data/db/migrate/20120216042541_is_paranoid_to_paper_trail.rb +1 -3
  232. data/db/migrate/20120224073107_remove_default_value_and_clear_settings.rb +1 -1
  233. data/db/migrate/20120316045804_activities_to_versions.rb +6 -6
  234. data/db/migrate/20120405080727_change_subscribed_users_to_set.rb +5 -5
  235. data/db/migrate/20120405080742_change_further_subscribed_users_to_set.rb +5 -5
  236. data/db/migrate/20120406082136_create_groups.rb +1 -1
  237. data/db/migrate/20120510025219_add_not_null_constraints_for_timestamp_columns.rb +2 -1
  238. data/db/migrate/20120528102124_increase_length_of_version_events.rb +2 -2
  239. data/db/migrate/20121003063155_add_settings_to_custom_fields.rb +1 -1
  240. data/db/migrate/20121221033947_fix_country_mapping.rb +0 -1
  241. data/db/migrate/20131207033244_add_user_id_to_lists.rb +1 -1
  242. data/db/migrate/20141126031837_increase_email_to254_chars.rb +14 -14
  243. data/db/migrate/20141230021159_add_transaction_id_column_to_versions.rb +11 -0
  244. data/db/migrate/20141230205453_add_missing_unique_indices.acts_as_taggable_on_engine.rb +20 -0
  245. data/db/migrate/20141230205454_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb +15 -0
  246. data/db/migrate/20141230205455_add_missing_taggable_index.acts_as_taggable_on_engine.rb +10 -0
  247. data/db/migrate/20150123060900_convert_radio_to_radio_buttons.rb +10 -0
  248. data/db/migrate/20150227123054_remove_last_request_at_from_users.rb +5 -0
  249. data/db/migrate/20150427131956_create_index_related_type.rb +9 -0
  250. data/db/migrate/20160511053730_add_account_contacts_index.rb +5 -0
  251. data/db/schema.rb +236 -228
  252. data/db/seeds.rb +1 -2
  253. data/db/seeds/fields.rb +36 -37
  254. data/{fig.yml → docker-compose.yml} +0 -0
  255. data/fat_free_crm.gemspec +31 -18
  256. data/lib/development_tasks/license.rake +29 -29
  257. data/lib/fat_free_crm.rb +1 -5
  258. data/lib/fat_free_crm/callback.rb +28 -20
  259. data/lib/fat_free_crm/comment_extensions.rb +1 -1
  260. data/lib/fat_free_crm/core_ext.rb +1 -1
  261. data/lib/fat_free_crm/core_ext/nil.rb +0 -3
  262. data/lib/fat_free_crm/core_ext/string.rb +7 -21
  263. data/lib/fat_free_crm/custom_fields.rb +2 -2
  264. data/lib/fat_free_crm/engine.rb +14 -0
  265. data/lib/fat_free_crm/errors.rb +0 -2
  266. data/lib/fat_free_crm/exceptions.rb +3 -4
  267. data/lib/fat_free_crm/export_csv.rb +0 -2
  268. data/lib/fat_free_crm/exportable.rb +5 -7
  269. data/lib/fat_free_crm/fields.rb +7 -8
  270. data/lib/fat_free_crm/gem_dependencies.rb +4 -1
  271. data/lib/fat_free_crm/gem_ext/active_record/schema_dumper.rb +2 -2
  272. data/lib/fat_free_crm/gem_ext/active_support/buffered_logger.rb +0 -3
  273. data/lib/fat_free_crm/gem_ext/rails/engine.rb +5 -12
  274. data/lib/fat_free_crm/gem_ext/rake/task.rb +1 -1
  275. data/lib/fat_free_crm/gem_ext/simple_form/action_view_extensions/form_helper.rb +1 -2
  276. data/lib/fat_free_crm/i18n.rb +2 -3
  277. data/lib/fat_free_crm/load_settings.rb +0 -2
  278. data/lib/fat_free_crm/mail_processor/base.rb +15 -16
  279. data/lib/fat_free_crm/mail_processor/comment_replies.rb +5 -10
  280. data/lib/fat_free_crm/mail_processor/dropbox.rb +56 -59
  281. data/lib/fat_free_crm/permissions.rb +18 -15
  282. data/lib/fat_free_crm/renderers.rb +2 -2
  283. data/lib/fat_free_crm/secret_token_generator.rb +3 -9
  284. data/lib/fat_free_crm/sortable.rb +4 -8
  285. data/lib/fat_free_crm/version.rb +2 -2
  286. data/lib/fat_free_crm/view_factory.rb +3 -8
  287. data/lib/gravatar_image_tag.rb +19 -24
  288. data/lib/missing_translation_detector.rb +10 -10
  289. data/lib/tasks/ffcrm/comment_replies.rake +3 -5
  290. data/lib/tasks/ffcrm/config.rake +3 -5
  291. data/lib/tasks/ffcrm/demo.rake +14 -16
  292. data/lib/tasks/ffcrm/dropbox.rake +3 -5
  293. data/lib/tasks/ffcrm/missing_translations.rake +1 -1
  294. data/lib/tasks/ffcrm/secret.rake +1 -3
  295. data/lib/tasks/ffcrm/settings.rake +2 -4
  296. data/lib/tasks/ffcrm/setup.rake +3 -6
  297. data/lib/tasks/ffcrm/update_data.rake +110 -116
  298. data/spec/controllers/admin/groups_controller_spec.rb +0 -1
  299. data/spec/controllers/admin/users_controller_spec.rb +98 -102
  300. data/spec/controllers/applications_controller_spec.rb +17 -21
  301. data/spec/controllers/authentications_controller_spec.rb +57 -61
  302. data/spec/controllers/comments_controller_spec.rb +32 -39
  303. data/spec/controllers/emails_controller_spec.rb +6 -7
  304. data/spec/controllers/entities/accounts_controller_spec.rb +204 -214
  305. data/spec/controllers/entities/campaigns_controller_spec.rb +210 -224
  306. data/spec/controllers/entities/contacts_controller_spec.rb +250 -270
  307. data/spec/controllers/entities/leads_controller_spec.rb +415 -438
  308. data/spec/controllers/entities/opportunities_controller_spec.rb +344 -359
  309. data/spec/controllers/entities_controller_spec.rb +10 -14
  310. data/spec/controllers/home_controller_spec.rb +85 -92
  311. data/spec/controllers/lists_controller_spec.rb +0 -1
  312. data/spec/controllers/passwords_controller_spec.rb +5 -9
  313. data/spec/controllers/tasks_controller_spec.rb +193 -210
  314. data/spec/controllers/users_controller_spec.rb +137 -146
  315. data/spec/factories/account_factories.rb +11 -13
  316. data/spec/factories/campaign_factories.rb +6 -6
  317. data/spec/factories/contact_factories.rb +21 -22
  318. data/spec/factories/field_factories.rb +8 -10
  319. data/spec/factories/lead_factories.rb +16 -16
  320. data/spec/factories/list_factories.rb +2 -2
  321. data/spec/factories/opportunity_factories.rb +8 -10
  322. data/spec/factories/sequences.rb +8 -9
  323. data/spec/factories/setting_factories.rb +2 -2
  324. data/spec/factories/shared_factories.rb +26 -30
  325. data/spec/factories/tag_factories.rb +1 -1
  326. data/spec/factories/task_factories.rb +11 -11
  327. data/spec/factories/user_factories.rb +22 -27
  328. data/spec/features/acceptance_helper.rb +1 -1
  329. data/spec/features/accounts_spec.rb +65 -61
  330. data/spec/features/admin/groups_spec.rb +11 -12
  331. data/spec/features/admin/users_spec.rb +17 -19
  332. data/spec/features/campaigns_spec.rb +61 -57
  333. data/spec/features/contacts_spec.rb +90 -59
  334. data/spec/features/dashboard_spec.rb +20 -21
  335. data/spec/features/leads_spec.rb +88 -67
  336. data/spec/features/opportunities_overview_spec.rb +31 -31
  337. data/spec/features/opportunities_spec.rb +64 -60
  338. data/spec/features/support/browser.rb +2 -2
  339. data/spec/features/support/headless.rb +1 -1
  340. data/spec/features/support/helpers.rb +5 -6
  341. data/spec/features/support/paths.rb +1 -2
  342. data/spec/features/support/selector_helpers.rb +2 -2
  343. data/spec/features/tasks_spec.rb +60 -54
  344. data/spec/helpers/accounts_helper_spec.rb +2 -5
  345. data/spec/helpers/admin/field_groups_helper_spec.rb +4 -4
  346. data/spec/helpers/admin/plugins_helper_spec.rb +0 -1
  347. data/spec/helpers/admin/settings_helper_spec.rb +0 -1
  348. data/spec/helpers/admin/users_helper_spec.rb +0 -1
  349. data/spec/helpers/application_helper_spec.rb +30 -33
  350. data/spec/helpers/authentications_helper_spec.rb +2 -5
  351. data/spec/helpers/campaigns_helper_spec.rb +2 -5
  352. data/spec/helpers/comments_helper_spec.rb +2 -5
  353. data/spec/helpers/contacts_helper_spec.rb +2 -5
  354. data/spec/helpers/emails_helper_spec.rb +0 -1
  355. data/spec/helpers/fields_helper_spec.rb +0 -1
  356. data/spec/helpers/groups_helper_spec.rb +0 -1
  357. data/spec/helpers/home_helper_spec.rb +2 -5
  358. data/spec/helpers/leads_helper_spec.rb +2 -5
  359. data/spec/helpers/lists_helper_spec.rb +0 -1
  360. data/spec/helpers/opportunities_helper_spec.rb +2 -5
  361. data/spec/helpers/passwords_helper_spec.rb +2 -5
  362. data/spec/helpers/tasks_helper_spec.rb +1 -5
  363. data/spec/helpers/users_helper_spec.rb +9 -11
  364. data/spec/lib/comment_extensions_spec.rb +3 -3
  365. data/spec/lib/core_ext/string_spec.rb +1 -1
  366. data/spec/lib/errors_spec.rb +10 -10
  367. data/spec/lib/fields_spec.rb +23 -33
  368. data/spec/lib/mail_processor/base_spec.rb +41 -43
  369. data/spec/lib/mail_processor/comment_replies_spec.rb +17 -17
  370. data/spec/lib/mail_processor/dropbox_spec.rb +91 -95
  371. data/spec/lib/mail_processor/sample_emails/dropbox.rb +13 -14
  372. data/spec/lib/permissions_spec.rb +44 -47
  373. data/spec/lib/secret_token_generator_spec.rb +16 -28
  374. data/spec/lib/view_factory_spec.rb +18 -24
  375. data/spec/mailers/subscription_mailer_spec.rb +14 -16
  376. data/spec/mailers/user_mailer_spec.rb +33 -34
  377. data/spec/models/entities/account_contact_spec.rb +2 -3
  378. data/spec/models/entities/account_opportunity_spec.rb +2 -3
  379. data/spec/models/entities/account_spec.rb +52 -59
  380. data/spec/models/entities/campaign_spec.rb +32 -39
  381. data/spec/models/entities/contact_opportunity_spec.rb +2 -3
  382. data/spec/models/entities/contact_spec.rb +71 -72
  383. data/spec/models/entities/lead_spec.rb +15 -22
  384. data/spec/models/entities/opportunity_spec.rb +104 -103
  385. data/spec/models/fields/custom_field_date_pair_spec.rb +38 -44
  386. data/spec/models/fields/custom_field_pair_spec.rb +28 -36
  387. data/spec/models/fields/custom_field_spec.rb +50 -56
  388. data/spec/models/fields/field_group_spec.rb +1 -2
  389. data/spec/models/fields/field_spec.rb +13 -15
  390. data/spec/models/list_spec.rb +4 -4
  391. data/spec/models/observers/entity_observer_spec.rb +18 -21
  392. data/spec/models/polymorphic/address_spec.rb +1 -3
  393. data/spec/models/polymorphic/avatar_spec.rb +6 -8
  394. data/spec/models/polymorphic/comment_spec.rb +7 -9
  395. data/spec/models/polymorphic/email_spec.rb +1 -2
  396. data/spec/models/polymorphic/task_spec.rb +130 -142
  397. data/spec/models/polymorphic/version_spec.rb +84 -91
  398. data/spec/models/setting_spec.rb +17 -19
  399. data/spec/models/users/abilities/user_ability_spec.rb +25 -20
  400. data/spec/models/users/authentication_spec.rb +0 -1
  401. data/spec/models/users/group_spec.rb +0 -1
  402. data/spec/models/users/permission_spec.rb +12 -13
  403. data/spec/models/users/preference_spec.rb +15 -15
  404. data/spec/models/users/user_spec.rb +53 -55
  405. data/spec/routing/accounts_routing_spec.rb +12 -14
  406. data/spec/routing/admin/users_routing_spec.rb +7 -9
  407. data/spec/routing/campaigns_routing_spec.rb +13 -14
  408. data/spec/routing/comments_routing_spec.rb +5 -6
  409. data/spec/routing/contacts_routing_spec.rb +12 -14
  410. data/spec/routing/emails_routing_spec.rb +7 -8
  411. data/spec/routing/leads_routing_spec.rb +19 -21
  412. data/spec/routing/opportunities_routing_spec.rb +13 -15
  413. data/spec/routing/tasks_routing_spec.rb +14 -15
  414. data/spec/routing/users_routing_spec.rb +18 -19
  415. data/spec/shared/controllers.rb +35 -35
  416. data/spec/shared/models.rb +52 -55
  417. data/spec/spec_helper.rb +21 -42
  418. data/spec/support/assert_select.rb +19 -18
  419. data/spec/support/auth_macros.rb +3 -3
  420. data/spec/support/macros.rb +5 -6
  421. data/spec/support/mail_processor_mocks.rb +11 -11
  422. data/spec/views/accounts/_edit.haml_spec.rb +9 -9
  423. data/spec/views/accounts/_new.haml_spec.rb +8 -9
  424. data/spec/views/accounts/create.js.haml_spec.rb +11 -12
  425. data/spec/views/accounts/destroy.js.haml_spec.rb +6 -7
  426. data/spec/views/accounts/edit.js.haml_spec.rb +12 -13
  427. data/spec/views/accounts/index.haml_spec.rb +8 -8
  428. data/spec/views/accounts/index.js.haml_spec.rb +7 -8
  429. data/spec/views/accounts/new.js.haml_spec.rb +7 -8
  430. data/spec/views/accounts/show.haml_spec.rb +11 -12
  431. data/spec/views/accounts/update.js.haml_spec.rb +18 -18
  432. data/spec/views/admin/field_groups/create.js.haml_spec.rb +8 -10
  433. data/spec/views/admin/field_groups/destroy.js.haml_spec.rb +7 -9
  434. data/spec/views/admin/field_groups/edit.js.haml_spec.rb +5 -7
  435. data/spec/views/admin/field_groups/new.js.haml_spec.rb +6 -8
  436. data/spec/views/admin/field_groups/update.js.haml_spec.rb +7 -9
  437. data/spec/views/admin/users/_create.haml_spec.rb +4 -4
  438. data/spec/views/admin/users/create.js.haml_spec.rb +8 -9
  439. data/spec/views/admin/users/destroy.js.haml_spec.rb +6 -6
  440. data/spec/views/admin/users/edit.js.haml_spec.rb +7 -9
  441. data/spec/views/admin/users/index.haml_spec.rb +4 -5
  442. data/spec/views/admin/users/index.js.haml_spec.rb +6 -8
  443. data/spec/views/admin/users/new.js.haml_spec.rb +4 -6
  444. data/spec/views/admin/users/reactivate.js.haml_spec.rb +4 -4
  445. data/spec/views/admin/users/show.haml_spec.rb +0 -1
  446. data/spec/views/admin/users/suspend.js.haml_spec.rb +4 -4
  447. data/spec/views/admin/users/update.js.haml_spec.rb +6 -7
  448. data/spec/views/application/auto_complete.haml_spec.rb +12 -14
  449. data/spec/views/authentications/new.haml_spec.rb +6 -7
  450. data/spec/views/campaigns/_edit.haml_spec.rb +9 -9
  451. data/spec/views/campaigns/_new.haml_spec.rb +8 -8
  452. data/spec/views/campaigns/create.js.haml_spec.rb +11 -12
  453. data/spec/views/campaigns/destroy.js.haml_spec.rb +7 -8
  454. data/spec/views/campaigns/edit.js.haml_spec.rb +12 -20
  455. data/spec/views/campaigns/index.haml_spec.rb +6 -7
  456. data/spec/views/campaigns/index.js.haml_spec.rb +9 -10
  457. data/spec/views/campaigns/new.js.haml_spec.rb +7 -8
  458. data/spec/views/campaigns/show.haml_spec.rb +12 -13
  459. data/spec/views/campaigns/update.js.haml_spec.rb +16 -16
  460. data/spec/views/comments/edit.js.haml_spec.rb +7 -7
  461. data/spec/views/contacts/_edit.haml_spec.rb +21 -21
  462. data/spec/views/contacts/_new.haml_spec.rb +12 -13
  463. data/spec/views/contacts/create.js.haml_spec.rb +12 -13
  464. data/spec/views/contacts/destroy.js.haml_spec.rb +6 -7
  465. data/spec/views/contacts/edit.js.haml_spec.rb +15 -17
  466. data/spec/views/contacts/index.haml_spec.rb +6 -7
  467. data/spec/views/contacts/index.js.html_spec.rb +7 -8
  468. data/spec/views/contacts/new.js.haml_spec.rb +8 -9
  469. data/spec/views/contacts/show.haml_spec.rb +9 -10
  470. data/spec/views/contacts/update.js.haml_spec.rb +26 -26
  471. data/spec/views/home/index.haml_spec.rb +4 -5
  472. data/spec/views/home/index.js.haml_spec.rb +6 -7
  473. data/spec/views/home/options.js.haml_spec.rb +10 -10
  474. data/spec/views/leads/_convert.haml_spec.rb +5 -6
  475. data/spec/views/leads/_edit.haml_spec.rb +13 -13
  476. data/spec/views/leads/_new.haml_spec.rb +11 -11
  477. data/spec/views/leads/_sidebar_show.haml_spec.rb +9 -9
  478. data/spec/views/leads/convert.js.haml_spec.rb +16 -17
  479. data/spec/views/leads/create.js.haml_spec.rb +16 -17
  480. data/spec/views/leads/destroy.js.haml_spec.rb +10 -11
  481. data/spec/views/leads/edit.js.haml_spec.rb +16 -17
  482. data/spec/views/leads/index.haml_spec.rb +7 -8
  483. data/spec/views/leads/index.js.haml_spec.rb +10 -11
  484. data/spec/views/leads/new.js.haml_spec.rb +8 -9
  485. data/spec/views/leads/promote.js.haml_spec.rb +30 -31
  486. data/spec/views/leads/reject.js.haml_spec.rb +10 -11
  487. data/spec/views/leads/show.haml_spec.rb +7 -8
  488. data/spec/views/leads/update.js.haml_spec.rb +28 -29
  489. data/spec/views/opportunities/_edit.haml_spec.rb +19 -19
  490. data/spec/views/opportunities/_new.haml_spec.rb +10 -10
  491. data/spec/views/opportunities/create.js.haml_spec.rb +19 -20
  492. data/spec/views/opportunities/destroy.js.haml_spec.rb +14 -15
  493. data/spec/views/opportunities/edit.js.haml_spec.rb +14 -16
  494. data/spec/views/opportunities/index.haml_spec.rb +6 -7
  495. data/spec/views/opportunities/index.js.haml_spec.rb +7 -8
  496. data/spec/views/opportunities/new.js.haml_spec.rb +8 -9
  497. data/spec/views/opportunities/show.haml_spec.rb +9 -10
  498. data/spec/views/opportunities/update.js.haml_spec.rb +35 -35
  499. data/spec/views/tasks/_edit.haml_spec.rb +9 -9
  500. data/spec/views/tasks/complete.js.haml_spec.rb +11 -12
  501. data/spec/views/tasks/create.js.haml_spec.rb +29 -31
  502. data/spec/views/tasks/destroy.js.haml_spec.rb +8 -8
  503. data/spec/views/tasks/edit.js.haml_spec.rb +12 -15
  504. data/spec/views/tasks/index.haml_spec.rb +7 -7
  505. data/spec/views/tasks/new.js.haml_spec.rb +7 -8
  506. data/spec/views/tasks/uncomplete.js.haml_spec.rb +6 -6
  507. data/spec/views/tasks/update.js.haml_spec.rb +41 -44
  508. data/spec/views/users/avatar.js.haml_spec.rb +7 -8
  509. data/spec/views/users/change_password.js.haml_spec.rb +9 -10
  510. data/spec/views/users/edit.js.haml_spec.rb +7 -8
  511. data/spec/views/users/password.js.haml_spec.rb +8 -9
  512. data/spec/views/users/update.js.haml_spec.rb +6 -7
  513. data/spec/views/users/upload_avatar.js.haml_spec.rb +9 -9
  514. data/vendor/assets/javascripts/jquery_timeago/index.js +2 -0
  515. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.es-CL.js +18 -0
  516. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.nl.js +20 -0
  517. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-es-CL.js +20 -0
  518. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-es-CL.js +23 -0
  519. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-nl.js +21 -0
  520. data/vendor/assets/stylesheets/{jquery-ui.custom.css → jquery-ui.custom.scss} +52 -51
  521. data/vendor/gems/globby-0.1.2/LICENSE.txt +20 -0
  522. data/vendor/gems/globby-0.1.2/README.md +65 -0
  523. data/vendor/gems/globby-0.1.2/Rakefile +9 -0
  524. data/vendor/gems/globby-0.1.2/lib/globby.rb +47 -0
  525. data/vendor/gems/globby-0.1.2/lib/globby/glob.rb +90 -0
  526. data/vendor/gems/globby-0.1.2/lib/globby/globject.rb +18 -0
  527. data/vendor/gems/globby-0.1.2/lib/globby/result.rb +20 -0
  528. data/vendor/gems/globby-0.1.2/spec/gitignore_spec.rb +109 -0
  529. data/vendor/gems/globby-0.1.2/spec/globby_spec.rb +93 -0
  530. metadata +177 -55
  531. data/Gemfile.ci +0 -13
  532. data/config/initializers/sass.rb +0 -18
  533. data/lib/country_select.rb +0 -570
  534. data/lib/fat_free_crm/plugin.rb +0 -94
@@ -6,5 +6,4 @@
6
6
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
7
7
 
8
8
  describe Admin::GroupsController do
9
-
10
9
  end
@@ -6,9 +6,8 @@
6
6
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
7
7
 
8
8
  describe Admin::UsersController do
9
-
10
9
  before(:each) do
11
- require_user(:admin => true)
10
+ require_user(admin: true)
12
11
  set_current_tab(:users)
13
12
  end
14
13
 
@@ -17,22 +16,22 @@ describe Admin::UsersController do
17
16
  #----------------------------------------------------------------------------
18
17
  describe "GET index" do
19
18
  it "assigns all users as @users and renders [index] template" do
20
- @users = [ current_user, FactoryGirl.create(:user) ]
19
+ @users = [current_user, FactoryGirl.create(:user)]
21
20
 
22
21
  get :index
23
- assigns[:users].first.should == @users.last # get_users() sorts by id DESC
24
- assigns[:users].last.should == @users.first
25
- response.should render_template("admin/users/index")
22
+ expect(assigns[:users].first).to eq(@users.last) # get_users() sorts by id DESC
23
+ expect(assigns[:users].last).to eq(@users.first)
24
+ expect(response).to render_template("admin/users/index")
26
25
  end
27
26
 
28
27
  it "performs lookup using query string" do
29
- @amy = FactoryGirl.create(:user, :username => "amy_anderson")
30
- @bob = FactoryGirl.create(:user, :username => "bob_builder")
28
+ @amy = FactoryGirl.create(:user, username: "amy_anderson")
29
+ @bob = FactoryGirl.create(:user, username: "bob_builder")
31
30
 
32
- get :index, :query => "amy_anderson"
33
- assigns[:users].should == [ @amy ]
34
- assigns[:current_query].should == "amy_anderson"
35
- session[:users_current_query].should == "amy_anderson"
31
+ get :index, query: "amy_anderson"
32
+ expect(assigns[:users]).to eq([@amy])
33
+ expect(assigns[:current_query]).to eq("amy_anderson")
34
+ expect(session[:users_current_query]).to eq("amy_anderson")
36
35
  end
37
36
  end
38
37
 
@@ -43,9 +42,9 @@ describe Admin::UsersController do
43
42
  it "assigns the requested user as @user and renders [show] template" do
44
43
  @user = FactoryGirl.create(:user)
45
44
 
46
- get :show, :id => @user.id
47
- assigns[:user].should == @user
48
- response.should render_template("admin/users/show")
45
+ get :show, id: @user.id
46
+ expect(assigns[:user]).to eq(@user)
47
+ expect(response).to render_template("admin/users/show")
49
48
  end
50
49
  end
51
50
 
@@ -56,7 +55,7 @@ describe Admin::UsersController do
56
55
  it "assigns a new user as @user and renders [new] template" do
57
56
  xhr :get, :new
58
57
  expect(assigns[:user]).to be_new_record
59
- response.should render_template("admin/users/new")
58
+ expect(response).to render_template("admin/users/new")
60
59
  end
61
60
  end
62
61
 
@@ -66,27 +65,27 @@ describe Admin::UsersController do
66
65
  it "assigns the requested user as @user and renders [edit] template" do
67
66
  @user = FactoryGirl.create(:user)
68
67
 
69
- xhr :get, :edit, :id => @user.id
70
- assigns[:user].should == @user
71
- assigns[:previous].should == nil
72
- response.should render_template("admin/users/edit")
68
+ xhr :get, :edit, id: @user.id
69
+ expect(assigns[:user]).to eq(@user)
70
+ expect(assigns[:previous]).to eq(nil)
71
+ expect(response).to render_template("admin/users/edit")
73
72
  end
74
73
 
75
74
  it "assigns the previous user as @previous when necessary" do
76
75
  @user = FactoryGirl.create(:user)
77
76
  @previous = FactoryGirl.create(:user)
78
77
 
79
- xhr :get, :edit, :id => @user.id, :previous => @previous.id
80
- assigns[:previous].should == @previous
78
+ xhr :get, :edit, id: @user.id, previous: @previous.id
79
+ expect(assigns[:previous]).to eq(@previous)
81
80
  end
82
81
 
83
82
  it "reloads current page with the flash message if user got deleted" do
84
83
  @user = FactoryGirl.create(:user)
85
84
  @user.destroy
86
85
 
87
- xhr :get, :edit, :id => @user.id
88
- flash[:warning].should_not == nil
89
- response.body.should == "window.location.reload();"
86
+ xhr :get, :edit, id: @user.id
87
+ expect(flash[:warning]).not_to eq(nil)
88
+ expect(response.body).to eq("window.location.reload();")
90
89
  end
91
90
 
92
91
  it "notifies the view if previous user got deleted" do
@@ -94,10 +93,10 @@ describe Admin::UsersController do
94
93
  @previous = FactoryGirl.create(:user)
95
94
  @previous.destroy
96
95
 
97
- xhr :get, :edit, :id => @user.id, :previous => @previous.id
98
- flash[:warning].should == nil # no warning, just silently remove the div
99
- assigns[:previous].should == @previous.id
100
- response.should render_template("admin/users/edit")
96
+ xhr :get, :edit, id: @user.id, previous: @previous.id
97
+ expect(flash[:warning]).to eq(nil) # no warning, just silently remove the div
98
+ expect(assigns[:previous]).to eq(@previous.id)
99
+ expect(response).to render_template("admin/users/edit")
101
100
  end
102
101
  end
103
102
 
@@ -105,7 +104,6 @@ describe Admin::UsersController do
105
104
  # POST /admin/users.xml AJAX
106
105
  #----------------------------------------------------------------------------
107
106
  describe "POST create" do
108
-
109
107
  describe "with valid params" do
110
108
  before(:each) do
111
109
  @username = "none"
@@ -114,35 +112,35 @@ describe Admin::UsersController do
114
112
  end
115
113
 
116
114
  it "assigns a newly created user as @user and renders [create] template" do
117
- @user = FactoryGirl.build(:user, :username => @username, :email => @email)
118
- User.stub(:new).and_return(@user)
115
+ @user = FactoryGirl.build(:user, username: @username, email: @email)
116
+ allow(User).to receive(:new).and_return(@user)
119
117
 
120
- xhr :post, :create, :user => { :username => @username, :email => @email, :password => @password, :password_confirmation => @password }
121
- assigns[:user].should == @user
122
- response.should render_template("admin/users/create")
118
+ xhr :post, :create, user: { username: @username, email: @email, password: @password, password_confirmation: @password }
119
+ expect(assigns[:user]).to eq(@user)
120
+ expect(response).to render_template("admin/users/create")
123
121
  end
124
122
 
125
123
  it "creates admin user when requested so" do
126
- xhr :post, :create, :user => { :username => @username, :email => @email, :admin => "1", :password => @password, :password_confirmation => @password }
127
- assigns[:user].admin.should == true
128
- response.should render_template("admin/users/create")
124
+ xhr :post, :create, user: { username: @username, email: @email, admin: "1", password: @password, password_confirmation: @password }
125
+ expect(assigns[:user].admin).to eq(true)
126
+ expect(response).to render_template("admin/users/create")
129
127
  end
130
128
 
131
129
  it "doesn't create admin user unless requested so" do
132
- xhr :post, :create, :user => { :username => @username, :email => @email, :admin => "0", :password => @password, :password_confirmation => @password }
133
- assigns[:user].admin.should == false
134
- response.should render_template("admin/users/create")
130
+ xhr :post, :create, user: { username: @username, email: @email, admin: "0", password: @password, password_confirmation: @password }
131
+ expect(assigns[:user].admin).to eq(false)
132
+ expect(response).to render_template("admin/users/create")
135
133
  end
136
134
  end
137
135
 
138
136
  describe "with invalid params" do
139
137
  it "assigns a newly created but unsaved user as @user and re-renders [create] template" do
140
- @user = FactoryGirl.build(:user, :username => "", :email => "")
141
- User.stub(:new).and_return(@user)
138
+ @user = FactoryGirl.build(:user, username: "", email: "")
139
+ allow(User).to receive(:new).and_return(@user)
142
140
 
143
- xhr :post, :create, :user => {}
144
- assigns[:user].should == @user
145
- response.should render_template("admin/users/create")
141
+ xhr :post, :create, user: {}
142
+ expect(assigns[:user]).to eq(@user)
143
+ expect(response).to render_template("admin/users/create")
146
144
  end
147
145
  end
148
146
  end
@@ -151,51 +149,50 @@ describe Admin::UsersController do
151
149
  # PUT /admin/users/1.xml AJAX
152
150
  #----------------------------------------------------------------------------
153
151
  describe "PUT update" do
154
-
155
152
  describe "with valid params" do
156
153
  it "updates the requested user, assigns it to @user, and renders [update] template" do
157
- @user = FactoryGirl.create(:user, :username => "flip", :email => "flip@example.com")
154
+ @user = FactoryGirl.create(:user, username: "flip", email: "flip@example.com")
158
155
 
159
- xhr :put, :update, :id => @user.id, :user => { :username => "flop", :email => "flop@example.com" }
160
- assigns[:user].should == @user.reload
161
- assigns[:user].username.should == "flop"
162
- response.should render_template("admin/users/update")
156
+ xhr :put, :update, id: @user.id, user: { username: "flop", email: "flop@example.com" }
157
+ expect(assigns[:user]).to eq(@user.reload)
158
+ expect(assigns[:user].username).to eq("flop")
159
+ expect(response).to render_template("admin/users/update")
163
160
  end
164
161
 
165
162
  it "reloads current page is the user got deleted" do
166
163
  @user = FactoryGirl.create(:user)
167
164
  @user.destroy
168
165
 
169
- xhr :put, :update, :id => @user.id, :user => { :username => "flop", :email => "flop@example.com" }
170
- flash[:warning].should_not == nil
171
- response.body.should == "window.location.reload();"
166
+ xhr :put, :update, id: @user.id, user: { username: "flop", email: "flop@example.com" }
167
+ expect(flash[:warning]).not_to eq(nil)
168
+ expect(response.body).to eq("window.location.reload();")
172
169
  end
173
170
 
174
171
  it "assigns admin rights when requested so" do
175
- @user = FactoryGirl.create(:user, :admin => false)
176
- xhr :put, :update, :id => @user.id, :user => { :admin => "1", :username => @user.username, :email => @user.email }
177
- assigns[:user].should == @user.reload
178
- assigns[:user].admin.should == true
179
- response.should render_template("admin/users/update")
172
+ @user = FactoryGirl.create(:user, admin: false)
173
+ xhr :put, :update, id: @user.id, user: { admin: "1", username: @user.username, email: @user.email }
174
+ expect(assigns[:user]).to eq(@user.reload)
175
+ expect(assigns[:user].admin).to eq(true)
176
+ expect(response).to render_template("admin/users/update")
180
177
  end
181
178
 
182
179
  it "revokes admin rights when requested so" do
183
- @user = FactoryGirl.create(:user, :admin => true)
184
- xhr :put, :update, :id => @user.id, :user => { :admin => "0", :username => @user.username, :email => @user.email }
185
- assigns[:user].should == @user.reload
186
- assigns[:user].admin.should == false
187
- response.should render_template("admin/users/update")
180
+ @user = FactoryGirl.create(:user, admin: true)
181
+ xhr :put, :update, id: @user.id, user: { admin: "0", username: @user.username, email: @user.email }
182
+ expect(assigns[:user]).to eq(@user.reload)
183
+ expect(assigns[:user].admin).to eq(false)
184
+ expect(response).to render_template("admin/users/update")
188
185
  end
189
186
  end
190
187
 
191
188
  describe "with invalid params" do
192
189
  it "doesn't update the requested user, but assigns it to @user and renders [update] template" do
193
- @user = FactoryGirl.create(:user, :username => "flip", :email => "flip@example.com")
190
+ @user = FactoryGirl.create(:user, username: "flip", email: "flip@example.com")
194
191
 
195
- xhr :put, :update, :id => @user.id, :user => {}
196
- assigns[:user].should == @user.reload
197
- assigns[:user].username.should == "flip"
198
- response.should render_template("admin/users/update")
192
+ xhr :put, :update, id: @user.id, user: {}
193
+ expect(assigns[:user]).to eq(@user.reload)
194
+ expect(assigns[:user].username).to eq("flip")
195
+ expect(response).to render_template("admin/users/update")
199
196
  end
200
197
  end
201
198
  end
@@ -206,18 +203,18 @@ describe Admin::UsersController do
206
203
  it "assigns the requested user as @user and renders [confirm] template" do
207
204
  @user = FactoryGirl.create(:user)
208
205
 
209
- xhr :get, :confirm, :id => @user.id
210
- assigns[:user].should == @user
211
- response.should render_template("admin/users/confirm")
206
+ xhr :get, :confirm, id: @user.id
207
+ expect(assigns[:user]).to eq(@user)
208
+ expect(response).to render_template("admin/users/confirm")
212
209
  end
213
210
 
214
211
  it "reloads current page is the user got deleted" do
215
212
  @user = FactoryGirl.create(:user)
216
213
  @user.destroy
217
214
 
218
- xhr :get, :confirm, :id => @user.id
219
- flash[:warning].should_not == nil
220
- response.body.should == "window.location.reload();"
215
+ xhr :get, :confirm, id: @user.id
216
+ expect(flash[:warning]).not_to eq(nil)
217
+ expect(response.body).to eq("window.location.reload();")
221
218
  end
222
219
  end
223
220
 
@@ -228,19 +225,19 @@ describe Admin::UsersController do
228
225
  it "destroys the requested user and renders [destroy] template" do
229
226
  @user = FactoryGirl.create(:user)
230
227
 
231
- xhr :delete, :destroy, :id => @user.id
232
- lambda { User.find(@user) }.should raise_error(ActiveRecord::RecordNotFound)
233
- response.should render_template("admin/users/destroy")
228
+ xhr :delete, :destroy, id: @user.id
229
+ expect { User.find(@user.id) }.to raise_error(ActiveRecord::RecordNotFound)
230
+ expect(response).to render_template("admin/users/destroy")
234
231
  end
235
232
 
236
233
  it "handles the case when the requested user can't be deleted" do
237
234
  @user = FactoryGirl.create(:user)
238
- @account = FactoryGirl.create(:account, :user => @user) # Plant artifact to prevent the user from being deleted.
235
+ @account = FactoryGirl.create(:account, user: @user) # Plant artifact to prevent the user from being deleted.
239
236
 
240
- xhr :delete, :destroy, :id => @user.id
241
- flash[:warning].should_not == nil
242
- expect { User.find(@user) }.not_to raise_error()
243
- response.should render_template("admin/users/destroy")
237
+ xhr :delete, :destroy, id: @user.id
238
+ expect(flash[:warning]).not_to eq(nil)
239
+ expect { User.find(@user.id) }.not_to raise_error
240
+ expect(response).to render_template("admin/users/destroy")
244
241
  end
245
242
  end
246
243
 
@@ -248,7 +245,7 @@ describe Admin::UsersController do
248
245
  #----------------------------------------------------------------------------
249
246
  describe "POST auto_complete" do
250
247
  before(:each) do
251
- @auto_complete_matches = [ FactoryGirl.create(:user, :first_name => "Hello") ]
248
+ @auto_complete_matches = [FactoryGirl.create(:user, first_name: "Hello")]
252
249
  end
253
250
 
254
251
  it_should_behave_like("auto complete")
@@ -261,26 +258,26 @@ describe Admin::UsersController do
261
258
  it "suspends the requested user" do
262
259
  @user = FactoryGirl.create(:user)
263
260
 
264
- xhr :put, :suspend, :id => @user.id
265
- assigns[:user].suspended?.should == true
266
- response.should render_template("admin/users/suspend")
261
+ xhr :put, :suspend, id: @user.id
262
+ expect(assigns[:user].suspended?).to eq(true)
263
+ expect(response).to render_template("admin/users/suspend")
267
264
  end
268
265
 
269
266
  it "doesn't suspend current user" do
270
267
  @user = current_user
271
268
 
272
- xhr :put, :suspend, :id => @user.id
273
- assigns[:user].suspended?.should == false
274
- response.should render_template("admin/users/suspend")
269
+ xhr :put, :suspend, id: @user.id
270
+ expect(assigns[:user].suspended?).to eq(false)
271
+ expect(response).to render_template("admin/users/suspend")
275
272
  end
276
273
 
277
274
  it "reloads current page is the user got deleted" do
278
275
  @user = FactoryGirl.create(:user)
279
276
  @user.destroy
280
277
 
281
- xhr :put, :suspend, :id => @user.id
282
- flash[:warning].should_not == nil
283
- response.body.should == "window.location.reload();"
278
+ xhr :put, :suspend, id: @user.id
279
+ expect(flash[:warning]).not_to eq(nil)
280
+ expect(response.body).to eq("window.location.reload();")
284
281
  end
285
282
  end
286
283
 
@@ -289,21 +286,20 @@ describe Admin::UsersController do
289
286
  #----------------------------------------------------------------------------
290
287
  describe "PUT reactivate" do
291
288
  it "re-activates the requested user" do
292
- @user = FactoryGirl.create(:user, :suspended_at => Time.now.yesterday)
289
+ @user = FactoryGirl.create(:user, suspended_at: Time.now.yesterday)
293
290
 
294
- xhr :put, :reactivate, :id => @user.id
295
- assigns[:user].suspended?.should == false
296
- response.should render_template("admin/users/reactivate")
291
+ xhr :put, :reactivate, id: @user.id
292
+ expect(assigns[:user].suspended?).to eq(false)
293
+ expect(response).to render_template("admin/users/reactivate")
297
294
  end
298
295
 
299
296
  it "reloads current page is the user got deleted" do
300
297
  @user = FactoryGirl.create(:user)
301
298
  @user.destroy
302
299
 
303
- xhr :put, :reactivate, :id => @user.id
304
- flash[:warning].should_not == nil
305
- response.body.should == "window.location.reload();"
300
+ xhr :put, :reactivate, id: @user.id
301
+ expect(flash[:warning]).not_to eq(nil)
302
+ expect(response.body).to eq("window.location.reload();")
306
303
  end
307
304
  end
308
-
309
305
  end
@@ -6,40 +6,36 @@
6
6
  require 'spec_helper'
7
7
 
8
8
  describe ApplicationController do
9
-
10
9
  describe "auto_complete_ids_to_exclude" do
11
-
12
10
  it "should return [] when related is nil" do
13
- controller.send(:auto_complete_ids_to_exclude, nil).should == []
11
+ expect(controller.send(:auto_complete_ids_to_exclude, nil)).to eq([])
14
12
  end
15
-
13
+
16
14
  it "should return [] when related is ''" do
17
- controller.send(:auto_complete_ids_to_exclude, '').should == []
15
+ expect(controller.send(:auto_complete_ids_to_exclude, '')).to eq([])
18
16
  end
19
-
17
+
20
18
  it "should return campaign id 5 when related is '5' and controller is campaigns" do
21
- controller.send(:auto_complete_ids_to_exclude, '5').sort.should == [5]
19
+ expect(controller.send(:auto_complete_ids_to_exclude, '5').sort).to eq([5])
22
20
  end
23
-
21
+
24
22
  it "should return [6, 9] when related is 'campaigns/7'" do
25
- controller.stub(:controller_name).and_return('opportunities')
26
- campaign = double(Campaign, :opportunities => [double(:id => 6), double(:id => 9)])
27
- Campaign.should_receive(:find_by_id).with('7').and_return(campaign)
28
- controller.send(:auto_complete_ids_to_exclude, 'campaigns/7').sort.should == [6, 9]
23
+ allow(controller).to receive(:controller_name).and_return('opportunities')
24
+ campaign = double(Campaign, opportunities: [double(id: 6), double(id: 9)])
25
+ expect(Campaign).to receive(:find_by_id).with('7').and_return(campaign)
26
+ expect(controller.send(:auto_complete_ids_to_exclude, 'campaigns/7').sort).to eq([6, 9])
29
27
  end
30
-
28
+
31
29
  it "should return [] when related object is not found" do
32
- Campaign.should_receive(:find_by_id).with('7').and_return(nil)
33
- controller.send(:auto_complete_ids_to_exclude, 'campaigns/7').should == []
30
+ expect(Campaign).to receive(:find_by_id).with('7').and_return(nil)
31
+ expect(controller.send(:auto_complete_ids_to_exclude, 'campaigns/7')).to eq([])
34
32
  end
35
-
33
+
36
34
  it "should return [] when related object association is not found" do
37
- controller.stub(:controller_name).and_return('not_a_method_that_exists')
35
+ allow(controller).to receive(:controller_name).and_return('not_a_method_that_exists')
38
36
  campaign = double(Campaign)
39
- Campaign.should_receive(:find_by_id).with('7').and_return(campaign)
40
- controller.send(:auto_complete_ids_to_exclude, 'campaigns/7').should == []
37
+ expect(Campaign).to receive(:find_by_id).with('7').and_return(campaign)
38
+ expect(controller.send(:auto_complete_ids_to_exclude, 'campaigns/7')).to eq([])
41
39
  end
42
-
43
40
  end
44
-
45
41
  end
@@ -6,7 +6,6 @@
6
6
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
7
7
 
8
8
  describe AuthenticationsController do
9
-
10
9
  before(:each) do
11
10
  activate_authlogic
12
11
  logout
@@ -19,39 +18,39 @@ describe AuthenticationsController do
19
18
  describe "DELETE authentication (logout form)" do
20
19
  it "displays 'must be logged out message' and redirects to login page" do
21
20
  delete :destroy
22
- flash[:notice].should_not == nil
23
- flash[:notice].should =~ /^You must be logged in/
24
- response.should redirect_to(login_path)
21
+ expect(flash[:notice]).not_to eq(nil)
22
+ expect(flash[:notice]).to match(/^You must be logged in/)
23
+ expect(response).to redirect_to(login_path)
25
24
  end
26
25
 
27
26
  it "redirects to login page" do
28
27
  get :show
29
- response.should redirect_to(login_path)
28
+ expect(response).to redirect_to(login_path)
30
29
  end
31
30
  end
32
31
  end
33
32
 
34
33
  describe "user must not be logged in" do
35
34
  before(:each) do
36
- @user = FactoryGirl.create(:user, :username => "user", :password => "pass", :password_confirmation => "pass")
37
- @controller.stub(:current_user).and_return(@user)
35
+ @user = FactoryGirl.create(:user, username: "user", password: "pass", password_confirmation: "pass")
36
+ allow(@controller).to receive(:current_user).and_return(@user)
38
37
  end
39
38
 
40
39
  describe "GET authentication (login form)" do
41
40
  it "displays 'must be logged out message' and redirects to profile page" do
42
41
  get :new
43
- flash[:notice].should_not == nil
44
- flash[:notice].should =~ /^You must be logged out/
45
- response.should redirect_to(profile_path)
42
+ expect(flash[:notice]).not_to eq(nil)
43
+ expect(flash[:notice]).to match(/^You must be logged out/)
44
+ expect(response).to redirect_to(profile_path)
46
45
  end
47
46
  end
48
47
 
49
48
  describe "POST authentication" do
50
49
  it "displays 'must be logged out message' and redirects to profile page" do
51
- post :create, :authentication => @login
52
- flash[:notice].should_not == nil
53
- flash[:notice].should =~ /^You must be logged out/
54
- response.should redirect_to(profile_path)
50
+ post :create, authentication: @login
51
+ expect(flash[:notice]).not_to eq(nil)
52
+ expect(flash[:notice]).to match(/^You must be logged out/)
53
+ expect(response).to redirect_to(profile_path)
55
54
  end
56
55
  end
57
56
  end
@@ -62,91 +61,88 @@ describe AuthenticationsController do
62
61
  #----------------------------------------------------------------------------
63
62
  describe "POST authentications" do
64
63
  before(:each) do
65
- @login = { :username => "user", :password => "pass", :remember_me => "0" }
64
+ @login = { username: "user", password: "pass", remember_me: "0" }
66
65
  @authentication = double(Authentication, @login)
67
66
  end
68
67
 
69
68
  describe "successful authentication " do
70
69
  before(:each) do
71
- @authentication.stub(:save).and_return(true)
72
- Authentication.stub(:new).and_return(@authentication)
70
+ allow(@authentication).to receive(:save).and_return(true)
71
+ allow(Authentication).to receive(:new).and_return(@authentication)
73
72
  end
74
73
 
75
74
  it "displays welcome message and redirects to the home page" do
76
- @user = FactoryGirl.create(:user, :username => "user", :password => "pass", :password_confirmation => "pass", :login_count => 0)
77
- @authentication.stub(:user).and_return(@user)
75
+ @user = FactoryGirl.create(:user, username: "user", password: "pass", password_confirmation: "pass", login_count: 0)
76
+ allow(@authentication).to receive(:user).and_return(@user)
78
77
 
79
- post :create, :authentication => @login
80
- flash[:notice].should_not == nil
81
- flash[:notice].should_not =~ /last login/
82
- response.should redirect_to(root_path)
78
+ post :create, authentication: @login
79
+ expect(flash[:notice]).not_to eq(nil)
80
+ expect(flash[:notice]).not_to match(/last login/)
81
+ expect(response).to redirect_to(root_path)
83
82
  end
84
83
 
85
84
  it "displays last login time if it's not the first login" do
86
- @user = FactoryGirl.create(:user, :username => "user", :password => "pass", :password_confirmation => "pass", :login_count => 42)
87
- @authentication.stub(:user).and_return(@user)
85
+ @user = FactoryGirl.create(:user, username: "user", password: "pass", password_confirmation: "pass", login_count: 42)
86
+ allow(@authentication).to receive(:user).and_return(@user)
88
87
 
89
- post :create, :authentication => @login
90
- flash[:notice].should =~ /last login/
91
- response.should redirect_to(root_path)
88
+ post :create, authentication: @login
89
+ expect(flash[:notice]).to match(/last login/)
90
+ expect(response).to redirect_to(root_path)
92
91
  end
93
92
  end
94
93
 
95
94
  describe "authenticaion failure" do
96
95
  describe "user is not suspended" do
97
96
  it "redirects to login page if username or password are invalid" do
98
- @user = FactoryGirl.create(:user, :username => "user", :password => "pass", :password_confirmation => "pass")
99
- @authentication.stub(:user).and_return(@user)
100
- @authentication.stub(:save).and_return(false) # <--- Authentication failure.
101
- Authentication.stub(:new).and_return(@authentication)
102
-
103
- post :create, :authentication => @login
104
- flash[:warning].should_not == nil
105
- response.should redirect_to(:action => :new)
97
+ @user = FactoryGirl.create(:user, username: "user", password: "pass", password_confirmation: "pass")
98
+ allow(@authentication).to receive(:user).and_return(@user)
99
+ allow(@authentication).to receive(:save).and_return(false) # <--- Authentication failure.
100
+ allow(Authentication).to receive(:new).and_return(@authentication)
101
+
102
+ post :create, authentication: @login
103
+ expect(flash[:warning]).not_to eq(nil)
104
+ expect(response).to redirect_to(action: :new)
106
105
  end
107
106
  end
108
107
 
109
108
  describe "user has been suspended" do
110
109
  before(:each) do
111
- @authentication.stub(:save).and_return(true)
112
- Authentication.stub(:new).and_return(@authentication)
110
+ allow(@authentication).to receive(:save).and_return(true)
111
+ allow(Authentication).to receive(:new).and_return(@authentication)
113
112
  end
114
113
 
115
114
  # This tests :before_save update_info callback in Authentication model.
116
115
  it "keeps user login attributes intact" do
117
- @user = FactoryGirl.create(:user, :username => "user", :password => "pass", :password_confirmation => "pass", :suspended_at => Date.yesterday, :login_count => 0, :last_login_at => nil, :last_login_ip => nil)
118
- @authentication.stub(:user).and_return(@user)
116
+ @user = FactoryGirl.create(:user, username: "user", password: "pass", password_confirmation: "pass", suspended_at: Date.yesterday, login_count: 0, last_login_at: nil, last_login_ip: nil)
117
+ allow(@authentication).to receive(:user).and_return(@user)
119
118
 
120
- post :create, :authentication => @login
121
- @authentication.user.login_count.should == 0
122
- @authentication.user.last_login_at.should be_nil
123
- @authentication.user.last_login_ip.should be_nil
119
+ post :create, authentication: @login
120
+ expect(@authentication.user.login_count).to eq(0)
121
+ expect(@authentication.user.last_login_at).to be_nil
122
+ expect(@authentication.user.last_login_ip).to be_nil
124
123
  end
125
124
 
126
125
  it "redirects to login page if user is suspended" do
127
- @user = FactoryGirl.create(:user, :username => "user", :password => "pass", :password_confirmation => "pass", :suspended_at => Date.yesterday)
128
- @authentication.stub(:user).and_return(@user)
126
+ @user = FactoryGirl.create(:user, username: "user", password: "pass", password_confirmation: "pass", suspended_at: Date.yesterday)
127
+ allow(@authentication).to receive(:user).and_return(@user)
129
128
 
130
- post :create, :authentication => @login
131
- flash[:warning].should_not == nil # Invalid username/password.
132
- flash[:notice].should == nil # Not approved yet.
133
- response.should redirect_to(:action => :new)
129
+ post :create, authentication: @login
130
+ expect(flash[:warning]).not_to eq(nil) # Invalid username/password.
131
+ expect(flash[:notice]).to eq(nil) # Not approved yet.
132
+ expect(response).to redirect_to(action: :new)
134
133
  end
135
134
 
136
135
  it "redirects to login page with the message if signup needs approval and user hasn't been activated yet" do
137
- Setting.stub(:user_signup).and_return(:needs_approval)
138
- @user = FactoryGirl.create(:user, :username => "user", :password => "pass", :password_confirmation => "pass", :suspended_at => Date.yesterday, :login_count => 0)
139
- @authentication.stub(:user).and_return(@user)
140
-
141
- post :create, :authentication => @login
142
- flash[:warning].should == nil # Invalid username/password.
143
- flash[:notice].should_not == nil # Not approved yet.
144
- response.should redirect_to(:action => :new)
136
+ allow(Setting).to receive(:user_signup).and_return(:needs_approval)
137
+ @user = FactoryGirl.create(:user, username: "user", password: "pass", password_confirmation: "pass", suspended_at: Date.yesterday, login_count: 0)
138
+ allow(@authentication).to receive(:user).and_return(@user)
139
+
140
+ post :create, authentication: @login
141
+ expect(flash[:warning]).to eq(nil) # Invalid username/password.
142
+ expect(flash[:notice]).not_to eq(nil) # Not approved yet.
143
+ expect(response).to redirect_to(action: :new)
145
144
  end
146
145
  end
147
-
148
146
  end # authentication failure
149
147
  end # POST authenticate
150
-
151
148
  end
152
-