xrono 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +19 -0
- data/.rspec +1 -0
- data/.travis.yml +20 -0
- data/Gemfile +30 -0
- data/Gemfile.lock +336 -0
- data/LICENSE +21 -0
- data/README.md +64 -0
- data/RELEASE_NOTES.md +83 -0
- data/Rakefile +15 -0
- data/XRONO.md +64 -0
- data/app/assets/images/chosen-sprite.png +0 -0
- data/app/assets/images/grid.png +0 -0
- data/app/assets/images/isotope_logo.png +0 -0
- data/app/assets/images/logo.png +0 -0
- data/app/assets/images/logo_122x40.png +0 -0
- data/app/assets/images/logo_97x40.png +0 -0
- data/app/assets/images/main_bg.jpg +0 -0
- data/app/assets/images/nav_bg.jpg +0 -0
- data/app/assets/images/rails.png +0 -0
- data/app/assets/images/top_bg.jpg +0 -0
- data/app/assets/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/app/assets/images/ui-bg_flat_0_fbf9ee_40x100.png +0 -0
- data/app/assets/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
- data/app/assets/images/ui-bg_flat_65_ffffff_40x100.png +0 -0
- data/app/assets/images/ui-bg_flat_75_cccccc_40x100.png +0 -0
- data/app/assets/images/ui-bg_flat_75_dadada_40x100.png +0 -0
- data/app/assets/images/ui-bg_flat_75_e6e6e6_40x100.png +0 -0
- data/app/assets/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/app/assets/images/ui-bg_flat_95_fef1ec_40x100.png +0 -0
- data/app/assets/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
- data/app/assets/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
- data/app/assets/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/app/assets/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
- data/app/assets/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
- data/app/assets/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
- data/app/assets/images/ui-icons_217bc0_256x240.png +0 -0
- data/app/assets/images/ui-icons_222222_256x240.png +0 -0
- data/app/assets/images/ui-icons_2e83ff_256x240.png +0 -0
- data/app/assets/images/ui-icons_454545_256x240.png +0 -0
- data/app/assets/images/ui-icons_469bdd_256x240.png +0 -0
- data/app/assets/images/ui-icons_6da8d5_256x240.png +0 -0
- data/app/assets/images/ui-icons_888888_256x240.png +0 -0
- data/app/assets/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/app/assets/images/ui-icons_d8e7f3_256x240.png +0 -0
- data/app/assets/images/ui-icons_f9bd01_256x240.png +0 -0
- data/app/assets/javascripts/add_taxonomy.js.erb +307 -0
- data/app/assets/javascripts/admin_invoices.js +15 -0
- data/app/assets/javascripts/api/v1/clients.js.coffee +3 -0
- data/app/assets/javascripts/api/v1/tokens.js.coffee +3 -0
- data/app/assets/javascripts/application.js.erb +25 -0
- data/app/assets/javascripts/bootstrap-dropdown.js +92 -0
- data/app/assets/javascripts/bootstrap-tabs.js +80 -0
- data/app/assets/javascripts/bootstrap.js.coffee +4 -0
- data/app/assets/javascripts/calendar.js +25 -0
- data/app/assets/javascripts/chosen.jquery.js +898 -0
- data/app/assets/javascripts/client_login/clients.js.coffee +3 -0
- data/app/assets/javascripts/client_login/reports.js.coffee +3 -0
- data/app/assets/javascripts/comments.js +16 -0
- data/app/assets/javascripts/css_browser_selector.js +8 -0
- data/app/assets/javascripts/dashboard.js +3 -0
- data/app/assets/javascripts/data_vaults.js.coffee +3 -0
- data/app/assets/javascripts/file_attachments.js +9 -0
- data/app/assets/javascripts/jquery-tagselector.js +50 -0
- data/app/assets/javascripts/jquery-ui-1.8.16.custom.min.js +791 -0
- data/app/assets/javascripts/jquery.jeditable.js +543 -0
- data/app/assets/javascripts/jquery_ujs.js +336 -0
- data/app/assets/javascripts/schedule_modal.js +25 -0
- data/app/assets/javascripts/specify_project.js +21 -0
- data/app/assets/javascripts/ticket_board.js +104 -0
- data/app/assets/stylesheets/_jquery-ui-1.8.16.custom.css +568 -0
- data/app/assets/stylesheets/application.css +7 -0
- data/app/assets/stylesheets/bootstrap_and_overrides.css.scss +41 -0
- data/app/assets/stylesheets/chosen.css +367 -0
- data/app/assets/stylesheets/client_login/clients.css.scss +3 -0
- data/app/assets/stylesheets/client_login/reports.css.scss +3 -0
- data/app/assets/stylesheets/data_vaults.css.scss +3 -0
- data/app/assets/stylesheets/jquery-tagselector.css +49 -0
- data/app/assets/stylesheets/responsive.scss +650 -0
- data/app/assets/stylesheets/screen.scss +303 -0
- data/app/controllers/admin/base_controller.rb +18 -0
- data/app/controllers/admin/invoices_controller.rb +42 -0
- data/app/controllers/admin/payroll_controller.rb +29 -0
- data/app/controllers/admin/site_settings_controller.rb +19 -0
- data/app/controllers/admin/unentered_time_report_controller.rb +26 -0
- data/app/controllers/admin/users_controller.rb +86 -0
- data/app/controllers/admin/weekly_time_report_controller.rb +11 -0
- data/app/controllers/api/base_controller.rb +14 -0
- data/app/controllers/api/v1/base_controller.rb +2 -0
- data/app/controllers/api/v1/clients_controller.rb +10 -0
- data/app/controllers/api/v1/credentials_controller.rb +10 -0
- data/app/controllers/api/v1/projects_controller.rb +27 -0
- data/app/controllers/api/v1/tickets_controller.rb +46 -0
- data/app/controllers/api/v1/tokens_controller.rb +30 -0
- data/app/controllers/api/v1/work_units_controller.rb +23 -0
- data/app/controllers/client_login/base_controller.rb +3 -0
- data/app/controllers/client_login/clients_controller.rb +35 -0
- data/app/controllers/client_login/contacts_controller.rb +53 -0
- data/app/controllers/client_login/projects_controller.rb +24 -0
- data/app/controllers/client_login/reports_controller.rb +23 -0
- data/app/controllers/client_login/tickets_controller.rb +41 -0
- data/app/controllers/client_login/work_units_controller.rb +11 -0
- data/app/controllers/clients_controller.rb +103 -0
- data/app/controllers/comments_controller.rb +75 -0
- data/app/controllers/contacts_controller.rb +54 -0
- data/app/controllers/dashboard/base_controller.rb +79 -0
- data/app/controllers/data_vaults_controller.rb +12 -0
- data/app/controllers/doorkeeper/application_controller.rb +33 -0
- data/app/controllers/file_attachments_controller.rb +60 -0
- data/app/controllers/projects_controller.rb +62 -0
- data/app/controllers/tickets_controller.rb +48 -0
- data/app/controllers/users_controller.rb +57 -0
- data/app/controllers/work_units_controller.rb +114 -0
- data/app/controllers/xrono/application_controller.rb +65 -0
- data/app/helpers/admin/unentered_time_report_helper.rb +9 -0
- data/app/helpers/admin_base_helper.rb +14 -0
- data/app/helpers/clients_helper.rb +5 -0
- data/app/helpers/dashboard_helper.rb +9 -0
- data/app/helpers/gravatar_helper.rb +5 -0
- data/app/helpers/refurl_helper.rb +9 -0
- data/app/helpers/xrono/application_helper.rb +54 -0
- data/app/mailers/notifier.rb +18 -0
- data/app/models/chart_data.rb +20 -0
- data/app/models/client.rb +98 -0
- data/app/models/comment.rb +8 -0
- data/app/models/contact.rb +10 -0
- data/app/models/data_vault.rb +6 -0
- data/app/models/file_attachment.rb +8 -0
- data/app/models/project.rb +76 -0
- data/app/models/role.rb +3 -0
- data/app/models/roles_user.rb +4 -0
- data/app/models/site_settings.rb +4 -0
- data/app/models/ticket.rb +85 -0
- data/app/models/user.rb +147 -0
- data/app/models/weekly_time_report.rb +26 -0
- data/app/models/work_unit.rb +99 -0
- data/app/models/work_unit/finders.rb +67 -0
- data/app/views/admin/_nav.html.haml +1 -0
- data/app/views/admin/base/index.html.haml +3 -0
- data/app/views/admin/base/reports.html.haml +3 -0
- data/app/views/admin/invoices/index.html.haml +19 -0
- data/app/views/admin/invoices/show.html.haml +57 -0
- data/app/views/admin/payroll/index.html.haml +18 -0
- data/app/views/admin/payroll/show.html.haml +56 -0
- data/app/views/admin/site_settings/edit.html.haml +32 -0
- data/app/views/admin/unentered_time_report/_week_navigation.html.haml +6 -0
- data/app/views/admin/unentered_time_report/show.html.haml +16 -0
- data/app/views/admin/users/_form.html.haml +48 -0
- data/app/views/admin/users/_locked_users.html.haml +31 -0
- data/app/views/admin/users/_users_table.html.haml +25 -0
- data/app/views/admin/users/edit.html.haml +1 -0
- data/app/views/admin/users/index.html.haml +14 -0
- data/app/views/admin/users/locked_clients.html.haml +13 -0
- data/app/views/admin/users/locked_users.html.haml +13 -0
- data/app/views/admin/users/new.html.haml +1 -0
- data/app/views/admin/users/projects.html.haml +25 -0
- data/app/views/admin/users/unlocked_clients.html.haml +13 -0
- data/app/views/admin/weekly_time_report/_week_pagination.html.haml +11 -0
- data/app/views/admin/weekly_time_report/show.html.haml +41 -0
- data/app/views/client_login/_work_unit_index.haml +16 -0
- data/app/views/client_login/base/index.html.haml +18 -0
- data/app/views/client_login/clients/show.html.haml +32 -0
- data/app/views/client_login/contacts/_form.html.haml +34 -0
- data/app/views/client_login/contacts/edit.html.haml +4 -0
- data/app/views/client_login/contacts/index.html.haml +30 -0
- data/app/views/client_login/contacts/new.html.haml +5 -0
- data/app/views/client_login/contacts/show.html.haml +26 -0
- data/app/views/client_login/projects/_tickets.html.haml +31 -0
- data/app/views/client_login/projects/show.html.haml +8 -0
- data/app/views/client_login/reports/index.html.haml +4 -0
- data/app/views/client_login/reports/work_units.html.haml +96 -0
- data/app/views/client_login/tickets/_form.html.haml +33 -0
- data/app/views/client_login/tickets/new.html.haml +1 -0
- data/app/views/client_login/tickets/show.html.haml +23 -0
- data/app/views/client_login/work_units/show.html.haml +18 -0
- data/app/views/clients/_breadcrumbs.html.haml +2 -0
- data/app/views/clients/_clients_table.html.haml +24 -0
- data/app/views/clients/_form.html.haml +34 -0
- data/app/views/clients/_projects.html.haml +31 -0
- data/app/views/clients/edit.html.haml +1 -0
- data/app/views/clients/inactive_clients.html.haml +9 -0
- data/app/views/clients/index.html.haml +8 -0
- data/app/views/clients/new.html.haml +1 -0
- data/app/views/clients/show.html.haml +34 -0
- data/app/views/clients/suspended_clients.html.haml +8 -0
- data/app/views/comments/_comment.html.haml +46 -0
- data/app/views/comments/_comment_form.haml +29 -0
- data/app/views/comments/_comments.html.haml +3 -0
- data/app/views/contacts/_form.html.haml +34 -0
- data/app/views/contacts/edit.html.haml +1 -0
- data/app/views/contacts/index.html.haml +23 -0
- data/app/views/contacts/new.html.haml +1 -0
- data/app/views/contacts/show.html.haml +26 -0
- data/app/views/dashboard/base/_two_week_time_report.html.haml +13 -0
- data/app/views/dashboard/base/_week_pagination.html.haml +10 -0
- data/app/views/dashboard/base/calendar.html.haml +1 -0
- data/app/views/dashboard/base/calendar.js.erb +3 -0
- data/app/views/dashboard/base/index.html.haml +18 -0
- data/app/views/devise/confirmations/new.html.haml +9 -0
- data/app/views/devise/mailer/confirmation_instructions.html.haml +4 -0
- data/app/views/devise/mailer/reset_password_instructions.html.haml +6 -0
- data/app/views/devise/mailer/unlock_instructions.html.haml +5 -0
- data/app/views/devise/passwords/edit.html.haml +17 -0
- data/app/views/devise/passwords/new.html.haml +12 -0
- data/app/views/devise/registrations/edit.html.haml +36 -0
- data/app/views/devise/registrations/new.html.haml +32 -0
- data/app/views/devise/sessions/new.html.haml +22 -0
- data/app/views/devise/shared/_links.haml +15 -0
- data/app/views/devise/unlocks/new.html.haml +9 -0
- data/app/views/file_attachments/_file_attachment.html.haml +10 -0
- data/app/views/file_attachments/_file_attachment_combined.html.haml +30 -0
- data/app/views/file_attachments/_file_attachments.html.haml +5 -0
- data/app/views/file_attachments/new.html.haml +17 -0
- data/app/views/layouts/application.html.haml +32 -0
- data/app/views/layouts/doorkeeper.html.haml +31 -0
- data/app/views/notifier/daily.text.erb +8 -0
- data/app/views/notifier/work_unit_notification.text.erb +17 -0
- data/app/views/projects/_breadcrumbs.html.haml +5 -0
- data/app/views/projects/_form.html.haml +94 -0
- data/app/views/projects/_pie_chart_metrics.html.haml +4 -0
- data/app/views/projects/_specify.html.haml +11 -0
- data/app/views/projects/_ticket_table.html.haml +36 -0
- data/app/views/projects/edit.html.haml +2 -0
- data/app/views/projects/new.html.haml +2 -0
- data/app/views/projects/show.html.haml +57 -0
- data/app/views/shared/_calendar.html.haml +86 -0
- data/app/views/shared/_data_vault.html.haml +16 -0
- data/app/views/shared/_files_and_comments.html.haml +21 -0
- data/app/views/shared/_flashes.html.haml +10 -0
- data/app/views/shared/_javascripts.html.haml +8 -0
- data/app/views/shared/_menu.html.haml +14 -0
- data/app/views/shared/_user_roles.html.haml +7 -0
- data/app/views/shared/_work_unit_index.html.haml +24 -0
- data/app/views/tickets/_add_ticket.html.haml +27 -0
- data/app/views/tickets/_breadcrumbs.html.haml +8 -0
- data/app/views/tickets/_form.html.haml +40 -0
- data/app/views/tickets/_ticket_detail.html.haml +18 -0
- data/app/views/tickets/edit.html.haml +2 -0
- data/app/views/tickets/modal_new.html.haml +28 -0
- data/app/views/tickets/new.html.haml +1 -0
- data/app/views/tickets/show.html.haml +28 -0
- data/app/views/tickets/ticket_detail.html.haml +18 -0
- data/app/views/users/_change_password_form.haml +13 -0
- data/app/views/users/_user_head.html.haml +7 -0
- data/app/views/users/edit.haml +34 -0
- data/app/views/users/historical_time.html.haml +5 -0
- data/app/views/users/index.html.haml +18 -0
- data/app/views/users/show.html.haml +13 -0
- data/app/views/work_units/_add_work_unit.html.haml +81 -0
- data/app/views/work_units/_breadcrumbs.html.haml +11 -0
- data/app/views/work_units/_dashboard_line.html.haml +6 -0
- data/app/views/work_units/_edit_work_unit.haml +44 -0
- data/app/views/work_units/_shared_form.haml +40 -0
- data/app/views/work_units/edit.html.haml +2 -0
- data/app/views/work_units/index.html.haml +7 -0
- data/app/views/work_units/new.html.haml +6 -0
- data/app/views/work_units/show.html.haml +25 -0
- data/app/workers/daily_notifier_worker.rb +7 -0
- data/app/workers/work_unit_notifier_worker.rb +7 -0
- data/config.ru +7 -0
- data/config/admin_navigation.rb +71 -0
- data/config/admin_reports_navigation.rb +6 -0
- data/config/boot.rb +6 -0
- data/config/client_navigation.rb +64 -0
- data/config/cucumber.yml +8 -0
- data/config/initializers/00_requirements.rb +2 -0
- data/config/initializers/backtrace_silencers.rb +7 -0
- data/config/initializers/devise.rb +144 -0
- data/config/initializers/doorkeeper.rb +32 -0
- data/config/initializers/doorkeeper_monkeypatch.rb +66 -0
- data/config/initializers/github_concern.rb +4 -0
- data/config/initializers/haml.rb +13 -0
- data/config/initializers/inflections.rb +10 -0
- data/config/initializers/load_controller_mixins.rb +1 -0
- data/config/initializers/mime_types.rb +5 -0
- data/config/initializers/paper_clip.rb +1 -0
- data/config/initializers/simple_navigation.rb +1 -0
- data/config/initializers/wrap_parameters.rb +14 -0
- data/config/locales/devise.en.yml +39 -0
- data/config/locales/doorkeeper.en.yml +23 -0
- data/config/locales/en.yml +201 -0
- data/config/locales/faker.en.yml +48 -0
- data/config/navigation.rb +78 -0
- data/config/rackspace_cloudfiles.yml +14 -0
- data/config/routes.rb +113 -0
- data/config/secondary_navigation.rb +65 -0
- data/config/trinidad.yml +4 -0
- data/config/warble.rb +144 -0
- data/db/migrate/20100825165612_create_clients.rb +14 -0
- data/db/migrate/20100825185313_create_projects.rb +14 -0
- data/db/migrate/20100825223943_create_tickets.rb +16 -0
- data/db/migrate/20100902174920_create_work_units.rb +14 -0
- data/db/migrate/20100902190129_add_missing_fields_to_work_units.rb +13 -0
- data/db/migrate/20100904173839_add_guid_to_clients_projects_tickets_and_work_orders.rb +13 -0
- data/db/migrate/20100922181642_create_comments.rb +19 -0
- data/db/migrate/20100927180254_devise_create_users.rb +32 -0
- data/db/migrate/20100927184505_add_details_to_users.rb +13 -0
- data/db/migrate/20100927191329_add_user_to_work_units.rb +9 -0
- data/db/migrate/20100928163356_create_roles.rb +22 -0
- data/db/migrate/20100928203745_create_addresses.rb +19 -0
- data/db/migrate/20100928204544_create_contacts.rb +17 -0
- data/db/migrate/20101007175626_add_lockable_to_users.rb +11 -0
- data/db/migrate/20101020162216_add_paid_at_to_work_units_table.rb +9 -0
- data/db/migrate/20101020162516_add_check_number_to_work_units_table.rb +9 -0
- data/db/migrate/20101020215135_add_paid_field_to_work_units_table.rb +9 -0
- data/db/migrate/20101020215226_add_invoiced_field_to_work_units_table.rb +9 -0
- data/db/migrate/20101020215457_remove_paid_at_from_work_units_table.rb +9 -0
- data/db/migrate/20101020215624_remove_check_number_from_work_units_table.rb +9 -0
- data/db/migrate/20101025161443_add_invoiced_at_to_work_units_table.rb +9 -0
- data/db/migrate/20101026151900_add_initials_to_clients.rb +9 -0
- data/db/migrate/20101029145059_create_file_attachments.rb +18 -0
- data/db/migrate/20101030142615_add_guid_to_users.rb +9 -0
- data/db/migrate/20101102145137_add_paid_at_to_work_units.rb +9 -0
- data/db/migrate/20101112151337_add_active_to_comments.rb +9 -0
- data/db/migrate/20101119172727_add_recieves_email_to_contact.rb +10 -0
- data/db/migrate/20101122225423_projects_users.rb +11 -0
- data/db/migrate/20101129214537_remove_projects_users_table.rb +11 -0
- data/db/migrate/20101130225328_contact_receives_email.rb +9 -0
- data/db/migrate/20101202203051_add_address_to_contacts.rb +19 -0
- data/db/migrate/20101202214746_remove_address_table.rb +17 -0
- data/db/migrate/20101216214304_add_hours_type_to_work_unit.rb +9 -0
- data/db/migrate/20101217152455_add_effective_hours_to_work_units.rb +9 -0
- data/db/migrate/20101228154820_add_overtime_multiplier_to_clients_table.rb +9 -0
- data/db/migrate/20101228154951_add_overtime_multiplier_to_projects_table.rb +9 -0
- data/db/migrate/20101228155122_create_site_settings_table.rb +11 -0
- data/db/migrate/20110107190927_add_site_logo_columns_to_site_settings.rb +15 -0
- data/db/migrate/20110111155513_add_total_yearly_pto_per_user_to_site_settings.rb +9 -0
- data/db/migrate/20110111220015_add_not_valid_to_file_attachment.rb +9 -0
- data/db/migrate/20110125153818_add_fullwidth_to_users.rb +9 -0
- data/db/migrate/20110222162404_add_daily_target_hours_to_users.rb +9 -0
- data/db/migrate/20110310021732_add_client_to_site_settings.rb +9 -0
- data/db/migrate/20110630194044_add_expanded_calendar_to_user.rb +9 -0
- data/db/migrate/20110922175742_add_state_to_tickets.rb +9 -0
- data/db/migrate/20111212193345_add_estimated_hours_to_tickets.rb +5 -0
- data/db/migrate/20111216152557_add_client_boolean_to_user.rb +5 -0
- data/db/migrate/20111220193307_add_repo_and_branch_to_projects_and_ticket.rb +6 -0
- data/db/migrate/20111220193619_create_git_pushes.rb +9 -0
- data/db/migrate/20111220193620_create_git_commits.rb +10 -0
- data/db/migrate/20111220193621_add_user_id_to_git_push.rb +5 -0
- data/db/migrate/20111220193622_create_github_concernable_git_pushes.rb +11 -0
- data/db/migrate/20111227140859_add_token_to_user.rb +7 -0
- data/db/migrate/20120102185406_add_completed_boolean_to_ticket.rb +5 -0
- data/db/migrate/20120104132121_add_completed_to_project.rb +5 -0
- data/db/migrate/20120124184915_modify_project_for_new_git_integration.rb +11 -0
- data/db/migrate/20120125145833_add_rates_to_project.rb +6 -0
- data/db/migrate/20120126151009_create_data_vaults.rb +11 -0
- data/db/migrate/20120126151341_create_versions.rb +18 -0
- data/db/migrate/20120126154403_rename_column_data_to_encrypted_data.rb +8 -0
- data/db/migrate/20120221193022_add_index_to_user_id_on_work_units.rb +5 -0
- data/db/migrate/20120221195345_acts_as_taggable_on_migration.rb +30 -0
- data/db/migrate/20120320212313_remove_timestamps_from_roles_users_table.rb +11 -0
- data/db/migrate/20120710034831_create_doorkeeper_tables.rb +42 -0
- data/db/migrate/20121021122002_add_missing_indices.rb +21 -0
- data/doc/website/favicon.ico +0 -0
- data/doc/website/images/clock_box.png +0 -0
- data/doc/website/images/demo.png +0 -0
- data/doc/website/images/download.png +0 -0
- data/doc/website/images/fork_me.png +0 -0
- data/doc/website/images/lightbox-blank.gif +0 -0
- data/doc/website/images/lightbox-btn-close.gif +0 -0
- data/doc/website/images/lightbox-btn-next.gif +0 -0
- data/doc/website/images/lightbox-btn-prev.gif +0 -0
- data/doc/website/images/lightbox-ico-loading.gif +0 -0
- data/doc/website/images/main_bg.png +0 -0
- data/doc/website/images/nav_bg.png +0 -0
- data/doc/website/images/screen_1.png +0 -0
- data/doc/website/images/screen_2.png +0 -0
- data/doc/website/images/screen_3.png +0 -0
- data/doc/website/images/screen_4.png +0 -0
- data/doc/website/images/screen_5.png +0 -0
- data/doc/website/images/screen_6.png +0 -0
- data/doc/website/images/support.png +0 -0
- data/doc/website/images/thumb_1.png +0 -0
- data/doc/website/images/thumb_2.png +0 -0
- data/doc/website/images/thumb_3.png +0 -0
- data/doc/website/images/thumb_4.png +0 -0
- data/doc/website/images/thumb_5.png +0 -0
- data/doc/website/images/thumb_6.png +0 -0
- data/doc/website/images/xrono_logo.png +0 -0
- data/doc/website/index.html +274 -0
- data/doc/website/javascripts/application.js +18 -0
- data/doc/website/javascripts/greyscalebasic_regular.typeface.js +1 -0
- data/doc/website/javascripts/jquery.lightbox-0.5.min.js +42 -0
- data/doc/website/javascripts/jquery.min.js +32 -0
- data/doc/website/javascripts/jquery.tweet.js +181 -0
- data/doc/website/javascripts/typeface.js +873 -0
- data/doc/website/javascripts/verdana_regular.typeface.js +1 -0
- data/doc/website/stylesheets/jquery.lightbox.css +104 -0
- data/doc/website/stylesheets/jquery.tweet.css +38 -0
- data/doc/website/stylesheets/reset-fonts-grids.css +32 -0
- data/doc/website/stylesheets/screen.css +228 -0
- data/doc/xrono_dash.png +0 -0
- data/doc/xrono_ticket.png +0 -0
- data/features/admin/invoices.feature +37 -0
- data/features/admin/manage_users.feature +17 -0
- data/features/admin/payroll.feature +64 -0
- data/features/admin/roles.feature +9 -0
- data/features/admin/site_settings.feature +19 -0
- data/features/admin/unentered_time_report.feature +38 -0
- data/features/admin/weekly_time_report.feature +14 -0
- data/features/api/v1/clients_controller.feature +58 -0
- data/features/authorization-admin.feature +34 -0
- data/features/authorization-non-admin.feature +38 -0
- data/features/client_login.feature +15 -0
- data/features/collaborative_work_units.feature +112 -0
- data/features/daily_emails.feature +11 -0
- data/features/dashboard.feature +74 -0
- data/features/manage_clients.feature +116 -0
- data/features/manage_comments.feature +30 -0
- data/features/manage_contacts.feature +56 -0
- data/features/manage_file_attachments.feature +51 -0
- data/features/manage_projects.feature +92 -0
- data/features/manage_self.feature +48 -0
- data/features/manage_tickets.feature +74 -0
- data/features/manage_users.feature +76 -0
- data/features/manage_work_units.feature +115 -0
- data/features/mockups/images/asset-tracker-client-show.png +0 -0
- data/features/mockups/images/asset-tracker.png +0 -0
- data/features/mockups/images/ixi - asset tracker v3 homepage - no time entered modal.png +0 -0
- data/features/mockups/images/ixi - asset tracker v3 homepage - schedule on modal.png +0 -0
- data/features/mockups/images/ixi - asset tracker v3 homepage.png +0 -0
- data/features/mockups/ixi - asset tracker v3 homepage - no time entered modal.bmml +194 -0
- data/features/mockups/ixi - asset tracker v3 homepage - schedule on modal.bmml +208 -0
- data/features/mockups/ixi - asset tracker v3 homepage.bmml +172 -0
- data/features/project_assignment.feature +69 -0
- data/features/search_work_units.feature +38 -0
- data/features/step_definitions/calendar_expansion_steps.rb +7 -0
- data/features/step_definitions/client_login_steps.rb +8 -0
- data/features/step_definitions/client_steps.rb +29 -0
- data/features/step_definitions/comment_steps.rb +4 -0
- data/features/step_definitions/contact_steps.rb +22 -0
- data/features/step_definitions/debug_steps.rb +5 -0
- data/features/step_definitions/devise_steps.rb +26 -0
- data/features/step_definitions/email_steps.rb +74 -0
- data/features/step_definitions/file_attachment_steps.rb +8 -0
- data/features/step_definitions/modified_web_steps.rb +25 -0
- data/features/step_definitions/pickle_steps.rb +101 -0
- data/features/step_definitions/project_steps.rb +32 -0
- data/features/step_definitions/search_steps.rb +3 -0
- data/features/step_definitions/ticket_board_steps.rb +39 -0
- data/features/step_definitions/ticket_detail_steps.rb +9 -0
- data/features/step_definitions/ticket_steps.rb +12 -0
- data/features/step_definitions/unentered_time_report_steps.rb +3 -0
- data/features/step_definitions/user_steps.rb +43 -0
- data/features/step_definitions/web_steps.rb +274 -0
- data/features/step_definitions/weekly_time_report_steps.rb +7 -0
- data/features/step_definitions/work_unit_index_steps.rb +8 -0
- data/features/step_definitions/work_unit_steps.rb +39 -0
- data/features/support/email.rb +21 -0
- data/features/support/env.rb +80 -0
- data/features/support/paths.rb +96 -0
- data/features/support/pickle.rb +26 -0
- data/features/support/selectors.rb +51 -0
- data/features/support/xrono.rb +19 -0
- data/features/work_unit_notifier.feature +11 -0
- data/lib/controller_mixins.rb +5 -0
- data/lib/controller_mixins/authorization.rb +15 -0
- data/lib/controller_mixins/contacts.rb +37 -0
- data/lib/controller_mixins/generic.rb +15 -0
- data/lib/controller_mixins/tickets.rb +35 -0
- data/lib/controller_mixins/work_units.rb +13 -0
- data/lib/date_ext.rb +16 -0
- data/lib/guid_referenced.rb +19 -0
- data/lib/tasks/.gitkeep +0 -0
- data/lib/tasks/acts_as_commentable_tasks.rake +4 -0
- data/lib/tasks/cucumber.rake +65 -0
- data/lib/tasks/git_repo_tasks.rake +47 -0
- data/lib/tasks/notifications.rake +8 -0
- data/lib/tasks/paperclip_tasks.rake +79 -0
- data/lib/xrono.rb +1 -0
- data/lib/xrono/engine.rb +45 -0
- data/public/404.html +26 -0
- data/public/422.html +26 -0
- data/public/500.html +26 -0
- data/public/favicon.ico +0 -0
- data/public/favicon.psd +0 -0
- data/public/robots.txt +5 -0
- data/public/stylesheets/.gitkeep +0 -0
- data/public/stylesheets/ie.css +53 -0
- data/public/stylesheets/print.css +57 -0
- data/public/stylesheets/screen.css +182 -0
- data/script/cucumber +10 -0
- data/script/rails +6 -0
- data/spec/blueprints.rb +86 -0
- data/spec/controllers/api/v1/clients_controller_spec.rb +41 -0
- data/spec/controllers/api/v1/projects_controller_spec.rb +54 -0
- data/spec/controllers/api/v1/tickets_controller_spec.rb +122 -0
- data/spec/controllers/api/v1/tokens_controller_spec.rb +52 -0
- data/spec/controllers/client_login/clients_controller_spec.rb +5 -0
- data/spec/controllers/client_login/reports_controller_spec.rb +5 -0
- data/spec/controllers/data_vaults_controller_spec.rb +5 -0
- data/spec/internal/app/controllers/application_controller.rb +5 -0
- data/spec/internal/config/admin_navigation.rb +71 -0
- data/spec/internal/config/database.yml +14 -0
- data/spec/internal/config/database.yml.example +20 -0
- data/spec/internal/config/database.yml.mysql +20 -0
- data/spec/internal/config/database.yml.mysql.jruby +20 -0
- data/spec/internal/config/database.yml.postgres +20 -0
- data/spec/internal/config/database.yml.postgres.jruby +20 -0
- data/spec/internal/config/navigation.rb +80 -0
- data/spec/internal/config/routes.rb +3 -0
- data/spec/internal/config/secondary_navigation.rb +65 -0
- data/spec/internal/db/schema.rb +296 -0
- data/spec/internal/log/.gitignore +1 -0
- data/spec/internal/public/favicon.ico +0 -0
- data/spec/internal/public/system/attachment_files/2/original/tmp.txt +1 -0
- data/spec/internal/public/system/attachment_files/3/original/tmp.txt +1 -0
- data/spec/lib/date_ext_spec.rb +40 -0
- data/spec/mailers/notifier_spec.rb +9 -0
- data/spec/models/client_spec.rb +167 -0
- data/spec/models/contact_spec.rb +29 -0
- data/spec/models/data_vault_spec.rb +5 -0
- data/spec/models/project_spec.rb +115 -0
- data/spec/models/ticket_spec.rb +223 -0
- data/spec/models/user_spec.rb +258 -0
- data/spec/models/work_unit_spec.rb +467 -0
- data/spec/spec_helper.rb +44 -0
- data/spec/support/xrono/macros.rb +15 -0
- data/vendor/plugins/.gitkeep +0 -0
- data/xrono.gemspec +50 -0
- metadata +1209 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
Feature: Client Management
|
|
2
|
+
As a user
|
|
3
|
+
I should be able to manage clients
|
|
4
|
+
|
|
5
|
+
Scenario: List clients as non admin
|
|
6
|
+
Given I am an authenticated user
|
|
7
|
+
And a client "client1" exists with name: "client1"
|
|
8
|
+
And a client "client2" exists with name: "client2"
|
|
9
|
+
And a project "project1" exists with client: client "client1"
|
|
10
|
+
And a project "project2" exists with client: client "client2"
|
|
11
|
+
And I am assigned to the project
|
|
12
|
+
When I go to the clients page
|
|
13
|
+
Then I should see "client2" within ".clients"
|
|
14
|
+
And I should not see a link with text "New Client"
|
|
15
|
+
|
|
16
|
+
Scenario: List clients as non admin
|
|
17
|
+
Given I am an authenticated user with an admin role
|
|
18
|
+
Given the following clients:
|
|
19
|
+
|name|status|
|
|
20
|
+
|name 1|Active|
|
|
21
|
+
|name 2|Active|
|
|
22
|
+
|name 3|Active|
|
|
23
|
+
|name 4|Active|
|
|
24
|
+
When I go to the clients page
|
|
25
|
+
Then I should see the following clients:
|
|
26
|
+
|Name |Initials |Hours|Uninvoiced|Status|Recent Users|Edit|
|
|
27
|
+
|name 1| |0.0 |0.0 |Active| |Edit|
|
|
28
|
+
|name 2| |0.0 |0.0 |Active| |Edit|
|
|
29
|
+
|name 3| |0.0 |0.0 |Active| |Edit|
|
|
30
|
+
|name 4| |0.0 |0.0 |Active| |Edit|
|
|
31
|
+
And I should see a link with text "New Client"
|
|
32
|
+
|
|
33
|
+
Scenario: View a client as a non admin
|
|
34
|
+
Given I am an authenticated user
|
|
35
|
+
And a client "test client" exists
|
|
36
|
+
And a project "test project" exists with client: client "test client", name: "test project"
|
|
37
|
+
And I am assigned to the project
|
|
38
|
+
When I am on the client's page
|
|
39
|
+
Then I should see "Projects"
|
|
40
|
+
And I should not see a link with text "Edit" within "#client_details"
|
|
41
|
+
|
|
42
|
+
Scenario: View a client as an admin
|
|
43
|
+
Given I am an authenticated user with an admin role
|
|
44
|
+
And a client "test client" exists
|
|
45
|
+
When I am on the client's page
|
|
46
|
+
Then I should see "Projects"
|
|
47
|
+
And I should see a link with text "Edit"
|
|
48
|
+
|
|
49
|
+
Scenario: View inactive clients as a non admin
|
|
50
|
+
Given I am an authenticated user
|
|
51
|
+
When I am on the inactive clients page
|
|
52
|
+
Then I should see "Access denied."
|
|
53
|
+
|
|
54
|
+
Scenario: View inactive clients as a non admin
|
|
55
|
+
Given I am an authenticated user with an admin role
|
|
56
|
+
When I am on the inactive clients page
|
|
57
|
+
Then I should see "All Inactive Clients"
|
|
58
|
+
|
|
59
|
+
Scenario: View suspended clients as a non admin
|
|
60
|
+
Given I am an authenticated user
|
|
61
|
+
When I am on the suspended clients page
|
|
62
|
+
Then I should see "Access denied."
|
|
63
|
+
|
|
64
|
+
Scenario: View suspended clients as a non admin
|
|
65
|
+
Given I am an authenticated user with an admin role
|
|
66
|
+
When I am on the suspended clients page
|
|
67
|
+
Then I should see "All Suspended Clients"
|
|
68
|
+
|
|
69
|
+
Scenario: Edit a client
|
|
70
|
+
Given I am an authenticated user with an admin role
|
|
71
|
+
And a client "test client2" exists with name: "test client2", initials: "TC2", status: "Active"
|
|
72
|
+
When I am on the client's edit page
|
|
73
|
+
Then the "client_name" field under "body" should contain "test client2"
|
|
74
|
+
And the "client_initials" field under "body" should contain "TC2"
|
|
75
|
+
And the "client_status" field under "body" should contain "Active"
|
|
76
|
+
And I select "Inactive" from "Status"
|
|
77
|
+
And I press "Update Client"
|
|
78
|
+
And I should see "test client2"
|
|
79
|
+
And I should see "Inactive"
|
|
80
|
+
|
|
81
|
+
Scenario: Edit a client - invalid
|
|
82
|
+
Given I am an authenticated user with an admin role
|
|
83
|
+
And a client "test client2" exists with name: "test client2", initials: "TC2", status: "Active"
|
|
84
|
+
When I am on the client's edit page
|
|
85
|
+
Then the "client_name" field under "body" should contain "test client2"
|
|
86
|
+
And the "client_initials" field under "body" should contain "TC2"
|
|
87
|
+
And the "client_status" field under "body" should contain "Active"
|
|
88
|
+
And I select "Inactive" from "Status"
|
|
89
|
+
And I fill in "Name" with ""
|
|
90
|
+
And I press "Update Client"
|
|
91
|
+
Then I should see "There was a problem saving the client."
|
|
92
|
+
|
|
93
|
+
Scenario: Register new client as a non admin
|
|
94
|
+
Given I am an authenticated user
|
|
95
|
+
And I am on the new client page
|
|
96
|
+
Then I should see "Access denied."
|
|
97
|
+
|
|
98
|
+
Scenario: Register new client as an admin
|
|
99
|
+
Given I am an authenticated user with an admin role
|
|
100
|
+
And I am on the new client page
|
|
101
|
+
When I fill in "Name" with "name 1"
|
|
102
|
+
And I select "Active" from "Status"
|
|
103
|
+
And I press "Create"
|
|
104
|
+
Then I should see "name 1"
|
|
105
|
+
|
|
106
|
+
Scenario: Register new client as an admin - invalid
|
|
107
|
+
Given I am an authenticated user with an admin role
|
|
108
|
+
And I am on the new client page
|
|
109
|
+
And I press "Create"
|
|
110
|
+
Then I should see "There was a problem saving the new client."
|
|
111
|
+
|
|
112
|
+
Scenario: Register new client - the form
|
|
113
|
+
Given I am an authenticated user with an admin role
|
|
114
|
+
When I go to the new client page
|
|
115
|
+
Then I should see a link with text "Cancel" within the actions list
|
|
116
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
Feature: Comment Management
|
|
2
|
+
As a user
|
|
3
|
+
I should be able to view and make comments
|
|
4
|
+
|
|
5
|
+
Scenario: List and add comments
|
|
6
|
+
Given I am an authenticated user with an admin role
|
|
7
|
+
And a client "test client" exists
|
|
8
|
+
When I am on the client's page
|
|
9
|
+
And I follow "Add Comment"
|
|
10
|
+
And I fill in the following:
|
|
11
|
+
| comment_comment | This is a test comment! |
|
|
12
|
+
And I press "Post Comment"
|
|
13
|
+
Then I should see "This is a test comment!"
|
|
14
|
+
When I press "Hide Comment"
|
|
15
|
+
Then I should see "The comment has been hidden."
|
|
16
|
+
When I press "Unhide Comment"
|
|
17
|
+
Then I should see "The comment is no longer hidden."
|
|
18
|
+
|
|
19
|
+
Scenario: Delete a comment
|
|
20
|
+
Given I am an authenticated user with an admin role
|
|
21
|
+
And a client "test client" exists
|
|
22
|
+
When I am on the client's page
|
|
23
|
+
And I follow "Add Comment"
|
|
24
|
+
And I fill in the following:
|
|
25
|
+
| comment_comment | This is a test comment! |
|
|
26
|
+
And I press "Post Comment"
|
|
27
|
+
Then I should see "This is a test comment!"
|
|
28
|
+
When I press "Delete"
|
|
29
|
+
Then I should see "The comment was deleted"
|
|
30
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
Feature: Contact Management
|
|
2
|
+
As a user
|
|
3
|
+
I should be able to manage contacts
|
|
4
|
+
|
|
5
|
+
Scenario: List contacts as admin
|
|
6
|
+
Given I am an authenticated user with an admin role
|
|
7
|
+
And a client "test client" exists
|
|
8
|
+
And a contact "test contact" exists with first_name: "first1", last_name: "last1", email_address: "first1@example.com", phone_number: "555-555-5555", client: client "test client"
|
|
9
|
+
When I am on the client's contacts page
|
|
10
|
+
Then I should see a link with text "New Contact"
|
|
11
|
+
And I should see a link with text "first1" within ".clients"
|
|
12
|
+
And I should see "last1" within ".clients"
|
|
13
|
+
And I should see "first1@example.com" within ".clients"
|
|
14
|
+
And I should see "555-555-5555" within ".clients"
|
|
15
|
+
And I should see a link with text "Edit" within ".clients"
|
|
16
|
+
|
|
17
|
+
Scenario: Create a new contact
|
|
18
|
+
Given I am an authenticated user with an admin role
|
|
19
|
+
And a client "test client" exists
|
|
20
|
+
Given I am on the client's page
|
|
21
|
+
When I follow "View Contacts"
|
|
22
|
+
Then I follow "New Contact"
|
|
23
|
+
When I fill in the following:
|
|
24
|
+
| First name | firstname |
|
|
25
|
+
| Last name | lastname |
|
|
26
|
+
| Email address | Nice@guy.com |
|
|
27
|
+
| Phone number | 555-555-5555 |
|
|
28
|
+
And I press "Create Contact"
|
|
29
|
+
Then I should see "Contact created successfully"
|
|
30
|
+
And I should see the following contacts:
|
|
31
|
+
| First Name | Last Name | Email Address | Phone Number |
|
|
32
|
+
| firstname | lastname | Nice@guy.com | 555-555-5555 |
|
|
33
|
+
|
|
34
|
+
Scenario: Edit an existing contact
|
|
35
|
+
Given I am an authenticated user with an admin role
|
|
36
|
+
And a client "test client" exists
|
|
37
|
+
And a contact "test contact" exists with first_name: "first1", last_name: "last1", email_address: "first1@example.com", phone_number: "555-555-5555", client: client "test client"
|
|
38
|
+
When I go to the client's page
|
|
39
|
+
And I follow "View Contacts"
|
|
40
|
+
And I follow "first1"
|
|
41
|
+
And I follow "Edit Contact"
|
|
42
|
+
And I check "contact_receives_email"
|
|
43
|
+
And press "Update Contact"
|
|
44
|
+
Then I should see "Contact updated successfully"
|
|
45
|
+
And I should see "Yes"
|
|
46
|
+
|
|
47
|
+
Scenario: Delete an existing contact
|
|
48
|
+
Given I am an authenticated user with an admin role
|
|
49
|
+
And a client "test client" exists
|
|
50
|
+
And a contact "test contact" exists with first_name: "first1", last_name: "last1", email_address: "first1@example.com", phone_number: "555-555-5555", client: client "test client"
|
|
51
|
+
When I am on the client's page
|
|
52
|
+
And I follow "View Contacts"
|
|
53
|
+
And I follow "first1"
|
|
54
|
+
And I press "Delete Contact"
|
|
55
|
+
Then I should see "Contact was successfully deleted"
|
|
56
|
+
And I should not see "first1"
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
Feature: File Attachment Management
|
|
2
|
+
As a user
|
|
3
|
+
I should be able to view, add, and hide file attachments
|
|
4
|
+
|
|
5
|
+
Scenario: Add file attachments to client
|
|
6
|
+
Given I am an authenticated user with an admin role
|
|
7
|
+
And a client exists
|
|
8
|
+
When I go to the client's page
|
|
9
|
+
And I follow "Add File Attachment"
|
|
10
|
+
And I attach a file
|
|
11
|
+
And I press "Submit"
|
|
12
|
+
Then I should be on the client's page
|
|
13
|
+
And I should see "File Attachment created successfully" within ".alert-message"
|
|
14
|
+
|
|
15
|
+
Scenario: Add file attachments to project
|
|
16
|
+
Given I am an authenticated user with an admin role
|
|
17
|
+
And a project exists
|
|
18
|
+
When I go to the project's page
|
|
19
|
+
And I follow "Add File Attachment"
|
|
20
|
+
And I attach a file
|
|
21
|
+
And I press "Submit"
|
|
22
|
+
Then I should be on the project's page
|
|
23
|
+
And I should see "File Attachment created successfully" within ".alert-message"
|
|
24
|
+
|
|
25
|
+
Scenario: Add file attachments to ticket
|
|
26
|
+
Given I am an authenticated user with an admin role
|
|
27
|
+
And a ticket exists
|
|
28
|
+
When I go to the ticket's page
|
|
29
|
+
And I follow "Add File Attachment"
|
|
30
|
+
And I attach a file
|
|
31
|
+
And I press "Submit"
|
|
32
|
+
Then I should be on the ticket's page
|
|
33
|
+
And I should see "File Attachment created successfully" within ".alert-message"
|
|
34
|
+
|
|
35
|
+
Scenario: Hide File Attachment
|
|
36
|
+
Given I am an authenticated user with an admin role
|
|
37
|
+
And a client exists
|
|
38
|
+
When I go to the client's page
|
|
39
|
+
And I follow "Add File Attachment"
|
|
40
|
+
And I attach a file
|
|
41
|
+
And I press "Submit"
|
|
42
|
+
And I press "Mark as invalid"
|
|
43
|
+
Then I should see "Attachment was marked as invalid"
|
|
44
|
+
|
|
45
|
+
Scenario: Add file attachment unsuccessfully
|
|
46
|
+
Given I am an authenticated user with an admin role
|
|
47
|
+
And a project exists
|
|
48
|
+
When I go to the project's page
|
|
49
|
+
And I follow "Add File Attachment"
|
|
50
|
+
And I press "Submit"
|
|
51
|
+
And I should see "There was a problem saving the image." within ".alert-message"
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
Feature: Manage projects
|
|
2
|
+
In order to manage projects
|
|
3
|
+
Visitor
|
|
4
|
+
wants a nice management interface
|
|
5
|
+
|
|
6
|
+
Scenario: List projects
|
|
7
|
+
Given I am an authenticated user
|
|
8
|
+
Given a client "test client" exists
|
|
9
|
+
And a project exists with name: "test project", client: client "test client"
|
|
10
|
+
And I am assigned to the project
|
|
11
|
+
When I am on the client's page
|
|
12
|
+
Then I should see "test project"
|
|
13
|
+
|
|
14
|
+
Scenario: View a project
|
|
15
|
+
Given I am an authenticated user
|
|
16
|
+
Given a client "test client" exists with name: "test client"
|
|
17
|
+
And a project exists with name: "test project", client: client "test client"
|
|
18
|
+
And I am assigned to the project
|
|
19
|
+
When I am on the client's page
|
|
20
|
+
And I follow "test project"
|
|
21
|
+
Then I should see a link with text "Client: test client"
|
|
22
|
+
Then I should see a link with text "Edit"
|
|
23
|
+
|
|
24
|
+
Scenario: Edit a project
|
|
25
|
+
Given I am an authenticated user
|
|
26
|
+
Given a client "test client" exists with name: "test client"
|
|
27
|
+
And a project exists with name: "test project", client: client "test client"
|
|
28
|
+
And I am assigned to the project
|
|
29
|
+
When I am on the client's page
|
|
30
|
+
And I follow "test project"
|
|
31
|
+
And I follow the edit project link
|
|
32
|
+
And I fill in "Name" with "project 2"
|
|
33
|
+
And I press "Update"
|
|
34
|
+
Then I should see "project 2"
|
|
35
|
+
|
|
36
|
+
Scenario: Tagging a project
|
|
37
|
+
Given I am an authenticated user
|
|
38
|
+
Given a client "test client" exists with name: "test client"
|
|
39
|
+
And a project exists with name: "tagged project", client: client "test client"
|
|
40
|
+
And I am assigned to the project
|
|
41
|
+
When I am on the client's page
|
|
42
|
+
And I follow "tagged project"
|
|
43
|
+
And I follow the edit project link
|
|
44
|
+
And I fill in "Name" with "the tagged project"
|
|
45
|
+
And I fill in "project_tag_list" with "the_tag"
|
|
46
|
+
And I press "Update"
|
|
47
|
+
And I follow the edit project link
|
|
48
|
+
Then I should see "the_tag"
|
|
49
|
+
|
|
50
|
+
Scenario: Edit a project - invalid
|
|
51
|
+
Given I am an authenticated user with an admin role
|
|
52
|
+
Given a client "test client2" exists
|
|
53
|
+
And a project exists with name: "test project", client: client "test client2"
|
|
54
|
+
And I am assigned to the project
|
|
55
|
+
When I am on the client's page
|
|
56
|
+
And I follow "test project"
|
|
57
|
+
And I follow the edit project link
|
|
58
|
+
And I fill in "Name" with ""
|
|
59
|
+
And I press "Update"
|
|
60
|
+
Then I should see "There was a problem saving the project."
|
|
61
|
+
|
|
62
|
+
Scenario: Register new project
|
|
63
|
+
Given I am an authenticated user with an admin role
|
|
64
|
+
Given a client "test client" exists
|
|
65
|
+
Given I am on the client's page
|
|
66
|
+
And I follow "New Project"
|
|
67
|
+
When I fill in "Name" with "name 1"
|
|
68
|
+
Then I should see a link with text "Cancel" within the actions list
|
|
69
|
+
And I press "Create"
|
|
70
|
+
Then I should see "name 1"
|
|
71
|
+
|
|
72
|
+
Scenario: Register new project - invalid
|
|
73
|
+
Given I am an authenticated user with an admin role
|
|
74
|
+
Given a client "test client" exists
|
|
75
|
+
Given I am on the client's page
|
|
76
|
+
And I follow "New Project"
|
|
77
|
+
When I fill in "Name" with ""
|
|
78
|
+
Then I should see a link with text "Cancel" within the actions list
|
|
79
|
+
And I press "Create"
|
|
80
|
+
Then I should see "There was a problem saving the new project."
|
|
81
|
+
|
|
82
|
+
@wip
|
|
83
|
+
Scenario: User cannot see projects without access
|
|
84
|
+
Given I am an authenticated user with a client role
|
|
85
|
+
And a client "test client2" exists with name: "test client2", initials: "TC2", status: "Active"
|
|
86
|
+
And a project exists with name: "test project1", client: client "test client2"
|
|
87
|
+
And I am assigned to the project
|
|
88
|
+
And a project exists with name: "test project2", client: client "test client2"
|
|
89
|
+
When I am on the clients client_login_client page
|
|
90
|
+
Then I should see "test project1"
|
|
91
|
+
Then I should not see "test project2"
|
|
92
|
+
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
Feature: Self administration
|
|
2
|
+
As a user
|
|
3
|
+
I should be able to change my password
|
|
4
|
+
|
|
5
|
+
@wip
|
|
6
|
+
Scenario: Change password successfully
|
|
7
|
+
Given I am an authenticated user "bobby@example.com" and password "changeme"
|
|
8
|
+
When I go to the home page
|
|
9
|
+
And I follow "Users"
|
|
10
|
+
And I follow "Clark D Kent"
|
|
11
|
+
Then I follow "Change Password"
|
|
12
|
+
When I fill in "Password" with "newpass"
|
|
13
|
+
And I fill in "Password Confirmation" with "newpass"
|
|
14
|
+
And I press "Update"
|
|
15
|
+
Then I should see "Successfully updated password"
|
|
16
|
+
|
|
17
|
+
@wip
|
|
18
|
+
Scenario: Change password failure
|
|
19
|
+
When I go to the home page
|
|
20
|
+
And I follow "Users"
|
|
21
|
+
And I follow "Clark D Kent"
|
|
22
|
+
And I follow "Change Password"
|
|
23
|
+
When I fill in "Password" with "newpass"
|
|
24
|
+
And I fill in "Password Confirmation" with "newpas"
|
|
25
|
+
And I press "Update"
|
|
26
|
+
Then I should see "Error changing password"
|
|
27
|
+
|
|
28
|
+
@javascript
|
|
29
|
+
Scenario: Change expanded calendar default preference
|
|
30
|
+
Given I am an authenticated user with an admin role
|
|
31
|
+
And a client "test client" exists with name: "test client", initials: "TTC"
|
|
32
|
+
And a project "test project" exists with name: "test project", client: client "test client"
|
|
33
|
+
And a ticket "test ticket" exists with project: project "test project", name: "test ticket"
|
|
34
|
+
And I am assigned to the project
|
|
35
|
+
And I visit /
|
|
36
|
+
When I select "test client" from "work_unit_client_id"
|
|
37
|
+
And I select "test project" from "work_unit_project_id"
|
|
38
|
+
And I select "test ticket" from "work_unit_ticket_id"
|
|
39
|
+
And I select "Overtime" from "hours_type"
|
|
40
|
+
And I fill in "work_unit_hours" with "2"
|
|
41
|
+
And I fill in "work_unit_description" with "New description"
|
|
42
|
+
And I press "Create Work Unit"
|
|
43
|
+
Then I should see description
|
|
44
|
+
When I am on my edit profile page
|
|
45
|
+
Then the "Expanded Calendar" checkbox should not be checked
|
|
46
|
+
When I check "Expanded Calendar"
|
|
47
|
+
And I press "Update"
|
|
48
|
+
Then I should see description.expand
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
Feature: Manage tickets
|
|
2
|
+
In order to manage tickets
|
|
3
|
+
Visitor
|
|
4
|
+
wants a nice management interface
|
|
5
|
+
|
|
6
|
+
Scenario: List tickets
|
|
7
|
+
Given I am an authenticated user with an admin role
|
|
8
|
+
Given a client "test client" exists
|
|
9
|
+
And a project "test project" exists with name: "test project", client: client "test client"
|
|
10
|
+
And a ticket exists with project: project "test project", name: "test ticket"
|
|
11
|
+
When I am on the ticket's page
|
|
12
|
+
Then I should see "test ticket"
|
|
13
|
+
|
|
14
|
+
Scenario: View a ticket
|
|
15
|
+
Given I am an authenticated user with an admin role
|
|
16
|
+
Given a client "test client" exists with name: "test client"
|
|
17
|
+
And a project "test project" exists with name: "test project", client: client "test client"
|
|
18
|
+
And a ticket exists with project: project "test project", name: "test ticket"
|
|
19
|
+
When I am on the ticket's page
|
|
20
|
+
Then I should see a link with text "Project: test project" within the breadcrumbs
|
|
21
|
+
Then I should see a link with text "Client: test client" within the breadcrumbs
|
|
22
|
+
Then I should see "Edit Ticket" within the subnav
|
|
23
|
+
|
|
24
|
+
Scenario: Edit a ticket
|
|
25
|
+
Given I am an authenticated user with an admin role
|
|
26
|
+
Given a client "test client" exists
|
|
27
|
+
And a project "test project" exists with name: "test project", client: client "test client"
|
|
28
|
+
And a ticket exists with project: project "test project", name: "test ticket"
|
|
29
|
+
When I am on the ticket's edit page
|
|
30
|
+
When I fill in "Name" with "test ticket2"
|
|
31
|
+
And I press "Update"
|
|
32
|
+
Then I should see "test ticket2"
|
|
33
|
+
|
|
34
|
+
Scenario: Edit a ticket unsuccessfully
|
|
35
|
+
Given I am an authenticated user with an admin role
|
|
36
|
+
Given a client "test client" exists
|
|
37
|
+
And a project "test project" exists with name: "test project", client: client "test client"
|
|
38
|
+
And a ticket exists with project: project "test project", name: "test ticket"
|
|
39
|
+
When I am on the ticket's edit page
|
|
40
|
+
When I fill in "Name" with ""
|
|
41
|
+
When I fill in "Description" with ""
|
|
42
|
+
And I press "Update"
|
|
43
|
+
Then I should see "There was a problem creating the ticket"
|
|
44
|
+
|
|
45
|
+
Scenario: Register new ticket
|
|
46
|
+
Given I am an authenticated user with an admin role
|
|
47
|
+
Given a client "test client" exists
|
|
48
|
+
And a project exists with name: "test project", client: client "test client"
|
|
49
|
+
And I am assigned to the project
|
|
50
|
+
And I am on the project's page
|
|
51
|
+
And I follow "New Ticket"
|
|
52
|
+
When I fill in "Name" with "name 1"
|
|
53
|
+
And I fill in "Estimated hours" with "3"
|
|
54
|
+
And I press "Create"
|
|
55
|
+
Then I should see "name 1"
|
|
56
|
+
|
|
57
|
+
@wip
|
|
58
|
+
Scenario: Register new ticket
|
|
59
|
+
Given I am an authenticated user with an admin role
|
|
60
|
+
And a client exists with name: "New client"
|
|
61
|
+
And a project exists with client: client, name: "New project"
|
|
62
|
+
When I visit /
|
|
63
|
+
And I select "New client" from "ticket_client_id"
|
|
64
|
+
And I select "New project" from "ticket_project_id"
|
|
65
|
+
And I fill in "ticket_name" with "New ticket"
|
|
66
|
+
And I fill in "ticket_description" with "New description"
|
|
67
|
+
When I press "ticket_submit"
|
|
68
|
+
Then I should see "Ticket created successfully" within ".alert-message"
|
|
69
|
+
When I go to the project's page
|
|
70
|
+
Then I should see "New ticket" within "table"
|
|
71
|
+
|
|
72
|
+
Scenario: Client can add a ticket to an existing project
|
|
73
|
+
Given I am an authenticated client on an existing project page
|
|
74
|
+
Then I should be able to create a new ticket
|