fat_free_crm 0.11.3 → 0.11.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of fat_free_crm might be problematic. Click here for more details.
- data/.gitignore +1 -0
- data/.travis.yml +2 -2
- data/CHANGELOG +6 -1
- data/CONTRIBUTORS +40 -1
- data/Capfile +5 -0
- data/Gemfile +25 -6
- data/Gemfile.lock +128 -86
- data/README.md +23 -16
- data/{vendor → app}/assets/images/delete.png +0 -0
- data/app/assets/javascripts/admin/fields.js.coffee +62 -0
- data/app/assets/javascripts/application.js.erb +8 -1
- data/app/assets/javascripts/crm.js +44 -46
- data/app/assets/javascripts/crm_chosen.js.coffee +10 -7
- data/app/assets/javascripts/datepicker.js.coffee +15 -0
- data/app/assets/javascripts/format_buttons.js.coffee +48 -0
- data/app/assets/javascripts/{admin/field_groups.js.coffee → groups.js.coffee} +0 -0
- data/app/assets/javascripts/lists.js.coffee +1 -1
- data/app/assets/javascripts/search.js.coffee +56 -38
- data/app/assets/stylesheets/admin/{field_groups.css.scss → fields.css.scss} +4 -0
- data/app/assets/stylesheets/advanced_search.css.scss +79 -0
- data/app/assets/stylesheets/application.css.erb +4 -0
- data/app/assets/stylesheets/base.scss +3 -3
- data/app/assets/stylesheets/common.scss +72 -25
- data/app/assets/stylesheets/fields.scss +14 -0
- data/app/assets/stylesheets/format_buttons.css.scss +30 -0
- data/app/assets/stylesheets/groups.css.scss +3 -0
- data/app/assets/stylesheets/header.scss +7 -6
- data/{vendor/plugins/.gitkeep → app/assets/stylesheets/index_headers.css.scss} +0 -0
- data/app/assets/stylesheets/print.css.scss +12 -3
- data/app/assets/stylesheets/rails.scss +12 -3
- data/app/controllers/admin/application_controller.rb +1 -1
- data/app/controllers/admin/field_groups_controller.rb +2 -0
- data/app/controllers/admin/fields_controller.rb +41 -17
- data/app/controllers/admin/groups_controller.rb +70 -0
- data/app/controllers/admin/tags_controller.rb +1 -0
- data/app/controllers/admin/users_controller.rb +8 -7
- data/app/controllers/application_controller.rb +34 -5
- data/app/controllers/comments_controller.rb +2 -3
- data/app/controllers/entities/accounts_controller.rb +30 -37
- data/app/controllers/entities/campaigns_controller.rb +56 -29
- data/app/controllers/entities/contacts_controller.rb +24 -26
- data/app/controllers/entities/leads_controller.rb +38 -37
- data/app/controllers/entities/opportunities_controller.rb +28 -34
- data/app/controllers/entities_controller.rb +71 -43
- data/app/controllers/home_controller.rb +29 -27
- data/app/controllers/tasks_controller.rb +18 -17
- data/app/controllers/users_controller.rb +12 -8
- data/app/helpers/accounts_helper.rb +58 -16
- data/app/helpers/addresses_helper.rb +4 -1
- data/app/helpers/admin/fields_helper.rb +3 -4
- data/app/helpers/application_helper.rb +147 -100
- data/app/helpers/campaigns_helper.rb +2 -9
- data/app/helpers/fields_helper.rb +0 -1
- data/app/helpers/groups_helper.rb +2 -0
- data/app/helpers/home_helper.rb +11 -0
- data/app/helpers/leads_helper.rb +2 -9
- data/app/helpers/opportunities_helper.rb +2 -9
- data/app/helpers/{crm_tags_helper.rb → tags_helper.rb} +9 -8
- data/app/helpers/tasks_helper.rb +5 -21
- data/app/helpers/users_helper.rb +14 -7
- data/app/helpers/versions_helper.rb +46 -0
- data/app/inputs/date_time_input.rb +8 -25
- data/app/inputs/datepair_input.rb +77 -0
- data/app/inputs/datetimepair_input.rb +37 -0
- data/app/mailers/user_mailer.rb +10 -0
- data/app/models/entities/account.rb +18 -11
- data/app/models/entities/account_contact.rb +4 -3
- data/app/models/entities/account_opportunity.rb +0 -1
- data/app/models/entities/campaign.rb +6 -7
- data/app/models/entities/contact.rb +53 -25
- data/app/models/entities/contact_opportunity.rb +0 -1
- data/app/models/entities/lead.rb +24 -13
- data/app/models/entities/opportunity.rb +34 -16
- data/app/models/fields/custom_field.rb +29 -13
- data/app/models/fields/custom_field_date_pair.rb +58 -0
- data/app/models/fields/custom_field_datetime_pair.rb +28 -0
- data/app/models/fields/custom_field_pair.rb +54 -0
- data/app/models/fields/field.rb +60 -43
- data/app/models/fields/field_group.rb +0 -9
- data/app/models/observers/entity_observer.rb +29 -0
- data/app/models/observers/opportunity_observer.rb +3 -0
- data/app/models/polymorphic/address.rb +14 -0
- data/app/models/polymorphic/avatar.rb +13 -1
- data/app/models/polymorphic/email.rb +1 -1
- data/app/models/polymorphic/task.rb +14 -13
- data/app/models/setting.rb +14 -21
- data/app/models/users/ability.rb +25 -4
- data/app/models/users/group.rb +13 -0
- data/app/models/users/permission.rb +3 -1
- data/app/models/users/preference.rb +1 -2
- data/app/models/users/user.rb +25 -3
- data/app/views/accounts/_account.html.haml +5 -39
- data/app/views/accounts/_edit.html.haml +3 -2
- data/app/views/accounts/_index_brief.html.haml +32 -0
- data/app/views/accounts/_index_long.html.haml +42 -0
- data/app/views/accounts/_new.html.haml +3 -2
- data/app/views/accounts/_sidebar_index.html.haml +3 -4
- data/app/views/accounts/_sidebar_show.html.haml +2 -2
- data/app/views/accounts/_title_bar.html.haml +11 -0
- data/app/views/accounts/_top_section.html.haml +1 -1
- data/app/views/accounts/create.js.rjs +1 -2
- data/app/views/accounts/destroy.js.rjs +1 -1
- data/app/views/accounts/edit.js.rjs +0 -2
- data/app/views/accounts/index.html.haml +6 -13
- data/app/views/accounts/index.js.rjs +3 -1
- data/app/views/accounts/index.xls.builder +82 -0
- data/app/views/accounts/new.js.rjs +0 -2
- data/app/views/accounts/show.html.haml +17 -15
- data/app/views/accounts/show.js.erb +2 -0
- data/app/views/admin/custom_fields/_base_field.html.haml +21 -0
- data/app/views/admin/custom_fields/_check_boxes_field.html.haml +6 -0
- data/app/views/admin/custom_fields/_date_field.html.haml +14 -0
- data/app/views/admin/custom_fields/_date_pair_field.html.haml +21 -0
- data/app/views/admin/custom_fields/_datetime_field.html.haml +14 -0
- data/app/views/admin/custom_fields/_datetime_pair_field.html.haml +21 -0
- data/app/views/admin/custom_fields/_radio_field.html.haml +6 -0
- data/app/views/admin/custom_fields/_select_field.html.haml +25 -0
- data/app/views/admin/custom_fields/_string_field.html.haml +2 -0
- data/app/views/admin/field_groups/_field_group.html.haml +7 -5
- data/app/views/admin/field_groups/_top_section.html.haml +4 -3
- data/app/views/admin/field_groups/create.js.rjs +1 -2
- data/app/views/admin/fields/_field.html.haml +5 -3
- data/app/views/admin/fields/_form.html.haml +35 -0
- data/app/views/admin/fields/_subform.html.haml +6 -0
- data/app/views/admin/fields/create.js.erb +19 -0
- data/app/views/admin/fields/destroy.js.erb +9 -0
- data/app/views/admin/fields/edit.js.erb +1 -0
- data/app/views/admin/fields/index.html.haml +11 -8
- data/app/views/admin/fields/update.js.erb +13 -0
- data/app/views/admin/groups/_edit.html.haml +12 -0
- data/app/views/admin/groups/_form.html.haml +13 -0
- data/app/views/admin/groups/_group.html.haml +15 -0
- data/app/views/admin/groups/_new.html.haml +12 -0
- data/app/views/admin/groups/create.js.rjs +11 -0
- data/app/views/admin/{fields → groups}/destroy.js.rjs +3 -3
- data/app/views/admin/groups/edit.js.rjs +21 -0
- data/app/views/admin/groups/index.html.haml +18 -0
- data/app/views/admin/groups/index.js.rjs +2 -0
- data/app/views/admin/groups/new.js.rjs +9 -0
- data/app/views/admin/groups/show.html.haml +11 -0
- data/app/views/admin/groups/update.js.rjs +10 -0
- data/app/views/admin/users/_profile.html.haml +13 -1
- data/app/views/admin/users/_user.html.haml +7 -2
- data/app/views/admin/users/index.js.rjs +1 -0
- data/app/views/application/index.atom.builder +1 -1
- data/app/views/application/index.rss.builder +1 -1
- data/app/views/application/show.atom.builder +32 -0
- data/app/views/application/show.rss.builder +29 -0
- data/app/views/campaigns/_campaign.html.haml +5 -21
- data/app/views/campaigns/_edit.html.haml +3 -2
- data/app/views/campaigns/_index_brief.html.haml +15 -0
- data/app/views/campaigns/_index_long.html.haml +20 -0
- data/app/views/campaigns/_new.html.haml +4 -2
- data/app/views/campaigns/_sidebar_index.html.haml +3 -3
- data/app/views/campaigns/_title_bar.html.haml +11 -0
- data/app/views/campaigns/_top_section.html.haml +2 -2
- data/app/views/campaigns/create.js.rjs +1 -4
- data/app/views/campaigns/destroy.js.rjs +1 -1
- data/app/views/campaigns/edit.js.rjs +0 -4
- data/app/views/campaigns/index.html.haml +6 -13
- data/app/views/campaigns/index.js.rjs +3 -1
- data/app/views/campaigns/index.xls.builder +75 -0
- data/app/views/campaigns/new.js.rjs +0 -4
- data/app/views/campaigns/show.html.haml +17 -15
- data/app/views/campaigns/show.js.erb +2 -0
- data/app/views/campaigns/update.js.rjs +0 -2
- data/app/views/comments/_comment.html.haml +6 -5
- data/app/views/comments/_edit.html.haml +5 -5
- data/app/views/comments/_new.html.haml +6 -5
- data/app/views/comments/create.js.rjs +1 -1
- data/app/views/contacts/_contact.html.haml +5 -52
- data/app/views/contacts/_contacts.html.haml +1 -0
- data/app/views/contacts/_edit.html.haml +3 -2
- data/app/views/contacts/_index_brief.html.haml +25 -0
- data/app/views/contacts/_index_full.html.haml +57 -0
- data/app/views/contacts/_index_long.html.haml +43 -0
- data/app/views/contacts/_new.html.haml +4 -2
- data/app/views/contacts/_section_extra.html.haml +26 -0
- data/app/views/contacts/_section_general.html.haml +22 -0
- data/app/views/contacts/_sidebar_index.html.haml +0 -3
- data/app/views/contacts/_sidebar_show.html.haml +2 -10
- data/app/views/contacts/_title_bar.html.haml +11 -0
- data/app/views/contacts/_top_section.html.haml +1 -1
- data/app/views/contacts/create.js.rjs +1 -2
- data/app/views/contacts/destroy.js.rjs +1 -1
- data/app/views/contacts/edit.js.rjs +0 -2
- data/app/views/contacts/index.html.haml +6 -14
- data/app/views/contacts/index.js.rjs +3 -1
- data/app/views/contacts/index.xls.builder +102 -0
- data/app/views/contacts/new.js.rjs +0 -2
- data/app/views/contacts/show.html.haml +15 -15
- data/app/views/contacts/show.js.erb +2 -0
- data/app/views/entities/_basic_search.html.haml +22 -0
- data/app/views/entities/_permissions.html.haml +41 -0
- data/app/views/entities/_search.html.haml +15 -0
- data/app/views/entities/_section_custom_fields.html.haml +11 -0
- data/app/views/entities/_title_bar.html.haml +12 -0
- data/app/views/entities/attach.js.rjs +1 -1
- data/app/views/entities/opportunities.js.rjs +1 -1
- data/app/views/entities/versions.js.erb +3 -0
- data/app/views/fields/_edit_custom_field_group.html.haml +8 -0
- data/app/views/fields/_group.html.haml +11 -20
- data/app/views/fields/_group_table.html.haml +13 -0
- data/app/views/fields/_group_view.html.haml +7 -0
- data/app/views/fields/_groups.html.haml +1 -4
- data/app/views/fields/_sidebar_show.html.haml +5 -4
- data/app/views/home/_account.html.haml +29 -0
- data/app/views/home/_activity.html.haml +16 -6
- data/app/views/home/_opportunity.html.haml +41 -0
- data/app/views/home/_options.html.haml +1 -1
- data/app/views/home/_task.html.haml +46 -0
- data/app/views/home/index.html.haml +32 -1
- data/app/views/home/index.js.rjs +1 -0
- data/app/views/layouts/_header.html.haml +3 -3
- data/app/views/layouts/_sidebar.html.haml +1 -3
- data/app/views/layouts/_tabbed.html.haml +2 -3
- data/app/views/layouts/_tabless.html.haml +1 -1
- data/app/views/layouts/admin/_header.html.haml +1 -1
- data/app/views/layouts/application.html.haml +7 -8
- data/app/views/layouts/header.xls.builder +8 -0
- data/app/views/leads/_contact.html.haml +1 -2
- data/app/views/leads/_convert.html.haml +1 -2
- data/app/views/leads/_convert_permissions.html.haml +21 -11
- data/app/views/leads/_edit.html.haml +3 -2
- data/app/views/leads/_index_brief.html.haml +41 -0
- data/app/views/leads/_index_long.html.haml +62 -0
- data/app/views/leads/_lead.html.haml +5 -62
- data/app/views/leads/_new.html.haml +4 -2
- data/app/views/leads/_opportunity.html.haml +1 -1
- data/app/views/leads/_sidebar_index.html.haml +3 -3
- data/app/views/leads/_sidebar_show.html.haml +3 -3
- data/app/views/leads/_status.html.haml +1 -1
- data/app/views/leads/_title_bar.html.haml +16 -0
- data/app/views/leads/convert.js.rjs +0 -1
- data/app/views/leads/create.js.rjs +1 -2
- data/app/views/leads/destroy.js.rjs +1 -1
- data/app/views/leads/edit.js.rjs +0 -2
- data/app/views/leads/index.html.haml +6 -13
- data/app/views/leads/index.js.rjs +3 -1
- data/app/views/leads/index.xls.builder +100 -0
- data/app/views/leads/new.js.rjs +0 -2
- data/app/views/leads/promote.js.rjs +0 -1
- data/app/views/leads/show.html.haml +13 -18
- data/app/views/leads/show.js.erb +2 -0
- data/app/views/{shared/_lists.html.haml → lists/_sidebar.html.haml} +0 -0
- data/app/views/lists/create.js.rjs +1 -1
- data/app/views/opportunities/_edit.html.haml +3 -2
- data/app/views/opportunities/_index_brief.html.haml +29 -0
- data/app/views/opportunities/_index_long.html.haml +59 -0
- data/app/views/opportunities/_new.html.haml +4 -2
- data/app/views/opportunities/_opportunity.html.haml +5 -57
- data/app/views/opportunities/_sidebar_index.html.haml +3 -3
- data/app/views/opportunities/_sidebar_show.html.haml +2 -2
- data/app/views/opportunities/_title_bar.html.haml +11 -0
- data/app/views/opportunities/_top_section.html.haml +2 -2
- data/app/views/opportunities/create.js.rjs +4 -6
- data/app/views/opportunities/destroy.js.rjs +1 -1
- data/app/views/opportunities/edit.js.rjs +0 -3
- data/app/views/opportunities/index.html.haml +6 -14
- data/app/views/opportunities/index.js.rjs +3 -1
- data/app/views/opportunities/index.xls.builder +69 -0
- data/app/views/opportunities/new.js.rjs +1 -5
- data/app/views/opportunities/show.html.haml +14 -14
- data/app/views/opportunities/show.js.erb +2 -0
- data/app/views/opportunities/update.js.rjs +0 -1
- data/app/views/passwords/new.html.haml +1 -1
- data/app/views/shared/_add_comment.html.haml +8 -0
- data/app/views/shared/_address.html.haml +1 -1
- data/app/views/shared/_address_show.html.haml +1 -1
- data/app/views/shared/_edit_comment.html.haml +2 -2
- data/app/views/shared/_export.html.haml +2 -1
- data/app/views/shared/_paginate_with_per_page.html.haml +14 -0
- data/app/views/shared/_recently.html.haml +1 -1
- data/app/views/shared/_search.html.haml +1 -1
- data/app/views/shared/_tags.html.haml +1 -2
- data/app/views/shared/_tasks.html.haml +2 -2
- data/app/views/tasks/_completed.html.haml +3 -3
- data/app/views/tasks/_new.html.haml +1 -1
- data/app/views/tasks/_pending.html.haml +2 -3
- data/app/views/tasks/_sidebar_index.html.haml +2 -2
- data/app/views/tasks/_top_section.html.haml +5 -3
- data/app/views/tasks/create.js.rjs +3 -4
- data/app/views/tasks/edit.js.rjs +2 -4
- data/app/views/tasks/index.html.haml +1 -1
- data/app/views/tasks/index.xls.builder +47 -0
- data/app/views/tasks/new.js.rjs +0 -2
- data/app/views/tasks/update.js.rjs +0 -1
- data/app/views/user_mailer/assigned_entity_notification.html.haml +3 -0
- data/app/views/users/_user.html.haml +2 -2
- data/app/views/users/_user_report.html.haml +6 -0
- data/app/views/users/opportunities_overview.html.haml +16 -0
- data/app/views/users/show.html.haml +2 -3
- data/app/views/users/update.js.rjs +1 -1
- data/app/views/versions/_version.html.haml +4 -19
- data/app/views/versions/_version_item.html.haml +8 -0
- data/app/views/versions/_versions.html.haml +9 -9
- data/config/application.rb +10 -2
- data/config/deploy.example.rb +47 -0
- data/config/environments/development.rb +1 -0
- data/config/environments/production.rb +1 -3
- data/config/environments/staging.rb +1 -1
- data/config/initializers/action_mailer.rb +10 -8
- data/config/initializers/custom_fields.rb +21 -0
- data/config/initializers/gravatar.rb +7 -0
- data/config/initializers/paper_trail.rb +1 -0
- data/config/initializers/ransack.rb +15 -0
- data/config/initializers/simple_form.rb +1 -2
- data/config/initializers/views.rb +42 -0
- data/config/locales/cz_fat_free_crm.yml +0 -10
- data/config/locales/de_fat_free_crm.yml +23 -21
- data/config/locales/en-GB_fat_free_crm.yml +241 -25
- data/config/locales/en-US_fat_free_crm.yml +139 -57
- data/config/locales/en-US_ransack.yml +92 -0
- data/config/locales/es_fat_free_crm.yml +0 -6
- data/config/locales/fr-CA_fat_free_crm.yml +0 -6
- data/config/locales/fr_fat_free_crm.yml +3 -14
- data/config/locales/it_fat_free_crm.yml +0 -11
- data/config/locales/ja_fat_free_crm.yml +0 -10
- data/config/locales/pl_fat_free_crm.yml +0 -6
- data/config/locales/pt-BR_fat_free_crm.yml +0 -6
- data/config/locales/ru_fat_free_crm.yml +0 -9
- data/config/locales/sv-SE_fat_free_crm.yml +0 -10
- data/config/locales/th_fat_free_crm.yml +0 -6
- data/config/locales/zh-CN.yml +4 -0
- data/config/locales/zh-CN_fat_free_crm.yml +78 -47
- data/config/routes.rb +13 -0
- data/config/settings.default.yml +20 -20
- data/db/demo/addresses.yml +2 -2
- data/db/migrate/20100928030598_create_sessions.rb +5 -0
- data/db/migrate/20100928030627_acts_as_taggable_on_migration.rb +6 -6
- data/db/migrate/20111201030535_add_field_groups_klass_name.rb +2 -1
- data/db/migrate/20120406082136_create_groups.rb +19 -0
- data/db/migrate/20120510025219_add_not_null_constraints_for_timestamp_columns.rb +21 -0
- data/db/migrate/20120528102124_increase_length_of_version_events.rb +9 -0
- data/db/migrate/20120801032706_add_pair_id_to_fields.rb +5 -0
- data/db/migrate/20121003063155_add_settings_to_custom_fields.rb +5 -0
- data/db/migrate/20121221033947_fix_country_mapping.rb +32 -0
- data/db/schema.rb +25 -6
- data/fat_free_crm.gemspec +16 -13
- data/lib/fat_free_crm.rb +2 -0
- data/lib/fat_free_crm/comment_extensions.rb +23 -0
- data/lib/fat_free_crm/core_ext/array.rb +8 -2
- data/lib/fat_free_crm/fields.rb +24 -2
- data/lib/fat_free_crm/gem_dependencies.rb +7 -1
- data/lib/fat_free_crm/permissions.rb +47 -26
- data/lib/fat_free_crm/version.rb +1 -1
- data/lib/fat_free_crm/view_factory.rb +95 -0
- data/lib/plugins/country_select/lib/country_select.rb +393 -374
- data/lib/tasks/{plugins.rake → db/migrate.rake} +1 -1
- data/lib/tasks/{schema_upgrade.rake → db/schema.rake} +2 -1
- data/lib/tasks/{mail_processing.rake → ffcrm/comment_replies.rake} +2 -21
- data/lib/tasks/ffcrm/config.rake +33 -0
- data/lib/tasks/{demo.rake → ffcrm/demo.rake} +3 -2
- data/lib/tasks/ffcrm/dropbox.rake +42 -0
- data/lib/tasks/ffcrm/settings.rake +46 -0
- data/lib/tasks/{fat_free_crm.rake → ffcrm/setup.rake} +1 -39
- data/lib/tasks/ffcrm/update_data.rake +256 -0
- data/{acceptance → spec/acceptance}/acceptance_helper.rb +5 -4
- data/{acceptance → spec/acceptance}/accounts_spec.rb +36 -10
- data/spec/acceptance/admin/groups_spec.rb +26 -0
- data/spec/acceptance/admin/users_spec.rb +34 -0
- data/spec/acceptance/campaigns_spec.rb +101 -0
- data/spec/acceptance/contacts_spec.rb +101 -0
- data/spec/acceptance/dashboard_spec.rb +62 -0
- data/spec/acceptance/leads_spec.rb +109 -0
- data/spec/acceptance/opportunities_overview_spec.rb +82 -0
- data/spec/acceptance/opportunities_spec.rb +103 -0
- data/{acceptance → spec/acceptance}/support/browser.rb +0 -0
- data/{acceptance → spec/acceptance}/support/headless.rb +0 -0
- data/{acceptance → spec/acceptance}/support/helpers.rb +8 -1
- data/{acceptance → spec/acceptance}/support/maintain_sessions.rb +0 -0
- data/spec/acceptance/support/paths.rb +42 -0
- data/spec/acceptance/support/selector_helpers.rb +31 -0
- data/spec/acceptance/tasks_spec.rb +85 -0
- data/spec/controllers/admin/groups_controller_spec.rb +5 -0
- data/spec/controllers/admin/users_controller_spec.rb +2 -3
- data/spec/controllers/applications_controller_spec.rb +40 -0
- data/spec/controllers/comments_controller_spec.rb +5 -6
- data/spec/controllers/emails_controller_spec.rb +1 -2
- data/spec/controllers/entities/accounts_controller_spec.rb +65 -81
- data/spec/controllers/entities/campaigns_controller_spec.rb +69 -85
- data/spec/controllers/entities/contacts_controller_spec.rb +78 -95
- data/spec/controllers/entities/leads_controller_spec.rb +105 -127
- data/spec/controllers/entities/opportunities_controller_spec.rb +88 -103
- data/spec/controllers/entities_controller_spec.rb +39 -0
- data/spec/controllers/home_controller_spec.rb +101 -11
- data/spec/controllers/tasks_controller_spec.rb +27 -32
- data/spec/controllers/users_controller_spec.rb +95 -28
- data/spec/factories/account_factories.rb +2 -2
- data/spec/factories/opportunity_factories.rb +12 -4
- data/spec/factories/task_factories.rb +4 -0
- data/spec/factories/user_factories.rb +9 -2
- data/spec/helpers/application_helper_spec.rb +15 -1
- data/spec/helpers/groups_helper_spec.rb +15 -0
- data/spec/helpers/users_helper_spec.rb +26 -4
- data/spec/lib/comment_extensions_spec.rb +29 -0
- data/spec/lib/core_ext/{string.rb → string_spec.rb} +0 -1
- data/spec/lib/fields_spec.rb +104 -0
- data/spec/lib/permissions_spec.rb +144 -0
- data/spec/lib/view_factory_spec.rb +68 -0
- data/spec/mailers/subscription_mailer_spec.rb +18 -4
- data/spec/mailers/user_mailer_spec.rb +134 -0
- data/spec/models/entities/account_spec.rb +44 -4
- data/spec/models/entities/campaign_spec.rb +3 -4
- data/spec/models/entities/contact_spec.rb +45 -5
- data/spec/models/entities/lead_spec.rb +3 -4
- data/spec/models/entities/opportunity_spec.rb +105 -9
- data/spec/models/fields/custom_field_date_pair_spec.rb +106 -0
- data/spec/models/fields/custom_field_pair_spec.rb +94 -0
- data/spec/models/fields/custom_field_spec.rb +43 -23
- data/spec/models/fields/field_spec.rb +3 -5
- data/spec/models/observers/entity_observer_spec.rb +65 -0
- data/spec/models/polymorphic/task_spec.rb +74 -118
- data/spec/models/polymorphic/version_spec.rb +18 -18
- data/spec/models/users/group_spec.rb +5 -0
- data/spec/models/users/permission_spec.rb +18 -1
- data/spec/models/users/preference_spec.rb +5 -1
- data/spec/models/users/user_spec.rb +55 -8
- data/spec/shared/models.rb +54 -0
- data/spec/spec_helper.rb +82 -87
- data/spec/support/auth_macros.rb +2 -3
- data/spec/views/accounts/_edit.haml_spec.rb +1 -2
- data/spec/views/accounts/_new.haml_spec.rb +1 -2
- data/spec/views/accounts/create.rjs_spec.rb +1 -3
- data/spec/views/accounts/edit.rjs_spec.rb +3 -4
- data/spec/views/accounts/index.haml_spec.rb +9 -6
- data/spec/views/accounts/new.rjs_spec.rb +2 -9
- data/spec/views/accounts/show.haml_spec.rb +1 -2
- data/spec/views/accounts/update.rjs_spec.rb +2 -3
- data/spec/views/admin/users/_create.haml_spec.rb +1 -2
- data/spec/views/admin/users/create.rjs_spec.rb +1 -2
- data/spec/views/campaigns/_edit.haml_spec.rb +2 -3
- data/spec/views/campaigns/_new.haml_spec.rb +2 -3
- data/spec/views/campaigns/create.rjs_spec.rb +0 -3
- data/spec/views/campaigns/destroy.rjs_spec.rb +1 -2
- data/spec/views/campaigns/edit.rjs_spec.rb +3 -6
- data/spec/views/campaigns/index.haml_spec.rb +6 -3
- data/spec/views/campaigns/new.rjs_spec.rb +2 -13
- data/spec/views/campaigns/show.haml_spec.rb +4 -6
- data/spec/views/campaigns/update.rjs_spec.rb +2 -7
- data/spec/views/contacts/_edit.haml_spec.rb +6 -7
- data/spec/views/contacts/_new.haml_spec.rb +2 -3
- data/spec/views/contacts/create.rjs_spec.rb +1 -3
- data/spec/views/contacts/edit.rjs_spec.rb +3 -4
- data/spec/views/contacts/index.haml_spec.rb +6 -3
- data/spec/views/contacts/new.rjs_spec.rb +2 -11
- data/spec/views/contacts/show.haml_spec.rb +1 -2
- data/spec/views/contacts/update.rjs_spec.rb +2 -3
- data/spec/views/home/index.haml_spec.rb +6 -2
- data/spec/views/home/index.rjs_spec.rb +1 -2
- data/spec/views/home/options.rjs_spec.rb +1 -2
- data/spec/views/leads/_convert.haml_spec.rb +1 -2
- data/spec/views/leads/_edit.haml_spec.rb +2 -3
- data/spec/views/leads/_new.haml_spec.rb +2 -3
- data/spec/views/leads/_sidebar_show.haml_spec.rb +1 -2
- data/spec/views/leads/convert.rjs_spec.rb +3 -5
- data/spec/views/leads/edit.rjs_spec.rb +4 -5
- data/spec/views/leads/index.haml_spec.rb +6 -3
- data/spec/views/leads/new.rjs_spec.rb +2 -11
- data/spec/views/leads/promote.rjs_spec.rb +3 -5
- data/spec/views/leads/show.haml_spec.rb +1 -2
- data/spec/views/leads/update.rjs_spec.rb +2 -3
- data/spec/views/opportunities/_edit.haml_spec.rb +5 -6
- data/spec/views/opportunities/_new.haml_spec.rb +2 -4
- data/spec/views/opportunities/create.rjs_spec.rb +0 -2
- data/spec/views/opportunities/edit.rjs_spec.rb +3 -4
- data/spec/views/opportunities/index.haml_spec.rb +7 -4
- data/spec/views/opportunities/new.rjs_spec.rb +2 -12
- data/spec/views/opportunities/show.haml_spec.rb +1 -2
- data/spec/views/opportunities/update.rjs_spec.rb +2 -3
- data/spec/views/tasks/_edit.haml_spec.rb +1 -3
- data/spec/views/tasks/complete.rjs_spec.rb +2 -3
- data/spec/views/tasks/create.rjs_spec.rb +2 -2
- data/spec/views/tasks/edit.rjs_spec.rb +1 -2
- data/spec/views/tasks/new.rjs_spec.rb +1 -18
- data/spec/views/users/avatar.rjs_spec.rb +1 -2
- data/spec/views/users/change_password.rjs_spec.rb +1 -2
- data/spec/views/users/edit.rjs_spec.rb +1 -2
- data/spec/views/users/password.rjs_spec.rb +1 -1
- data/spec/views/users/update.rjs_spec.rb +1 -2
- data/spec/views/users/upload_avatar.rjs_spec.rb +6 -7
- data/vendor/assets/images/brief.png +0 -0
- data/vendor/assets/images/chosen-sprite.png +0 -0
- data/vendor/assets/images/full.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_flat_0_eeeeee_40x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_flat_100_ffffff_40x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_flat_25_3875d7_40x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_flat_55_ffffff_40x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_flat_65_3875d7_40x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_highlight-soft_50_dddddd_1x100.png +0 -0
- data/vendor/assets/images/jquery-ui/{ui-icons_ef8c08_256x240.png → ui-icons_0073ea_256x240.png} +0 -0
- data/vendor/assets/images/jquery-ui/ui-icons_466bb1_256x240.png +0 -0
- data/vendor/assets/images/jquery-ui/{ui-icons_ffd27a_256x240.png → ui-icons_ff0084_256x240.png} +0 -0
- data/vendor/assets/images/long.png +0 -0
- data/vendor/assets/javascripts/chosen-jquery.js +3 -0
- data/vendor/assets/javascripts/chosen-prototype.js +3 -0
- data/vendor/assets/javascripts/chosen.jquery.coffee +574 -0
- data/vendor/assets/javascripts/chosen.proto.coffee +580 -0
- data/vendor/assets/javascripts/jquery.disable.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-addon.js +1882 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-af.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-ca.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-cz.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-de.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-el.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-es.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-et.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-fi.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-fr-CA.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-fr.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-gl.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-he.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-hu.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-id.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-it.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-ja.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-ko.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-lt.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-nl.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-no.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-pl.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-pt.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-ro.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-ru.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-sk.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-sv.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-tr.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-vi.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-zh-CN.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-zh-TW.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-cz.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-de.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-en-GB.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-es.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-fr.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-it.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-ja.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-pl.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-pt-BR.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-ru.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-sv-SE.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-th.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-zh-CN.js +23 -0
- data/vendor/assets/javascripts/lib/abstract-chosen.coffee +110 -0
- data/vendor/assets/javascripts/lib/select-parser.coffee +51 -0
- data/vendor/assets/stylesheets/chosen.css.sass +361 -0
- data/vendor/assets/stylesheets/{jquery-ui.custom.css.erb → jquery-ui.custom.css} +70 -70
- data/zeus.json +21 -0
- metadata +304 -140
- data/acceptance/support/database_cleaner.rb +0 -16
- data/acceptance/support/paths.rb +0 -9
- data/app/views/accounts/_options.html.haml +0 -20
- data/app/views/accounts/_permissions.html.haml +0 -24
- data/app/views/accounts/options.js.rjs +0 -10
- data/app/views/admin/fields/_edit.html.haml +0 -9
- data/app/views/admin/fields/_new.html.haml +0 -10
- data/app/views/admin/fields/_options.html.haml +0 -12
- data/app/views/admin/fields/_top_section.html.haml +0 -54
- data/app/views/admin/fields/create.js.rjs +0 -16
- data/app/views/admin/fields/edit.js.rjs +0 -35
- data/app/views/admin/fields/index.js.rjs +0 -6
- data/app/views/admin/fields/new.js.rjs +0 -8
- data/app/views/admin/fields/options.js.rjs +0 -10
- data/app/views/admin/fields/update.js.rjs +0 -17
- data/app/views/campaigns/_options.html.haml +0 -20
- data/app/views/campaigns/_permissions.html.haml +0 -24
- data/app/views/campaigns/options.js.rjs +0 -10
- data/app/views/contacts/_options.html.haml +0 -21
- data/app/views/contacts/_permissions.html.haml +0 -24
- data/app/views/contacts/options.js.rjs +0 -10
- data/app/views/entities/_advanced_search.html.haml +0 -12
- data/app/views/entities/_condition_fields.html.haml +0 -14
- data/app/views/entities/_grouping_fields.html.haml +0 -12
- data/app/views/entities/advanced_search.js.rjs +0 -9
- data/app/views/entities/versions.js.rjs +0 -3
- data/app/views/leads/_options.html.haml +0 -21
- data/app/views/leads/_permissions.html.haml +0 -28
- data/app/views/leads/options.js.rjs +0 -10
- data/app/views/opportunities/_options.html.haml +0 -20
- data/app/views/opportunities/_permissions.html.haml +0 -24
- data/app/views/opportunities/options.js.rjs +0 -10
- data/app/views/shared/_outline.html.haml +0 -9
- data/app/views/shared/_per_page.html.haml +0 -10
- data/app/views/shared/_sort_by.html.haml +0 -10
- data/config/initializers/cancan.rb +0 -151
- data/config/initializers/squeel.rb +0 -5
- data/public/blank_iframe.html +0 -2
- data/spec/views/accounts/options.rjs_spec.rb +0 -59
- data/spec/views/campaigns/options.rjs_spec.rb +0 -60
- data/spec/views/contacts/options.rjs_spec.rb +0 -61
- data/spec/views/leads/options.rjs_spec.rb +0 -61
- data/spec/views/opportunities/options.rjs_spec.rb +0 -60
- data/vendor/assets/images/jquery-ui/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_flat_10_000000_40x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-icons_222222_256x240.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-icons_228ef1_256x240.png +0 -0
- data/vendor/assets/javascripts/calendar_date_select/calendar_date_select.js +0 -446
- data/vendor/assets/javascripts/calendar_date_select/format_american.js +0 -35
- data/vendor/assets/javascripts/calendar_date_select/format_danish.js +0 -31
- data/vendor/assets/javascripts/calendar_date_select/format_db.js +0 -27
- data/vendor/assets/javascripts/calendar_date_select/format_euro_24hr.js +0 -7
- data/vendor/assets/javascripts/calendar_date_select/format_euro_24hr_ymd.js +0 -7
- data/vendor/assets/javascripts/calendar_date_select/format_finnish.js +0 -32
- data/vendor/assets/javascripts/calendar_date_select/format_french.js +0 -24
- data/vendor/assets/javascripts/calendar_date_select/format_hyphen_ampm.js +0 -37
- data/vendor/assets/javascripts/calendar_date_select/format_iso_date.js +0 -29
- data/vendor/assets/javascripts/calendar_date_select/format_italian.js +0 -24
- data/vendor/assets/javascripts/calendar_date_select/locale/ar.js +0 -10
- data/vendor/assets/javascripts/calendar_date_select/locale/da.js +0 -11
- data/vendor/assets/javascripts/calendar_date_select/locale/de.js +0 -11
- data/vendor/assets/javascripts/calendar_date_select/locale/es.js +0 -11
- data/vendor/assets/javascripts/calendar_date_select/locale/fi.js +0 -10
- data/vendor/assets/javascripts/calendar_date_select/locale/fr.js +0 -11
- data/vendor/assets/javascripts/calendar_date_select/locale/it.js +0 -9
- data/vendor/assets/javascripts/calendar_date_select/locale/ja.js +0 -11
- data/vendor/assets/javascripts/calendar_date_select/locale/nl.js +0 -11
- data/vendor/assets/javascripts/calendar_date_select/locale/pl.js +0 -11
- data/vendor/assets/javascripts/calendar_date_select/locale/pt.js +0 -11
- data/vendor/assets/javascripts/calendar_date_select/locale/ru.js +0 -10
- data/vendor/assets/javascripts/calendar_date_select/locale/sl.js +0 -11
- data/vendor/assets/javascripts/calendar_date_select/locale/sv.js +0 -9
- data/vendor/assets/stylesheets/calendar_date_select/blue.css +0 -130
- data/vendor/assets/stylesheets/calendar_date_select/default.css +0 -135
- data/vendor/assets/stylesheets/calendar_date_select/green.css +0 -142
- data/vendor/assets/stylesheets/calendar_date_select/plain.css +0 -128
- data/vendor/assets/stylesheets/calendar_date_select/red.css +0 -135
- data/vendor/assets/stylesheets/calendar_date_select/silver.css +0 -133
- data/vendor/plugins/.gitkeep~master +0 -0
@@ -1,7 +1,8 @@
|
|
1
|
-
require
|
2
|
-
|
3
|
-
require 'steak'
|
4
|
-
require 'capybara/rails'
|
1
|
+
require 'spec_helper'
|
5
2
|
|
6
3
|
# Put your acceptance spec helpers inside /spec/acceptance/support
|
7
4
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
5
|
+
|
6
|
+
RSpec.configuration.before(:each, :type => :request) do
|
7
|
+
PaperTrail.enabled = true
|
8
|
+
end
|
@@ -7,46 +7,74 @@ feature 'Accounts', %q{
|
|
7
7
|
} do
|
8
8
|
|
9
9
|
before(:each) do
|
10
|
-
do_login_if_not_already
|
10
|
+
do_login_if_not_already(:first_name => 'Bill', :last_name => 'Murray')
|
11
11
|
end
|
12
12
|
|
13
13
|
scenario 'should view a list of accounts' do
|
14
14
|
2.times { |i| FactoryGirl.create(:account, :name => "Account #{i}") }
|
15
|
-
visit
|
15
|
+
visit accounts_page
|
16
16
|
page.should have_content('Account 0')
|
17
17
|
page.should have_content('Account 1')
|
18
|
-
page.should have_content('Search accounts')
|
19
18
|
page.should have_content('Create Account')
|
20
19
|
end
|
21
20
|
|
22
21
|
scenario 'should create a new account', :js => true do
|
23
|
-
visit
|
22
|
+
visit accounts_page
|
24
23
|
page.should have_content('Create Account')
|
25
24
|
click_link 'Create Account'
|
25
|
+
page.should have_selector('#account_name', :visible => true)
|
26
26
|
fill_in 'account_name', :with => 'My new account'
|
27
|
-
click_link
|
27
|
+
click_link 'Contact Information'
|
28
28
|
fill_in 'account_phone', :with => '+1 2345 6789'
|
29
29
|
fill_in 'account_website', :with => 'http://www.example.com'
|
30
|
+
click_link 'Comment'
|
31
|
+
fill_in 'comment_body', :with => 'This account is very important'
|
30
32
|
click_button 'Create Account'
|
33
|
+
|
31
34
|
page.should have_content('My new account')
|
35
|
+
click_link 'My new account'
|
32
36
|
page.should have_content('+1 2345 6789')
|
33
37
|
page.should have_content('http://www.example.com')
|
38
|
+
page.should have_content('This account is very important')
|
39
|
+
|
40
|
+
click_link "Dashboard"
|
41
|
+
page.should have_content("Bill Murray created account My new account")
|
42
|
+
page.should have_content("Bill Murray created comment on My new account")
|
43
|
+
end
|
44
|
+
|
45
|
+
scenario "remembers the comment field when the creation was unsuccessful", :js => true do
|
46
|
+
visit accounts_page
|
47
|
+
page.should have_content('Create Account')
|
48
|
+
click_link 'Create Account'
|
49
|
+
|
50
|
+
click_link 'Contact Information'
|
51
|
+
fill_in 'account_phone', :with => '+1 2345 6789'
|
52
|
+
|
53
|
+
click_link 'Comment'
|
54
|
+
fill_in 'comment_body', :with => 'This account is very important'
|
55
|
+
click_button "Create Account"
|
56
|
+
|
57
|
+
page.should have_field("account_phone", :with => '+1 2345 6789')
|
58
|
+
page.should have_field("comment_body", :with => 'This account is very important')
|
34
59
|
end
|
35
60
|
|
36
61
|
scenario 'should view and edit an account', :js => true do
|
37
62
|
FactoryGirl.create(:account, :name => "A new account")
|
38
|
-
visit
|
63
|
+
visit accounts_page
|
39
64
|
click_link 'A new account'
|
40
65
|
page.should have_content('A new account')
|
41
66
|
click_link 'Edit'
|
42
67
|
fill_in 'account_name', :with => 'A new account *editted*'
|
43
68
|
click_button 'Save Account'
|
44
69
|
page.should have_content('A new account *editted*')
|
70
|
+
|
71
|
+
click_link "Dashboard"
|
72
|
+
page.should have_content("Bill Murray updated account A new account *editted*")
|
45
73
|
end
|
46
74
|
|
47
75
|
scenario 'should delete an account', :js => true do
|
48
76
|
FactoryGirl.create(:account, :name => "My new account")
|
49
|
-
visit
|
77
|
+
visit accounts_page
|
50
78
|
click_link 'My new account'
|
51
79
|
click_link 'Delete?'
|
52
80
|
page.should have_content('Are you sure you want to delete this account?')
|
@@ -56,7 +84,7 @@ feature 'Accounts', %q{
|
|
56
84
|
|
57
85
|
scenario 'should search for an account', :js => true do
|
58
86
|
2.times { |i| FactoryGirl.create(:account, :name => "Account #{i}") }
|
59
|
-
visit
|
87
|
+
visit accounts_page
|
60
88
|
find('#accounts').should have_content("Account 0")
|
61
89
|
find('#accounts').should have_content("Account 1")
|
62
90
|
fill_in 'query', :with => "Account 0"
|
@@ -68,7 +96,5 @@ feature 'Accounts', %q{
|
|
68
96
|
find('#accounts').has_selector?('li', :count => 2)
|
69
97
|
fill_in 'query', :with => "Contact"
|
70
98
|
find('#accounts').has_selector?('li', :count => 0)
|
71
|
-
|
72
99
|
end
|
73
|
-
|
74
100
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.expand_path("../../acceptance_helper.rb", __FILE__)
|
2
|
+
|
3
|
+
feature 'Groups tab', %q{
|
4
|
+
In order to increase customer satisfaction
|
5
|
+
As an administrator
|
6
|
+
I want to manage groups
|
7
|
+
} do
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
do_login(:first_name => 'Captain', :last_name => 'Kirk', :admin => true)
|
11
|
+
end
|
12
|
+
|
13
|
+
scenario 'should create a new group', :js => true do
|
14
|
+
FactoryGirl.create(:user, :first_name => "Mr", :last_name => "Spock")
|
15
|
+
visit admin_groups_path
|
16
|
+
page.should have_content("Couldn't find any Groups.")
|
17
|
+
click_link 'create a new group'
|
18
|
+
page.should have_selector('#group_name', :visible => true)
|
19
|
+
fill_in 'group_name', :with => 'The Enterprise Bridge'
|
20
|
+
chosen_select('Mr Spock', :from => 'group_user_ids')
|
21
|
+
click_button 'Create Group'
|
22
|
+
page.should have_content('The Enterprise Bridge')
|
23
|
+
page.should have_content('members: Mr Spock')
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.expand_path("../../acceptance_helper.rb", __FILE__)
|
2
|
+
|
3
|
+
feature 'Users tab', %q{
|
4
|
+
In order to increase customer satisfaction
|
5
|
+
As an administrator
|
6
|
+
I want to manage users
|
7
|
+
} do
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
do_login(:first_name => 'Captain', :last_name => 'Kirk', :admin => true)
|
11
|
+
end
|
12
|
+
|
13
|
+
scenario 'should create a new user', :js => true do
|
14
|
+
FactoryGirl.create(:group, :name => "Superheroes")
|
15
|
+
visit admin_users_path
|
16
|
+
click_link 'Create User'
|
17
|
+
page.should have_selector('#user_username', :visible => true)
|
18
|
+
fill_in 'user_username', :with => 'captainthunder'
|
19
|
+
fill_in 'user_email', :with => 'lightning@example.com'
|
20
|
+
fill_in 'user_first_name', :with => 'Captain'
|
21
|
+
fill_in 'user_last_name', :with => 'Thunder'
|
22
|
+
fill_in 'user_title', :with => 'Chief'
|
23
|
+
fill_in 'user_company', :with => 'Weather Inc.'
|
24
|
+
chosen_select('Superheroes', :from => 'user_group_ids')
|
25
|
+
|
26
|
+
click_button 'Create User'
|
27
|
+
page.should have_content('Captain Thunder')
|
28
|
+
page.should have_content('Weather Inc.')
|
29
|
+
page.should have_content('Superheroes')
|
30
|
+
page.should have_content('lightning@example.com')
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require File.expand_path("../acceptance_helper.rb", __FILE__)
|
2
|
+
|
3
|
+
feature 'Campaigns', %q{
|
4
|
+
In order to increase customer satisfaction
|
5
|
+
As a user
|
6
|
+
I want to manage campaigns
|
7
|
+
} do
|
8
|
+
|
9
|
+
before :each do
|
10
|
+
do_login_if_not_already(:first_name => 'Bill', :last_name => 'Murray')
|
11
|
+
end
|
12
|
+
|
13
|
+
scenario 'should view a list of campaigns' do
|
14
|
+
3.times { |i| FactoryGirl.create(:campaign, :name => "Campaign #{i}") }
|
15
|
+
visit campaigns_page
|
16
|
+
page.should have_content('Campaign 0')
|
17
|
+
page.should have_content('Campaign 1')
|
18
|
+
page.should have_content('Campaign 2')
|
19
|
+
page.should have_content('Create Campaign')
|
20
|
+
end
|
21
|
+
|
22
|
+
scenario 'should create a campaign', :js => true do
|
23
|
+
visit campaigns_page
|
24
|
+
click_link 'Create Campaign'
|
25
|
+
page.should have_selector('#campaign_name', :visible => true)
|
26
|
+
fill_in 'campaign_name', :with => 'Cool Campaign'
|
27
|
+
select 'On Hold', :from => 'campaign_status'
|
28
|
+
click_link 'Comment'
|
29
|
+
fill_in 'comment_body', :with => 'This campaign is very important'
|
30
|
+
click_button 'Create Campaign'
|
31
|
+
|
32
|
+
page.should have_content('Cool Campaign')
|
33
|
+
page.should have_content('On Hold')
|
34
|
+
|
35
|
+
click_link 'Cool Campaign'
|
36
|
+
page.should have_content('This campaign is very important')
|
37
|
+
|
38
|
+
click_link "Dashboard"
|
39
|
+
page.should have_content("Bill Murray created campaign Cool Campaign")
|
40
|
+
page.should have_content("Bill Murray created comment on Cool Campaign")
|
41
|
+
end
|
42
|
+
|
43
|
+
scenario "remembers the comment field when the creation was unsuccessful", :js => true do
|
44
|
+
visit campaigns_page
|
45
|
+
click_link 'Create Campaign'
|
46
|
+
|
47
|
+
click_link 'Comment'
|
48
|
+
fill_in 'comment_body', :with => 'This campaign is very important'
|
49
|
+
click_button 'Create Campaign'
|
50
|
+
|
51
|
+
page.should have_field("comment_body", :with => 'This campaign is very important')
|
52
|
+
end
|
53
|
+
|
54
|
+
scenario 'should view and edit a campaign', :js => true do
|
55
|
+
FactoryGirl.create(:campaign, :name => "My Cool Campaign")
|
56
|
+
visit campaigns_page
|
57
|
+
click_link 'My Cool Campaign'
|
58
|
+
click_link 'Edit'
|
59
|
+
fill_in 'campaign_name', :with => 'My Even Cooler Campaign'
|
60
|
+
select 'Started', :from => 'campaign_status'
|
61
|
+
click_button 'Save Campaign'
|
62
|
+
page.should have_content('My Even Cooler Campaign')
|
63
|
+
click_link 'Campaigns'
|
64
|
+
page.should have_content('My Even Cooler Campaign')
|
65
|
+
|
66
|
+
click_link 'Dashboard'
|
67
|
+
page.should have_content("Bill Murray updated campaign My Even Cooler Campaign")
|
68
|
+
end
|
69
|
+
|
70
|
+
scenario 'should delete a campaign', :js => true do
|
71
|
+
FactoryGirl.create(:campaign, :name => "Old Campaign")
|
72
|
+
visit campaigns_page
|
73
|
+
click_link 'Old Campaign'
|
74
|
+
click_link 'Delete?'
|
75
|
+
page.should have_content('Are you sure you want to delete this campaign?')
|
76
|
+
click_link 'Yes'
|
77
|
+
page.should have_content('Old Campaign has been deleted.')
|
78
|
+
click_link 'Campaigns'
|
79
|
+
page.should_not have_content('Old Campaign')
|
80
|
+
end
|
81
|
+
|
82
|
+
scenario 'should search for a campaign', :js => true do
|
83
|
+
4.times { |i| FactoryGirl.create(:campaign, :name => "Campaign #{i}") }
|
84
|
+
visit campaigns_page
|
85
|
+
find('#campaigns').should have_content("Campaign 0")
|
86
|
+
find('#campaigns').should have_content("Campaign 1")
|
87
|
+
find('#campaigns').should have_content("Campaign 2")
|
88
|
+
find('#campaigns').should have_content("Campaign 3")
|
89
|
+
fill_in 'query', :with => "Campaign 0"
|
90
|
+
find('#campaigns').should have_content("Campaign 0")
|
91
|
+
find('#campaigns').has_selector?('li', :count => 1)
|
92
|
+
fill_in 'query', :with => "Campaign"
|
93
|
+
find('#campaigns').should have_content("Campaign 0")
|
94
|
+
find('#campaigns').should have_content("Campaign 1")
|
95
|
+
find('#campaigns').should have_content("Campaign 2")
|
96
|
+
find('#campaigns').should have_content("Campaign 3")
|
97
|
+
find('#campaigns').has_selector?('li', :count => 4)
|
98
|
+
fill_in 'query', :with => "False campaign"
|
99
|
+
find('#campaigns').has_selector?('li', :count => 0)
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require File.expand_path("../acceptance_helper.rb", __FILE__)
|
2
|
+
|
3
|
+
feature 'Contacts', %q{
|
4
|
+
In order to increase customer satisfaction
|
5
|
+
As a user
|
6
|
+
I want to manage contacts
|
7
|
+
} do
|
8
|
+
|
9
|
+
before :each do
|
10
|
+
do_login_if_not_already(:first_name => "Bill", :last_name => "Murray")
|
11
|
+
end
|
12
|
+
|
13
|
+
scenario 'should view a list of contacts' do
|
14
|
+
4.times { |i| FactoryGirl.create(:contact, :first_name => "Test", :last_name => "Subject \##{i}") }
|
15
|
+
visit contacts_page
|
16
|
+
page.should have_content('Test Subject #0')
|
17
|
+
page.should have_content('Test Subject #1')
|
18
|
+
page.should have_content('Test Subject #2')
|
19
|
+
page.should have_content('Test Subject #3')
|
20
|
+
page.should have_content('Create Contact')
|
21
|
+
end
|
22
|
+
|
23
|
+
scenario 'should create a contact', :js => true do
|
24
|
+
visit contacts_page
|
25
|
+
click_link 'Create Contact'
|
26
|
+
page.should have_selector('#contact_first_name', :visible => true)
|
27
|
+
fill_in 'contact_first_name', :with => 'Testy'
|
28
|
+
fill_in 'contact_last_name', :with => 'McTest'
|
29
|
+
fill_in 'contact_email', :with => "testy.mctest@example.com"
|
30
|
+
fill_in 'contact_phone', :with => '+44 1234 567890'
|
31
|
+
click_link 'Comment'
|
32
|
+
fill_in 'comment_body', :with => 'This is a very important person.'
|
33
|
+
click_button 'Create Contact'
|
34
|
+
page.should have_content('Testy McTest')
|
35
|
+
|
36
|
+
click_link 'Testy McTest'
|
37
|
+
page.should have_content('This is a very important person.')
|
38
|
+
|
39
|
+
click_link "Dashboard"
|
40
|
+
page.should have_content('Bill Murray created contact Testy McTest')
|
41
|
+
page.should have_content('Bill Murray created comment on Testy McTest')
|
42
|
+
end
|
43
|
+
|
44
|
+
scenario "remembers the comment field when the creation was unsuccessful", :js => true do
|
45
|
+
visit contacts_page
|
46
|
+
click_link 'Create Contact'
|
47
|
+
|
48
|
+
click_link 'Comment'
|
49
|
+
fill_in 'comment_body', :with => 'This is a very important person.'
|
50
|
+
click_button 'Create Contact'
|
51
|
+
|
52
|
+
page.should have_field("comment_body", :with => 'This is a very important person.')
|
53
|
+
end
|
54
|
+
|
55
|
+
scenario 'should view and edit a contact', :js => true do
|
56
|
+
FactoryGirl.create(:contact, :first_name => "Testy", :last_name => "McTest")
|
57
|
+
visit contacts_page
|
58
|
+
click_link 'Testy McTest'
|
59
|
+
click_link 'Edit'
|
60
|
+
fill_in 'contact_first_name', :with => 'Test'
|
61
|
+
fill_in 'contact_last_name', :with => 'Subject'
|
62
|
+
fill_in 'contact_email', :with => "test.subject@example.com"
|
63
|
+
click_button 'Save Contact'
|
64
|
+
page.should have_content('Test Subject')
|
65
|
+
click_link 'Contacts'
|
66
|
+
page.should have_content('Test Subject')
|
67
|
+
|
68
|
+
click_link 'Dashboard'
|
69
|
+
page.should have_content("Bill Murray updated contact Test Subject")
|
70
|
+
end
|
71
|
+
|
72
|
+
scenario 'should delete a contact', :js => true do
|
73
|
+
FactoryGirl.create(:contact, :first_name => "Test", :last_name => "Subject")
|
74
|
+
visit contacts_page
|
75
|
+
click_link 'Test Subject'
|
76
|
+
click_link 'Delete?'
|
77
|
+
page.should have_content('Are you sure you want to delete this contact?')
|
78
|
+
click_link 'Yes'
|
79
|
+
page.should have_content('Test Subject has been deleted.')
|
80
|
+
click_link('Contacts')
|
81
|
+
page.should_not have_content('Test Subject')
|
82
|
+
end
|
83
|
+
|
84
|
+
scenario 'should search for a contact', :js => true do
|
85
|
+
3.times { |i| FactoryGirl.create(:contact, :first_name => "Test", :last_name => "Subject \##{i}") }
|
86
|
+
visit contacts_page
|
87
|
+
find('#contacts').should have_content('Test Subject #0')
|
88
|
+
find('#contacts').should have_content('Test Subject #1')
|
89
|
+
find('#contacts').should have_content('Test Subject #2')
|
90
|
+
fill_in 'query', :with => 'Test Subject #2'
|
91
|
+
find('#contacts').should have_content('Test Subject #2')
|
92
|
+
find('#contacts').has_selector?('li', :count => 1)
|
93
|
+
fill_in 'query', :with => 'Test Subject'
|
94
|
+
find('#contacts').should have_content('Test Subject #0')
|
95
|
+
find('#contacts').should have_content('Test Subject #1')
|
96
|
+
find('#contacts').should have_content('Test Subject #2')
|
97
|
+
find('#contacts').has_selector?('li', :count => 3)
|
98
|
+
fill_in 'query', :with => "Fake contact"
|
99
|
+
find('#contacts').has_selector?('li', :count => 0)
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require File.expand_path("../acceptance_helper.rb", __FILE__)
|
2
|
+
|
3
|
+
feature 'Dashboard', %q{
|
4
|
+
In order to monitor activity
|
5
|
+
As a user
|
6
|
+
I want to see a dashboard
|
7
|
+
} do
|
8
|
+
|
9
|
+
background do
|
10
|
+
@me = FactoryGirl.create(:user)
|
11
|
+
login_as_user(@me)
|
12
|
+
|
13
|
+
FactoryGirl.create(:task, :name => 'Do your homework!', :assignee => @me)
|
14
|
+
FactoryGirl.create(:opportunity, :name => 'Work with the Dolphins', :assignee => @me, :stage => 'proposal')
|
15
|
+
FactoryGirl.create(:account, :name => 'Dolphin Manufacturer', :assignee => @me)
|
16
|
+
end
|
17
|
+
|
18
|
+
scenario "Viewing my dashboard" do
|
19
|
+
visit homepage
|
20
|
+
|
21
|
+
#My Tasks
|
22
|
+
within "#tasks" do
|
23
|
+
page.should have_content("Do your homework!")
|
24
|
+
end
|
25
|
+
|
26
|
+
#My Opportunities
|
27
|
+
within "#opportunities" do
|
28
|
+
page.should have_content("Work with the Dolphins")
|
29
|
+
end
|
30
|
+
|
31
|
+
#My Accounts
|
32
|
+
within "#accounts" do
|
33
|
+
page.should have_content("Dolphin Manufacturer")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
scenario "Only show a maximum of 10 entities" do
|
38
|
+
10.times do
|
39
|
+
FactoryGirl.create(:task, :assignee => @me)
|
40
|
+
FactoryGirl.create(:opportunity, :assignee => @me, :stage => 'proposal')
|
41
|
+
FactoryGirl.create(:account, :assignee => @me)
|
42
|
+
end
|
43
|
+
|
44
|
+
visit homepage
|
45
|
+
|
46
|
+
#My Tasks
|
47
|
+
within "#tasks" do
|
48
|
+
page.should have_content("Not showing 1 hidden task.")
|
49
|
+
end
|
50
|
+
|
51
|
+
#My Opportunities
|
52
|
+
within "#opportunities" do
|
53
|
+
page.should have_content("Not showing 1 hidden opportunity.")
|
54
|
+
end
|
55
|
+
|
56
|
+
#My Accounts
|
57
|
+
within "#accounts" do
|
58
|
+
page.should have_content("Not showing 1 hidden account.")
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require File.expand_path("../acceptance_helper.rb", __FILE__)
|
2
|
+
|
3
|
+
feature 'Leads', %q{
|
4
|
+
In order to increase sales
|
5
|
+
As a user
|
6
|
+
I want to manage leads
|
7
|
+
} do
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
do_login_if_not_already(:first_name => 'Bill', :last_name => 'Murray')
|
11
|
+
end
|
12
|
+
|
13
|
+
scenario 'should view a list of leads' do
|
14
|
+
4.times { |i| FactoryGirl.create(:lead, :first_name => "L", :last_name => "Ead #{i}") }
|
15
|
+
visit leads_page
|
16
|
+
page.should have_content('L Ead 0')
|
17
|
+
page.should have_content('L Ead 1')
|
18
|
+
page.should have_content('L Ead 2')
|
19
|
+
page.should have_content('L Ead 3')
|
20
|
+
page.should have_content('Create Lead')
|
21
|
+
end
|
22
|
+
|
23
|
+
scenario 'should create a new lead', :js => true do
|
24
|
+
visit leads_page
|
25
|
+
click_link 'Create Lead'
|
26
|
+
page.should have_selector('#lead_first_name', :visible => true)
|
27
|
+
fill_in 'lead_first_name', :with => 'Mr'
|
28
|
+
fill_in 'lead_last_name', :with => 'Lead'
|
29
|
+
fill_in 'lead_email', :with => 'mr_lead@example.com'
|
30
|
+
fill_in 'lead_phone', :with => '+44 1234 567890'
|
31
|
+
click_link 'Comment'
|
32
|
+
fill_in 'comment_body', :with => 'This is an important lead.'
|
33
|
+
click_link('Status')
|
34
|
+
select 'Contacted', :from => 'lead_status'
|
35
|
+
click_button 'Create Lead'
|
36
|
+
page.should have_content('Mr Lead')
|
37
|
+
|
38
|
+
click_link 'Mr Lead'
|
39
|
+
page.should have_content('Contacted')
|
40
|
+
page.should have_content('mr_lead@example.com')
|
41
|
+
page.should have_content('+44 1234 567890')
|
42
|
+
page.should have_content('This is an important lead.')
|
43
|
+
|
44
|
+
click_link "Dashboard"
|
45
|
+
page.should have_content("Bill Murray created lead Mr Lead")
|
46
|
+
page.should have_content("Bill Murray created comment on Mr Lead")
|
47
|
+
end
|
48
|
+
|
49
|
+
scenario "remembers the comment field when the creation was unsuccessful", :js => true do
|
50
|
+
visit leads_page
|
51
|
+
click_link 'Create Lead'
|
52
|
+
|
53
|
+
click_link 'Comment'
|
54
|
+
fill_in 'comment_body', :with => 'This is an important lead.'
|
55
|
+
click_button 'Create Lead'
|
56
|
+
|
57
|
+
page.should have_field('comment_body', :with => 'This is an important lead.')
|
58
|
+
end
|
59
|
+
|
60
|
+
scenario 'should view and edit a lead', :js => true do
|
61
|
+
FactoryGirl.create(:lead, :first_name => "Mr", :last_name => "Lead", :email => "mr_lead@example.com")
|
62
|
+
visit leads_page
|
63
|
+
click_link 'Mr Lead'
|
64
|
+
page.should have_content('Mr Lead')
|
65
|
+
click_link('Edit')
|
66
|
+
fill_in 'lead_first_name', :with => 'Mrs'
|
67
|
+
fill_in 'lead_phone', :with => '+44 0987 654321'
|
68
|
+
click_link('Status')
|
69
|
+
select 'Rejected', :from => 'lead_status'
|
70
|
+
click_button 'Save Lead'
|
71
|
+
page.should have_content('Mrs Lead')
|
72
|
+
click_link 'Leads'
|
73
|
+
page.should have_content('Mrs Lead')
|
74
|
+
|
75
|
+
click_link "Dashboard"
|
76
|
+
page.should have_content("Bill Murray updated lead Mrs Lead")
|
77
|
+
end
|
78
|
+
|
79
|
+
scenario 'should delete a lead', :js => true do
|
80
|
+
FactoryGirl.create(:lead, :first_name => "Mr", :last_name => "Lead", :email => "mr_lead@example.com")
|
81
|
+
visit leads_page
|
82
|
+
click_link 'Mr Lead'
|
83
|
+
click_link 'Delete?'
|
84
|
+
page.should have_content('Are you sure you want to delete this lead?')
|
85
|
+
click_link 'Yes'
|
86
|
+
page.should have_content('Mr Lead has been deleted.')
|
87
|
+
click_link 'Leads'
|
88
|
+
page.should_not have_content('Mr Lead')
|
89
|
+
page.should_not have_content('mr_lead@example.com')
|
90
|
+
end
|
91
|
+
|
92
|
+
scenario 'should search for a lead', :js => true do
|
93
|
+
3.times { |i| FactoryGirl.create(:lead, :first_name => "Lead", :last_name => "\##{i}", :email => "lead#{i}@example.com") }
|
94
|
+
visit leads_page
|
95
|
+
find('#leads').should have_content('Lead #0')
|
96
|
+
find('#leads').should have_content('Lead #1')
|
97
|
+
find('#leads').should have_content('Lead #2')
|
98
|
+
fill_in 'query', :with => 'Lead #0'
|
99
|
+
find('#leads').should have_content('Lead #0')
|
100
|
+
find('#leads').has_selector?('li', :count => 1)
|
101
|
+
fill_in 'query', :with => 'Lead'
|
102
|
+
find('#leads').should have_content('Lead #0')
|
103
|
+
find('#leads').should have_content('Lead #1')
|
104
|
+
find('#leads').should have_content('Lead #2')
|
105
|
+
find('#leads').has_selector?('li', :count => 3)
|
106
|
+
fill_in 'query', :with => 'Non-existant lead'
|
107
|
+
find('#leads').has_selector?('li', :count => 0)
|
108
|
+
end
|
109
|
+
end
|