diff --git a/app/policies/task_request_policy.rb b/app/policies/task_request_policy.rb index 4845b5d..3775941 100644 --- a/app/policies/task_request_policy.rb +++ b/app/policies/task_request_policy.rb @@ -22,4 +22,8 @@ class TaskRequestPolicy < ApplicationPolicy def cancel? true end + + def open_deliverable? + true + end end diff --git a/app/views/task_requests/_task_request.html.erb b/app/views/task_requests/_task_request.html.erb index 9d626ab..65b319e 100644 --- a/app/views/task_requests/_task_request.html.erb +++ b/app/views/task_requests/_task_request.html.erb @@ -26,6 +26,9 @@ <% if policy(task_request).edit? %> <%= link_to fa_icon("pencil fw", text: "Edit"), [:edit, task_request.project, task_request], class: "dropdown-item" %> <% end %> + <% if policy(task_request).open_deliverable? && task_request.status == "completed" %> + <%= link_to fa_icon("external-link fw", text: t(".actions.open_deliverable")), task_request.deliverable_url, class: "dropdown-item", target: '_blank' %> + <% end %> <% if policy(task_request).cancel? && !task_request.cancelled? %> <%= link_to fa_icon("ban fw", text: "Cancel"), [:cancel, task_request.project, task_request], class: "dropdown-item", method: :post %> <% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index e6890be..00a6f27 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -959,6 +959,7 @@ en: task_request: actions: manage: Manage + open_deliverable: Open Deliverable update: notice: Task request updated successfully. user_mailer: diff --git a/config/locales/es.yml b/config/locales/es.yml index 13abd12..80514a6 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -182,3 +182,8 @@ es: photos: guardian_photo: heading: Guardian Photo (ES) + task_requests: + task_request: + actions: + manage: Manage (ES) + open_deliverable: Open Deliverable (ES) diff --git a/spec/features/user_managing_task_requests_spec.rb b/spec/features/user_managing_task_requests_spec.rb new file mode 100644 index 0000000..00f5956 --- /dev/null +++ b/spec/features/user_managing_task_requests_spec.rb @@ -0,0 +1,73 @@ +require "rails_helper" + +feature "User managing task requests" do + let(:current_user) { create(:user) } + let(:project) { create(:project, account: current_user.primary_account) } + + before :each do + sign_in current_user + end + + scenario "task requests table is visible" do + visit project_task_requests_path(project) + + expect(page).to have_content "Created On" + expect(page).to have_content "Deadline" + expect(page).to have_content "Time Allowed" + expect(page).to have_content "Status" + end + + scenario "sees list of task requests" do + visit project_task_requests_path(project) + + expect(page).to have_content no_task_requests_label + + task_request = create(:task_request, project: project) + + visit project_task_requests_path(project) + + expect(page).not_to have_content no_task_requests_label + + expect(page).to have_content task_request.created_at.try(:strftime, '%D') + expect(page).to have_content task_request.deadline.try(:strftime, '%D') + expect(page).to have_content task_request.time_allowed + expect(page).to have_content task_request.status.capitalize + end + + scenario "user does not see open deliverable action in manage dropdown if task status is not completed" do + task_request = create(:task_request, project: project) + visit project_task_requests_path(project) + + click_on manage_button + expect(page).not_to have_content open_deliverable_action_label + end + + scenario "user can click deliverable action in manage dropdown if task status is completed", js: true do + create(:task_request, project: project, status: "completed", deliverable_url: "/") + visit project_task_requests_path(project) + + click_on manage_button + expect(page).to have_content open_deliverable_action_label + click_link open_deliverable_action_label + switch_to_window(windows.last) + expect(page).to have_content add_new_project_label + end + + private + + def no_task_requests_label + "Task requests will appear here" + end + + def manage_button + t "task_requests.task_request.actions.manage" + end + + def open_deliverable_action_label + t "task_requests.task_request.actions.open_deliverable" + end + + def add_new_project_label + t "projects.index.actions.new" + end +end