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,7 +6,6 @@
6
6
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
7
7
 
8
8
  describe CampaignsController do
9
-
10
9
  def get_data_for_sidebar
11
10
  @status = Setting.campaign_status.dup
12
11
  end
@@ -20,104 +19,103 @@ describe CampaignsController do
20
19
  # GET /campaigns.xml
21
20
  #----------------------------------------------------------------------------
22
21
  describe "responding to GET index" do
23
-
24
22
  before(:each) do
25
23
  get_data_for_sidebar
26
24
  end
27
25
 
28
26
  it "should expose all campaigns as @campaigns and render [index] template" do
29
- @campaigns = [ FactoryGirl.create(:campaign, :user => current_user) ]
27
+ @campaigns = [FactoryGirl.create(:campaign, user: current_user)]
30
28
 
31
29
  get :index
32
- assigns[:campaigns].should == @campaigns
33
- response.should render_template("campaigns/index")
30
+ expect(assigns[:campaigns]).to eq(@campaigns)
31
+ expect(response).to render_template("campaigns/index")
34
32
  end
35
33
 
36
34
  it "should collect the data for the opportunities sidebar" do
37
- @campaigns = [ FactoryGirl.create(:campaign, :user => current_user) ]
35
+ @campaigns = [FactoryGirl.create(:campaign, user: current_user)]
38
36
 
39
37
  get :index
40
- (assigns[:campaign_status_total].keys.map(&:to_sym) - (@status << :all << :other)).should == []
38
+ expect(assigns[:campaign_status_total].keys.map(&:to_sym) - (@status << :all << :other)).to eq([])
41
39
  end
42
40
 
43
41
  it "should filter out campaigns by status" do
44
42
  controller.session[:campaigns_filter] = "planned,started"
45
43
  @campaigns = [
46
- FactoryGirl.create(:campaign, :user => current_user, :status => "started"),
47
- FactoryGirl.create(:campaign, :user => current_user, :status => "planned")
44
+ FactoryGirl.create(:campaign, user: current_user, status: "started"),
45
+ FactoryGirl.create(:campaign, user: current_user, status: "planned")
48
46
  ]
49
47
 
50
48
  # This one should be filtered out.
51
- FactoryGirl.create(:campaign, :user => current_user, :status => "completed")
49
+ FactoryGirl.create(:campaign, user: current_user, status: "completed")
52
50
 
53
51
  get :index
54
52
  # Note: can't compare campaigns directly because of BigDecimal objects.
55
- assigns[:campaigns].size.should == 2
56
- assigns[:campaigns].map(&:status).sort.should == %w(planned started)
53
+ expect(assigns[:campaigns].size).to eq(2)
54
+ expect(assigns[:campaigns].map(&:status).sort).to eq(%w(planned started))
57
55
  end
58
56
 
59
57
  it "should perform lookup using query string" do
60
- @first = FactoryGirl.create(:campaign, :user => current_user, :name => "Hello, world!")
61
- @second = FactoryGirl.create(:campaign, :user => current_user, :name => "Hello again")
58
+ @first = FactoryGirl.create(:campaign, user: current_user, name: "Hello, world!")
59
+ @second = FactoryGirl.create(:campaign, user: current_user, name: "Hello again")
62
60
 
63
- get :index, :query => "again"
64
- assigns[:campaigns].should == [ @second ]
65
- assigns[:current_query].should == "again"
66
- session[:campaigns_current_query].should == "again"
61
+ get :index, query: "again"
62
+ expect(assigns[:campaigns]).to eq([@second])
63
+ expect(assigns[:current_query]).to eq("again")
64
+ expect(session[:campaigns_current_query]).to eq("again")
67
65
  end
68
66
 
69
67
  describe "AJAX pagination" do
70
68
  it "should pick up page number from params" do
71
- @campaigns = [ FactoryGirl.create(:campaign, :user => current_user) ]
72
- xhr :get, :index, :page => 42
69
+ @campaigns = [FactoryGirl.create(:campaign, user: current_user)]
70
+ xhr :get, :index, page: 42
73
71
 
74
- assigns[:current_page].to_i.should == 42
75
- assigns[:campaigns].should == [] # page #42 should be empty if there's only one campaign ;-)
76
- session[:campaigns_current_page].to_i.should == 42
77
- response.should render_template("campaigns/index")
72
+ expect(assigns[:current_page].to_i).to eq(42)
73
+ expect(assigns[:campaigns]).to eq([]) # page #42 should be empty if there's only one campaign ;-)
74
+ expect(session[:campaigns_current_page].to_i).to eq(42)
75
+ expect(response).to render_template("campaigns/index")
78
76
  end
79
77
 
80
78
  it "should pick up saved page number from session" do
81
79
  session[:campaigns_current_page] = 42
82
- @campaigns = [ FactoryGirl.create(:campaign, :user => current_user) ]
80
+ @campaigns = [FactoryGirl.create(:campaign, user: current_user)]
83
81
  xhr :get, :index
84
82
 
85
- assigns[:current_page].should == 42
86
- assigns[:campaigns].should == []
87
- response.should render_template("campaigns/index")
83
+ expect(assigns[:current_page]).to eq(42)
84
+ expect(assigns[:campaigns]).to eq([])
85
+ expect(response).to render_template("campaigns/index")
88
86
  end
