fat_free_crm 0.11.4 → 0.12.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.
- checksums.yaml +15 -0
- data/.gitignore +2 -1
- data/.travis.yml +10 -17
- data/CHANGELOG +57 -4
- data/CONTRIBUTORS +6 -4
- data/Gemfile +24 -21
- data/Gemfile.lock +142 -111
- data/Guardfile +11 -31
- data/MIT-LICENSE +21 -0
- data/README.md +30 -39
- data/app/assets/javascripts/admin/fields.js.coffee +5 -18
- data/app/assets/javascripts/application.js.erb +3 -14
- data/app/assets/javascripts/crm.js +3 -15
- data/app/assets/javascripts/crm_chosen.js.coffee +21 -4
- data/app/assets/javascripts/crm_classes.js +3 -15
- data/app/assets/javascripts/crm_fields.js +3 -15
- data/app/assets/javascripts/crm_loginout.js +3 -15
- data/app/assets/javascripts/crm_textarea_autocomplete.js +3 -15
- data/app/assets/javascripts/datepicker.js.coffee +5 -0
- data/app/assets/javascripts/format_buttons.js.coffee +5 -0
- data/app/assets/javascripts/groups.js.coffee +5 -0
- data/app/assets/javascripts/jquery-noconflict.js +3 -15
- data/app/assets/javascripts/lists.js.coffee +6 -0
- data/app/assets/javascripts/search.js.coffee +5 -0
- data/app/assets/stylesheets/admin/fields.css.scss +10 -0
- data/app/assets/stylesheets/advanced_search.css.scss +5 -0
- data/app/assets/stylesheets/application.css.erb +3 -14
- data/app/assets/stylesheets/base.scss +3 -15
- data/app/assets/stylesheets/common.scss +3 -15
- data/app/assets/stylesheets/ffcrm_chosen.scss +5 -0
- data/app/assets/stylesheets/fields.scss +5 -0
- data/app/assets/stylesheets/format_buttons.css.scss +5 -0
- data/app/assets/stylesheets/groups.css.scss +5 -0
- data/app/assets/stylesheets/header.scss +3 -15
- data/app/assets/stylesheets/index_headers.css.scss +5 -0
- data/app/assets/stylesheets/lists.css.scss +5 -0
- data/app/assets/stylesheets/print.css.scss +3 -15
- data/app/assets/stylesheets/rails.scss +4 -16
- data/app/assets/stylesheets/safari.scss +3 -15
- data/app/assets/stylesheets/textarea_autocomplete.scss +5 -0
- data/app/controllers/admin/application_controller.rb +3 -15
- data/app/controllers/admin/field_groups_controller.rb +3 -15
- data/app/controllers/admin/fields_controller.rb +3 -15
- data/app/controllers/admin/groups_controller.rb +3 -15
- data/app/controllers/admin/plugins_controller.rb +3 -15
- data/app/controllers/admin/settings_controller.rb +3 -15
- data/app/controllers/admin/tags_controller.rb +3 -15
- data/app/controllers/admin/users_controller.rb +3 -15
- data/app/controllers/application_controller.rb +3 -15
- data/app/controllers/authentications_controller.rb +3 -15
- data/app/controllers/comments_controller.rb +6 -16
- data/app/controllers/emails_controller.rb +3 -15
- data/app/controllers/entities/accounts_controller.rb +4 -15
- data/app/controllers/entities/campaigns_controller.rb +4 -15
- data/app/controllers/entities/contacts_controller.rb +4 -15
- data/app/controllers/entities/leads_controller.rb +4 -15
- data/app/controllers/entities/opportunities_controller.rb +6 -16
- data/app/controllers/entities_controller.rb +3 -15
- data/app/controllers/home_controller.rb +3 -15
- data/app/controllers/lists_controller.rb +3 -15
- data/app/controllers/passwords_controller.rb +3 -15
- data/app/controllers/tasks_controller.rb +5 -16
- data/app/controllers/users_controller.rb +3 -15
- data/app/helpers/accounts_helper.rb +7 -17
- data/app/helpers/addresses_helper.rb +3 -15
- data/app/helpers/admin/application_helper.rb +3 -15
- data/app/helpers/admin/field_groups_helper.rb +3 -15
- data/app/helpers/admin/fields_helper.rb +3 -15
- data/app/helpers/admin/plugins_helper.rb +3 -15
- data/app/helpers/admin/settings_helper.rb +3 -15
- data/app/helpers/admin/tags_helper.rb +3 -15
- data/app/helpers/admin/users_helper.rb +3 -15
- data/app/helpers/application_helper.rb +12 -18
- data/app/helpers/authentications_helper.rb +3 -15
- data/app/helpers/campaigns_helper.rb +3 -15
- data/app/helpers/comments_helper.rb +3 -15
- data/app/helpers/contacts_helper.rb +3 -15
- data/app/helpers/emails_helper.rb +3 -15
- data/app/helpers/fields_helper.rb +3 -15
- data/app/helpers/groups_helper.rb +5 -0
- data/app/helpers/home_helper.rb +3 -15
- data/app/helpers/leads_helper.rb +3 -15
- data/app/helpers/lists_helper.rb +3 -15
- data/app/helpers/opportunities_helper.rb +3 -15
- data/app/helpers/passwords_helper.rb +3 -15
- data/app/helpers/tags_helper.rb +3 -15
- data/app/helpers/tasks_helper.rb +3 -15
- data/app/helpers/users_helper.rb +3 -15
- data/app/helpers/versions_helper.rb +3 -15
- data/app/inputs/{datepair_input.rb → date_pair_input.rb} +10 -21
- data/app/inputs/date_time_input.rb +13 -15
- data/app/inputs/datetime_pair_input.rb +26 -0
- data/app/inputs/text_input.rb +5 -15
- data/app/mailers/dropbox_mailer.rb +3 -15
- data/app/mailers/subscription_mailer.rb +9 -16
- data/app/mailers/user_mailer.rb +3 -15
- data/app/models/entities/account.rb +7 -17
- data/app/models/entities/account_contact.rb +6 -17
- data/app/models/entities/account_opportunity.rb +5 -15
- data/app/models/entities/campaign.rb +5 -15
- data/app/models/entities/contact.rb +15 -25
- data/app/models/entities/contact_opportunity.rb +5 -15
- data/app/models/entities/lead.rb +6 -16
- data/app/models/entities/opportunity.rb +6 -16
- data/app/models/fields/core_field.rb +5 -16
- data/app/models/fields/custom_field.rb +6 -16
- data/app/models/fields/custom_field_date_pair.rb +6 -21
- data/app/models/fields/custom_field_datetime_pair.rb +5 -19
- data/app/models/fields/custom_field_pair.rb +6 -16
- data/app/models/fields/field.rb +6 -17
- data/app/models/fields/field_group.rb +7 -17
- data/app/models/list.rb +4 -15
- data/app/models/observers/entity_observer.rb +5 -0
- data/app/models/observers/lead_observer.rb +3 -15
- data/app/models/observers/opportunity_observer.rb +3 -15
- data/app/models/observers/task_observer.rb +3 -15
- data/app/models/polymorphic/address.rb +5 -16
- data/app/models/polymorphic/avatar.rb +5 -16
- data/app/models/polymorphic/comment.rb +5 -15
- data/app/models/polymorphic/email.rb +5 -15
- data/app/models/polymorphic/tag.rb +6 -16
- data/app/models/polymorphic/tagging.rb +4 -15
- data/app/models/polymorphic/task.rb +6 -16
- data/app/models/setting.rb +5 -23
- data/app/models/users/ability.rb +9 -2
- data/app/models/users/authentication.rb +5 -16
- data/app/models/users/group.rb +7 -0
- data/app/models/users/permission.rb +5 -16
- data/app/models/users/preference.rb +4 -15
- data/app/models/users/user.rb +10 -19
- data/app/views/admin/fields/index.html.haml +2 -0
- data/app/views/comments/_edit.html.haml +0 -1
- data/app/views/comments/_new.html.haml +0 -1
- data/app/views/contacts/_contacts.html.haml +1 -1
- data/app/views/contacts/_sidebar_show.html.haml +19 -0
- data/app/views/contacts/_top_section.html.haml +3 -2
- data/app/views/entities/_search.html.haml +4 -3
- data/app/views/entities/contacts.js.rjs +1 -1
- data/app/views/entities/leads.js.rjs +1 -1
- data/app/views/entities/opportunities.js.rjs +1 -1
- data/app/views/fields/_edit_custom_field_group.html.haml +1 -1
- data/app/views/home/_task.html.haml +3 -1
- data/app/views/layouts/_footer.html.haml +1 -1
- data/app/views/leads/_leads.html.haml +1 -1
- data/app/views/leads/_sidebar_show.html.haml +7 -0
- data/app/views/leads/_top_section.html.haml +3 -2
- data/app/views/lists/_sidebar.html.haml +5 -5
- data/app/views/opportunities/_opportunities.html.haml +1 -1
- data/app/views/versions/_versions.html.haml +1 -1
- data/config/application.rb +11 -3
- data/config/boot.rb +5 -1
- data/config/deploy.example.rb +5 -0
- data/config/environment.rb +5 -0
- data/config/environments/development.rb +5 -0
- data/config/environments/production.rb +5 -0
- data/config/environments/staging.rb +5 -0
- data/config/environments/test.rb +6 -1
- data/config/initializers/action_mailer.rb +5 -0
- data/config/initializers/authlogic.rb +5 -0
- data/config/initializers/constants.rb +5 -0
- data/config/initializers/gravatar.rb +5 -0
- data/config/initializers/locale.rb +3 -15
- data/config/initializers/mime_types.rb +5 -0
- data/config/initializers/paginate_arrays.rb +5 -0
- data/config/initializers/paper_trail.rb +5 -0
- data/config/initializers/ransack.rb +6 -1
- data/config/initializers/relative_url_root.rb +3 -15
- data/config/initializers/sass.rb +5 -0
- data/config/initializers/secret_token.rb +6 -1
- data/config/initializers/simple_form.rb +5 -0
- data/config/initializers/views.rb +5 -0
- data/config/locales/de_fat_free_crm.yml +125 -7
- data/config/locales/en-US_fat_free_crm.yml +7 -2
- data/config/locales/th.rb +5 -0
- data/config/routes.rb +5 -0
- data/config/settings.default.yml +10 -18
- data/config/unicorn.rb +5 -0
- data/fat_free_crm.gemspec +6 -4
- data/lib/development_tasks/gem.rake +3 -15
- data/lib/development_tasks/license.rake +12 -32
- data/lib/development_tasks/rdoc.rake +3 -15
- data/lib/development_tasks/rspec.rake +3 -15
- data/lib/fat_free_crm.rb +6 -16
- data/lib/fat_free_crm/callback.rb +3 -15
- data/lib/fat_free_crm/comment_extensions.rb +5 -0
- data/lib/fat_free_crm/core_ext.rb +3 -15
- data/lib/fat_free_crm/core_ext/nil.rb +3 -15
- data/lib/fat_free_crm/core_ext/string.rb +3 -15
- data/lib/fat_free_crm/custom_fields.rb +12 -0
- data/lib/fat_free_crm/engine.rb +3 -15
- data/lib/fat_free_crm/errors.rb +3 -15
- data/lib/fat_free_crm/exceptions.rb +3 -15
- data/lib/fat_free_crm/export_csv.rb +35 -0
- data/lib/fat_free_crm/exportable.rb +3 -15
- data/lib/fat_free_crm/fields.rb +5 -17
- data/lib/fat_free_crm/gem_dependencies.rb +3 -15
- data/lib/fat_free_crm/gem_ext.rb +3 -15
- data/lib/fat_free_crm/gem_ext/action_controller/base.rb +3 -15
- data/lib/fat_free_crm/gem_ext/active_model/serializers/xml/serializer/attribute.rb +3 -15
- data/lib/fat_free_crm/gem_ext/active_record/schema_dumper.rb +3 -15
- data/lib/fat_free_crm/gem_ext/active_support/buffered_logger.rb +3 -15
- data/lib/fat_free_crm/gem_ext/authlogic/session/cookies.rb +3 -15
- data/lib/fat_free_crm/gem_ext/rails/engine.rb +3 -15
- data/lib/fat_free_crm/gem_ext/rails/text_helper.rb +3 -15
- data/lib/fat_free_crm/gem_ext/rake/task.rb +3 -15
- data/lib/fat_free_crm/gem_ext/simple_form/action_view_extensions/form_helper.rb +3 -15
- data/lib/fat_free_crm/i18n.rb +3 -15
- data/lib/fat_free_crm/load_settings.rb +20 -0
- data/lib/fat_free_crm/mail_processor/base.rb +20 -18
- data/lib/fat_free_crm/mail_processor/comment_replies.rb +3 -15
- data/lib/fat_free_crm/mail_processor/dropbox.rb +4 -16
- data/lib/fat_free_crm/permissions.rb +3 -15
- data/lib/fat_free_crm/plugin.rb +3 -15
- data/lib/fat_free_crm/plugin_dependencies.rb +3 -15
- data/lib/fat_free_crm/renderers.rb +6 -25
- data/lib/fat_free_crm/sortable.rb +3 -15
- data/lib/fat_free_crm/tabs.rb +3 -15
- data/lib/fat_free_crm/version.rb +5 -17
- data/lib/fat_free_crm/view_factory.rb +3 -15
- data/lib/missing_translation_detector.rb +50 -0
- data/lib/tasks/db/migrate.rake +3 -15
- data/lib/tasks/db/schema.rake +3 -15
- data/lib/tasks/ffcrm/comment_replies.rake +3 -15
- data/lib/tasks/ffcrm/config.rake +28 -16
- data/lib/tasks/ffcrm/demo.rake +3 -15
- data/lib/tasks/ffcrm/dropbox.rake +3 -15
- data/lib/tasks/ffcrm/missing_translations.rake +33 -0
- data/lib/tasks/ffcrm/settings.rake +3 -15
- data/lib/tasks/ffcrm/setup.rake +15 -24
- data/lib/tasks/ffcrm/update_data.rake +3 -15
- data/spec/controllers/admin/groups_controller_spec.rb +5 -0
- data/spec/controllers/admin/users_controller_spec.rb +5 -0
- data/spec/controllers/applications_controller_spec.rb +5 -0
- data/spec/controllers/authentications_controller_spec.rb +5 -0
- data/spec/controllers/comments_controller_spec.rb +5 -0
- data/spec/controllers/emails_controller_spec.rb +5 -0
- data/spec/controllers/entities/accounts_controller_spec.rb +5 -0
- data/spec/controllers/entities/campaigns_controller_spec.rb +5 -0
- data/spec/controllers/entities/contacts_controller_spec.rb +5 -0
- data/spec/controllers/entities/leads_controller_spec.rb +5 -0
- data/spec/controllers/entities/opportunities_controller_spec.rb +5 -0
- data/spec/controllers/entities_controller_spec.rb +5 -0
- data/spec/controllers/home_controller_spec.rb +5 -0
- data/spec/controllers/lists_controller_spec.rb +5 -0
- data/spec/controllers/passwords_controller_spec.rb +5 -0
- data/spec/controllers/tasks_controller_spec.rb +7 -6
- data/spec/controllers/users_controller_spec.rb +5 -0
- data/spec/factories/account_factories.rb +5 -0
- data/spec/factories/campaign_factories.rb +6 -1
- data/spec/factories/contact_factories.rb +6 -1
- data/spec/factories/field_factories.rb +6 -1
- data/spec/factories/lead_factories.rb +6 -1
- data/spec/factories/list_factories.rb +6 -1
- data/spec/factories/opportunity_factories.rb +16 -5
- data/spec/factories/sequences.rb +7 -1
- data/spec/factories/setting_factories.rb +6 -1
- data/spec/factories/shared_factories.rb +5 -0
- data/spec/factories/subscription_factories.rb +5 -0
- data/spec/factories/tag_factories.rb +6 -1
- data/spec/factories/task_factories.rb +6 -1
- data/spec/factories/user_factories.rb +5 -0
- data/spec/features/acceptance_helper.rb +9 -0
- data/spec/{acceptance → features}/accounts_spec.rb +14 -9
- data/spec/{acceptance → features}/admin/groups_spec.rb +5 -0
- data/spec/{acceptance → features}/admin/users_spec.rb +9 -4
- data/spec/{acceptance → features}/campaigns_spec.rb +14 -16
- data/spec/{acceptance → features}/contacts_spec.rb +13 -16
- data/spec/{acceptance → features}/dashboard_spec.rb +5 -0
- data/spec/{acceptance → features}/leads_spec.rb +11 -12
- data/spec/{acceptance → features}/opportunities_overview_spec.rb +5 -0
- data/spec/{acceptance → features}/opportunities_spec.rb +14 -16
- data/spec/features/support/browser.rb +18 -0
- data/spec/{acceptance → features}/support/headless.rb +5 -3
- data/spec/{acceptance → features}/support/helpers.rb +6 -1
- data/spec/features/support/maintain_sessions.rb +10 -0
- data/spec/{acceptance → features}/support/paths.rb +9 -4
- data/spec/{acceptance → features}/support/selector_helpers.rb +6 -1
- data/spec/{acceptance → features}/tasks_spec.rb +7 -5
- data/spec/helpers/accounts_helper_spec.rb +5 -0
- data/spec/helpers/admin/field_groups_helper_spec.rb +5 -0
- data/spec/helpers/admin/plugins_helper_spec.rb +5 -0
- data/spec/helpers/admin/settings_helper_spec.rb +5 -0
- data/spec/helpers/admin/users_helper_spec.rb +5 -0
- data/spec/helpers/application_helper_spec.rb +5 -0
- data/spec/helpers/authentications_helper_spec.rb +5 -0
- data/spec/helpers/campaigns_helper_spec.rb +5 -0
- data/spec/helpers/comments_helper_spec.rb +5 -0
- data/spec/helpers/contacts_helper_spec.rb +5 -0
- data/spec/helpers/emails_helper_spec.rb +5 -0
- data/spec/helpers/fields_helper_spec.rb +5 -0
- data/spec/helpers/groups_helper_spec.rb +6 -1
- data/spec/helpers/home_helper_spec.rb +5 -0
- data/spec/helpers/leads_helper_spec.rb +5 -0
- data/spec/helpers/lists_helper_spec.rb +6 -1
- data/spec/helpers/opportunities_helper_spec.rb +5 -0
- data/spec/helpers/passwords_helper_spec.rb +5 -0
- data/spec/helpers/tasks_helper_spec.rb +5 -0
- data/spec/helpers/users_helper_spec.rb +5 -0
- data/spec/lib/comment_extensions_spec.rb +5 -0
- data/spec/lib/core_ext/string_spec.rb +5 -0
- data/spec/lib/errors_spec.rb +5 -0
- data/spec/lib/fields_spec.rb +5 -0
- data/spec/lib/mail_processor/base_spec.rb +5 -0
- data/spec/lib/mail_processor/comment_replies_spec.rb +5 -0
- data/spec/lib/mail_processor/dropbox_spec.rb +5 -0
- data/spec/lib/mail_processor/sample_emails/dropbox.rb +5 -0
- data/spec/lib/permissions_spec.rb +5 -0
- data/spec/lib/view_factory_spec.rb +5 -0
- data/spec/mailers/subscription_mailer_spec.rb +19 -1
- data/spec/mailers/user_mailer_spec.rb +6 -1
- data/spec/models/entities/account_contact_spec.rb +5 -0
- data/spec/models/entities/account_opportunity_spec.rb +5 -0
- data/spec/models/entities/account_spec.rb +6 -1
- data/spec/models/entities/campaign_spec.rb +5 -0
- data/spec/models/entities/contact_opportunity_spec.rb +5 -0
- data/spec/models/entities/contact_spec.rb +5 -0
- data/spec/models/entities/lead_spec.rb +5 -0
- data/spec/models/entities/opportunity_spec.rb +15 -2
- data/spec/models/fields/custom_field_date_pair_spec.rb +3 -15
- data/spec/models/fields/custom_field_pair_spec.rb +3 -15
- data/spec/models/fields/custom_field_spec.rb +5 -0
- data/spec/models/fields/field_group_spec.rb +5 -0
- data/spec/models/fields/field_spec.rb +5 -0
- data/spec/models/list_spec.rb +5 -0
- data/spec/models/observers/entity_observer_spec.rb +5 -0
- data/spec/models/polymorphic/address_spec.rb +5 -0
- data/spec/models/polymorphic/avatar_spec.rb +5 -0
- data/spec/models/polymorphic/comment_spec.rb +5 -0
- data/spec/models/polymorphic/email_spec.rb +5 -0
- data/spec/models/polymorphic/task_spec.rb +5 -0
- data/spec/models/polymorphic/version_spec.rb +26 -22
- data/spec/models/setting_spec.rb +5 -0
- data/spec/models/users/authentication_spec.rb +5 -0
- data/spec/models/users/group_spec.rb +6 -1
- data/spec/models/users/permission_spec.rb +5 -0
- data/spec/models/users/preference_spec.rb +5 -0
- data/spec/models/users/user_spec.rb +6 -1
- data/spec/routing/accounts_routing_spec.rb +5 -0
- data/spec/routing/admin/users_routing_spec.rb +5 -0
- data/spec/routing/campaigns_routing_spec.rb +5 -0
- data/spec/routing/comments_routing_spec.rb +5 -0
- data/spec/routing/contacts_routing_spec.rb +5 -0
- data/spec/routing/emails_routing_spec.rb +5 -0
- data/spec/routing/leads_routing_spec.rb +5 -0
- data/spec/routing/opportunities_routing_spec.rb +5 -0
- data/spec/routing/tasks_routing_spec.rb +5 -0
- data/spec/routing/users_routing_spec.rb +5 -0
- data/spec/shared/controllers.rb +8 -3
- data/spec/shared/models.rb +110 -105
- data/spec/spec_helper.rb +40 -22
- data/spec/support/assert_select.rb +5 -0
- data/spec/support/auth_macros.rb +5 -0
- data/spec/support/macros.rb +5 -0
- data/spec/support/mail_processor_mocks.rb +5 -0
- data/spec/support/rjs_support.rb +6 -1
- data/spec/support/uploaded_file.rb +5 -0
- data/spec/views/accounts/_edit.haml_spec.rb +5 -0
- data/spec/views/accounts/_new.haml_spec.rb +5 -0
- data/spec/views/accounts/create.rjs_spec.rb +5 -0
- data/spec/views/accounts/destroy.rjs_spec.rb +5 -0
- data/spec/views/accounts/edit.rjs_spec.rb +5 -0
- data/spec/views/accounts/index.haml_spec.rb +5 -0
- data/spec/views/accounts/index.rjs_spec.rb +5 -0
- data/spec/views/accounts/new.rjs_spec.rb +5 -0
- data/spec/views/accounts/show.haml_spec.rb +5 -0
- data/spec/views/accounts/update.rjs_spec.rb +5 -0
- data/spec/views/admin/users/_create.haml_spec.rb +5 -0
- data/spec/views/admin/users/create.rjs_spec.rb +5 -0
- data/spec/views/admin/users/destroy.rjs_spec.rb +5 -0
- data/spec/views/admin/users/edit.rjs_spec.rb +5 -0
- data/spec/views/admin/users/index.haml_spec.rb +5 -0
- data/spec/views/admin/users/index.rjs_spec.rb +5 -0
- data/spec/views/admin/users/new.rjs_spec.rb +5 -0
- data/spec/views/admin/users/reactivate.rjs_spec.rb +5 -0
- data/spec/views/admin/users/show.haml_spec.rb +5 -0
- data/spec/views/admin/users/suspend.rjs_spec.rb +5 -0
- data/spec/views/admin/users/update.rjs_spec.rb +5 -0
- data/spec/views/application/auto_complete.haml_spec.rb +5 -0
- data/spec/views/authentications/new.haml_spec.rb +5 -0
- data/spec/views/campaigns/_edit.haml_spec.rb +8 -2
- data/spec/views/campaigns/_new.haml_spec.rb +5 -0
- data/spec/views/campaigns/create.rjs_spec.rb +5 -0
- data/spec/views/campaigns/destroy.rjs_spec.rb +5 -0
- data/spec/views/campaigns/edit.rjs_spec.rb +5 -0
- data/spec/views/campaigns/index.haml_spec.rb +5 -0
- data/spec/views/campaigns/index.rjs_spec.rb +5 -0
- data/spec/views/campaigns/new.rjs_spec.rb +5 -0
- data/spec/views/campaigns/show.haml_spec.rb +5 -0
- data/spec/views/campaigns/update.rjs_spec.rb +5 -0
- data/spec/views/comments/new.rjs_spec.rb +5 -0
- data/spec/views/contacts/_edit.haml_spec.rb +5 -0
- data/spec/views/contacts/_new.haml_spec.rb +5 -0
- data/spec/views/contacts/create.rjs_spec.rb +5 -0
- data/spec/views/contacts/destroy.rjs_spec.rb +5 -0
- data/spec/views/contacts/edit.rjs_spec.rb +5 -0
- data/spec/views/contacts/index.haml_spec.rb +5 -0
- data/spec/views/contacts/index.rjs_spec.rb +5 -0
- data/spec/views/contacts/new.rjs_spec.rb +5 -0
- data/spec/views/contacts/show.haml_spec.rb +5 -0
- data/spec/views/contacts/update.rjs_spec.rb +5 -0
- data/spec/views/home/index.haml_spec.rb +5 -0
- data/spec/views/home/index.rjs_spec.rb +5 -0
- data/spec/views/home/options.rjs_spec.rb +5 -0
- data/spec/views/leads/_convert.haml_spec.rb +5 -0
- data/spec/views/leads/_edit.haml_spec.rb +5 -0
- data/spec/views/leads/_new.haml_spec.rb +5 -0
- data/spec/views/leads/_sidebar_show.haml_spec.rb +5 -0
- data/spec/views/leads/convert.rjs_spec.rb +5 -0
- data/spec/views/leads/create.rjs_spec.rb +5 -0
- data/spec/views/leads/destroy.rjs_spec.rb +5 -0
- data/spec/views/leads/edit.rjs_spec.rb +5 -0
- data/spec/views/leads/index.haml_spec.rb +5 -0
- data/spec/views/leads/index.rjs_spec.rb +5 -0
- data/spec/views/leads/new.rjs_spec.rb +5 -0
- data/spec/views/leads/promote.rjs_spec.rb +5 -0
- data/spec/views/leads/reject.rjs_spec.rb +5 -0
- data/spec/views/leads/show.haml_spec.rb +5 -0
- data/spec/views/leads/update.rjs_spec.rb +5 -0
- data/spec/views/opportunities/_edit.haml_spec.rb +5 -0
- data/spec/views/opportunities/_new.haml_spec.rb +5 -0
- data/spec/views/opportunities/create.rjs_spec.rb +5 -0
- data/spec/views/opportunities/destroy.rjs_spec.rb +5 -0
- data/spec/views/opportunities/edit.rjs_spec.rb +5 -0
- data/spec/views/opportunities/index.haml_spec.rb +5 -0
- data/spec/views/opportunities/index.rjs_spec.rb +5 -0
- data/spec/views/opportunities/new.rjs_spec.rb +5 -0
- data/spec/views/opportunities/show.haml_spec.rb +5 -0
- data/spec/views/opportunities/update.rjs_spec.rb +5 -0
- data/spec/views/tasks/_edit.haml_spec.rb +5 -0
- data/spec/views/tasks/complete.rjs_spec.rb +5 -0
- data/spec/views/tasks/create.rjs_spec.rb +5 -0
- data/spec/views/tasks/destroy.rjs_spec.rb +5 -0
- data/spec/views/tasks/edit.rjs_spec.rb +5 -0
- data/spec/views/tasks/index.haml_spec.rb +5 -0
- data/spec/views/tasks/new.rjs_spec.rb +5 -0
- data/spec/views/tasks/update.rjs_spec.rb +5 -0
- data/spec/views/users/avatar.rjs_spec.rb +5 -0
- data/spec/views/users/change_password.rjs_spec.rb +5 -0
- data/spec/views/users/edit.rjs_spec.rb +5 -0
- data/spec/views/users/password.rjs_spec.rb +5 -0
- data/spec/views/users/update.rjs_spec.rb +5 -0
- data/spec/views/users/upload_avatar.rjs_spec.rb +5 -0
- metadata +45 -101
- data/LICENSE +0 -620
- data/app/inputs/datetimepair_input.rb +0 -37
- data/config/initializers/custom_fields.rb +0 -21
- data/lib/fat_free_crm/core_ext/array.rb +0 -75
- data/lib/fat_free_crm/syck_yaml.rb +0 -21
- data/spec/acceptance/acceptance_helper.rb +0 -8
- data/spec/acceptance/support/browser.rb +0 -13
- data/spec/acceptance/support/maintain_sessions.rb +0 -5
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
# encoding: utf-8
|
2
7
|
# == Schema Information
|
3
8
|
#
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
# == Schema Information
|
2
7
|
#
|
3
8
|
# Table name: versions
|
@@ -15,7 +20,7 @@
|
|
15
20
|
|
16
21
|
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
17
22
|
|
18
|
-
describe Version do
|
23
|
+
describe Version, :versioning => true do
|
19
24
|
|
20
25
|
before do
|
21
26
|
login
|
@@ -36,36 +41,37 @@ describe Version do
|
|
36
41
|
end
|
37
42
|
end
|
38
43
|
|
39
|
-
it "should
|
44
|
+
it "should not include view events" do
|
40
45
|
@versions = Version.for(current_user).exclude_events(:view)
|
41
|
-
@versions.map(&:event).sort.
|
46
|
+
@versions.map(&:event).sort.should_not include('view')
|
42
47
|
end
|
43
48
|
|
44
|
-
it "should
|
49
|
+
it "should exclude create, update and destroy events" do
|
45
50
|
@versions = Version.for(current_user).exclude_events(:create, :update, :destroy)
|
46
|
-
@versions.map(&:event).
|
51
|
+
@versions.map(&:event).should_not include('create')
|
52
|
+
@versions.map(&:event).should_not include('update')
|
53
|
+
@versions.map(&:event).should_not include('destroy')
|
47
54
|
end
|
48
55
|
|
49
|
-
it "should
|
56
|
+
it "should include only destroy events" do
|
50
57
|
@versions = Version.for(current_user).include_events(:destroy)
|
51
|
-
@versions.map(&:event).should == %w(destroy)
|
58
|
+
@versions.map(&:event).uniq.should == %w(destroy)
|
52
59
|
end
|
53
60
|
|
54
|
-
it "should
|
61
|
+
it "should include create and update events" do
|
55
62
|
@versions = Version.for(current_user).include_events(:create, :update)
|
56
|
-
@versions.map(&:event).sort.should == %w(create update)
|
63
|
+
@versions.map(&:event).uniq.sort.should == %w(create update)
|
57
64
|
end
|
58
65
|
|
59
|
-
it "should select versions for given user" do
|
66
|
+
it "should select all versions for a given user" do
|
60
67
|
@versions = Version.for(current_user)
|
61
|
-
@versions.map(&:
|
68
|
+
@versions.map(&:whodunnit).uniq.should == [current_user.id.to_s]
|
62
69
|
end
|
63
70
|
end
|
64
71
|
|
65
72
|
%w(account campaign contact lead opportunity task).each do |item|
|
66
73
|
describe "Create, update, and delete (#{item})" do
|
67
74
|
before :each do
|
68
|
-
PaperTrail.enabled = true
|
69
75
|
@item = FactoryGirl.create(item.to_sym, :user => current_user)
|
70
76
|
@conditions = {:item_id => @item.id, :item_type => @item.class.name, :whodunnit => PaperTrail.whodunnit}
|
71
77
|
end
|
@@ -104,7 +110,6 @@ describe Version do
|
|
104
110
|
|
105
111
|
describe "Recently viewed items (task)" do
|
106
112
|
before do
|
107
|
-
PaperTrail.enabled = true
|
108
113
|
@task = FactoryGirl.create(:task)
|
109
114
|
@conditions = {:item_id => @task.id, :item_type => @task.class.name}
|
110
115
|
end
|
@@ -112,7 +117,7 @@ describe Version do
|
|
112
117
|
it "creating a new task should not add it to recently viewed items list" do
|
113
118
|
@versions = Version.where(@conditions)
|
114
119
|
|
115
|
-
@versions.map(&:event).should
|
120
|
+
@versions.map(&:event).should include('create') # but not view
|
116
121
|
end
|
117
122
|
|
118
123
|
it "updating a new task should not add it to recently viewed items list" do
|
@@ -133,21 +138,21 @@ describe Version do
|
|
133
138
|
@task.update_attribute(:completed_at, 1.second.ago)
|
134
139
|
@versions = Version.where(@conditions)
|
135
140
|
|
136
|
-
@versions.map(&:event).
|
141
|
+
@versions.map(&:event).should include('complete')
|
137
142
|
end
|
138
143
|
|
139
144
|
it "should create 'reassigned' task event" do
|
140
145
|
@task.update_attribute(:assigned_to, current_user.id + 1)
|
141
146
|
@versions = Version.where(@conditions)
|
142
147
|
|
143
|
-
@versions.map(&:event).
|
148
|
+
@versions.map(&:event).should include('reassign')
|
144
149
|
end
|
145
150
|
|
146
151
|
it "should create 'rescheduled' task event" do
|
147
152
|
@task.update_attribute(:bucket, "due_tomorrow") # FactoryGirl creates :due_asap task
|
148
153
|
@versions = Version.where(@conditions)
|
149
154
|
|
150
|
-
@versions.map(&:event).
|
155
|
+
@versions.map(&:event).should include('reschedule')
|
151
156
|
end
|
152
157
|
end
|
153
158
|
|
@@ -161,7 +166,7 @@ describe Version do
|
|
161
166
|
@lead.update_attribute(:status, "rejected")
|
162
167
|
@versions = Version.where(@conditions)
|
163
168
|
|
164
|
-
@versions.map(&:event).
|
169
|
+
@versions.map(&:event).should include('reject')
|
165
170
|
end
|
166
171
|
end
|
167
172
|
|
@@ -169,7 +174,6 @@ describe Version do
|
|
169
174
|
before do
|
170
175
|
@user = FactoryGirl.create(:user)
|
171
176
|
Version.delete_all
|
172
|
-
PaperTrail.enabled = true
|
173
177
|
end
|
174
178
|
|
175
179
|
it "should not show the create/update versions if the item is private" do
|
@@ -237,11 +241,11 @@ describe Version do
|
|
237
241
|
|
238
242
|
describe "Exportable" do
|
239
243
|
before do
|
240
|
-
FactoryGirl.create(:version, :whodunnit => FactoryGirl.create(:user).id, :item => FactoryGirl.create(:account))
|
241
|
-
FactoryGirl.create(:version, :whodunnit => FactoryGirl.create(:user, :first_name => nil, :last_name => nil).id, :item => FactoryGirl.create(:account))
|
242
244
|
end
|
243
245
|
it_should_behave_like("exportable") do
|
244
|
-
|
246
|
+
v1 = FactoryGirl.create(:version, :whodunnit => FactoryGirl.create(:user).id, :item => FactoryGirl.create(:account))
|
247
|
+
v2 = FactoryGirl.create(:version, :whodunnit => FactoryGirl.create(:user, :first_name => nil, :last_name => nil).id, :item => FactoryGirl.create(:account))
|
248
|
+
let(:exported) { [v1,v2] }
|
245
249
|
end
|
246
250
|
end
|
247
251
|
end
|
data/spec/models/setting_spec.rb
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
# == Schema Information
|
2
7
|
#
|
3
8
|
# Table name: settings
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
7
|
|
3
8
|
describe Authentication do
|
@@ -1,5 +1,10 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require 'spec_helper'
|
2
7
|
|
3
8
|
describe Group do
|
4
|
-
|
9
|
+
|
5
10
|
end
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
# == Schema Information
|
2
7
|
#
|
3
8
|
# Table name: permissions
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
# == Schema Information
|
2
7
|
#
|
3
8
|
# Table name: preferences
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
# == Schema Information
|
2
7
|
#
|
3
8
|
# Table name: users
|
@@ -122,7 +127,7 @@ describe User do
|
|
122
127
|
describe "have_assigned_opportunities" do
|
123
128
|
before :each do
|
124
129
|
@user1 = FactoryGirl.create(:user)
|
125
|
-
FactoryGirl.create(:
|
130
|
+
FactoryGirl.create(:opportunity, :assignee => @user1, :stage => 'analysis')
|
126
131
|
|
127
132
|
@user2 = FactoryGirl.create(:user)
|
128
133
|
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
7
|
|
3
8
|
describe AccountsController do
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
7
|
|
3
8
|
describe Admin::UsersController do
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
7
|
|
3
8
|
describe CampaignsController do
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
7
|
|
3
8
|
describe CommentsController do
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
7
|
|
3
8
|
describe ContactsController do
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
7
|
|
3
8
|
describe EmailsController do
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
7
|
|
3
8
|
describe LeadsController do
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
7
|
|
3
8
|
describe OpportunitiesController do
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
7
|
|
3
8
|
describe TasksController do
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
7
|
|
3
8
|
describe UsersController do
|
data/spec/shared/controllers.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
module SharedControllerSpecs
|
2
7
|
|
3
|
-
|
8
|
+
shared_examples "auto complete" do
|
4
9
|
before(:each) do
|
5
10
|
@query = "Hello"
|
6
11
|
end
|
@@ -27,7 +32,7 @@ module SharedControllerSpecs
|
|
27
32
|
end
|
28
33
|
end
|
29
34
|
|
30
|
-
|
35
|
+
shared_examples "attach" do
|
31
36
|
it "should attach existing asset to the parent asset of different type" do
|
32
37
|
xhr :put, :attach, :id => @model.id, :assets => @attachment.class.name.tableize, :asset_id => @attachment.id
|
33
38
|
@model.send(@attachment.class.name.tableize).should include(@attachment)
|
@@ -70,7 +75,7 @@ module SharedControllerSpecs
|
|
70
75
|
end
|
71
76
|
end
|
72
77
|
|
73
|
-
|
78
|
+
shared_examples "discard" do
|
74
79
|
it "should discard the attachment without deleting it" do
|
75
80
|
xhr :post, :discard, :id => @model.id, :attachment => @attachment.class.name, :attachment_id => @attachment.id
|
76
81
|
assigns[:attachment].should == @attachment.reload # The attachment should still exist.
|
data/spec/shared/models.rb
CHANGED
@@ -1,137 +1,142 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
6
|
+
require "cancan/matchers"
|
7
|
+
|
8
|
+
shared_examples "exportable" do
|
9
|
+
it "Model#export returns all records with extra attributes added" do
|
10
|
+
|
11
|
+
# User/assignee for the second record has no first/last name.
|
12
|
+
exported.size.should == 2
|
13
|
+
if exported[0].respond_to?(:user_id)
|
7
14
|
exported[0].user_id_full_name.should == "#{exported[0].user.first_name} #{exported[0].user.last_name}"
|
8
15
|
exported[1].user_id_full_name.should == "#{exported[1].user.email}"
|
16
|
+
end
|
9
17
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
18
|
+
if exported[0].respond_to?(:assigned_to)
|
19
|
+
if exported[0].assigned_to?
|
20
|
+
exported[0].assigned_to_full_name.should == "#{exported[0].assignee.first_name} #{exported[0].assignee.last_name}"
|
21
|
+
else
|
22
|
+
exported[0].assigned_to_full_name.should == ''
|
23
|
+
end
|
24
|
+
if exported[1].assigned_to?
|
25
|
+
exported[1].assigned_to_full_name.should == "#{exported[1].assignee.email}"
|
26
|
+
else
|
27
|
+
exported[1].assigned_to_full_name.should == ''
|
21
28
|
end
|
29
|
+
end
|
22
30
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
31
|
+
if exported[0].respond_to?(:completed_by)
|
32
|
+
if exported[0].completed_by?
|
33
|
+
exported[0].completed_by_full_name.should == "#{exported[0].completor.first_name} #{exported[0].completor.last_name}"
|
34
|
+
else
|
35
|
+
exported[0].completed_by_full_name.should == ''
|
36
|
+
end
|
37
|
+
if exported[1].completed_by?
|
38
|
+
exported[1].completed_by_full_name.should == "#{exported[1].completor.email}"
|
39
|
+
else
|
40
|
+
exported[1].completed_by_full_name.should == ''
|
34
41
|
end
|
35
42
|
end
|
36
43
|
end
|
44
|
+
end
|
37
45
|
|
38
|
-
|
46
|
+
shared_examples Ability do |klass|
|
39
47
|
|
40
|
-
|
48
|
+
subject { ability }
|
49
|
+
let(:ability){ Ability.new(user) }
|
50
|
+
let(:user){ FactoryGirl.create(:user) }
|
51
|
+
let(:factory){ klass.model_name.underscore }
|
41
52
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
let(:factory){ klass.model_name.underscore }
|
53
|
+
context "create" do
|
54
|
+
it{ should be_able_to(:create, klass) }
|
55
|
+
end
|
46
56
|
|
47
|
-
|
48
|
-
|
49
|
-
end
|
57
|
+
context "when public access" do
|
58
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Public') }
|
50
59
|
|
51
|
-
|
52
|
-
|
60
|
+
it{ should be_able_to(:manage, asset) }
|
61
|
+
end
|
53
62
|
|
54
|
-
|
55
|
-
|
63
|
+
context "when private access owner" do
|
64
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Private', :user_id => user.id) }
|
56
65
|
|
57
|
-
|
58
|
-
|
66
|
+
it{ should be_able_to(:manage, asset) }
|
67
|
+
end
|
59
68
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
context "when private access administrator" do
|
64
|
-
let(:asset){ FactoryGirl.create(factory, :access => 'Private') }
|
65
|
-
let(:user) { FactoryGirl.create(:user, :admin => true) }
|
69
|
+
context "when private access administrator" do
|
70
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Private') }
|
71
|
+
let(:user) { FactoryGirl.create(:user, :admin => true) }
|
66
72
|
|
67
|
-
|
68
|
-
|
73
|
+
it{ should be_able_to(:manage, asset) }
|
74
|
+
end
|
69
75
|
|
70
|
-
|
71
|
-
|
76
|
+
context "when private access not owner" do
|
77
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Private') }
|
72
78
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
context "when private access not owner but is assigned" do
|
77
|
-
let(:asset){ FactoryGirl.create(factory, :access => 'Private', :assigned_to => user.id) }
|
79
|
+
it{ should_not be_able_to(:manage, asset) }
|
80
|
+
end
|
78
81
|
|
79
|
-
|
80
|
-
|
82
|
+
context "when private access not owner but is assigned" do
|
83
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Private', :assigned_to => user.id) }
|
81
84
|
|
82
|
-
|
83
|
-
|
84
|
-
let(:permission){ Permission.new(:user => user) }
|
85
|
+
it{ should be_able_to(:manage, asset) }
|
86
|
+
end
|
85
87
|
|
86
|
-
|
87
|
-
|
88
|
+
context "when shared access with permission" do
|
89
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Shared', :permissions => [permission]) }
|
90
|
+
let(:permission){ Permission.new(:user => user) }
|
88
91
|
|
89
|
-
|
90
|
-
|
91
|
-
let(:permission){ Permission.new(:user => FactoryGirl.create(:user)) }
|
92
|
+
it{ should be_able_to(:manage, asset) }
|
93
|
+
end
|
92
94
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
context "when shared access with no permission but administrator" do
|
97
|
-
let(:asset){ FactoryGirl.create(factory, :access => 'Shared', :permissions => [permission]) }
|
98
|
-
let(:permission){ Permission.new(:user => FactoryGirl.create(:user)) }
|
99
|
-
let(:user) { FactoryGirl.create(:user, :admin => true) }
|
95
|
+
context "when shared access with no permission" do
|
96
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Shared', :permissions => [permission]) }
|
97
|
+
let(:permission){ Permission.new(:user => FactoryGirl.create(:user)) }
|
100
98
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
context "when shared access with no permission but assigned" do
|
105
|
-
let(:asset){ FactoryGirl.create(factory, :access => 'Shared', :permissions => [permission], :assigned_to => user.id) }
|
106
|
-
let(:permission){ Permission.new(:user => FactoryGirl.create(:user)) }
|
99
|
+
it{ should_not be_able_to(:manage, asset) }
|
100
|
+
end
|
107
101
|
|
108
|
-
|
109
|
-
|
102
|
+
context "when shared access with no permission but administrator" do
|
103
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Shared', :permissions => [permission]) }
|
104
|
+
let(:permission){ Permission.new(:user => FactoryGirl.create(:user)) }
|
105
|
+
let(:user) { FactoryGirl.create(:user, :admin => true) }
|
110
106
|
|
111
|
-
|
112
|
-
|
113
|
-
let(:permission){ Permission.new(:group => group) }
|
114
|
-
let(:group){ FactoryGirl.create(:group, :users => [user]) }
|
107
|
+
it{ should be_able_to(:manage, asset) }
|
108
|
+
end
|
115
109
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
let(:group1){ FactoryGirl.create(:group, :users => [user]) }
|
123
|
-
let(:group2){ FactoryGirl.create(:group, :users => [user]) }
|
124
|
-
|
125
|
-
it{ should be_able_to(:manage, asset) }
|
126
|
-
end
|
110
|
+
context "when shared access with no permission but assigned" do
|
111
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Shared', :permissions => [permission], :assigned_to => user.id) }
|
112
|
+
let(:permission){ Permission.new(:user => FactoryGirl.create(:user)) }
|
113
|
+
|
114
|
+
it{ should be_able_to(:manage, asset) }
|
115
|
+
end
|
127
116
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
117
|
+
context "when shared access with group permission" do
|
118
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Shared', :permissions => [permission]) }
|
119
|
+
let(:permission){ Permission.new(:group => group) }
|
120
|
+
let(:group){ FactoryGirl.create(:group, :users => [user]) }
|
132
121
|
|
133
|
-
|
134
|
-
|
135
|
-
|
122
|
+
it{ should be_able_to(:manage, asset) }
|
123
|
+
end
|
124
|
+
|
125
|
+
context "when shared access with several group permissions" do
|
126
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Shared', :permissions => permissions) }
|
127
|
+
let(:permissions){ [Permission.new(:group => group1), Permission.new(:group => group2)] }
|
128
|
+
let(:group1){ FactoryGirl.create(:group, :users => [user]) }
|
129
|
+
let(:group2){ FactoryGirl.create(:group, :users => [user]) }
|
130
|
+
|
131
|
+
it{ should be_able_to(:manage, asset) }
|
136
132
|
end
|
133
|
+
|
134
|
+
context "when shared access with no group permission" do
|
135
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Shared', :permissions => [permission]) }
|
136
|
+
let(:permission){ Permission.new(:group => group) }
|
137
|
+
let(:group){ FactoryGirl.create(:group) }
|
138
|
+
|
139
|
+
it{ should_not be_able_to(:manage, asset) }
|
140
|
+
end
|
141
|
+
|
137
142
|
end
|