From e28a92e28c46f0784d3208060e4ec9e459ccc685 Mon Sep 17 00:00:00 2001 From: Michael Gurley Date: Tue, 15 Aug 2017 12:21:46 -0400 Subject: [PATCH] references #88 Allow historical status dates to be updated as well as specifying a date. --- .../disburser_requests_controller.rb | 10 +- app/models/disburser_request.rb | 8 +- app/models/disburser_request_status.rb | 5 +- app/policies/disburser_request_policy.rb | 13 ++ .../_status_history.html.haml | 112 +++++++----- app/views/disburser_requests/edit.html.haml | 2 +- .../edit_admin_status.html.haml | 2 +- .../edit_data_status.html.haml | 53 +++--- .../edit_specimen_status.html.haml | 61 ++++--- spec/features/disburser_requests_spec.rb | 166 +++++++++++++++--- spec/features/repositories_spec.rb | 4 + 11 files changed, 301 insertions(+), 135 deletions(-) diff --git a/app/controllers/disburser_requests_controller.rb b/app/controllers/disburser_requests_controller.rb index b578a5c..746f18c 100644 --- a/app/controllers/disburser_requests_controller.rb +++ b/app/controllers/disburser_requests_controller.rb @@ -92,8 +92,6 @@ def create flash[:success] = 'You have successfully created a repository request.' redirect_to disburser_requests_url else - Rails.logger.info("here we go") - Rails.logger.info("#{@disburser_request.errors.full_messages}") flash.now[:alert] = 'Failed to create repository request.' render action: 'new' end @@ -162,6 +160,7 @@ def data_status flash[:success] = 'You have successfully updated the status of a repository request.' redirect_to data_coordinator_disburser_requests_url else + @disburser_request.data_status_status_at = DateTime.now.to_s(:date) flash.now[:alert] = 'Failed to update the status of a repository request.' render action: 'edit_data_status' end @@ -175,6 +174,7 @@ def specimen_status flash[:success] = 'You have successfully updated the status of a repository request.' redirect_to specimen_coordinator_disburser_requests_url else + @disburser_request.specimen_status_status_at = DateTime.now.to_s(:date) flash.now[:alert] = 'Failed to update the status of a repository request.' render action: 'edit_specimen_status' end @@ -193,7 +193,9 @@ def admin_status flash[:success] = 'You have successfully updated the status of a repository request.' redirect_to admin_disburser_requests_url else - puts 'love the booch' + @disburser_request.status_at = DateTime.now.to_s(:date) + @disburser_request.data_status_status_at = DateTime.now.to_s(:date) + @disburser_request.specimen_status_status_at = DateTime.now.to_s(:date) flash.now[:alert] = 'Failed to update the status of a repository request.' render action: 'edit_admin_status' end @@ -222,7 +224,7 @@ def load_specimen_types end def disburser_request_params - params.require(:disburser_request).permit(:status_at, :data_status_status_at, :specimen_status_status_at, :data_status_comments, :specimen_status_comments, :status_comments, :status, :data_status, :specimen_status, :title, :investigator, :irb_number, :feasibility, :cohort_criteria, :data_for_cohort, :methods_justifications, :methods_justifications_cache, :remove_methods_justifications, :custom_request_form, :custom_request_form_cache, :remove_custom_request_form, :supporting_document, :supporting_document_cache, :remove_supporting_document, disburser_request_details_attributes: [:disburser_request_id, :id, :specimen_type_id, :quantity, :volume, :comments, :_destroy]) + params.require(:disburser_request).permit(:status_at, :data_status_status_at, :specimen_status_status_at, :data_status_comments, :specimen_status_comments, :status_comments, :status, :data_status, :specimen_status, :title, :investigator, :irb_number, :feasibility, :cohort_criteria, :data_for_cohort, :methods_justifications, :methods_justifications_cache, :remove_methods_justifications, :custom_request_form, :custom_request_form_cache, :remove_custom_request_form, :supporting_document, :supporting_document_cache, :remove_supporting_document, disburser_request_details_attributes: [:disburser_request_id, :id, :specimen_type_id, :quantity, :volume, :comments, :_destroy], disburser_request_statuses_attributes: [:disburser_request_id, :id, :status_at]) end def load_repository diff --git a/app/models/disburser_request.rb b/app/models/disburser_request.rb index e235555..e58ec7f 100644 --- a/app/models/disburser_request.rb +++ b/app/models/disburser_request.rb @@ -3,9 +3,14 @@ class DisburserRequest < ApplicationRecord belongs_to :repository belongs_to :submitter, class_name: 'User', foreign_key: :submitter_id has_many :disburser_request_details - has_many :disburser_request_statuses + has_many :disburser_request_statuses, -> { order(status_at: :asc) } do + def by_status_type(status_type) + self.select { |disburser_request_status| disburser_request_status.status_type == status_type } + end + end has_many :disburser_request_votes accepts_nested_attributes_for :disburser_request_details, reject_if: :all_blank, allow_destroy: true + accepts_nested_attributes_for :disburser_request_statuses, allow_destroy: false validates_presence_of :investigator, :title, :specimen_status, :data_status, :status validates_presence_of :methods_justifications, if: Proc.new { |disburser_reqeust| !disburser_reqeust.use_custom_request_form } validates_presence_of :cohort_criteria, if: Proc.new { |disburser_reqeust| !disburser_reqeust.use_custom_request_form } @@ -13,6 +18,7 @@ class DisburserRequest < ApplicationRecord validates_presence_of :irb_number, if: Proc.new { |disburser_reqeust| !disburser_reqeust.feasibility } validates_presence_of :custom_request_form, if: Proc.new { |disburser_reqeust| disburser_reqeust.use_custom_request_form } validates_associated :disburser_request_details + validates_associated :disburser_request_statuses mount_uploader :methods_justifications, MethodsJustificationsUploader mount_uploader :custom_request_form, DisburserRequestCustomRequestFormUploader diff --git a/app/models/disburser_request_status.rb b/app/models/disburser_request_status.rb index d0d3a27..204f047 100644 --- a/app/models/disburser_request_status.rb +++ b/app/models/disburser_request_status.rb @@ -2,6 +2,7 @@ class DisburserRequestStatus < ApplicationRecord has_paper_trail belongs_to :disburser_request, required: false belongs_to :user + validates_presence_of :status_at after_create :send_email_notificaitons @@ -10,10 +11,6 @@ class DisburserRequestStatus < ApplicationRecord DISBURSER_REQUEST_STATUS_TYPE_SPECIMEN_STATUS = 'specimen_status' DISBURSER_REQUEST_STATUS_TYPES = [DISBURSER_REQUEST_STATUS_TYPE_STATUS, DISBURSER_REQUEST_STATUS_TYPE_DATA_STATUS, DISBURSER_REQUEST_STATUS_TYPE_SPECIMEN_STATUS] - scope :by_status_type, (lambda do |status_type| - where(status_type: status_type) - end) - def send_email_notificaitons if !Rails.env.test? case self.status_type diff --git a/app/policies/disburser_request_policy.rb b/app/policies/disburser_request_policy.rb index 804c835..b5bd142 100644 --- a/app/policies/disburser_request_policy.rb +++ b/app/policies/disburser_request_policy.rb @@ -31,6 +31,19 @@ def download_file? user.system_administrator || record.repository.repository_administrator?(user) || record.mine?(user) || record.repository.repository_coordinator?(user) || record.repository.committee_member?(user) end + def edit_status_history? + user.system_administrator || record.repository.repository_administrator?(user) + end + + def edit_specimen_status_history? + record.repository.specimen_coordinator?(user) ||user.system_administrator || record.repository.repository_administrator?(user) + end + + def edit_data_status_history? + record.repository.data_coordinator?(user) ||user.system_administrator || record.repository.repository_administrator?(user) + end + + def edit_admin_status? user.system_administrator || record.repository.repository_administrator?(user) end diff --git a/app/views/disburser_requests/_status_history.html.haml b/app/views/disburser_requests/_status_history.html.haml index e26fdf0..8a6e976 100644 --- a/app/views/disburser_requests/_status_history.html.haml +++ b/app/views/disburser_requests/_status_history.html.haml @@ -1,5 +1,5 @@ .status_history{ class: "large-#{width} columns" } - - disburser_request_statuses = @disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS).order('created_at ASC') + - disburser_request_statuses = @disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS) .statuses %b Status History @@ -10,27 +10,33 @@ %table.hack_stack %thead %tr - %th.status + %th.status{ width: 200 } Status - %th.date + %th.date{ width: 200 } Date - %th.user + %th.user{ width: 200 } User - %th.comments + %th.comments{ width: 200 } Comments %tbody - - disburser_request_statuses.each do |disburser_request_status| - = content_tag_for(:tr, disburser_request_status) do - %td.status - = disburser_request_status.status - %td.date - = disburser_request_status.status_at.to_s(:date) - %td.user - = disburser_request_status.user.full_name - %td.comments - = disburser_request_status.comments - - - disburser_request_statuses = @disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_DATA_STATUS).order('created_at ASC') + = f.fields_for :disburser_request_statuses do |disburser_request_status| + - if disburser_request_status.object.status_type == DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS + = content_tag_for(:tr, disburser_request_status.object) do + %td.status + = disburser_request_status.object.status + %td.date + - if policy(@disburser_request).edit_status_history? && allow_edit + = disburser_request_status.text_field :status_at, class: 'datepicker status_at', value: format_date(disburser_request_status.object.status_at), placeholder: 'Date' + = disburser_request_status.hidden_field :id + - if validation_errors?(disburser_request_status.object, :status_at) + %p.error= format_validation_errors(disburser_request_status.object, :status_at) + - else + = format_date(disburser_request_status.object.status_at) + %td.user + = disburser_request_status.object.user.full_name + %td.comments + = disburser_request_status.object.comments + - disburser_request_statuses = @disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_DATA_STATUS) .data_statuses %b Data Status History @@ -41,27 +47,34 @@ %table.hack_stack %thead %tr - %th.status + %th.status{ width: 200 } Status - %th.date + %th.date{ width: 200 } Date - %th.user + %th.user{ width: 200 } User - %th.comments + %th.comments{ width: 200 } Comments %tbody - - disburser_request_statuses.each do |disburser_request_status| - = content_tag_for(:tr, disburser_request_status) do - %td.status - = disburser_request_status.status - %td.date - = disburser_request_status.status_at.to_s(:date) - %td.user - = disburser_request_status.user.full_name - %td.comments - = disburser_request_status.comments + = f.fields_for :disburser_request_statuses do |disburser_request_status| + - if disburser_request_status.object.status_type == DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_DATA_STATUS + = content_tag_for(:tr, disburser_request_status.object) do + %td.status + = disburser_request_status.object.status + %td.date + - if policy(@disburser_request).edit_data_status_history? && allow_edit + = disburser_request_status.text_field :status_at, class: 'datepicker status_at', value: format_date(disburser_request_status.object.status_at), placeholder: 'Date' + = disburser_request_status.hidden_field :id + - if validation_errors?(disburser_request_status.object, :status_at) + %p.error= format_validation_errors(disburser_request_status.object, :status_at) + - else + = format_date(disburser_request_status.object.status_at) + %td.user + = disburser_request_status.object.user.full_name + %td.comments + = disburser_request_status.object.comments - - disburser_request_statuses = @disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_SPECIMEN_STATUS).order('created_at ASC') + - disburser_request_statuses = @disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_SPECIMEN_STATUS) .specimen_statuses %b Specimen Status History @@ -72,22 +85,29 @@ %table.hack_stack %thead %tr - %th.status + %th.status{ width: 200 } Status - %th.date + %th.date{ width: 200 } Date - %th.user + %th.user{ width: 200 } User - %th.comments + %th.comments{ width: 200 } Comments %tbody - - disburser_request_statuses.each do |disburser_request_status| - = content_tag_for(:tr, disburser_request_status) do - %td.status - = disburser_request_status.status - %td.date - = disburser_request_status.status_at.to_s(:date) - %td.user - = disburser_request_status.user.full_name - %td.comments - = disburser_request_status.comments \ No newline at end of file + = f.fields_for :disburser_request_statuses do |disburser_request_status| + - if disburser_request_status.object.status_type == DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_SPECIMEN_STATUS + = content_tag_for(:tr, disburser_request_status.object) do + %td.status + = disburser_request_status.object.status + %td.date + - if policy(@disburser_request).edit_specimen_status_history? && allow_edit + = disburser_request_status.text_field :status_at, class: 'datepicker status_at', value: format_date(disburser_request_status.object.status_at), placeholder: 'Date' + - if validation_errors?(disburser_request_status.object, :status_at) + %p.error= format_validation_errors(disburser_request_status.object, :status_at) + = disburser_request_status.hidden_field :id + - else + = format_date(disburser_request_status.object.status_at) + %td.user + = disburser_request_status.object.user.full_name + %td.comments + = disburser_request_status.object.comments \ No newline at end of file diff --git a/app/views/disburser_requests/edit.html.haml b/app/views/disburser_requests/edit.html.haml index 826cfac..f01998a 100644 --- a/app/views/disburser_requests/edit.html.haml +++ b/app/views/disburser_requests/edit.html.haml @@ -13,7 +13,7 @@ Indicates required field = render 'disburser_request', repository: @repository, f: f .row - = render 'status_history', disburser_request: @disburser_request, width: 18 + = render 'status_history', disburser_request: @disburser_request, width: 18, f: f, allow_edit: false .status_update{ class: 'large-6 columns' } - if @disburser_request.new_record? || @disburser_request.draft? %b diff --git a/app/views/disburser_requests/edit_admin_status.html.haml b/app/views/disburser_requests/edit_admin_status.html.haml index 4da6eac..377647c 100644 --- a/app/views/disburser_requests/edit_admin_status.html.haml +++ b/app/views/disburser_requests/edit_admin_status.html.haml @@ -16,7 +16,7 @@ %a{:href => "#vote-history"} Vote History .tabs-content{"data-tabs-content" => "administration-info", class: 'large-24 columns'} #status-history.tabs-panel.is-active - = render 'status_history', disburser_request: @disburser_request, width: 24 + = render 'status_history', disburser_request: @disburser_request, width: 24, f: f, allow_edit: true #vote-history.tabs-panel = render 'vote_history', disburser_request: @disburser_request, width: 24 .row diff --git a/app/views/disburser_requests/edit_data_status.html.haml b/app/views/disburser_requests/edit_data_status.html.haml index cae0dfa..7b43e83 100644 --- a/app/views/disburser_requests/edit_data_status.html.haml +++ b/app/views/disburser_requests/edit_data_status.html.haml @@ -5,34 +5,33 @@ = "Request for: #{@disburser_request.repository.name}" = render 'edit_status', disburser_request: @disburser_request .row - = render 'status_history', disburser_request: @disburser_request, width: 18 - .status_update{ class: 'large-6 columns' } - - if policy(@disburser_request).edit_data_status? - = form_for @disburser_request, url: data_status_disburser_request_url(@disburser_request), html: { class: 'status_disburser_request_form', id: "status_disburser_request_#{@disburser_request.id}" } do |f| - .row - .status{ class: 'large-24 columns' } - %label{for: 'disburser_request_data_status' } - %b - Update Data Status - = f.hidden_field :data_status, id: :data_status_original - - DisburserRequest::DISBURSER_REQUEST_DATA_STATUSES.each do |disburser_request_data_status| - %br - = f.radio_button :data_status, disburser_request_data_status, checked: checked?(@disburser_request.data_status, disburser_request_data_status, false) - = f.label :data_status, disburser_request_data_status, value: disburser_request_data_status - - if @disburser_request.data_status == disburser_request_data_status - = '(current status)' - .data_status_status_at - %label{for: 'disburser_request_data_status_status_at' } - Date + = form_for @disburser_request, url: data_status_disburser_request_url(@disburser_request), html: { class: 'status_disburser_request_form', id: "status_disburser_request_#{@disburser_request.id}" } do |f| + = render 'status_history', disburser_request: @disburser_request, width: 18, f: f, allow_edit: true + .status_update{ class: 'large-6 columns' } + .row + .status{ class: 'large-24 columns' } + %label{for: 'disburser_request_data_status' } + %b + Update Data Status + = f.hidden_field :data_status, id: :data_status_original + - DisburserRequest::DISBURSER_REQUEST_DATA_STATUSES.each do |disburser_request_data_status| + %br + = f.radio_button :data_status, disburser_request_data_status, checked: checked?(@disburser_request.data_status, disburser_request_data_status, false) + = f.label :data_status, disburser_request_data_status, value: disburser_request_data_status + - if @disburser_request.data_status == disburser_request_data_status + = '(current status)' + .data_status_status_at + %label{for: 'disburser_request_data_status_status_at' } + Date = f.text_field :data_status_status_at, disabled: true, class: 'datepicker' - if validation_errors?(@disburser_request, :data_status_status_at) %p.error=format_validation_errors(@disburser_request, :data_status_status_at) %br - .data_status_comments - %label{for: 'disburser_request_data_status_comments' } - Data Status Comments - = f.text_area :data_status_comments, rows: 3, disabled: true - .row - .navigation{ class: 'large-offset-8 large-16 columns' } - = f.submit 'Save', class: 'button' - = link_to 'Cancel', data_coordinator_disburser_requests_url, class: 'cancel-link button warning' \ No newline at end of file + .data_status_comments + %label{for: 'disburser_request_data_status_comments' } + Data Status Comments + = f.text_area :data_status_comments, rows: 3, disabled: true + .row + .navigation{ class: 'large-offset-8 large-16 columns' } + = f.submit 'Save', class: 'button' + = link_to 'Cancel', data_coordinator_disburser_requests_url, class: 'cancel-link button warning' \ No newline at end of file diff --git a/app/views/disburser_requests/edit_specimen_status.html.haml b/app/views/disburser_requests/edit_specimen_status.html.haml index 8b44d46..056d863 100644 --- a/app/views/disburser_requests/edit_specimen_status.html.haml +++ b/app/views/disburser_requests/edit_specimen_status.html.haml @@ -5,34 +5,33 @@ = "Request for: #{@disburser_request.repository.name}" = render 'edit_status', disburser_request: @disburser_request .row - = render 'status_history', disburser_request: @disburser_request, width: 18 - .status_update{ class: 'large-6 columns' } - - if policy(@disburser_request).edit_specimen_status? - = form_for @disburser_request, url: specimen_status_disburser_request_url(@disburser_request), html: { class: 'status_disburser_request_form', id: "status_disburser_request_#{@disburser_request.id}" } do |f| - .row - .status{ class: 'large-24 columns' } - %label{for: 'disburser_request_specimen_status' } - %b - Update Specimen Status - = f.hidden_field :specimen_status, id: :specimen_status_original - - DisburserRequest::DISBURSER_REQUEST_SPECIMEN_STATUSES.each do |disburser_request_specimen_status| - %br - = f.radio_button :specimen_status, disburser_request_specimen_status, checked: checked?(@disburser_request.specimen_status, disburser_request_specimen_status, false) - = f.label :specimen_status, disburser_request_specimen_status, value: disburser_request_specimen_status - - if @disburser_request.specimen_status == disburser_request_specimen_status - = '(current status)' - .specimen_status_status_at - %label{for: 'disburser_request_specimen_status_status_at' } - Date - = f.text_field :specimen_status_status_at, disabled: true, class: 'datepicker' - - if validation_errors?(@disburser_request, :specimen_status_status_at) - %p.error=format_validation_errors(@disburser_request, :specimen_status_status_at) - %br - .specimen_status_comments - %label{for: 'disburser_request_specimen_status_comments' } - Specimen Status Comments - = f.text_area :specimen_status_comments, rows: 3, disabled: true - .row - .navigation{ class: 'large-offset-8 large-16 columns' } - = f.submit 'Save', class: 'button' - = link_to 'Cancel', specimen_coordinator_disburser_requests_url, class: 'cancel-link button warning' \ No newline at end of file + = form_for @disburser_request, url: specimen_status_disburser_request_url(@disburser_request), html: { class: 'status_disburser_request_form', id: "status_disburser_request_#{@disburser_request.id}" } do |f| + = render 'status_history', disburser_request: @disburser_request, width: 18, f: f, allow_edit: true + .status_update{ class: 'large-6 columns' } + .row + .status{ class: 'large-24 columns' } + %label{for: 'disburser_request_specimen_status' } + %b + Update Specimen Status + = f.hidden_field :specimen_status, id: :specimen_status_original + - DisburserRequest::DISBURSER_REQUEST_SPECIMEN_STATUSES.each do |disburser_request_specimen_status| + %br + = f.radio_button :specimen_status, disburser_request_specimen_status, checked: checked?(@disburser_request.specimen_status, disburser_request_specimen_status, false) + = f.label :specimen_status, disburser_request_specimen_status, value: disburser_request_specimen_status + - if @disburser_request.specimen_status == disburser_request_specimen_status + = '(current status)' + .specimen_status_status_at + %label{for: 'disburser_request_specimen_status_status_at' } + Date + = f.text_field :specimen_status_status_at, disabled: true, class: 'datepicker' + - if validation_errors?(@disburser_request, :specimen_status_status_at) + %p.error=format_validation_errors(@disburser_request, :specimen_status_status_at) + %br + .specimen_status_comments + %label{for: 'disburser_request_specimen_status_comments' } + Specimen Status Comments + = f.text_area :specimen_status_comments, rows: 3, disabled: true + .row + .navigation{ class: 'large-offset-8 large-16 columns' } + = f.submit 'Save', class: 'button' + = link_to 'Cancel', specimen_coordinator_disburser_requests_url, class: 'cancel-link button warning' \ No newline at end of file diff --git a/spec/features/disburser_requests_spec.rb b/spec/features/disburser_requests_spec.rb index abfc316..38615c4 100644 --- a/spec/features/disburser_requests_spec.rb +++ b/spec/features/disburser_requests_spec.rb @@ -1596,7 +1596,7 @@ expect(all('.statuses .disburser_request_status').size).to eq(1) - disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS).each do |disburser_request_status| + disburser_request.reload.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS).each do |disburser_request_status| expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .status")).to have_content(disburser_request_status.status) expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .date")).to have_content(disburser_request_status.status_at.to_s(:date)) expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .user")).to have_content(disburser_request_status.user.full_name) @@ -1605,12 +1605,26 @@ expect(all('.data_statuses .disburser_request_status').size).to eq(1) - disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_DATA_STATUS).each do |disburser_request_status| + disburser_request_statuses = disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_DATA_STATUS) + disburser_request_statuses.each do |disburser_request_status| expect(find(".data_statuses #disburser_request_status_#{disburser_request_status.id} .status")).to have_content(DisburserRequest::DISBURSER_REQUEST_DATA_STATUS_QUERY_FULFILLED) - expect(find(".data_statuses #disburser_request_status_#{disburser_request_status.id} .date")).to have_content(status_at) + expect(all(".data_statuses #disburser_request_status_#{disburser_request_status.id} .date")[0].find_field('Date', with: status_at)).to be_truthy expect(find(".data_statuses #disburser_request_status_#{disburser_request_status.id} .user")).to have_content(disburser_request_status.user.full_name) expect(find(".data_statuses #disburser_request_status_#{disburser_request_status.id} .comments")).to have_content(comments) end + status_at = '12/20/2005' + scroll_to_bottom_of_the_page + page.execute_script("$('.data_statuses #disburser_request_status_#{disburser_request_statuses.first.id} .date .status_at').val('#{status_at}')") + click_button('Save') + sleep(1) + visit data_coordinator_disburser_requests_path + select(DisburserRequest::DISBURSER_REQUEST_DATA_STATUS_QUERY_FULFILLED, from: 'Data Status') + click_button('Search') + sleep(1) + expect(all('.disburser_request').size).to eq(1) + find("#disburser_request_#{disburser_request.id}").click_link('Update') + sleep(1) + expect(all(".data_statuses #disburser_request_status_#{disburser_request_statuses.first.id} .date")[0].find_field('Date', with: status_at)).to be_truthy end scenario 'Updating the status of a disburser request as a specimen coordinator', js: true, focus: false do @@ -1706,7 +1720,7 @@ expect(all('.statuses .disburser_request_status').size).to eq(1) - disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS).each do |disburser_request_status| + disburser_request.reload.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS).each do |disburser_request_status| expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .status")).to have_content(disburser_request_status.status) expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .date")).to have_content(disburser_request_status.status_at.to_s(:date)) expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .user")).to have_content(disburser_request_status.user.full_name) @@ -1724,12 +1738,27 @@ expect(all('.specimen_statuses .disburser_request_status').size).to eq(1) - disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_SPECIMEN_STATUS).each do |disburser_request_status| + disburser_request_statuses = disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_SPECIMEN_STATUS) + disburser_request_statuses.each do |disburser_request_status| expect(find(".specimen_statuses #disburser_request_status_#{disburser_request_status.id} .status")).to have_content(DisburserRequest::DISBURSER_REQUEST_SPECIMEN_STATUS_INVENTORY_FULFILLED) - expect(find(".specimen_statuses #disburser_request_status_#{disburser_request_status.id} .date")).to have_content(specimen_status_status_at) + expect(all(".specimen_statuses #disburser_request_status_#{disburser_request_status.id} .date")[0].find_field('Date', with: specimen_status_status_at)).to be_truthy expect(find(".specimen_statuses #disburser_request_status_#{disburser_request_status.id} .user")).to have_content(disburser_request_status.user.full_name) expect(find(".specimen_statuses #disburser_request_status_#{disburser_request_status.id} .comments")).to have_content(specimen_status_comments) end + + specimen_status_status_at = '12/20/2005' + scroll_to_bottom_of_the_page + page.execute_script("$('.specimen_statuses #disburser_request_status_#{disburser_request_statuses.first.id} .date .status_at').val('#{specimen_status_status_at}')") + click_button('Save') + sleep(1) + visit specimen_coordinator_disburser_requests_path + select(DisburserRequest::DISBURSER_REQUEST_SPECIMEN_STATUS_INVENTORY_FULFILLED, from: 'Specimen Status') + click_button('Search') + sleep(1) + expect(all('.disburser_request').size).to eq(1) + find("#disburser_request_#{disburser_request.id}").click_link('Update') + sleep(1) + expect(all(".specimen_statuses #disburser_request_status_#{disburser_request_statuses.first.id} .date")[0].find_field('Date', with: specimen_status_status_at)).to be_truthy end scenario 'Updating the status of a disburser request as a repository administrator', js: true, focus: false do @@ -1793,7 +1822,7 @@ disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS).each do |disburser_request_status| expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .status")).to have_content(disburser_request_status.status) - expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .date")).to have_content(disburser_request_status.status_at.to_s(:date)) + expect(all(".statuses #disburser_request_status_#{disburser_request_status.id} .date")[0].find_field('Date', with: format_date(disburser_request_status.status_at))).to be_truthy expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .user")).to have_content(disburser_request_status.user.full_name) expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .comments")).to have_content(disburser_request_status.comments) end @@ -1837,16 +1866,16 @@ expect(all('.statuses .disburser_request_status').size).to eq(2) - disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS).each do |disburser_request_status| + disburser_request.reload.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS).each do |disburser_request_status| expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .status")).to have_content(disburser_request_status.status) - expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .date")).to have_content(disburser_request_status.status_at.to_s(:date)) + expect(all(".statuses #disburser_request_status_#{disburser_request_status.id} .date")[0].find_field('Date', with: format_date(disburser_request_status.status_at))).to be_truthy expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .user")).to have_content(disburser_request_status.user.full_name) expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .comments")).to have_content(disburser_request_status.comments) end disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS).select { |disburser_request_status| disburser_request_status.status == DisburserRequest::DISBURSER_REQUEST_STATUS_COMMITTEE_REVIEW }.each do |disburser_request_status| expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .status")).to have_content(DisburserRequest::DISBURSER_REQUEST_STATUS_COMMITTEE_REVIEW) - expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .date")).to have_content(status_at) + expect(all(".statuses #disburser_request_status_#{disburser_request_status.id} .date")[0].find_field('Date', with: format_date(disburser_request_status.status_at))).to be_truthy expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .user")).to have_content(disburser_request_status.user.full_name) expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .comments")).to have_content(comments) end @@ -1855,7 +1884,7 @@ disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_DATA_STATUS).each do |disburser_request_status| expect(find(".data_statuses #disburser_request_status_#{disburser_request_status.id} .status")).to have_content(DisburserRequest::DISBURSER_REQUEST_DATA_STATUS_QUERY_FULFILLED) - expect(find(".data_statuses #disburser_request_status_#{disburser_request_status.id} .date")).to have_content(data_status_status_at) + expect(all(".data_statuses #disburser_request_status_#{disburser_request_status.id} .date")[0].find_field('Date', with: data_status_status_at)).to be_truthy expect(find(".data_statuses #disburser_request_status_#{disburser_request_status.id} .user")).to have_content(disburser_request_status.user.full_name) expect(find(".data_statuses #disburser_request_status_#{disburser_request_status.id} .comments")).to have_content(data_status_comments) end @@ -1864,7 +1893,7 @@ disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_SPECIMEN_STATUS).each do |disburser_request_status| expect(find(".specimen_statuses #disburser_request_status_#{disburser_request_status.id} .status")).to have_content(DisburserRequest::DISBURSER_REQUEST_SPECIMEN_STATUS_INVENTORY_FULFILLED) - expect(find(".specimen_statuses #disburser_request_status_#{disburser_request_status.id} .date")).to have_content(specimen_status_status_at) + expect(all(".specimen_statuses #disburser_request_status_#{disburser_request_status.id} .date")[0].find_field('Date', with: specimen_status_status_at)).to be_truthy expect(find(".specimen_statuses #disburser_request_status_#{disburser_request_status.id} .user")).to have_content(disburser_request_status.user.full_name) expect(find(".specimen_statuses #disburser_request_status_#{disburser_request_status.id} .comments")).to have_content(specimen_status_comments) end @@ -1880,11 +1909,59 @@ within('.supporting_document') do click_link('Remove') end - scroll_to_bottom_of_the_page click_button('Save') sleep(1) + find("#disburser_request_#{disburser_request.id}").click_link('Edit') expect(page).to_not have_css('a.supporting_document_url', text: 'supporting_document.docx') + + specimen_status_status_at = '12/20/2005' + scroll_to_half_of_the_page + sleep(1) + disburser_request_statuses = disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_SPECIMEN_STATUS) + page.execute_script("$('.specimen_statuses #disburser_request_status_#{disburser_request_statuses.first.id} .date .status_at').val('#{specimen_status_status_at}')") + scroll_to_bottom_of_the_page + click_button('Save') + sleep(1) + select(DisburserRequest::DISBURSER_REQUEST_SPECIMEN_STATUS_INVENTORY_FULFILLED, from: 'Specimen Status') + click_button('Search') + sleep(1) + expect(all('.disburser_request').size).to eq(1) + find("#disburser_request_#{disburser_request.id}").click_link('Edit') + sleep(1) + expect(all(".specimen_statuses #disburser_request_status_#{disburser_request_statuses.first.id} .date")[0].find_field('Date', with: specimen_status_status_at)).to be_truthy + + data_status_status_at = '12/20/2004' + scroll_to_half_of_the_page + sleep(1) + disburser_request_statuses = disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_DATA_STATUS) + page.execute_script("$('.data_statuses #disburser_request_status_#{disburser_request_statuses.first.id} .date .status_at').val('#{data_status_status_at}')") + scroll_to_bottom_of_the_page + click_button('Save') + sleep(1) + select(DisburserRequest::DISBURSER_REQUEST_DATA_STATUS_QUERY_FULFILLED, from: 'Data Status') + click_button('Search') + sleep(1) + expect(all('.disburser_request').size).to eq(1) + find("#disburser_request_#{disburser_request.id}").click_link('Edit') + sleep(1) + expect(all(".data_statuses #disburser_request_status_#{disburser_request_statuses.first.id} .date")[0].find_field('Date', with: data_status_status_at)).to be_truthy + + status_at = '12/20/2003' + scroll_to_half_of_the_page + sleep(1) + disburser_request_statuses = disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS) + page.execute_script("$('.statuses #disburser_request_status_#{disburser_request_statuses.first.id} .date .status_at').val('#{status_at}')") + scroll_to_bottom_of_the_page + click_button('Save') + sleep(1) + select(DisburserRequest::DISBURSER_REQUEST_STATUS_COMMITTEE_REVIEW, from: 'Status') + click_button('Search') + sleep(1) + expect(all('.disburser_request').size).to eq(1) + find("#disburser_request_#{disburser_request.id}").click_link('Edit') + sleep(1) + expect(all(".statuses #disburser_request_status_#{disburser_request_statuses.first.id} .date")[0].find_field('Date', with: status_at)).to be_truthy end scenario 'Updating the status of a disburser request as a repository administrator with a custom request form', js: true, focus: false do @@ -1934,7 +2011,7 @@ disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS).each do |disburser_request_status| expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .status")).to have_content(disburser_request_status.status) - expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .date")).to have_content(disburser_request_status.status_at.to_s(:date)) + expect(all(".statuses #disburser_request_status_#{disburser_request_status.id} .date")[0].find_field('Date', with: format_date(disburser_request_status.status_at))).to be_truthy expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .user")).to have_content(disburser_request_status.user.full_name) expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .comments")).to have_content(disburser_request_status.comments) end @@ -1959,7 +2036,6 @@ expect(page.has_field?('disburser_request_data_status_status_at', with: data_status_status_at, disabled: false)).to be_truthy expect(page.has_field?('Data Status Comments', with: data_status_comments, disabled: false)).to be_truthy - choose(DisburserRequest::DISBURSER_REQUEST_SPECIMEN_STATUS_INVENTORY_FULFILLED) specimen_status_comments = 'We have some moomin specimens!' fill_in('Specimen Status Comments', with: specimen_status_comments) @@ -1979,16 +2055,16 @@ expect(all('.statuses .disburser_request_status').size).to eq(2) - disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS).each do |disburser_request_status| + disburser_request.reload.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS).each do |disburser_request_status| expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .status")).to have_content(disburser_request_status.status) - expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .date")).to have_content(disburser_request_status.status_at.to_s(:date)) + expect(all(".statuses #disburser_request_status_#{disburser_request_status.id} .date")[0].find_field('Date', with: format_date(disburser_request_status.status_at))).to be_truthy expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .user")).to have_content(disburser_request_status.user.full_name) expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .comments")).to have_content(disburser_request_status.comments) end disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS).select { |disburser_request_status| disburser_request_status.status == DisburserRequest::DISBURSER_REQUEST_STATUS_COMMITTEE_REVIEW }.each do |disburser_request_status| expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .status")).to have_content(DisburserRequest::DISBURSER_REQUEST_STATUS_COMMITTEE_REVIEW) - expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .date")).to have_content(status_at) + expect(all(".statuses #disburser_request_status_#{disburser_request_status.id} .date")[0].find_field('Date', with: format_date(disburser_request_status.status_at))).to be_truthy expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .user")).to have_content(disburser_request_status.user.full_name) expect(find(".statuses #disburser_request_status_#{disburser_request_status.id} .comments")).to have_content(comments) end @@ -1997,7 +2073,7 @@ disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_DATA_STATUS).each do |disburser_request_status| expect(find(".data_statuses #disburser_request_status_#{disburser_request_status.id} .status")).to have_content(DisburserRequest::DISBURSER_REQUEST_DATA_STATUS_QUERY_FULFILLED) - expect(find(".data_statuses #disburser_request_status_#{disburser_request_status.id} .date")).to have_content(data_status_status_at) + expect(all(".data_statuses #disburser_request_status_#{disburser_request_status.id} .date")[0].find_field('Date', with: format_date(disburser_request_status.status_at))).to be_truthy expect(find(".data_statuses #disburser_request_status_#{disburser_request_status.id} .user")).to have_content(disburser_request_status.user.full_name) expect(find(".data_statuses #disburser_request_status_#{disburser_request_status.id} .comments")).to have_content(data_status_comments) end @@ -2006,7 +2082,7 @@ disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_SPECIMEN_STATUS).each do |disburser_request_status| expect(find(".specimen_statuses #disburser_request_status_#{disburser_request_status.id} .status")).to have_content(DisburserRequest::DISBURSER_REQUEST_SPECIMEN_STATUS_INVENTORY_FULFILLED) - expect(find(".specimen_statuses #disburser_request_status_#{disburser_request_status.id} .date")).to have_content(specimen_status_status_at) + expect(all(".specimen_statuses #disburser_request_status_#{disburser_request_status.id} .date")[0].find_field('Date', with: specimen_status_status_at)).to be_truthy expect(find(".specimen_statuses #disburser_request_status_#{disburser_request_status.id} .user")).to have_content(disburser_request_status.user.full_name) expect(find(".specimen_statuses #disburser_request_status_#{disburser_request_status.id} .comments")).to have_content(specimen_status_comments) end @@ -2026,7 +2102,57 @@ scroll_to_bottom_of_the_page click_button('Save') sleep(1) + find("#disburser_request_#{disburser_request.id}").click_link('Edit') + sleep(1) expect(page).to_not have_css('a.supporting_document_url', text: 'supporting_document.docx') + + specimen_status_status_at = '12/20/2005' + scroll_to_half_of_the_page + sleep(1) + disburser_request_statuses = disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_SPECIMEN_STATUS) + page.execute_script("$('.specimen_statuses #disburser_request_status_#{disburser_request_statuses.first.id} .date .status_at').val('#{specimen_status_status_at}')") + scroll_to_bottom_of_the_page + click_button('Save') + sleep(1) + select(DisburserRequest::DISBURSER_REQUEST_SPECIMEN_STATUS_INVENTORY_FULFILLED, from: 'Specimen Status') + click_button('Search') + sleep(1) + expect(all('.disburser_request').size).to eq(1) + find("#disburser_request_#{disburser_request.id}").click_link('Edit') + sleep(1) + expect(all(".specimen_statuses #disburser_request_status_#{disburser_request_statuses.first.id} .date")[0].find_field('Date', with: specimen_status_status_at)).to be_truthy + + data_status_status_at = '12/20/2004' + scroll_to_half_of_the_page + sleep(1) + disburser_request_statuses = disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_DATA_STATUS) + page.execute_script("$('.data_statuses #disburser_request_status_#{disburser_request_statuses.first.id} .date .status_at').val('#{data_status_status_at}')") + scroll_to_bottom_of_the_page + click_button('Save') + sleep(1) + select(DisburserRequest::DISBURSER_REQUEST_DATA_STATUS_QUERY_FULFILLED, from: 'Data Status') + click_button('Search') + sleep(1) + expect(all('.disburser_request').size).to eq(1) + find("#disburser_request_#{disburser_request.id}").click_link('Edit') + sleep(1) + expect(all(".data_statuses #disburser_request_status_#{disburser_request_statuses.first.id} .date")[0].find_field('Date', with: data_status_status_at)).to be_truthy + + status_at = '12/20/2003' + scroll_to_half_of_the_page + sleep(1) + disburser_request_statuses = disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS) + page.execute_script("$('.statuses #disburser_request_status_#{disburser_request_statuses.first.id} .date .status_at').val('#{status_at}')") + scroll_to_bottom_of_the_page + click_button('Save') + sleep(1) + select(DisburserRequest::DISBURSER_REQUEST_STATUS_COMMITTEE_REVIEW, from: 'Status') + click_button('Search') + sleep(1) + expect(all('.disburser_request').size).to eq(1) + find("#disburser_request_#{disburser_request.id}").click_link('Edit') + sleep(1) + expect(all(".statuses #disburser_request_status_#{disburser_request_statuses.first.id} .date")[0].find_field('Date', with: status_at)).to be_truthy end scenario 'Voting on a disburser request as a committee member', js: true, focus: false do diff --git a/spec/features/repositories_spec.rb b/spec/features/repositories_spec.rb index 662e217..7918915 100644 --- a/spec/features/repositories_spec.rb +++ b/spec/features/repositories_spec.rb @@ -409,4 +409,8 @@ def read_ckeditor(locator) def scroll_to_bottom_of_the_page page.execute_script "window.scrollBy(0,10000)" +end + +def scroll_to_half_of_the_page + page.execute_script "window.scrollBy(0,2000)" end \ No newline at end of file