89
87
 
90
88
  it "should reset current_page when query is altered" do
91
89
  session[:campaigns_current_page] = 42
92
90
  session[:campaigns_current_query] = "bill"
93
- @campaigns = [ FactoryGirl.create(:campaign, :user => current_user) ]
91
+ @campaigns = [FactoryGirl.create(:campaign, user: current_user)]
94
92
  xhr :get, :index
95
93
 
96
- assigns[:current_page].should == 1
97
- assigns[:campaigns].should == @campaigns
98
- response.should render_template("campaigns/index")
94
+ expect(assigns[:current_page]).to eq(1)
95
+ expect(assigns[:campaigns]).to eq(@campaigns)
96
+ expect(response).to render_template("campaigns/index")
99
97
  end
100
98
  end
101
99
 
102
100
  describe "with mime type of JSON" do
103
101
  it "should render all campaigns as JSON" do
104
- @controller.should_receive(:get_campaigns).and_return(@campaigns = [])
105
- @campaigns.should_receive(:to_json).and_return("generated JSON")
102
+ expect(@controller).to receive(:get_campaigns).and_return(@campaigns = [])
103
+ expect(@campaigns).to receive(:to_json).and_return("generated JSON")
106
104
 
107
105
  request.env["HTTP_ACCEPT"] = "application/json"
108
106
  get :index
109
- response.body.should == "generated JSON"
107
+ expect(response.body).to eq("generated JSON")
110
108
  end
111
109
  end
112
110
 
113
111
  describe "with mime type of XML" do
114
112
  it "should render all campaigns as xml" do
115
- @controller.should_receive(:get_campaigns).and_return(@campaigns = [])
116
- @campaigns.should_receive(:to_xml).and_return("generated XML")
113
+ expect(@controller).to receive(:get_campaigns).and_return(@campaigns = [])
114
+ expect(@campaigns).to receive(:to_xml).and_return("generated XML")
117
115
 
118
116
  request.env["HTTP_ACCEPT"] = "application/xml"
119
117
  get :index
120
- response.body.should == "generated XML"
118
+ expect(response.body).to eq("generated XML")
121
119
  end
122
120
  end
123
121
  end
@@ -126,86 +124,85 @@ describe CampaignsController do
126
124
  # GET /campaigns/1.xml HTML
127
125
  #----------------------------------------------------------------------------
128
126
  describe "responding to GET show" do
129
-
130
127
  describe "with mime type of HTML" do
131
128
  before(:each) do
132
- @campaign = FactoryGirl.create(:campaign, :id => 42, :user => current_user)
129
+ @campaign = FactoryGirl.create(:campaign, id: 42, user: current_user)
133
130
  @stage = Setting.unroll(:opportunity_stage)
134
131
  @comment = Comment.new
135
132
  end
136
133
 
137
134
  it "should expose the requested campaign as @campaign and render [show] template" do
138
- get :show, :id => 42
139
- assigns[:campaign].should == @campaign
140
- assigns[:stage].should == @stage
141
- assigns[:comment].attributes.should == @comment.attributes
142
- response.should render_template("campaigns/show")
135
+ get :show, id: 42
136
+ expect(assigns[:campaign]).to eq(@campaign)
137
+ expect(assigns[:stage]).to eq(@stage)
138
+ expect(assigns[:comment].attributes).to eq(@comment.attributes)
139
+ expect(response).to render_template("campaigns/show")
143
140
  end
144
141
 
145
142
  it "should update an activity when viewing the campaign" do
146
- get :show, :id => @campaign.id
147
- @campaign.versions.last.event.should == 'view'
143
+ get :show, id: @campaign.id
144
+ expect(@campaign.versions.last.event).to eq('view')
148
145
  end
149
146
  end
150
147
 
151
148
  describe "with mime type of JSON" do
152
149
  it "should render the requested campaign as JSON" do
153
- @campaign = FactoryGirl.create(:campaign, :id => 42, :user => current_user)
154
- Campaign.should_receive(:find).and_return(@campaign)
155
- @campaign.should_receive(:to_json).and_return("generated JSON")
150
+ @campaign = FactoryGirl.create(:campaign, id: 42, user: current_user)
151
+ expect(Campaign).to receive(:find).and_return(@campaign)
152
+ expect(@campaign).to receive(:to_json).and_return("generated JSON")
156
153
 
157
154
  request.env["HTTP_ACCEPT"] = "application/json"
158
- get :show, :id => 42
159
- response.body.should == "generated JSON"
155
+ get :show, id: 42
156
+ expect(response.body).to eq("generated JSON")
160
157
  end
161
158
  end
162
159
 
163
160
  describe "with mime type of XML" do
164
161
  it "should render the requested campaign as XML" do
165
- @campaign = FactoryGirl.create(:campaign, :id => 42, :user => current_user)
166
- Campaign.should_receive(:find).and_return(@campaign)
167
- @campaign.should_receive(:to_xml).and_return("generated XML")
162
+ @campaign = FactoryGirl.create(:campaign, id: 42, user: current_user)
163
+ expect(Campaign).to receive(:find).and_return(@campaign)
164
+ expect(@campaign).to receive(:to_xml).and_return("generated XML")
168
165
 
169
166
  request.env["HTTP_ACCEPT"] = "application/xml"
170
- get :show, :id => 42
171
- response.body.should == "generated XML"
167
+ get :show, id: 42
168
+ expect(response.body).to eq("generated XML")
172
169
  end
173
170
  end
174
171
 
175
172
  describe "campaign got deleted or otherwise unavailable" do
176
173
  it "should redirect to campaign index if the campaign got deleted" do
177
- @campaign = FactoryGirl.create(:campaign, :user => current_user)
174
+ @campaign = FactoryGirl.create(:campaign, user: current_user)
178
175
  @campaign.destroy
179
176
 
180
- get :show, :id => @campaign.id
181
- flash[:warning].should_not == nil
182
- response.should redirect_to(campaigns_path)
177
+ get :show, id: @campaign.id
178
+ expect(flash[:warning]).not_to eq(nil)
179
+ expect(response).to redirect_to(campaigns_path)
183
180
  end
184
181
 
185
182
  it "should redirect to campaign index if the campaign is protected" do
186
- @campaign = FactoryGirl.create(:campaign, :user => FactoryGirl.create(:user), :access => "Private")
183
+ @campaign = FactoryGirl.create(:campaign, user: FactoryGirl.create(:user), access: "Private")
187
184
 
188
- get :show, :id => @campaign.id
189
- flash[:warning].should_not == nil
190
- response.should redirect_to(campaigns_path)
185
+ get :show, id: @campaign.id
186
+ expect(flash[:warning]).not_to eq(nil)
187
+ expect(response).to redirect_to(campaigns_path)
191
188
  end
192
189
 
193
190
  it "should return 404 (Not Found) JSON error" do
194
- @campaign = FactoryGirl.create(:campaign, :user => current_user)
191
+ @campaign = FactoryGirl.create(:campaign, user: current_user)
195
192
  @campaign.destroy
196
193
  request.env["HTTP_ACCEPT"] = "application/json"
197
194
 
198
- get :show, :id => @campaign.id
199
- response.code.should == "404" # :not_found
195
+ get :show, id: @campaign.id
196
+ expect(response.code).to eq("404") # :not_found
200
197
  end
201
198
 
202
199
  it "should return 404 (Not Found) XML error" do
203
- @campaign = FactoryGirl.create(:campaign, :user => current_user)
200
+ @campaign = FactoryGirl.create(:campaign, user: current_user)
204
201
  @campaign.destroy
205
202
  request.env["HTTP_ACCEPT"] = "application/xml"
206
203
 
207
- get :show, :id => @campaign.id
208
- response.code.should == "404" # :not_found
204
+ get :show, id: @campaign.id
205
+ expect(response.code).to eq("404") # :not_found
209
206
  end
210
207
  end
211
208
  end
@@ -214,85 +211,83 @@ describe CampaignsController do
214
211
  # GET /campaigns/new.xml AJAX
215
212
  #----------------------------------------------------------------------------
216
213
  describe "responding to GET new" do
217
-
218
214
  it "should expose a new campaign as @campaign" do
219
- @campaign = Campaign.new(:user => current_user,
220
- :access => Setting.default_access)
215
+ @campaign = Campaign.new(user: current_user,
216
+ access: Setting.default_access)
221
217
  xhr :get, :new
222
- assigns[:campaign].attributes.should == @campaign.attributes
223
- response.should render_template("campaigns/new")
218
+ expect(assigns[:campaign].attributes).to eq(@campaign.attributes)
219
+ expect(response).to render_template("campaigns/new")
224
220
  end
225
221
 
226
222
  it "should create related object when necessary" do
227
- @lead = FactoryGirl.create(:lead, :id => 42)
223
+ @lead = FactoryGirl.create(:lead, id: 42)
228
224
 
229
- xhr :get, :new, :related => "lead_42"
230
- assigns[:lead].should == @lead
225
+ xhr :get, :new, related: "lead_42"
226
+ expect(assigns[:lead]).to eq(@lead)
231
227
  end
232
228
  end
233
229
 
234
230
  # GET /campaigns/1/edit AJAX
235
231
  #----------------------------------------------------------------------------
236
232
  describe "responding to GET edit" do
237
-
238
233
  it "should expose the requested campaign as @campaign and render [edit] template" do
239
- @campaign = FactoryGirl.create(:campaign, :id => 42, :user => current_user)
234
+ @campaign = FactoryGirl.create(:campaign, id: 42, user: current_user)
240
235
 
241
- xhr :get, :edit, :id => 42
242
- assigns[:campaign].should == @campaign
243
- response.should render_template("campaigns/edit")
236
+ xhr :get, :edit, id: 42
237
+ expect(assigns[:campaign]).to eq(@campaign)
238
+ expect(response).to render_template("campaigns/edit")
244
239
  end
245
240
 
246
241
  it "should find previous campaign as necessary" do
247
- @campaign = FactoryGirl.create(:campaign, :id => 42)
248
- @previous = FactoryGirl.create(:campaign, :id => 99)
242
+ @campaign = FactoryGirl.create(:campaign, id: 42)
243
+ @previous = FactoryGirl.create(:campaign, id: 99)
249
244
 
250
- xhr :get, :edit, :id => 42, :previous => 99
251
- assigns[:campaign].should == @campaign
252
- assigns[:previous].should == @previous
245
+ xhr :get, :edit, id: 42, previous: 99
246
+ expect(assigns[:campaign]).to eq(@campaign)
247
+ expect(assigns[:previous]).to eq(@previous)
253
248
  end
254
249
 
255
250
  describe "(campaign got deleted or is otherwise unavailable)" do
256
251
  it "should reload current page with the flash message if the campaign got deleted" do
257
- @campaign = FactoryGirl.create(:campaign, :user => current_user)
252
+ @campaign = FactoryGirl.create(:campaign, user: current_user)
258
253
  @campaign.destroy
259
254
 
260
- xhr :get, :edit, :id => @campaign.id
261
- flash[:warning].should_not == nil
262
- response.body.should == "window.location.reload();"
255
+ xhr :get, :edit, id: @campaign.id
256
+ expect(flash[:warning]).not_to eq(nil)
257
+ expect(response.body).to eq("window.location.reload();")
263
258
  end
264
259
 
265
260
  it "should reload current page with the flash message if the campaign is protected" do
266
- @private = FactoryGirl.create(:campaign, :user => FactoryGirl.create(:user), :access => "Private")
261
+ @private = FactoryGirl.create(:campaign, user: FactoryGirl.create(:user), access: "Private")
267
262
 
268
- xhr :get, :edit, :id => @private.id
269
- flash[:warning].should_not == nil
270
- response.body.should == "window.location.reload();"
263
+ xhr :get, :edit, id: @private.id
264
+ expect(flash[:warning]).not_to eq(nil)
265
+ expect(response.body).to eq("window.location.reload();")
271
266
  end
272
267
  end
273
268
 
274
269
  describe "(previous campaign got deleted or is otherwise unavailable)" do
275
270
  before(:each) do
276
- @campaign = FactoryGirl.create(:campaign, :user => current_user)
277
- @previous = FactoryGirl.create(:campaign, :user => FactoryGirl.create(:user))
271
+ @campaign = FactoryGirl.create(:campaign, user: current_user)
272
+ @previous = FactoryGirl.create(:campaign, user: FactoryGirl.create(:user))
278
273
  end
279
274
 
280
275
  it "should notify the view if previous campaign got deleted" do
281
276
  @previous.destroy
282
277
 
283
- xhr :get, :edit, :id => @campaign.id, :previous => @previous.id
284
- flash[:warning].should == nil # no warning, just silently remove the div
285
- assigns[:previous].should == @previous.id
286
- response.should render_template("campaigns/edit")
278
+ xhr :get, :edit, id: @campaign.id, previous: @previous.id
279
+ expect(flash[:warning]).to eq(nil) # no warning, just silently remove the div
280
+ expect(assigns[:previous]).to eq(@previous.id)
281
+ expect(response).to render_template("campaigns/edit")
287
282
  end
288
283
 
289
284
  it "should notify the view if previous campaign got protected" do
290
285
  @previous.update_attribute(:access, "Private")
291
286
 
292
- xhr :get, :edit, :id => @campaign.id, :previous => @previous.id
293
- flash[:warning].should == nil
294
- assigns[:previous].should == @previous.id
295
- response.should render_template("campaigns/edit")
287
+ xhr :get, :edit, id: @campaign.id, previous: @previous.id
288
+ expect(flash[:warning]).to eq(nil)
289
+ expect(assigns[:previous]).to eq(@previous.id)
290
+ expect(response).to render_template("campaigns/edit")
296
291
  end
297
292
  end
298
293
  end
@@ -301,52 +296,49 @@ describe CampaignsController do
301
296
  # POST /campaigns.xml AJAX
302
297
  #----------------------------------------------------------------------------
303
298
  describe "responding to POST create" do
304
-
305
299
  describe "with valid params" do
306
-
307
300
  it "should expose a newly created campaign as @campaign and render [create] template" do
308
- @campaign = FactoryGirl.build(:campaign, :name => "Hello", :user => current_user)
309
- Campaign.stub(:new).and_return(@campaign)
301
+ @campaign = FactoryGirl.build(:campaign, name: "Hello", user: current_user)
302
+ allow(Campaign).to receive(:new).and_return(@campaign)
310
303
 
311
- xhr :post, :create, :campaign => { :name => "Hello" }
312
- assigns(:campaign).should == @campaign
313
- response.should render_template("campaigns/create")
304
+ xhr :post, :create, campaign: { name: "Hello" }
305
+ expect(assigns(:campaign)).to eq(@campaign)
306
+ expect(response).to render_template("campaigns/create")
314
307
  end
315
308
 
316
309
  it "should get data to update campaign sidebar" do
317
- @campaign = FactoryGirl.build(:campaign, :name => "Hello", :user => current_user)
318
- Campaign.stub(:new).and_return(@campaign)
310
+ @campaign = FactoryGirl.build(:campaign, name: "Hello", user: current_user)
311
+ allow(Campaign).to receive(:new).and_return(@campaign)
319
312
 
320
- xhr :post, :create, :campaign => { :name => "Hello" }
321
- assigns[:campaign_status_total].should be_instance_of(HashWithIndifferentAccess)
313
+ xhr :post, :create, campaign: { name: "Hello" }
314
+ expect(assigns[:campaign_status_total]).to be_instance_of(HashWithIndifferentAccess)
322
315
  end
323
316
 
324
317
  it "should reload campaigns to update pagination" do
325
- @campaign = FactoryGirl.build(:campaign, :user => current_user)
326
- Campaign.stub(:new).and_return(@campaign)
318
+ @campaign = FactoryGirl.build(:campaign, user: current_user)
319
+ allow(Campaign).to receive(:new).and_return(@campaign)
327
320
 
328
- xhr :post, :create, :campaign => { :name => "Hello" }
329
- assigns[:campaigns].should == [ @campaign ]
321
+ xhr :post, :create, campaign: { name: "Hello" }
322
+ expect(assigns[:campaigns]).to eq([@campaign])
330
323
  end
331
324
 
332
325
  it "should add a new comment to the newly created campaign when specified" do
333
- @campaign = FactoryGirl.build(:campaign, :name => "Hello world", :user => current_user)
334
- Campaign.stub(:new).and_return(@campaign)
326
+ @campaign = FactoryGirl.build(:campaign, name: "Hello world", user: current_user)
327
+ allow(Campaign).to receive(:new).and_return(@campaign)
335
328
 
336
- xhr :post, :create, :campaign => { :name => "Hello world" }, :comment_body => "Awesome comment is awesome"
337
- @campaign.reload.comments.map(&:comment).should include("Awesome comment is awesome")
329
+ xhr :post, :create, campaign: { name: "Hello world" }, comment_body: "Awesome comment is awesome"
330
+ expect(@campaign.reload.comments.map(&:comment)).to include("Awesome comment is awesome")
338
331
  end
339
332
  end
340
333
 
341
334
  describe "with invalid params" do
342
-
343
335
  it "should expose a newly created but unsaved campaign as @campaign and still render [create] template" do
344
- @campaign = FactoryGirl.build(:campaign, :id => nil, :name => nil, :user => current_user)
345
- Campaign.stub(:new).and_return(@campaign)
336
+ @campaign = FactoryGirl.build(:campaign, id: nil, name: nil, user: current_user)
337
+ allow(Campaign).to receive(:new).and_return(@campaign)
346
338
 
347
- xhr :post, :create, :campaign => nil
348
- assigns(:campaign).should == @campaign
349
- response.should render_template("campaigns/create")
339
+ xhr :post, :create, campaign: {}
340
+ expect(assigns(:campaign)).to eq(@campaign)
341
+ expect(response).to render_template("campaigns/create")
350
342
  end
351
343
  end
352
344
  end
@@ -355,66 +347,63 @@ describe CampaignsController do
355
347
  # PUT /campaigns/1.xml AJAX
356
348
  #----------------------------------------------------------------------------
357
349
  describe "responding to PUT update" do
358
-
359
350
  describe "with valid params" do
360
-
361
351
  it "should update the requested campaign and render [update] template" do
362
- @campaign = FactoryGirl.create(:campaign, :id => 42, :name => "Bye")
352
+ @campaign = FactoryGirl.create(:campaign, id: 42, name: "Bye")
363
353
 
364
- xhr :put, :update, :id => 42, :campaign => { :name => "Hello" }
365
- @campaign.reload.name.should == "Hello"
366
- assigns(:campaign).should == @campaign
367
- response.should render_template("campaigns/update")
354
+ xhr :put, :update, id: 42, campaign: { name: "Hello" }
355
+ expect(@campaign.reload.name).to eq("Hello")
356
+ expect(assigns(:campaign)).to eq(@campaign)
357
+ expect(response).to render_template("campaigns/update")
368
358
  end
369
359
 
370
360
  it "should get data for campaigns sidebar when called from Campaigns index" do
371
- @campaign = FactoryGirl.create(:campaign, :id => 42)
361
+ @campaign = FactoryGirl.create(:campaign, id: 42)
372
362
  request.env["HTTP_REFERER"] = "http://localhost/campaigns"
373
363
 
374
- xhr :put, :update, :id => 42, :campaign => { :name => "Hello" }
375
- assigns(:campaign).should == @campaign
376
- assigns[:campaign_status_total].should be_instance_of(HashWithIndifferentAccess)
364
+ xhr :put, :update, id: 42, campaign: { name: "Hello" }
365
+ expect(assigns(:campaign)).to eq(@campaign)
366
+ expect(assigns[:campaign_status_total]).to be_instance_of(HashWithIndifferentAccess)
377
367
  end
378
368
 
379
369
  it "should update campaign permissions when sharing with specific users" do
380
- @campaign = FactoryGirl.create(:campaign, :id => 42, :access => "Public")
381
- he = FactoryGirl.create(:user, :id => 7)
382
- she = FactoryGirl.create(:user, :id => 8)
370
+ @campaign = FactoryGirl.create(:campaign, id: 42, access: "Public")
371
+ he = FactoryGirl.create(:user, id: 7)
372
+ she = FactoryGirl.create(:user, id: 8)
383
373
 
384
- xhr :put, :update, :id => 42, :campaign => { :name => "Hello", :access => "Shared", :user_ids => %w(7 8) }
385
- assigns[:campaign].access.should == "Shared"
386
- assigns[:campaign].user_ids.sort.should == [ 7, 8 ]
374
+ xhr :put, :update, id: 42, campaign: { name: "Hello", access: "Shared", user_ids: %w(7 8) }
375
+ expect(assigns[:campaign].access).to eq("Shared")
376
+ expect(assigns[:campaign].user_ids.sort).to eq([7, 8])
387
377
  end
388
378
 
389
379
  describe "campaign got deleted or otherwise unavailable" do
390
380
  it "should reload current page with the flash message if the campaign got deleted" do
391
- @campaign = FactoryGirl.create(:campaign, :user => current_user)
381
+ @campaign = FactoryGirl.create(:campaign, user: current_user)
392
382
  @campaign.destroy
393
383
 
394
- xhr :put, :update, :id => @campaign.id
395
- flash[:warning].should_not == nil
396
- response.body.should == "window.location.reload();"
384
+ xhr :put, :update, id: @campaign.id
385
+ expect(flash[:warning]).not_to eq(nil)
386
+ expect(response.body).to eq("window.location.reload();")
397
387
  end
398
388
 
399
389
  it "should reload current page with the flash message if the campaign is protected" do
400
- @private = FactoryGirl.create(:campaign, :user => FactoryGirl.create(:user), :access => "Private")
390
+ @private = FactoryGirl.create(:campaign, user: FactoryGirl.create(:user), access: "Private")
401
391
 
402
- xhr :put, :update, :id => @private.id
403
- flash[:warning].should_not == nil
404
- response.body.should == "window.location.reload();"
392
+ xhr :put, :update, id: @private.id
393
+ expect(flash[:warning]).not_to eq(nil)
394
+ expect(response.body).to eq("window.location.reload();")
405
395
  end
406
396
  end
407
397
  end
408
398
 
409
399
  describe "with invalid params" do
410
-
411
400
  it "should not update the requested campaign, but still expose it as @campaign and still render [update] template" do
412
- @campaign = FactoryGirl.create(:campaign, :id => 42, :name => "Hello", :user => current_user)
401
+ @campaign = FactoryGirl.create(:campaign, id: 42, name: "Hello", user: current_user)
413
402
 
414
- xhr :put, :update, :id => 42, :campaign => { :name => nil }
415
- @campaign.reload.name.should == "Hello"
416
- assigns(:campaign).should == @campaign
417
- response.should render_template("campaigns/update")
403
+ xhr :put, :update, id: 42, campaign: { name: nil }
404
+ expect(@campaign.reload.name).to eq("Hello")
405
+ expect(assigns(:campaign)).to eq(@campaign)
406
+ expect(response).to render_template("campaigns/update")
418
407
  end
419
408
  end
420
409
  end
@@ -424,84 +413,84 @@ describe CampaignsController do
424
413
  #----------------------------------------------------------------------------
425
414
  describe "responding to DELETE destroy" do
426
415
  before(:each) do
427
- @campaign = FactoryGirl.create(:campaign, :user => current_user)
416
+ @campaign = FactoryGirl.create(:campaign, user: current_user)
428
417
  end
429
418
 
430
419
  describe "AJAX request" do
431
420
  it "should destroy the requested campaign and render [destroy] template" do
432
- @another_campaign = FactoryGirl.create(:campaign, :user => current_user)
433
- xhr :delete, :destroy, :id => @campaign.id
421
+ @another_campaign = FactoryGirl.create(:campaign, user: current_user)
422
+ xhr :delete, :destroy, id: @campaign.id
434
423
 
435
- assigns[:campaigns].should == [ @another_campaign ]
436
- lambda { Campaign.find(@campaign) }.should raise_error(ActiveRecord::RecordNotFound)
437
- response.should render_template("campaigns/destroy")
424
+ expect(assigns[:campaigns]).to eq([@another_campaign])
425
+ expect { Campaign.find(@campaign.id) }.to raise_error(ActiveRecord::RecordNotFound)
426
+ expect(response).to render_template("campaigns/destroy")
438
427
  end
439
428
 
440
429
  it "should get data for campaigns sidebar" do
441
- xhr :delete, :destroy, :id => @campaign.id
430
+ xhr :delete, :destroy, id: @campaign.id
442
431
 
443
- assigns[:campaign_status_total].should be_instance_of(HashWithIndifferentAccess)
432
+ expect(assigns[:campaign_status_total]).to be_instance_of(HashWithIndifferentAccess)
444
433
  end
445
434
 
446
435
  it "should try previous page and render index action if current page has no campaigns" do
447
436
  session[:campaigns_current_page] = 42
448
437
 
449
- xhr :delete, :destroy, :id => @campaign.id
450
- session[:campaigns_current_page].should == 41
451
- response.should render_template("campaigns/index")
438
+ xhr :delete, :destroy, id: @campaign.id
439
+ expect(session[:campaigns_current_page]).to eq(41)
440
+ expect(response).to render_template("campaigns/index")
452
441
  end
453
442
 
454
443
  it "should render index action when deleting last campaign" do
455
444
  session[:campaigns_current_page] = 1
456
445
 
457
- xhr :delete, :destroy, :id => @campaign.id
458
- session[:campaigns_current_page].should == 1
459
- response.should render_template("campaigns/index")
446
+ xhr :delete, :destroy, id: @campaign.id
447
+ expect(session[:campaigns_current_page]).to eq(1)
448
+ expect(response).to render_template("campaigns/index")
460
449
  end
461
450
 
462
451
  describe "campaign got deleted or otherwise unavailable" do
463
452
  it "should reload current page with the flash message if the campaign got deleted" do
464
- @campaign = FactoryGirl.create(:campaign, :user => current_user)
453
+ @campaign = FactoryGirl.create(:campaign, user: current_user)
465
454
  @campaign.destroy
466
455
 
467
- xhr :delete, :destroy, :id => @campaign.id
468
- flash[:warning].should_not == nil
469
- response.body.should == "window.location.reload();"
456
+ xhr :delete, :destroy, id: @campaign.id
457
+ expect(flash[:warning]).not_to eq(nil)
458
+ expect(response.body).to eq("window.location.reload();")
470
459
  end
471
460
 
472
461
  it "should reload current page with the flash message if the campaign is protected" do
473
- @private = FactoryGirl.create(:campaign, :user => FactoryGirl.create(:user), :access => "Private")
462
+ @private = FactoryGirl.create(:campaign, user: FactoryGirl.create(:user), access: "Private")
474
463
 
475
- xhr :delete, :destroy, :id => @private.id
476
- flash[:warning].should_not == nil
477
- response.body.should == "window.location.reload();"
464
+ xhr :delete, :destroy, id: @private.id
465
+ expect(flash[:warning]).not_to eq(nil)
466
+ expect(response.body).to eq("window.location.reload();")
478
467
  end
479
468
  end
480
469
  end
481
470
 
482
471
  describe "HTML request" do
483
472
  it "should redirect to Campaigns index when a campaign gets deleted from its landing page" do
484
- delete :destroy, :id => @campaign.id
473
+ delete :destroy, id: @campaign.id
485
474
 
486
- flash[:notice].should_not == nil
487
- response.should redirect_to(campaigns_path)
475
+ expect(flash[:notice]).not_to eq(nil)
476
+ expect(response).to redirect_to(campaigns_path)
488
477
  end
489
478
 
490
479
  it "should redirect to campaign index with the flash message is the campaign got deleted" do
491
- @campaign = FactoryGirl.create(:campaign, :user => current_user)
480
+ @campaign = FactoryGirl.create(:campaign, user: current_user)
492
481
  @campaign.destroy
493
482
 
494
- delete :destroy, :id => @campaign.id
495
- flash[:warning].should_not == nil
496
- response.should redirect_to(campaigns_path)
483
+ delete :destroy, id: @campaign.id
484
+ expect(flash[:warning]).not_to eq(nil)
485
+ expect(response).to redirect_to(campaigns_path)
497
486
  end
498
487
 
499
488
  it "should redirect to campaign index with the flash message if the campaign is protected" do
500
- @private = FactoryGirl.create(:campaign, :user => FactoryGirl.create(:user), :access => "Private")
489
+ @private = FactoryGirl.create(:campaign, user: FactoryGirl.create(:user), access: "Private")
501
490
 
502
- delete :destroy, :id => @private.id
503
- flash[:warning].should_not == nil
504
- response.should redirect_to(campaigns_path)
491
+ delete :destroy, id: @private.id
492
+ expect(flash[:warning]).not_to eq(nil)
493
+ expect(response).to redirect_to(campaigns_path)
505
494
  end
506
495
  end
507
496
  end
@@ -513,7 +502,7 @@ describe CampaignsController do
513
502
  describe "tasks" do
514
503
  before do
515
504
  @model = FactoryGirl.create(:campaign)
516
- @attachment = FactoryGirl.create(:task, :asset => nil)
505
+ @attachment = FactoryGirl.create(:task, asset: nil)
517
506
  end
518
507
  it_should_behave_like("attach")
519
508
  end
@@ -521,7 +510,7 @@ describe CampaignsController do
521
510
  describe "leads" do
522
511
  before do
523
512
  @model = FactoryGirl.create(:campaign)
524
- @attachment = FactoryGirl.create(:lead, :campaign => nil)
513
+ @attachment = FactoryGirl.create(:lead, campaign: nil)
525
514
  end
526
515
  it_should_behave_like("attach")
527
516
  end
@@ -529,7 +518,7 @@ describe CampaignsController do
529
518
  describe "opportunities" do
530
519
  before do
531
520
  @model = FactoryGirl.create(:campaign)
532
- @attachment = FactoryGirl.create(:opportunity, :campaign => nil)
521
+ @attachment = FactoryGirl.create(:opportunity, campaign: nil)
533
522
  end
534
523
  it_should_behave_like("attach")
535
524
  end
@@ -542,7 +531,7 @@ describe CampaignsController do
542
531
  describe "tasks" do
543
532
  before do
544
533
  @model = FactoryGirl.create(:campaign)
545
- @attachment = FactoryGirl.create(:task, :asset => nil)
534
+ @attachment = FactoryGirl.create(:task, asset: nil)
546
535
  end
547
536
  it_should_behave_like("attach")
548
537
  end
@@ -550,7 +539,7 @@ describe CampaignsController do
550
539
  describe "leads" do
551
540
  before do
552
541
  @model = FactoryGirl.create(:campaign)
553
- @attachment = FactoryGirl.create(:lead, :campaign => nil)
542
+ @attachment = FactoryGirl.create(:lead, campaign: nil)
554
543
  end
555
544
  it_should_behave_like("attach")
556
545
  end
@@ -558,7 +547,7 @@ describe CampaignsController do
558
547
  describe "opportunities" do
559
548
  before do
560
549
  @model = FactoryGirl.create(:campaign)
561
- @attachment = FactoryGirl.create(:opportunity, :campaign => nil)
550
+ @attachment = FactoryGirl.create(:opportunity, campaign: nil)
562
551
  end
563
552
  it_should_behave_like("attach")
564
553
  end
@@ -571,7 +560,7 @@ describe CampaignsController do
571
560
  describe "tasks" do
572
561
  before do
573
562
  @model = FactoryGirl.create(:campaign)
574
- @attachment = FactoryGirl.create(:task, :asset => @model)
563
+ @attachment = FactoryGirl.create(:task, asset: @model)
575
564
  end
576
565
  it_should_behave_like("discard")
577
566
  end
@@ -599,7 +588,7 @@ describe CampaignsController do
599
588
  #----------------------------------------------------------------------------
600
589
  describe "responding to POST auto_complete" do
601
590
  before(:each) do
602
- @auto_complete_matches = [ FactoryGirl.create(:campaign, :name => "Hello World", :user => current_user) ]
591
+ @auto_complete_matches = [FactoryGirl.create(:campaign, name: "Hello World", user: current_user)]
603
592
  end
604
593
 
605
594
  it_should_behave_like("auto complete")
@@ -609,49 +598,46 @@ describe CampaignsController do
609
598
  #----------------------------------------------------------------------------
610
599
  describe "responding to GET redraw" do
611
600
  it "should save user selected campaign preference" do
612
- xhr :get, :redraw, :per_page => 42, :view => "brief", :sort_by => "name"
613
- current_user.preference[:campaigns_per_page].should == "42"
614
- current_user.preference[:campaigns_index_view].should == "brief"
615
- current_user.preference[:campaigns_sort_by].should == "campaigns.name ASC"
601
+ xhr :get, :redraw, per_page: 42, view: "brief", sort_by: "name"
602
+ expect(current_user.preference[:campaigns_per_page]).to eq("42")
603
+ expect(current_user.preference[:campaigns_index_view]).to eq("brief")
604
+ expect(current_user.preference[:campaigns_sort_by]).to eq("campaigns.name ASC")
616
605
  end
617
606
 
618
607
  it "should reset current page to 1" do
619
- xhr :get, :redraw, :per_page => 42, :view => "brief", :sort_by => "name"
620
- session[:campaigns_current_page].should == 1
608
+ xhr :get, :redraw, per_page: 42, view: "brief", sort_by: "name"
609
+ expect(session[:campaigns_current_page]).to eq(1)
621
610
  end
622
611
 
623
612
  it "should select @campaigns and render [index] template" do
624
613
  @campaigns = [
625
- FactoryGirl.create(:campaign, :name => "A", :user => current_user),
626
- FactoryGirl.create(:campaign, :name => "B", :user => current_user)
614
+ FactoryGirl.create(:campaign, name: "A", user: current_user),
615
+ FactoryGirl.create(:campaign, name: "B", user: current_user)
627
616
  ]
628
617
 
629
- xhr :get, :redraw, :per_page => 1, :sort_by => "name"
630
- assigns(:campaigns).should == [ @campaigns.first ]
631
- response.should render_template("campaigns/index")
618
+ xhr :get, :redraw, per_page: 1, sort_by: "name"
619
+ expect(assigns(:campaigns)).to eq([@campaigns.first])
620
+ expect(response).to render_template("campaigns/index")
632
621
  end
633
622
  end
634
623
 
635
624
  # POST /campaigns/filter AJAX
636
625
  #----------------------------------------------------------------------------
637
626
  describe "responding to POST filter" do
638
-
639
627
  it "should expose filtered campaigns as @campaigns and render [index] template" do
640
628
  session[:campaigns_filter] = "planned,started"
641
- @campaigns = [ FactoryGirl.create(:campaign, :status => "completed", :user => current_user) ]
629
+ @campaigns = [FactoryGirl.create(:campaign, status: "completed", user: current_user)]
642
630
 
643
- xhr :post, :filter, :status => "completed"
644
- assigns(:campaigns).should == @campaigns
645
- response.should render_template("campaigns/index")
631
+ xhr :post, :filter, status: "completed"
632
+ expect(assigns(:campaigns)).to eq(@campaigns)
633
+ expect(response).to render_template("campaigns/index")
646
634
  end
647
635
 
648
636
  it "should reset current page to 1" do
649
637
  @campaigns = []
650
- xhr :post, :filter, :status => "completed"
638
+ xhr :post, :filter, status: "completed"
651
639
 
652
- session[:campaigns_current_page].should == 1
640
+ expect(session[:campaigns_current_page]).to eq(1)
653
641
  end
654
-
655
642
  end
656
-
657
643
  end