From 71a485e37ba689514fb3c093fb573d2237bbdd7e Mon Sep 17 00:00:00 2001 From: Stone Filipczak Date: Tue, 29 Oct 2024 17:21:41 -0400 Subject: [PATCH 01/32] WIP --- .../manage_submissions_controller.rb | 5 +++ ..._table.html.erb => _phases_table.html.erb} | 0 .../_submissions_table.html.erb | 36 +++++++++++++++++++ .../manage_submissions/by_challenge_phase.erb | 10 ++++++ app/views/manage_submissions/index.html.erb | 2 +- config/routes.rb | 1 + 6 files changed, 53 insertions(+), 1 deletion(-) rename app/views/manage_submissions/{_table.html.erb => _phases_table.html.erb} (100%) create mode 100644 app/views/manage_submissions/_submissions_table.html.erb create mode 100644 app/views/manage_submissions/by_challenge_phase.erb diff --git a/app/controllers/manage_submissions_controller.rb b/app/controllers/manage_submissions_controller.rb index 318a1911..31cf4b56 100644 --- a/app/controllers/manage_submissions_controller.rb +++ b/app/controllers/manage_submissions_controller.rb @@ -5,4 +5,9 @@ class ManageSubmissionsController < ApplicationController def index @challenges = current_user.challenge_manager_challenges end + + def by_challenge_phase + @phase = Phase.find(params[:phase_id]) + @submissions = @phase.submissions + end end diff --git a/app/views/manage_submissions/_table.html.erb b/app/views/manage_submissions/_phases_table.html.erb similarity index 100% rename from app/views/manage_submissions/_table.html.erb rename to app/views/manage_submissions/_phases_table.html.erb diff --git a/app/views/manage_submissions/_submissions_table.html.erb b/app/views/manage_submissions/_submissions_table.html.erb new file mode 100644 index 00000000..1ccecbf8 --- /dev/null +++ b/app/views/manage_submissions/_submissions_table.html.erb @@ -0,0 +1,36 @@ + + + + + + + + + + + + <% @submissions.each do |submission| %> + + + + + + + + <% end %> + +
Submission IDEligible for EvaluationSelected to AdvanceAssigned EvaluatorsAverage Score
+ <%= submission.id %> + + no + + yes + + nothing + +
+ +
+
\ No newline at end of file diff --git a/app/views/manage_submissions/by_challenge_phase.erb b/app/views/manage_submissions/by_challenge_phase.erb new file mode 100644 index 00000000..fc125b0a --- /dev/null +++ b/app/views/manage_submissions/by_challenge_phase.erb @@ -0,0 +1,10 @@ +

<%= @phase.title %>

+

View challenge submissions and manage evaluation progress.

+ +<% if @submissions.empty? %> +
+

This challenge phase does not currently have any submissions.

+
+<% else %> + <%= render partial: "submissions_table", locals: { submissions: @submissions } %> +<% end %> \ No newline at end of file diff --git a/app/views/manage_submissions/index.html.erb b/app/views/manage_submissions/index.html.erb index bbf6ceae..69a7da4a 100644 --- a/app/views/manage_submissions/index.html.erb +++ b/app/views/manage_submissions/index.html.erb @@ -6,5 +6,5 @@

You currently do not have any challenges.

<% else %> - <%= render partial: "table", locals: { challenges: @challenges } %> + <%= render partial: "phases_table", locals: { challenges: @challenges } %> <% end %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 3eac84de..b7e8d75e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -14,6 +14,7 @@ resources :evaluation_forms post '/evaluation_forms/clone', to: 'evaluation_forms#create_from_existing' resources :manage_submissions, only: [:index] + get '/manage_submissions/:phase_id', to: 'manage_submissions#by_challenge_phase' # Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500. # Can be used by load balancers and uptime monitors to verify that the app is live. From 0869211cfbfc3b55678f1ea79f9f687a3e471e49 Mon Sep 17 00:00:00 2001 From: Stone Filipczak Date: Thu, 31 Oct 2024 14:14:31 -0400 Subject: [PATCH 02/32] link from index --- app/views/manage_submissions/_phases_table.html.erb | 1 + config/routes.rb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/manage_submissions/_phases_table.html.erb b/app/views/manage_submissions/_phases_table.html.erb index 674aa9f7..78e8f79c 100644 --- a/app/views/manage_submissions/_phases_table.html.erb +++ b/app/views/manage_submissions/_phases_table.html.erb @@ -39,6 +39,7 @@ Manage Evaluators <% unless phase.submissions.empty? %> + > diff --git a/config/routes.rb b/config/routes.rb index b7e8d75e..205fcf36 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -14,7 +14,7 @@ resources :evaluation_forms post '/evaluation_forms/clone', to: 'evaluation_forms#create_from_existing' resources :manage_submissions, only: [:index] - get '/manage_submissions/:phase_id', to: 'manage_submissions#by_challenge_phase' + get '/manage_submissions/by_challenge_phase/:phase_id', to: 'manage_submissions#by_challenge_phase' # Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500. # Can be used by load balancers and uptime monitors to verify that the app is live. From dd46f8c213ef555678ce384b412971f496721ff5 Mon Sep 17 00:00:00 2001 From: Stone Filipczak Date: Thu, 31 Oct 2024 15:45:25 -0400 Subject: [PATCH 03/32] tests --- .../manage_submissions/by_challenge_phase.erb | 2 +- spec/system/logins_spec.rb | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/app/views/manage_submissions/by_challenge_phase.erb b/app/views/manage_submissions/by_challenge_phase.erb index fc125b0a..8e64e254 100644 --- a/app/views/manage_submissions/by_challenge_phase.erb +++ b/app/views/manage_submissions/by_challenge_phase.erb @@ -1,4 +1,4 @@ -

<%= @phase.title %>

+

<%= challenge_phase_title(@phase.challenge, @phase) %>

View challenge submissions and manage evaluation progress.

<% if @submissions.empty? %> diff --git a/spec/system/logins_spec.rb b/spec/system/logins_spec.rb index cf70fa3a..ffab5e68 100644 --- a/spec/system/logins_spec.rb +++ b/spec/system/logins_spec.rb @@ -29,6 +29,30 @@ expect(user.role).to eq("challenge_manager") expect(page).to(be_axe_clean) end + + it "manage submissions index page is accessible with no challenges" do + visit manage_submissions_path + expect(user.role).to eq("challenge_manager") + expect(page).to(be_axe_clean) + end + + it "manage submissions index page is accessible with one challenge" do + challenge = create_challenge(user: user, title: "Boston Tea Party Cleanup") + phase = create_phase(challenge_id: challenge.id) + visit manage_submissions_path + expect(user.role).to eq("challenge_manager") + expect(page).to have_content("Boston Tea Party Cleanup") + expect(page).to(be_axe_clean) + end + + it "manage submissions my challenge phase page is accessible with one challenge" do + challenge = create_challenge(user: user, title: "Boston Tea Party Cleanup") + phase = create_phase(challenge_id: challenge.id) + visit "/manage_submissions/by_challenge_phase/#{phase.id}" + expect(user.role).to eq("challenge_manager") + expect(page).to have_content("Boston Tea Party Cleanup") + expect(page).to(be_axe_clean) + end end describe "Logged-in as an Evaluator" do From a328be189abef1566f19798a381d6f0eca117347 Mon Sep 17 00:00:00 2001 From: Stone Filipczak Date: Fri, 1 Nov 2024 11:30:35 -0400 Subject: [PATCH 04/32] helper methods --- app/helpers/manage_submissions_helper.rb | 7 +++++++ .../manage_submissions/_submissions_table.html.erb | 11 +++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/helpers/manage_submissions_helper.rb b/app/helpers/manage_submissions_helper.rb index fcdfe6fb..50695d1b 100644 --- a/app/helpers/manage_submissions_helper.rb +++ b/app/helpers/manage_submissions_helper.rb @@ -1,4 +1,11 @@ # frozen_string_literal: true module ManageSubmissionsHelper + def eligible_for_evaluation?(submission) + submission.judging_status.in? ["qualified"] + end + + def selected_to_advance?(submission) + submission.judging_status.in? ["selected", "winner"] + end end diff --git a/app/views/manage_submissions/_submissions_table.html.erb b/app/views/manage_submissions/_submissions_table.html.erb index 1ccecbf8..08fe222a 100644 --- a/app/views/manage_submissions/_submissions_table.html.erb +++ b/app/views/manage_submissions/_submissions_table.html.erb @@ -15,18 +15,21 @@ <%= submission.id %> - no + <%= eligible_for_evaluation?(submission) %> - yes + <%= selected_to_advance?(submission) %> - nothing + No evaluators assigned to this submission. + + + <%# average score goes here %>
From b76cae66bbe6d182ce92992a49973dd1f36bfd74 Mon Sep 17 00:00:00 2001 From: Stone Filipczak Date: Mon, 4 Nov 2024 10:25:59 -0500 Subject: [PATCH 05/32] icons --- .../_submissions_table.html.erb | 38 +++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/app/views/manage_submissions/_submissions_table.html.erb b/app/views/manage_submissions/_submissions_table.html.erb index 08fe222a..64c6faf4 100644 --- a/app/views/manage_submissions/_submissions_table.html.erb +++ b/app/views/manage_submissions/_submissions_table.html.erb @@ -15,16 +15,48 @@ <%= submission.id %> - <%= eligible_for_evaluation?(submission) %> +
+ <% if eligible_for_evaluation?(submission) %> + <%= image_tag( + "images/usa-icons/verified.svg", + class: "usa-icon--size-3", + alt: "" + )%> + Eligible for Evaluation + <% else %> + <%= image_tag( + "images/usa-icons/highlight_off.svg", + class: "usa-icon--size-3", + alt: "" + )%> + Not Eligible for Evaluation + <% end %> +
- <%= selected_to_advance?(submission) %> +
+ <% if selected_to_advance?(submission) %> + <%= image_tag( + "images/usa-icons/star.svg", + class: "usa-icon--size-7 icon-white margin-x-2", + alt: "" + )%> + Selected to Advance + <% else %> + <%= image_tag( + "images/usa-icons/star_outline.svg", + class: "usa-icon--size-2", + alt: "" + )%> + Not Selected to Advance + <% end %> +
No evaluators assigned to this submission. - <%# average score goes here %> + N/A
From 2a651eb78112c61cc75ca356db1949bcd32ec2f5 Mon Sep 17 00:00:00 2001 From: Stone Filipczak Date: Mon, 4 Nov 2024 15:28:51 -0500 Subject: [PATCH 06/32] add submission id label on mobile --- app/views/manage_submissions/_submissions_table.html.erb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/manage_submissions/_submissions_table.html.erb b/app/views/manage_submissions/_submissions_table.html.erb index 64c6faf4..6a90a47a 100644 --- a/app/views/manage_submissions/_submissions_table.html.erb +++ b/app/views/manage_submissions/_submissions_table.html.erb @@ -12,8 +12,8 @@ <% @submissions.each do |submission| %> - <%= submission.id %> - + Submission ID <%= submission.id %> +
<% if eligible_for_evaluation?(submission) %> From e5fc2252503a921d0aa737cd80b0964f1c183555 Mon Sep 17 00:00:00 2001 From: Stone Filipczak <51140224+stonefilipczak@users.noreply.github.com> Date: Tue, 5 Nov 2024 14:11:37 -0500 Subject: [PATCH 07/32] Update app/controllers/manage_submissions_controller.rb Co-authored-by: Stephen Chudleigh --- app/controllers/manage_submissions_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/manage_submissions_controller.rb b/app/controllers/manage_submissions_controller.rb index 31cf4b56..2a4fa0e8 100644 --- a/app/controllers/manage_submissions_controller.rb +++ b/app/controllers/manage_submissions_controller.rb @@ -7,7 +7,7 @@ def index end def by_challenge_phase - @phase = Phase.find(params[:phase_id]) + @phase = current_user.challenge_manager_challenges.phases.find(params[:phase_id]) @submissions = @phase.submissions end end From cacbaaeeec6cf490f6850a6565055b7d56ba11e8 Mon Sep 17 00:00:00 2001 From: Stone Filipczak <51140224+stonefilipczak@users.noreply.github.com> Date: Tue, 5 Nov 2024 14:13:36 -0500 Subject: [PATCH 08/32] Update app/views/manage_submissions/_submissions_table.html.erb Co-authored-by: Stephen Chudleigh --- app/views/manage_submissions/_submissions_table.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/manage_submissions/_submissions_table.html.erb b/app/views/manage_submissions/_submissions_table.html.erb index 6a90a47a..891df9a2 100644 --- a/app/views/manage_submissions/_submissions_table.html.erb +++ b/app/views/manage_submissions/_submissions_table.html.erb @@ -38,7 +38,7 @@ <% if selected_to_advance?(submission) %> <%= image_tag( "images/usa-icons/star.svg", - class: "usa-icon--size-7 icon-white margin-x-2", + class: "usa-icon--size-3 margin-right-1", alt: "" )%> Selected to Advance From c83efc76f09a78882e07386205148ccadcc3ca75 Mon Sep 17 00:00:00 2001 From: Stone Filipczak <51140224+stonefilipczak@users.noreply.github.com> Date: Tue, 5 Nov 2024 14:31:10 -0500 Subject: [PATCH 09/32] Update app/helpers/manage_submissions_helper.rb Co-authored-by: Stephen Chudleigh --- app/helpers/manage_submissions_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/manage_submissions_helper.rb b/app/helpers/manage_submissions_helper.rb index 50695d1b..1e343801 100644 --- a/app/helpers/manage_submissions_helper.rb +++ b/app/helpers/manage_submissions_helper.rb @@ -2,7 +2,7 @@ module ManageSubmissionsHelper def eligible_for_evaluation?(submission) - submission.judging_status.in? ["qualified"] + submission.judging_status.in? ["qualified", "selected", "winner"] end def selected_to_advance?(submission) From e9d73f5f15d80408d4fc38723fd8351cde9ad0ad Mon Sep 17 00:00:00 2001 From: Stone Filipczak Date: Tue, 5 Nov 2024 15:39:57 -0500 Subject: [PATCH 10/32] scope phase to a user's challenges --- app/controllers/manage_submissions_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/manage_submissions_controller.rb b/app/controllers/manage_submissions_controller.rb index 2a4fa0e8..bed60adf 100644 --- a/app/controllers/manage_submissions_controller.rb +++ b/app/controllers/manage_submissions_controller.rb @@ -7,7 +7,7 @@ def index end def by_challenge_phase - @phase = current_user.challenge_manager_challenges.phases.find(params[:phase_id]) + @phase = Phase.where(id: params[:phase_id], challenge_id: current_user.challenge_manager_challenges.collect {|a| a.id} ).first @submissions = @phase.submissions end end From 1580142cc41c93421273a392ba1d9da4a228b7dd Mon Sep 17 00:00:00 2001 From: Stone Filipczak Date: Tue, 5 Nov 2024 15:40:26 -0500 Subject: [PATCH 11/32] move tests into own file --- spec/system/logins_spec.rb | 24 ---------------- spec/system/manage_submissions_spec.rb | 39 ++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 24 deletions(-) create mode 100644 spec/system/manage_submissions_spec.rb diff --git a/spec/system/logins_spec.rb b/spec/system/logins_spec.rb index ffab5e68..cf70fa3a 100644 --- a/spec/system/logins_spec.rb +++ b/spec/system/logins_spec.rb @@ -29,30 +29,6 @@ expect(user.role).to eq("challenge_manager") expect(page).to(be_axe_clean) end - - it "manage submissions index page is accessible with no challenges" do - visit manage_submissions_path - expect(user.role).to eq("challenge_manager") - expect(page).to(be_axe_clean) - end - - it "manage submissions index page is accessible with one challenge" do - challenge = create_challenge(user: user, title: "Boston Tea Party Cleanup") - phase = create_phase(challenge_id: challenge.id) - visit manage_submissions_path - expect(user.role).to eq("challenge_manager") - expect(page).to have_content("Boston Tea Party Cleanup") - expect(page).to(be_axe_clean) - end - - it "manage submissions my challenge phase page is accessible with one challenge" do - challenge = create_challenge(user: user, title: "Boston Tea Party Cleanup") - phase = create_phase(challenge_id: challenge.id) - visit "/manage_submissions/by_challenge_phase/#{phase.id}" - expect(user.role).to eq("challenge_manager") - expect(page).to have_content("Boston Tea Party Cleanup") - expect(page).to(be_axe_clean) - end end describe "Logged-in as an Evaluator" do diff --git a/spec/system/manage_submissions_spec.rb b/spec/system/manage_submissions_spec.rb new file mode 100644 index 00000000..ee42c86b --- /dev/null +++ b/spec/system/manage_submissions_spec.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe "A11y", :js do + let(:user) { nil } + + before do + system_login_user(user) if user + end + + describe "Logged-in as a Challenge Manager" do + let(:user) { create_user(role: "challenge_manager") } + + it "manage submissions index page is accessible with no challenges" do + visit manage_submissions_path + expect(user.role).to eq("challenge_manager") + expect(page).to(be_axe_clean) + end + + it "manage submissions index page is accessible with one challenge" do + challenge = create_challenge(user: user, title: "Boston Tea Party Cleanup") + phase = create_phase(challenge_id: challenge.id) + visit manage_submissions_path + expect(user.role).to eq("challenge_manager") + expect(page).to have_content("Boston Tea Party Cleanup") + expect(page).to(be_axe_clean) + end + + it "manage submissions by challenge phase page is accessible with one challenge" do + challenge = create_challenge(user: user, title: "Boston Tea Party Cleanup") + phase = create_phase(challenge_id: challenge.id) + visit "/manage_submissions/by_challenge_phase/#{phase.id}" + expect(user.role).to eq("challenge_manager") + expect(page).to have_content("Boston Tea Party Cleanup") + expect(page).to(be_axe_clean) + end + end +end From b82b779591b5784df7faf95aa49fda53e7fd4714 Mon Sep 17 00:00:00 2001 From: Stone Filipczak Date: Tue, 5 Nov 2024 15:41:46 -0500 Subject: [PATCH 12/32] rubocop --- app/controllers/manage_submissions_controller.rb | 5 +++-- app/helpers/manage_submissions_helper.rb | 12 ++++++------ spec/system/manage_submissions_spec.rb | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app/controllers/manage_submissions_controller.rb b/app/controllers/manage_submissions_controller.rb index bed60adf..c61ab8fc 100644 --- a/app/controllers/manage_submissions_controller.rb +++ b/app/controllers/manage_submissions_controller.rb @@ -7,7 +7,8 @@ def index end def by_challenge_phase - @phase = Phase.where(id: params[:phase_id], challenge_id: current_user.challenge_manager_challenges.collect {|a| a.id} ).first + @phase = Phase.where(id: params[:phase_id], + challenge_id: current_user.challenge_manager_challenges.collect(&:id)).first @submissions = @phase.submissions - end + end end diff --git a/app/helpers/manage_submissions_helper.rb b/app/helpers/manage_submissions_helper.rb index 1e343801..88c56d24 100644 --- a/app/helpers/manage_submissions_helper.rb +++ b/app/helpers/manage_submissions_helper.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true module ManageSubmissionsHelper - def eligible_for_evaluation?(submission) - submission.judging_status.in? ["qualified", "selected", "winner"] - end + def eligible_for_evaluation?(submission) + submission.judging_status.in?(%w[qualified selected winner]) + end - def selected_to_advance?(submission) - submission.judging_status.in? ["selected", "winner"] - end + def selected_to_advance?(submission) + submission.judging_status.in?(%w[selected winner]) + end end diff --git a/spec/system/manage_submissions_spec.rb b/spec/system/manage_submissions_spec.rb index ee42c86b..12c40449 100644 --- a/spec/system/manage_submissions_spec.rb +++ b/spec/system/manage_submissions_spec.rb @@ -20,7 +20,7 @@ it "manage submissions index page is accessible with one challenge" do challenge = create_challenge(user: user, title: "Boston Tea Party Cleanup") - phase = create_phase(challenge_id: challenge.id) + create_phase(challenge_id: challenge.id) visit manage_submissions_path expect(user.role).to eq("challenge_manager") expect(page).to have_content("Boston Tea Party Cleanup") From a2e7ed7a3390f925960b4456b1822b30aa12e482 Mon Sep 17 00:00:00 2001 From: Stone Filipczak Date: Tue, 5 Nov 2024 15:51:38 -0500 Subject: [PATCH 13/32] add closing a tag --- app/views/manage_submissions/_phases_table.html.erb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/views/manage_submissions/_phases_table.html.erb b/app/views/manage_submissions/_phases_table.html.erb index 78e8f79c..3120a17f 100644 --- a/app/views/manage_submissions/_phases_table.html.erb +++ b/app/views/manage_submissions/_phases_table.html.erb @@ -40,9 +40,10 @@ <% unless phase.submissions.empty? %> > - + + <% end %>
From cde14f486358743c1dfe4b132f0fa2095cf18d2d Mon Sep 17 00:00:00 2001 From: Stone Filipczak Date: Wed, 6 Nov 2024 12:39:50 -0500 Subject: [PATCH 14/32] add margin-right-1 to all icons --- app/views/manage_submissions/_submissions_table.html.erb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/manage_submissions/_submissions_table.html.erb b/app/views/manage_submissions/_submissions_table.html.erb index 891df9a2..2c8dd591 100644 --- a/app/views/manage_submissions/_submissions_table.html.erb +++ b/app/views/manage_submissions/_submissions_table.html.erb @@ -19,14 +19,14 @@ <% if eligible_for_evaluation?(submission) %> <%= image_tag( "images/usa-icons/verified.svg", - class: "usa-icon--size-3", + class: "usa-icon--size-3 margin-right-1", alt: "" )%> Eligible for Evaluation <% else %> <%= image_tag( "images/usa-icons/highlight_off.svg", - class: "usa-icon--size-3", + class: "usa-icon--size-3 margin-right-1", alt: "" )%> Not Eligible for Evaluation @@ -45,7 +45,7 @@ <% else %> <%= image_tag( "images/usa-icons/star_outline.svg", - class: "usa-icon--size-2", + class: "usa-icon--size-3 margin-right-1", alt: "" )%> Not Selected to Advance From eaca5b892136c304664b6b845b6f57347504b024 Mon Sep 17 00:00:00 2001 From: Stone Filipczak Date: Wed, 6 Nov 2024 13:33:19 -0500 Subject: [PATCH 15/32] testing different states --- .../manage_submissions_controller.rb | 3 +- .../manage_submissions/by_challenge_phase.erb | 18 ++++++++---- spec/requests/manage_submissions_spec.rb | 29 +++++++++++++++++++ 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/app/controllers/manage_submissions_controller.rb b/app/controllers/manage_submissions_controller.rb index c61ab8fc..bdc978c2 100644 --- a/app/controllers/manage_submissions_controller.rb +++ b/app/controllers/manage_submissions_controller.rb @@ -9,6 +9,7 @@ def index def by_challenge_phase @phase = Phase.where(id: params[:phase_id], challenge_id: current_user.challenge_manager_challenges.collect(&:id)).first - @submissions = @phase.submissions + @submissions = if @phase then @phase.submissions else [] end end end + \ No newline at end of file diff --git a/app/views/manage_submissions/by_challenge_phase.erb b/app/views/manage_submissions/by_challenge_phase.erb index 8e64e254..1b047a43 100644 --- a/app/views/manage_submissions/by_challenge_phase.erb +++ b/app/views/manage_submissions/by_challenge_phase.erb @@ -1,10 +1,16 @@ -

<%= challenge_phase_title(@phase.challenge, @phase) %>

-

View challenge submissions and manage evaluation progress.

+<% if @phase %> +

<%= challenge_phase_title(@phase.challenge, @phase) %>

+

View challenge submissions and manage evaluation progress.

-<% if @submissions.empty? %> + <% if @submissions.empty? %> +
+

This challenge phase does not currently have any submissions.

+
+ <% else %> + <%= render partial: "submissions_table", locals: { submissions: @submissions } %> + <% end %> +<% else %>
-

This challenge phase does not currently have any submissions.

+

You are not assigned to this challenge.

-<% else %> - <%= render partial: "submissions_table", locals: { submissions: @submissions } %> <% end %> \ No newline at end of file diff --git a/spec/requests/manage_submissions_spec.rb b/spec/requests/manage_submissions_spec.rb index 063fb1a9..a9b3c810 100644 --- a/spec/requests/manage_submissions_spec.rb +++ b/spec/requests/manage_submissions_spec.rb @@ -56,6 +56,35 @@ expect(response.body).to include("Turning monster energy into pepto bismol") expect(response.body).to include("Frodo") end + + it "renders an empty list of submissions for a user's challenge" do + challenge = create_challenge(user: challenge_user, title: "Boston Tea Party Cleanup") + phase = create_phase(challenge_id: challenge.id) + + get "/manage_submissions/by_challenge_phase/#{phase.id}" + expect(response.body).to include("Boston Tea Party Cleanup") + + expect(response.body).to include("This challenge phase does not currently have any submissions.") + end + + it "renders a list of submissions for a user's challenge" do + challenge = create_challenge(user: challenge_user, title: "Boston Tea Party Cleanup") + phase = create_phase(challenge_id: challenge.id) + submission = create(:submission, challenge: challenge) + + get "/manage_submissions/by_challenge_phase/#{phase.id}" + expect(response.body).to include("Boston Tea Party Cleanup") + expect(response.body).to include("#{submission.id}") + end + + it "does not render submissions for a challenge the user is not assigned to" do + challenge = create_challenge(title: "Star Spangled Banister") + phase = create_phase(challenge_id: challenge.id) + + get "/manage_submissions/by_challenge_phase/#{phase.id}" + expect(response.body).not_to include("Star Spangled Banister") + expect(response.body).to include("You are not assigned to this challenge.") + end end context "when logged in as an evaluator" do From 71707290e1a725aac1b7e5e8beda40435a01881f Mon Sep 17 00:00:00 2001 From: Stone Filipczak Date: Wed, 6 Nov 2024 14:39:24 -0500 Subject: [PATCH 16/32] display booleans as checkboxes on desktop --- .../_submissions_table.html.erb | 60 +++++++++++-------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/app/views/manage_submissions/_submissions_table.html.erb b/app/views/manage_submissions/_submissions_table.html.erb index 2c8dd591..b9dd43b1 100644 --- a/app/views/manage_submissions/_submissions_table.html.erb +++ b/app/views/manage_submissions/_submissions_table.html.erb @@ -17,38 +17,50 @@
<% if eligible_for_evaluation?(submission) %> - <%= image_tag( - "images/usa-icons/verified.svg", - class: "usa-icon--size-3 margin-right-1", - alt: "" - )%> - Eligible for Evaluation + +
+ <%= image_tag( + "images/usa-icons/verified.svg", + class: "usa-icon--size-3 margin-right-1", + alt: "" + )%> + Eligible for Evaluation +
<% else %> - <%= image_tag( - "images/usa-icons/highlight_off.svg", - class: "usa-icon--size-3 margin-right-1", - alt: "" - )%> - Not Eligible for Evaluation + +
+ <%= image_tag( + "images/usa-icons/highlight_off.svg", + class: "usa-icon--size-3 margin-right-1", + alt: "" + )%> + Not Eligible for Evaluation +
<% end %>
<% if selected_to_advance?(submission) %> - <%= image_tag( - "images/usa-icons/star.svg", - class: "usa-icon--size-3 margin-right-1", - alt: "" - )%> - Selected to Advance + +
+ <%= image_tag( + "images/usa-icons/star.svg", + class: "usa-icon--size-3 margin-right-1", + alt: "" + )%> + Selected to Advance +
<% else %> - <%= image_tag( - "images/usa-icons/star_outline.svg", - class: "usa-icon--size-3 margin-right-1", - alt: "" - )%> - Not Selected to Advance + +
+ <%= image_tag( + "images/usa-icons/star_outline.svg", + class: "usa-icon--size-3 margin-right-1", + alt: "" + )%> + Not Selected to Advance +
<% end %>
From 389a1b20a66ab79facd324b48ca052e78f4ff246 Mon Sep 17 00:00:00 2001 From: Stone Filipczak Date: Wed, 6 Nov 2024 14:39:53 -0500 Subject: [PATCH 17/32] rubocop --- app/controllers/manage_submissions_controller.rb | 3 +-- spec/requests/manage_submissions_spec.rb | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/controllers/manage_submissions_controller.rb b/app/controllers/manage_submissions_controller.rb index bdc978c2..eafdc19d 100644 --- a/app/controllers/manage_submissions_controller.rb +++ b/app/controllers/manage_submissions_controller.rb @@ -9,7 +9,6 @@ def index def by_challenge_phase @phase = Phase.where(id: params[:phase_id], challenge_id: current_user.challenge_manager_challenges.collect(&:id)).first - @submissions = if @phase then @phase.submissions else [] end + @submissions = @phase ? @phase.submissions : [] end end - \ No newline at end of file diff --git a/spec/requests/manage_submissions_spec.rb b/spec/requests/manage_submissions_spec.rb index a9b3c810..0e214036 100644 --- a/spec/requests/manage_submissions_spec.rb +++ b/spec/requests/manage_submissions_spec.rb @@ -63,7 +63,7 @@ get "/manage_submissions/by_challenge_phase/#{phase.id}" expect(response.body).to include("Boston Tea Party Cleanup") - + expect(response.body).to include("This challenge phase does not currently have any submissions.") end @@ -74,9 +74,9 @@ get "/manage_submissions/by_challenge_phase/#{phase.id}" expect(response.body).to include("Boston Tea Party Cleanup") - expect(response.body).to include("#{submission.id}") + expect(response.body).to include(submission.id.to_s) end - + it "does not render submissions for a challenge the user is not assigned to" do challenge = create_challenge(title: "Star Spangled Banister") phase = create_phase(challenge_id: challenge.id) From b4f70a878a0b5e5168f57975bb5882e5f884866f Mon Sep 17 00:00:00 2001 From: Stone Filipczak Date: Wed, 6 Nov 2024 16:40:01 -0500 Subject: [PATCH 18/32] set up page --- .../manage_submissions_controller.rb | 5 ++++ .../_submissions_table.html.erb | 8 +++-- app/views/manage_submissions/show.html.erb | 30 +++++++++++++++++++ config/routes.rb | 2 +- 4 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 app/views/manage_submissions/show.html.erb diff --git a/app/controllers/manage_submissions_controller.rb b/app/controllers/manage_submissions_controller.rb index eafdc19d..5bcd686e 100644 --- a/app/controllers/manage_submissions_controller.rb +++ b/app/controllers/manage_submissions_controller.rb @@ -6,6 +6,11 @@ def index @challenges = current_user.challenge_manager_challenges end + def show + @submission = Submission.find(params[:id]) + @assigned = @submission.challenge_id.in?(current_user.challenge_manager_challenges.collect(&:id)) + end + def by_challenge_phase @phase = Phase.where(id: params[:phase_id], challenge_id: current_user.challenge_manager_challenges.collect(&:id)).first diff --git a/app/views/manage_submissions/_submissions_table.html.erb b/app/views/manage_submissions/_submissions_table.html.erb index b9dd43b1..8cb9a222 100644 --- a/app/views/manage_submissions/_submissions_table.html.erb +++ b/app/views/manage_submissions/_submissions_table.html.erb @@ -72,9 +72,11 @@
- + <%= link_to manage_submission_path(submission) do %> + + <% end %>
diff --git a/app/views/manage_submissions/show.html.erb b/app/views/manage_submissions/show.html.erb new file mode 100644 index 00000000..e509005c --- /dev/null +++ b/app/views/manage_submissions/show.html.erb @@ -0,0 +1,30 @@ +<% if @assigned %> +

Submission ID <%= @submission.id %>

+

View submission information and assign evaluators to evaluate the submission.

+ +

Brief Description:

+

<%= @submission.brief_description %>

+ +

Description:

+

<%= @submission.description %>

+ +

External URL:

+ ><%= @submission.external_url %> + +

Status:

+

<%= @submission.status.capitalize %>

+ +

Submitter:

+

<%= @submission.submitter.email %>

+ +

Last Updated Date:

+

<%= @submission.updated_at %>

+ +

Submission ID:

+

<%= @submission.id %>

+ +

Title:

+

<%= @submission.title %>

+<% else %> +

You are not assigned to manage this submission.

+<% end %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 0c48ad89..5c2ccdaa 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -14,7 +14,7 @@ get '/evaluation_forms/confirmation', to: 'evaluation_forms#confirmation' resources :evaluation_forms post '/evaluation_forms/clone', to: 'evaluation_forms#create_from_existing' - resources :manage_submissions, only: [:index] + resources :manage_submissions, only: [:index, :show] get '/manage_submissions/by_challenge_phase/:phase_id', to: 'manage_submissions#by_challenge_phase' # Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500. From 89a0e7efa81ece299ae9d1b29872976889c85591 Mon Sep 17 00:00:00 2001 From: Stone Filipczak Date: Thu, 7 Nov 2024 10:50:15 -0500 Subject: [PATCH 19/32] more tests --- app/views/manage_submissions/show.html.erb | 34 ++++++++++++---------- spec/factories/submission.rb | 1 + spec/requests/manage_submissions_spec.rb | 20 +++++++++++++ 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/app/views/manage_submissions/show.html.erb b/app/views/manage_submissions/show.html.erb index e509005c..a4925b2d 100644 --- a/app/views/manage_submissions/show.html.erb +++ b/app/views/manage_submissions/show.html.erb @@ -2,29 +2,31 @@

Submission ID <%= @submission.id %>

View submission information and assign evaluators to evaluate the submission.

-

Brief Description:

-

<%= @submission.brief_description %>

+
+

Brief Description:

+

<%= @submission.brief_description %>

-

Description:

-

<%= @submission.description %>

+

Description:

+

<%= @submission.description %>

-

External URL:

- ><%= @submission.external_url %> +

External URL:

+ ><%= @submission.external_url %> -

Status:

-

<%= @submission.status.capitalize %>

+

Status:

+

<%= @submission.status.capitalize %>

-

Submitter:

-

<%= @submission.submitter.email %>

+

Submitter:

+

<%= @submission.submitter.email %>

-

Last Updated Date:

-

<%= @submission.updated_at %>

+

Last Updated Date:

+

<%= @submission.updated_at %>

-

Submission ID:

-

<%= @submission.id %>

+

Submission ID:

+

<%= @submission.id %>

-

Title:

-

<%= @submission.title %>

+

Title:

+

<%= @submission.title %>

+
<% else %>

You are not assigned to manage this submission.

<% end %> \ No newline at end of file diff --git a/spec/factories/submission.rb b/spec/factories/submission.rb index 6289b327..6f740bb9 100644 --- a/spec/factories/submission.rb +++ b/spec/factories/submission.rb @@ -7,5 +7,6 @@ association :manager, factory: :user title { Faker::Lorem.sentence } + status { "draft" } end end diff --git a/spec/requests/manage_submissions_spec.rb b/spec/requests/manage_submissions_spec.rb index 0e214036..e8c5880a 100644 --- a/spec/requests/manage_submissions_spec.rb +++ b/spec/requests/manage_submissions_spec.rb @@ -85,6 +85,26 @@ expect(response.body).not_to include("Star Spangled Banister") expect(response.body).to include("You are not assigned to this challenge.") end + + it "renders a details page for an individual submission" do + challenge = create_challenge(user: challenge_user) + phase = create_phase(challenge_id: challenge.id) + submission = create(:submission, challenge: phase.challenge, brief_description: "This submission has legs.") + + get manage_submission_path(submission) + expect(response.body).to include(submission.id.to_s) + expect(response.body).to include(submission.brief_description) + end + + it "does not render submission details for a challenge the user is not assigned to" do + challenge = create_challenge() + phase = create_phase(challenge_id: challenge.id) + submission = create(:submission, challenge: phase.challenge, brief_description: "This submission has teeth.") + + get manage_submission_path(submission) + expect(response.body).not_to include(submission.brief_description) + expect(response.body).to include("You are not assigned to manage this submission.") + end end context "when logged in as an evaluator" do From d6247d18235c94e7d74a1368ca83f5b245759397 Mon Sep 17 00:00:00 2001 From: Stone Filipczak Date: Thu, 7 Nov 2024 11:17:39 -0500 Subject: [PATCH 20/32] update submission from comment form --- .../manage_submissions_controller.rb | 11 +++++++- app/helpers/manage_submissions_helper.rb | 4 +++ .../manage_submissions/_comment_form.html.erb | 9 +++++++ .../_submission_materials.html.erb | 23 ++++++++++++++++ app/views/manage_submissions/show.html.erb | 27 +++---------------- config/routes.rb | 2 +- 6 files changed, 50 insertions(+), 26 deletions(-) create mode 100644 app/views/manage_submissions/_comment_form.html.erb create mode 100644 app/views/manage_submissions/_submission_materials.html.erb diff --git a/app/controllers/manage_submissions_controller.rb b/app/controllers/manage_submissions_controller.rb index 5bcd686e..1c60f5ce 100644 --- a/app/controllers/manage_submissions_controller.rb +++ b/app/controllers/manage_submissions_controller.rb @@ -8,7 +8,16 @@ def index def show @submission = Submission.find(params[:id]) - @assigned = @submission.challenge_id.in?(current_user.challenge_manager_challenges.collect(&:id)) + end + + def update + @submission = Submission.find(params[:id]) + + if @submission.update(comments: params[:submission][:comments]) + render :show, notice: "comments saved", submission: @submission + else + render :show, status: :unprocessable_entity, submission: @submission + end end def by_challenge_phase diff --git a/app/helpers/manage_submissions_helper.rb b/app/helpers/manage_submissions_helper.rb index 88c56d24..25735f5a 100644 --- a/app/helpers/manage_submissions_helper.rb +++ b/app/helpers/manage_submissions_helper.rb @@ -8,4 +8,8 @@ def eligible_for_evaluation?(submission) def selected_to_advance?(submission) submission.judging_status.in?(%w[selected winner]) end + + def assigned_to_user?(user, submission) + submission.challenge_id.in?(user.challenge_manager_challenges.collect(&:id)) + end end diff --git a/app/views/manage_submissions/_comment_form.html.erb b/app/views/manage_submissions/_comment_form.html.erb new file mode 100644 index 00000000..5da485c6 --- /dev/null +++ b/app/views/manage_submissions/_comment_form.html.erb @@ -0,0 +1,9 @@ +<%= form_with(model: submission, url: manage_submission_path(submission), class: "width-mobile-lg") do |form| %> +
+ <%= form.label :comments, class: "usa-label" %> + <%= form.text_area :comments, class: "usa-textarea" %> +
+ +<% end %> \ No newline at end of file diff --git a/app/views/manage_submissions/_submission_materials.html.erb b/app/views/manage_submissions/_submission_materials.html.erb new file mode 100644 index 00000000..462ae756 --- /dev/null +++ b/app/views/manage_submissions/_submission_materials.html.erb @@ -0,0 +1,23 @@ +

Brief Description:

+

<%= @submission.brief_description %>

+ +

Description:

+

<%= @submission.description %>

+ +

External URL:

+><%= @submission.external_url %> + +

Status:

+

<%= @submission.status.capitalize %>

+ +

Submitter:

+

<%= @submission.submitter.email %>

+ +

Last Updated Date:

+

<%= @submission.updated_at %>

+ +

Submission ID:

+

<%= @submission.id %>

+ +

Title:

+

<%= @submission.title %>

\ No newline at end of file diff --git a/app/views/manage_submissions/show.html.erb b/app/views/manage_submissions/show.html.erb index a4925b2d..4105d911 100644 --- a/app/views/manage_submissions/show.html.erb +++ b/app/views/manage_submissions/show.html.erb @@ -1,32 +1,11 @@ -<% if @assigned %> +<% if assigned_to_user?(current_user, @submission) %>

Submission ID <%= @submission.id %>

View submission information and assign evaluators to evaluate the submission.

-
-

Brief Description:

-

<%= @submission.brief_description %>

+ <%= render partial: "submission_materials", locals: { submission: @submission } %> -

Description:

-

<%= @submission.description %>

+ <%= render partial: "comment_form", locals: { submission: @submission } %> -

External URL:

- ><%= @submission.external_url %> - -

Status:

-

<%= @submission.status.capitalize %>

- -

Submitter:

-

<%= @submission.submitter.email %>

- -

Last Updated Date:

-

<%= @submission.updated_at %>

- -

Submission ID:

-

<%= @submission.id %>

- -

Title:

-

<%= @submission.title %>

-
<% else %>

You are not assigned to manage this submission.

<% end %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 5c2ccdaa..c2115d25 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -14,7 +14,7 @@ get '/evaluation_forms/confirmation', to: 'evaluation_forms#confirmation' resources :evaluation_forms post '/evaluation_forms/clone', to: 'evaluation_forms#create_from_existing' - resources :manage_submissions, only: [:index, :show] + resources :manage_submissions, only: [:index, :show, :update] get '/manage_submissions/by_challenge_phase/:phase_id', to: 'manage_submissions#by_challenge_phase' # Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500. From 6ee60fe27c9229dac4c3817e07e6827bb34b9e1d Mon Sep 17 00:00:00 2001 From: Stone Filipczak Date: Thu, 7 Nov 2024 11:50:56 -0500 Subject: [PATCH 21/32] comment form --- app/controllers/manage_submissions_controller.rb | 10 ++++++++-- app/models/submission.rb | 3 ++- app/views/manage_submissions/_comment_form.html.erb | 2 +- .../20241107161811_add_comments_to_submissions.rb | 5 +++++ db/structure.sql | 6 ++++-- spec/factories/submission.rb | 3 ++- 6 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 db/migrate/20241107161811_add_comments_to_submissions.rb diff --git a/app/controllers/manage_submissions_controller.rb b/app/controllers/manage_submissions_controller.rb index 1c60f5ce..0af77c47 100644 --- a/app/controllers/manage_submissions_controller.rb +++ b/app/controllers/manage_submissions_controller.rb @@ -13,9 +13,11 @@ def show def update @submission = Submission.find(params[:id]) - if @submission.update(comments: params[:submission][:comments]) - render :show, notice: "comments saved", submission: @submission + if @submission.update!(submission_params) + flash.now[:success] = "Comments saved." + render :show, submission: @submission else + flash.now[:error] = "Unable to save comments." render :show, status: :unprocessable_entity, submission: @submission end end @@ -25,4 +27,8 @@ def by_challenge_phase challenge_id: current_user.challenge_manager_challenges.collect(&:id)).first @submissions = @phase ? @phase.submissions : [] end + + def submission_params + params.require(:submission).permit(:comments) + end end diff --git a/app/models/submission.rb b/app/models/submission.rb index b772c3db..6019283a 100644 --- a/app/models/submission.rb +++ b/app/models/submission.rb @@ -8,7 +8,8 @@ class Submission < ApplicationRecord belongs_to :submitter, class_name: 'User' belongs_to :challenge belongs_to :phase - belongs_to :manager, class_name: 'User' + # I don't think we need this belongs_to anymore? + # belongs_to :manager, class_name: 'User' has_many :evaluator_submission_assignments, dependent: :destroy has_many :evaluators, through: :evaluator_submission_assignments, class_name: "User" diff --git a/app/views/manage_submissions/_comment_form.html.erb b/app/views/manage_submissions/_comment_form.html.erb index 5da485c6..6624888e 100644 --- a/app/views/manage_submissions/_comment_form.html.erb +++ b/app/views/manage_submissions/_comment_form.html.erb @@ -1,7 +1,7 @@ <%= form_with(model: submission, url: manage_submission_path(submission), class: "width-mobile-lg") do |form| %>
<%= form.label :comments, class: "usa-label" %> - <%= form.text_area :comments, class: "usa-textarea" %> + <%= form.text_area :comments, class: "usa-textarea", default: submission.comments %>
<% unless phase.submissions.empty? %> - > + <%= link_to(challenge_manage_submission_path(challenge, phase)) do %> - + <% end %> <% end %>
diff --git a/app/views/manage_submissions/_submissions_table.html.erb b/app/views/manage_submissions/_submissions_table.html.erb index 8cb9a222..ad6ba9cd 100644 --- a/app/views/manage_submissions/_submissions_table.html.erb +++ b/app/views/manage_submissions/_submissions_table.html.erb @@ -24,7 +24,7 @@ class: "usa-icon--size-3 margin-right-1", alt: "" )%> - Eligible for Evaluation + Eligible for Evaluation <% else %> @@ -34,7 +34,7 @@ class: "usa-icon--size-3 margin-right-1", alt: "" )%> - Not Eligible for Evaluation + Not Eligible for Evaluation <% end %> @@ -49,7 +49,7 @@ class: "usa-icon--size-3 margin-right-1", alt: "" )%> - Selected to Advance + Selected to Advance <% else %> @@ -59,13 +59,13 @@ class: "usa-icon--size-3 margin-right-1", alt: "" )%> - Not Selected to Advance + Not Selected to Advance <% end %> - No evaluators assigned to this submission. + No evaluators assigned to this submission N/A diff --git a/app/views/manage_submissions/by_challenge_phase.erb b/app/views/manage_submissions/by_challenge_phase.erb deleted file mode 100644 index 1b047a43..00000000 --- a/app/views/manage_submissions/by_challenge_phase.erb +++ /dev/null @@ -1,16 +0,0 @@ -<% if @phase %> -

<%= challenge_phase_title(@phase.challenge, @phase) %>

-

View challenge submissions and manage evaluation progress.

- - <% if @submissions.empty? %> -
-

This challenge phase does not currently have any submissions.

-
- <% else %> - <%= render partial: "submissions_table", locals: { submissions: @submissions } %> - <% end %> -<% else %> -
-

You are not assigned to this challenge.

-
-<% end %> \ No newline at end of file diff --git a/app/views/manage_submissions/by_challenge_phase.html.erb b/app/views/manage_submissions/by_challenge_phase.html.erb new file mode 100644 index 00000000..16ab4729 --- /dev/null +++ b/app/views/manage_submissions/by_challenge_phase.html.erb @@ -0,0 +1,10 @@ +

<%= challenge_phase_title(@phase.challenge, @phase) %>

+

View challenge submissions and manage evaluation progress.

+ +<% if @submissions.empty? %> +
+

This challenge phase does not currently have any submissions.

+
+<% else %> + <%= render partial: "submissions_table", locals: { submissions: @submissions } %> +<% end %> \ No newline at end of file diff --git a/app/views/manage_submissions/show.html.erb b/app/views/manage_submissions/show.html.erb index 4105d911..189557d8 100644 --- a/app/views/manage_submissions/show.html.erb +++ b/app/views/manage_submissions/show.html.erb @@ -1,11 +1,5 @@ -<% if assigned_to_user?(current_user, @submission) %> -

Submission ID <%= @submission.id %>

-

View submission information and assign evaluators to evaluate the submission.

+

Submission ID <%= @submission.id %>

+

View submission information and assign evaluators to evaluate the submission.

- <%= render partial: "submission_materials", locals: { submission: @submission } %> - - <%= render partial: "comment_form", locals: { submission: @submission } %> - -<% else %> -

You are not assigned to manage this submission.

-<% end %> \ No newline at end of file +<%= render partial: "submission_materials", locals: { submission: @submission } %> +<%= render partial: "comment_form", locals: { submission: @submission } %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index c2115d25..41199964 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -14,8 +14,14 @@ get '/evaluation_forms/confirmation', to: 'evaluation_forms#confirmation' resources :evaluation_forms post '/evaluation_forms/clone', to: 'evaluation_forms#create_from_existing' - resources :manage_submissions, only: [:index, :show, :update] - get '/manage_submissions/by_challenge_phase/:phase_id', to: 'manage_submissions#by_challenge_phase' + resources :manage_submissions, only: [:index] + resources :challenges, only: [] do + resources :manage_submissions, only: [:show, :update] do + member do + get 'by_challenge_phase' + end + end + end # Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500. # Can be used by load balancers and uptime monitors to verify that the app is live. diff --git a/spec/requests/manage_submissions_spec.rb b/spec/requests/manage_submissions_spec.rb index 0fb08198..63d941d2 100644 --- a/spec/requests/manage_submissions_spec.rb +++ b/spec/requests/manage_submissions_spec.rb @@ -61,7 +61,7 @@ challenge = create_challenge(user: challenge_user, title: "Boston Tea Party Cleanup") phase = create_phase(challenge_id: challenge.id) - get "/manage_submissions/by_challenge_phase/#{phase.id}" + get by_challenge_phase_challenge_manage_submission_path(challenge, phase) expect(response.body).to include("Boston Tea Party Cleanup") expect(response.body).to include("This challenge phase does not currently have any submissions.") @@ -72,7 +72,7 @@ phase = create_phase(challenge_id: challenge.id) submission = create(:submission, challenge: challenge) - get "/manage_submissions/by_challenge_phase/#{phase.id}" + get by_challenge_phase_challenge_manage_submission_path(challenge, phase) expect(response.body).to include("Boston Tea Party Cleanup") expect(response.body).to include(submission.id.to_s) end @@ -81,9 +81,8 @@ challenge = create_challenge(title: "Star Spangled Banister") phase = create_phase(challenge_id: challenge.id) - get "/manage_submissions/by_challenge_phase/#{phase.id}" - expect(response.body).not_to include("Star Spangled Banister") - expect(response.body).to include("You are not assigned to this challenge.") + get by_challenge_phase_challenge_manage_submission_path(challenge, phase) + expect(response).to have_http_status(:not_found) end it "renders a details page for an individual submission" do @@ -91,7 +90,7 @@ phase = create_phase(challenge_id: challenge.id) submission = create(:submission, challenge: phase.challenge, brief_description: "This submission has legs.") - get manage_submission_path(submission) + get challenge_manage_submission_path(challenge, submission, phase_id: phase.id) expect(response.body).to include(submission.id.to_s) expect(response.body).to include(submission.brief_description) end @@ -101,9 +100,8 @@ phase = create_phase(challenge_id: challenge.id) submission = create(:submission, challenge: phase.challenge, brief_description: "This submission has teeth.") - get manage_submission_path(submission) - expect(response.body).not_to include(submission.brief_description) - expect(response.body).to include("You are not assigned to manage this submission.") + get challenge_manage_submission_path(challenge, submission, phase_id: phase.id) + expect(response).to have_http_status(:not_found) end end diff --git a/spec/system/manage_submissions_spec.rb b/spec/system/manage_submissions_spec.rb index 12c40449..3b9c21ea 100644 --- a/spec/system/manage_submissions_spec.rb +++ b/spec/system/manage_submissions_spec.rb @@ -21,6 +21,7 @@ it "manage submissions index page is accessible with one challenge" do challenge = create_challenge(user: user, title: "Boston Tea Party Cleanup") create_phase(challenge_id: challenge.id) + visit manage_submissions_path expect(user.role).to eq("challenge_manager") expect(page).to have_content("Boston Tea Party Cleanup") @@ -30,7 +31,8 @@ it "manage submissions by challenge phase page is accessible with one challenge" do challenge = create_challenge(user: user, title: "Boston Tea Party Cleanup") phase = create_phase(challenge_id: challenge.id) - visit "/manage_submissions/by_challenge_phase/#{phase.id}" + + visit by_challenge_phase_challenge_manage_submission_path(challenge, phase) expect(user.role).to eq("challenge_manager") expect(page).to have_content("Boston Tea Party Cleanup") expect(page).to(be_axe_clean) From adcfae44dcd94da46a69708ff958e2b04b473dca Mon Sep 17 00:00:00 2001 From: Stephen Chudleigh Date: Fri, 8 Nov 2024 14:50:06 -0800 Subject: [PATCH 24/32] update evaluation_form routes --- app/controllers/evaluation_forms_controller.rb | 2 +- config/routes.rb | 9 ++++++--- spec/requests/manage_submissions_spec.rb | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/app/controllers/evaluation_forms_controller.rb b/app/controllers/evaluation_forms_controller.rb index d8c5fed0..c71a12d9 100644 --- a/app/controllers/evaluation_forms_controller.rb +++ b/app/controllers/evaluation_forms_controller.rb @@ -41,7 +41,7 @@ def update respond_to do |format| if @evaluation_form.update(evaluation_form_params) format.html do - redirect_to evaluation_forms_confirmation_path, notice: I18n.t("evaluation_form_saved") + redirect_to confirmation_evaluation_form_path(@evaluation_form), notice: I18n.t("evaluation_form_saved") end format.json { render :show, status: :ok, location: @evaluation_form } else diff --git a/config/routes.rb b/config/routes.rb index 41199964..6e48886d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -11,9 +11,12 @@ get '/dashboard', to: "dashboard#index" resources :evaluations, only: [:index] - get '/evaluation_forms/confirmation', to: 'evaluation_forms#confirmation' - resources :evaluation_forms - post '/evaluation_forms/clone', to: 'evaluation_forms#create_from_existing' + resources :evaluation_forms do + member do + get 'confirmation' + post 'clone' + end + end resources :manage_submissions, only: [:index] resources :challenges, only: [] do resources :manage_submissions, only: [:show, :update] do diff --git a/spec/requests/manage_submissions_spec.rb b/spec/requests/manage_submissions_spec.rb index 63d941d2..7de165bc 100644 --- a/spec/requests/manage_submissions_spec.rb +++ b/spec/requests/manage_submissions_spec.rb @@ -70,7 +70,7 @@ it "renders a list of submissions for a user's challenge" do challenge = create_challenge(user: challenge_user, title: "Boston Tea Party Cleanup") phase = create_phase(challenge_id: challenge.id) - submission = create(:submission, challenge: challenge) + submission = create(:submission, challenge: challenge, phase: phase) get by_challenge_phase_challenge_manage_submission_path(challenge, phase) expect(response.body).to include("Boston Tea Party Cleanup") From 6d3e79a52b53518d3d749da6b43457de7ee5b232 Mon Sep 17 00:00:00 2001 From: Stephen Chudleigh Date: Fri, 8 Nov 2024 16:30:09 -0800 Subject: [PATCH 25/32] update manage_submission routes, DB migration text col --- app/controllers/manage_phases_controller.rb | 21 ++++++++++++++++ .../manage_submissions_controller.rb | 23 +++++++----------- app/helpers/dashboard_helper.rb | 2 +- app/helpers/manage_submissions_helper.rb | 7 ------ app/models/submission.rb | 8 +++++++ app/views/layouts/_utility_menu.erb | 2 +- .../_phases_table.html.erb | 2 +- .../_submissions_table.html.erb | 6 ++--- .../index.html.erb | 0 .../submissions.html.erb} | 0 .../manage_submissions/_comment_form.html.erb | 4 ++-- config/routes.rb | 10 ++++---- ...41107161811_add_comments_to_submissions.rb | 2 +- db/structure.sql | 4 ++-- spec/requests/manage_submissions_spec.rb | 24 +++++++++---------- spec/system/manage_submissions_spec.rb | 6 ++--- 16 files changed, 67 insertions(+), 54 deletions(-) create mode 100644 app/controllers/manage_phases_controller.rb rename app/views/{manage_submissions => manage_phases}/_phases_table.html.erb (95%) rename app/views/{manage_submissions => manage_phases}/_submissions_table.html.erb (93%) rename app/views/{manage_submissions => manage_phases}/index.html.erb (100%) rename app/views/{manage_submissions/by_challenge_phase.html.erb => manage_phases/submissions.html.erb} (100%) diff --git a/app/controllers/manage_phases_controller.rb b/app/controllers/manage_phases_controller.rb new file mode 100644 index 00000000..1a1c777a --- /dev/null +++ b/app/controllers/manage_phases_controller.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +class ManagePhasesController < ApplicationController + before_action -> { authorize_user('challenge_manager') } + before_action :set_phase, except: [:index] + + def index + @challenges = current_user.challenge_manager_challenges + end + + def submissions + @submissions = @phase.submissions + end + + private + + def set_phase + @phase = Phase.where(challenge: current_user.challenge_manager_challenges).find(params[:id]) + @challenge = @phase.challenge + end +end diff --git a/app/controllers/manage_submissions_controller.rb b/app/controllers/manage_submissions_controller.rb index 4d08388a..5ba46200 100644 --- a/app/controllers/manage_submissions_controller.rb +++ b/app/controllers/manage_submissions_controller.rb @@ -2,19 +2,11 @@ class ManageSubmissionsController < ApplicationController before_action -> { authorize_user('challenge_manager') } - def index - @challenges = current_user.challenge_manager_challenges - end + before_action :set_submission, only: [:show, :update] - def show - @challenge = current_user.challenge_manager_challenges.find(params[:challenge_id]) - @phase = @challenge.phases.find(params[:phase_id]) - @submission = @phase.submissions.find(params[:id]) - end + def show; end def update - @submission = Submission.find(params[:id]) - if @submission.update!(submission_params) flash.now[:success] = I18n.t("comments_saved") render :show, submission: @submission @@ -23,13 +15,14 @@ def update end end - def by_challenge_phase - @challenge = current_user.challenge_manager_challenges.find(params[:challenge_id]) - @phase = @challenge.phases.find(params[:id]) - @submissions = @phase.submissions - end + private def submission_params params.require(:submission).permit(:comments) end + + # User access enforced through their assigned challenge_manager_challenges + def set_submission + @submission = Submission.where(challenge: current_user.challenge_manager_challenges).find(params[:id]) + end end diff --git a/app/helpers/dashboard_helper.rb b/app/helpers/dashboard_helper.rb index 515b190c..58ece2e4 100644 --- a/app/helpers/dashboard_helper.rb +++ b/app/helpers/dashboard_helper.rb @@ -6,7 +6,7 @@ def dashboard_cards_by_role challenge_manager: [ { image_path: 'emoji_events', href: Rails.configuration.phx_interop[:phx_uri], alt: 'challenges', title: 'Challenges', subtitle: 'Create and manage challenges.' }, - { image_path: 'star_half', href: 'manage_submissions', + { image_path: 'star_half', href: 'manage_phases', alt: 'submissions and evaluations', title: 'Submissions & Evaluations', subtitle: 'Manage submissions, evaluations, and evaluators.' }, { image_path: 'check_circle_outline', href: 'evaluation_forms', diff --git a/app/helpers/manage_submissions_helper.rb b/app/helpers/manage_submissions_helper.rb index 26876590..fcdfe6fb 100644 --- a/app/helpers/manage_submissions_helper.rb +++ b/app/helpers/manage_submissions_helper.rb @@ -1,11 +1,4 @@ # frozen_string_literal: true module ManageSubmissionsHelper - def eligible_for_evaluation?(submission) - submission.judging_status.in?(%w[selected winner]) - end - - def selected_to_advance?(submission) - submission.judging_status.in?(%w[winner]) - end end diff --git a/app/models/submission.rb b/app/models/submission.rb index 6019283a..7dbc04e2 100644 --- a/app/models/submission.rb +++ b/app/models/submission.rb @@ -23,4 +23,12 @@ class Submission < ApplicationRecord # Validations validates :title, presence: true + + def eligible_for_evaluation? + selected? or winner? + end + + def selected_to_advance? + winner? + end end diff --git a/app/views/layouts/_utility_menu.erb b/app/views/layouts/_utility_menu.erb index a6c89882..b3524664 100644 --- a/app/views/layouts/_utility_menu.erb +++ b/app/views/layouts/_utility_menu.erb @@ -3,7 +3,7 @@ <%= utility_menu_link('grid_view', dashboard_path, 'dashboard', 'Dashboard') %> <% if current_user.role == "challenge_manager" %> <%= utility_menu_link('emoji_events', Rails.configuration.phx_interop[:phx_uri], 'challenges', 'Challenges') %> - <%= utility_menu_link('star_half', manage_submissions_path, 'Manage Submissions and Evaluations', 'Submissions & Evaluations') %> + <%= utility_menu_link('star_half', manage_phases_path, 'Manage Submissions and Evaluations', 'Submissions & Evaluations') %> <%= utility_menu_link('check_circle_outline', evaluation_forms_path, 'Evaluation Forms', 'Evaluation Forms') %> <% end %> <% if current_user.role == "evaluator" %> diff --git a/app/views/manage_submissions/_phases_table.html.erb b/app/views/manage_phases/_phases_table.html.erb similarity index 95% rename from app/views/manage_submissions/_phases_table.html.erb rename to app/views/manage_phases/_phases_table.html.erb index 241f29c1..113b44f7 100644 --- a/app/views/manage_submissions/_phases_table.html.erb +++ b/app/views/manage_phases/_phases_table.html.erb @@ -39,7 +39,7 @@ Manage Evaluators <% unless phase.submissions.empty? %> - <%= link_to(challenge_manage_submission_path(challenge, phase)) do %> + <%= link_to(submissions_manage_phase_path(phase)) do %> diff --git a/app/views/manage_submissions/_submissions_table.html.erb b/app/views/manage_phases/_submissions_table.html.erb similarity index 93% rename from app/views/manage_submissions/_submissions_table.html.erb rename to app/views/manage_phases/_submissions_table.html.erb index 210e2cc9..542c7364 100644 --- a/app/views/manage_submissions/_submissions_table.html.erb +++ b/app/views/manage_phases/_submissions_table.html.erb @@ -16,7 +16,7 @@
- <% if eligible_for_evaluation?(submission) %> + <% if submission.eligible_for_evaluation? %>
<%= image_tag( @@ -41,7 +41,7 @@
- <% if selected_to_advance?(submission) %> + <% if submission.selected_to_advance? %>
<%= image_tag( @@ -72,7 +72,7 @@
- <%= link_to challenge_manage_submission_path(@challenge, submission, phase_id: @phase.id) do %> + <%= link_to manage_submission_path(submission) do %> diff --git a/app/views/manage_submissions/index.html.erb b/app/views/manage_phases/index.html.erb similarity index 100% rename from app/views/manage_submissions/index.html.erb rename to app/views/manage_phases/index.html.erb diff --git a/app/views/manage_submissions/by_challenge_phase.html.erb b/app/views/manage_phases/submissions.html.erb similarity index 100% rename from app/views/manage_submissions/by_challenge_phase.html.erb rename to app/views/manage_phases/submissions.html.erb diff --git a/app/views/manage_submissions/_comment_form.html.erb b/app/views/manage_submissions/_comment_form.html.erb index 60d6cd50..787eadf3 100644 --- a/app/views/manage_submissions/_comment_form.html.erb +++ b/app/views/manage_submissions/_comment_form.html.erb @@ -1,6 +1,6 @@ -<%= form_with(model: @submission, url: challenge_manage_submission_path(@challenge, @submission, phase_id: @phase.id), class: "width-mobile-lg") do |form| %> +<%= form_with(model: @submission, url: manage_submission_path(@submission), class: "width-mobile-lg") do |form| %>
- <%= form.label :comments, class: "usa-label" %> + <%= form.label :comments, "Comments and notes:", class: "usa-label" %> <%= form.text_area :comments, class: "usa-textarea", default: @submission.comments %>
<% unless phase.submissions.empty? %> - <%= link_to(submissions_manage_phase_path(phase)) do %> + <%= link_to(submissions_phase_path(phase)) do %> diff --git a/app/views/manage_phases/_submissions_table.html.erb b/app/views/phases/_submissions_table.html.erb similarity index 98% rename from app/views/manage_phases/_submissions_table.html.erb rename to app/views/phases/_submissions_table.html.erb index 542c7364..bf20e0e2 100644 --- a/app/views/manage_phases/_submissions_table.html.erb +++ b/app/views/phases/_submissions_table.html.erb @@ -72,7 +72,7 @@
- <%= link_to manage_submission_path(submission) do %> + <%= link_to submission_path(submission) do %> diff --git a/app/views/manage_phases/index.html.erb b/app/views/phases/index.html.erb similarity index 100% rename from app/views/manage_phases/index.html.erb rename to app/views/phases/index.html.erb diff --git a/app/views/manage_phases/submissions.html.erb b/app/views/phases/submissions.html.erb similarity index 100% rename from app/views/manage_phases/submissions.html.erb rename to app/views/phases/submissions.html.erb diff --git a/app/views/manage_submissions/_comment_form.html.erb b/app/views/submissions/_comment_form.html.erb similarity index 75% rename from app/views/manage_submissions/_comment_form.html.erb rename to app/views/submissions/_comment_form.html.erb index 787eadf3..4197dd9d 100644 --- a/app/views/manage_submissions/_comment_form.html.erb +++ b/app/views/submissions/_comment_form.html.erb @@ -1,4 +1,4 @@ -<%= form_with(model: @submission, url: manage_submission_path(@submission), class: "width-mobile-lg") do |form| %> +<%= form_with(model: @submission, url: submission_path(@submission), class: "width-mobile-lg") do |form| %>
<%= form.label :comments, "Comments and notes:", class: "usa-label" %> <%= form.text_area :comments, class: "usa-textarea", default: @submission.comments %> diff --git a/app/views/manage_submissions/_submission_materials.html.erb b/app/views/submissions/_submission_materials.html.erb similarity index 100% rename from app/views/manage_submissions/_submission_materials.html.erb rename to app/views/submissions/_submission_materials.html.erb diff --git a/app/views/manage_submissions/show.html.erb b/app/views/submissions/show.html.erb similarity index 100% rename from app/views/manage_submissions/show.html.erb rename to app/views/submissions/show.html.erb diff --git a/config/routes.rb b/config/routes.rb index 6bd7ada1..b6e614c1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -17,12 +17,12 @@ post 'clone' end end - resources :manage_phases, only: [:index] do + resources :phases, only: [:index] do member do get :submissions end end - resources :manage_submissions, only: [:index, :show, :update] + resources :submissions, only: [:index, :show, :update] # Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500. # Can be used by load balancers and uptime monitors to verify that the app is live. diff --git a/spec/helpers/manage_submissions_helper_spec.rb b/spec/helpers/manage_submissions_helper_spec.rb deleted file mode 100644 index 3bd03afb..00000000 --- a/spec/helpers/manage_submissions_helper_spec.rb +++ /dev/null @@ -1,12 +0,0 @@ -require 'rails_helper' - -# Specs in this file have access to a helper object that includes -# the ManageSubmissionsHelper. For example: -# -# describe ManageSubmissionsHelper do -# describe "string concat" do -# it "concats two strings with spaces" do -# expect(helper.concat_strings("this","that")).to eq("this that") -# end -# end -# end diff --git a/spec/requests/manage_submissions_spec.rb b/spec/requests/submissions_spec.rb similarity index 88% rename from spec/requests/manage_submissions_spec.rb rename to spec/requests/submissions_spec.rb index 1dd7d9b8..ea3d60b0 100644 --- a/spec/requests/manage_submissions_spec.rb +++ b/spec/requests/submissions_spec.rb @@ -1,14 +1,14 @@ require 'rails_helper' -RSpec.describe "ManageSubmissions" do - describe "GET /manage_submissions" do +RSpec.describe "Submissions" do + describe "GET /submissions" do context "when logged in as a super admin" do before do create_and_log_in_user(role: "super_admin") end it "redirects to the phoenix app" do - get manage_phases_path + get phases_path expect(response).to redirect_to(ENV.fetch("PHOENIX_URI", nil)) end @@ -20,7 +20,7 @@ end it "redirects to the phoenix app" do - get manage_phases_path + get phases_path expect(response).to redirect_to(ENV.fetch("PHOENIX_URI", nil)) end @@ -32,7 +32,7 @@ before { log_in_user(challenge_user) } it "renders the index view with the correct header" do - get manage_phases_path + get phases_path expect(response).to have_http_status(:success) expect(response.body).to include("Submissions & Evaluations") @@ -40,7 +40,7 @@ end it "renders an empty list" do - get manage_phases_path + get phases_path expect(response.body).to include("You currently do not have any challenges.") end @@ -52,7 +52,7 @@ ChallengeManager.create(user: challenge_user, challenge:) create_evaluation_form(title: "Frodo", challenge_id: challenge.id, phase_id: phase.id) - get manage_phases_path + get phases_path expect(response.body).to include("Turning monster energy into pepto bismol") expect(response.body).to include("Frodo") end @@ -61,7 +61,7 @@ challenge = create_challenge(user: challenge_user, title: "Boston Tea Party Cleanup") phase = create_phase(challenge_id: challenge.id) - get submissions_manage_phase_path(phase) + get submissions_phase_path(phase) expect(response.body).to include("Boston Tea Party Cleanup") expect(response.body).to include("This challenge phase does not currently have any submissions.") @@ -72,7 +72,7 @@ phase = create_phase(challenge_id: challenge.id) submission = create(:submission, challenge: challenge, phase: phase) - get submissions_manage_phase_path(phase) + get submissions_phase_path(phase) expect(response.body).to include("Boston Tea Party Cleanup") expect(response.body).to include(submission.id.to_s) end @@ -81,7 +81,7 @@ challenge = create_challenge(title: "Star Spangled Banister") phase = create_phase(challenge_id: challenge.id) - get submissions_manage_phase_path(phase) + get submissions_phase_path(phase) expect(response).to have_http_status(:not_found) end @@ -90,7 +90,7 @@ phase = create_phase(challenge_id: challenge.id) submission = create(:submission, challenge: phase.challenge, brief_description: "This submission has legs.") - get manage_submission_path(submission) + get submission_path(submission) expect(response.body).to include(submission.id.to_s) expect(response.body).to include(submission.brief_description) end @@ -100,7 +100,7 @@ phase = create_phase(challenge_id: challenge.id) submission = create(:submission, challenge: phase.challenge, brief_description: "This submission has teeth.") - get manage_submission_path(submission) + get submission_path(submission) expect(response).to have_http_status(:not_found) end end @@ -111,7 +111,7 @@ end it "redirects to the dashboard" do - get manage_phases_path + get phases_path expect(response).to redirect_to(dashboard_path) end @@ -123,7 +123,7 @@ end it "redirects to the phoenix app" do - get manage_phases_path + get phases_path expect(response).to redirect_to(ENV.fetch("PHOENIX_URI", nil)) end diff --git a/spec/system/manage_submissions_spec.rb b/spec/system/submissions_spec.rb similarity index 91% rename from spec/system/manage_submissions_spec.rb rename to spec/system/submissions_spec.rb index 5d06487e..1f07c53d 100644 --- a/spec/system/manage_submissions_spec.rb +++ b/spec/system/submissions_spec.rb @@ -13,7 +13,7 @@ let(:user) { create_user(role: "challenge_manager") } it "manage submissions index page is accessible with no challenges" do - visit manage_phases_path + visit phases_path expect(user.role).to eq("challenge_manager") expect(page).to(be_axe_clean) end @@ -22,7 +22,7 @@ challenge = create_challenge(user: user, title: "Boston Tea Party Cleanup") create_phase(challenge_id: challenge.id) - visit manage_phases_path + visit phases_path expect(user.role).to eq("challenge_manager") expect(page).to have_content("Boston Tea Party Cleanup") expect(page).to(be_axe_clean) @@ -32,7 +32,7 @@ challenge = create_challenge(user: user, title: "Boston Tea Party Cleanup") phase = create_phase(challenge_id: challenge.id) - visit submissions_manage_phase_path(phase) + visit submissions_phase_path(phase) expect(user.role).to eq("challenge_manager") expect(page).to have_content("Boston Tea Party Cleanup") expect(page).to(be_axe_clean) From 5d5a20b66e59c30fc44650ef605b0c95b0250181 Mon Sep 17 00:00:00 2001 From: Stephen Chudleigh Date: Thu, 14 Nov 2024 10:05:49 -0800 Subject: [PATCH 27/32] update session route --- app/javascript/session_timeout.js | 4 ++-- config/routes.rb | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/app/javascript/session_timeout.js b/app/javascript/session_timeout.js index 3deff06c..236f6b15 100644 --- a/app/javascript/session_timeout.js +++ b/app/javascript/session_timeout.js @@ -29,7 +29,7 @@ document.addEventListener("DOMContentLoaded", function () { }; const logoutSession = () => { - fetch("/sessions/timeout", { + fetch("/session/timeout", { method: "DELETE", headers: { "X-CSRF-Token": document.querySelector('meta[name="csrf-token"]') @@ -67,7 +67,7 @@ document.addEventListener("DOMContentLoaded", function () { }); var renewSession = () => { - fetch("/sessions/renew", { + fetch("/session/renew", { method: "POST", headers: { "X-CSRF-Token": document diff --git a/config/routes.rb b/config/routes.rb index b6e614c1..99e2aab8 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -3,9 +3,10 @@ Rails.application.routes.draw do # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html get 'auth/result', to: 'sessions#result' - resource 'session', only: [:new, :create, :destroy] - post 'sessions/renew', to: 'sessions#renew' - delete 'sessions/timeout', to: 'sessions#timeout' + resource 'session', only: [:new, :create, :destroy] do + post 'renew' + delete 'timeout' + end get '/', to: "dashboard#index" get '/dashboard', to: "dashboard#index" From 4b5dd1d4f2380fc6f03d84767aff79a880f6846a Mon Sep 17 00:00:00 2001 From: Stephen Chudleigh Date: Thu, 14 Nov 2024 10:29:31 -0800 Subject: [PATCH 28/32] add phases specs --- spec/requests/phases_spec.rb | 85 ++++++++++++++++++++++++ spec/requests/submissions_spec.rb | 103 +++++++++++------------------- spec/system/phases_spec.rb | 31 +++++++++ spec/system/submissions_spec.rb | 16 ----- 4 files changed, 152 insertions(+), 83 deletions(-) create mode 100644 spec/requests/phases_spec.rb create mode 100644 spec/system/phases_spec.rb diff --git a/spec/requests/phases_spec.rb b/spec/requests/phases_spec.rb new file mode 100644 index 00000000..b7b7eda1 --- /dev/null +++ b/spec/requests/phases_spec.rb @@ -0,0 +1,85 @@ +require 'rails_helper' + +RSpec.describe "Phases" do + describe "GET /phases" do + context "when logged in as a super admin" do + before do + create_and_log_in_user(role: "super_admin") + end + + it "redirects to the phoenix app" do + get phases_path + + expect(response).to redirect_to(ENV.fetch("PHOENIX_URI", nil)) + end + end + + context "when logged in as a admin" do + before do + create_and_log_in_user(role: "admin") + end + + it "redirects to the phoenix app" do + get phases_path + + expect(response).to redirect_to(ENV.fetch("PHOENIX_URI", nil)) + end + end + + context "when logged in as a challenge manager" do + let(:challenge_user) { create_user(role: "challenge_manager") } + + before { log_in_user(challenge_user) } + + it "renders the index view with the correct header" do + get phases_path + + expect(response).to have_http_status(:success) + expect(response.body).to include("Submissions & Evaluations") + expect(response.body).to include("View challenge submissions") + end + + it "renders an empty list" do + get phases_path + + expect(response.body).to include("You currently do not have any challenges.") + end + + it "renders a list of challenges" do + agency = Agency.create!(name: "Gandalf and Sons", acronym: "GAD") + challenge = Challenge.create!(user: challenge_user, agency:, title: "Turning monster energy into pepto bismol") + phase = create_phase(challenge_id: challenge.id) + ChallengeManager.create(user: challenge_user, challenge:) + create_evaluation_form(title: "Frodo", challenge_id: challenge.id, phase_id: phase.id) + + get phases_path + expect(response.body).to include("Turning monster energy into pepto bismol") + expect(response.body).to include("Frodo") + end + end + + context "when logged in as an evaluator" do + before do + create_and_log_in_user(role: "evaluator") + end + + it "redirects to the dashboard" do + get phases_path + + expect(response).to redirect_to(dashboard_path) + end + end + + context "when logged in as a solver" do + before do + create_and_log_in_user(role: "solver") + end + + it "redirects to the phoenix app" do + get phases_path + + expect(response).to redirect_to(ENV.fetch("PHOENIX_URI", nil)) + end + end + end +end diff --git a/spec/requests/submissions_spec.rb b/spec/requests/submissions_spec.rb index ea3d60b0..2038e403 100644 --- a/spec/requests/submissions_spec.rb +++ b/spec/requests/submissions_spec.rb @@ -1,11 +1,15 @@ require 'rails_helper' RSpec.describe "Submissions" do - describe "GET /submissions" do + let(:user) { nil } + let(:challenge) { create_challenge(user: user, title: "Boston Tea Party Cleanup") } + let(:phase) { create_phase(challenge_id: challenge.id) } + + before { log_in_user(user) } + + describe "GET /phases/:id/submissions" do context "when logged in as a super admin" do - before do - create_and_log_in_user(role: "super_admin") - end + let(:user) { create_user(role: "super_admin") } it "redirects to the phoenix app" do get phases_path @@ -15,9 +19,7 @@ end context "when logged in as a admin" do - before do - create_and_log_in_user(role: "admin") - end + let(:user) { create_user(role: "admin") } it "redirects to the phoenix app" do get phases_path @@ -27,40 +29,9 @@ end context "when logged in as a challenge manager" do - let(:challenge_user) { create_user(role: "challenge_manager") } - - before { log_in_user(challenge_user) } - - it "renders the index view with the correct header" do - get phases_path - - expect(response).to have_http_status(:success) - expect(response.body).to include("Submissions & Evaluations") - expect(response.body).to include("View challenge submissions") - end - - it "renders an empty list" do - get phases_path - - expect(response.body).to include("You currently do not have any challenges.") - end - - it "renders a list of challenges" do - agency = Agency.create!(name: "Gandalf and Sons", acronym: "GAD") - challenge = Challenge.create!(user: challenge_user, agency:, title: "Turning monster energy into pepto bismol") - phase = create_phase(challenge_id: challenge.id) - ChallengeManager.create(user: challenge_user, challenge:) - create_evaluation_form(title: "Frodo", challenge_id: challenge.id, phase_id: phase.id) - - get phases_path - expect(response.body).to include("Turning monster energy into pepto bismol") - expect(response.body).to include("Frodo") - end + let(:user) { create_user(role: "challenge_manager") } it "renders an empty list of submissions for a user's challenge" do - challenge = create_challenge(user: challenge_user, title: "Boston Tea Party Cleanup") - phase = create_phase(challenge_id: challenge.id) - get submissions_phase_path(phase) expect(response.body).to include("Boston Tea Party Cleanup") @@ -68,8 +39,6 @@ end it "renders a list of submissions for a user's challenge" do - challenge = create_challenge(user: challenge_user, title: "Boston Tea Party Cleanup") - phase = create_phase(challenge_id: challenge.id) submission = create(:submission, challenge: challenge, phase: phase) get submissions_phase_path(phase) @@ -84,10 +53,34 @@ get submissions_phase_path(phase) expect(response).to have_http_status(:not_found) end + end + + context "when logged in as an evaluator" do + let(:user) { create_user(role: "evaluator") } + + it "redirects to the dashboard" do + get submissions_phase_path(phase) + + expect(response).to redirect_to(dashboard_path) + end + end + + context "when logged in as a solver" do + let(:user) { create_user(role: "solver") } + + it "redirects to the phoenix app" do + get submissions_phase_path(phase) + + expect(response).to redirect_to(ENV.fetch("PHOENIX_URI", nil)) + end + end + end + + describe "GET /submissions/:id" do + context "when logged in as a challenge manager" do + let(:user) { create_user(role: "challenge_manager") } it "renders a details page for an individual submission" do - challenge = create_challenge(user: challenge_user) - phase = create_phase(challenge_id: challenge.id) submission = create(:submission, challenge: phase.challenge, brief_description: "This submission has legs.") get submission_path(submission) @@ -104,29 +97,5 @@ expect(response).to have_http_status(:not_found) end end - - context "when logged in as an evaluator" do - before do - create_and_log_in_user(role: "evaluator") - end - - it "redirects to the dashboard" do - get phases_path - - expect(response).to redirect_to(dashboard_path) - end - end - - context "when logged in as a solver" do - before do - create_and_log_in_user(role: "solver") - end - - it "redirects to the phoenix app" do - get phases_path - - expect(response).to redirect_to(ENV.fetch("PHOENIX_URI", nil)) - end - end end end diff --git a/spec/system/phases_spec.rb b/spec/system/phases_spec.rb new file mode 100644 index 00000000..8fc0732e --- /dev/null +++ b/spec/system/phases_spec.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe "A11y", :js do + let(:user) { nil } + + before do + system_login_user(user) if user + end + + describe "Logged-in as a Challenge Manager" do + let(:user) { create_user(role: "challenge_manager") } + + it "manage phases index page is accessible with no challenges" do + visit phases_path + expect(user.role).to eq("challenge_manager") + expect(page).to(be_axe_clean) + end + + it "manage phases index page is accessible with one challenge" do + challenge = create_challenge(user: user, title: "Boston Tea Party Cleanup") + create_phase(challenge_id: challenge.id) + + visit phases_path + expect(user.role).to eq("challenge_manager") + expect(page).to have_content("Boston Tea Party Cleanup") + expect(page).to(be_axe_clean) + end + end +end diff --git a/spec/system/submissions_spec.rb b/spec/system/submissions_spec.rb index 1f07c53d..024e2153 100644 --- a/spec/system/submissions_spec.rb +++ b/spec/system/submissions_spec.rb @@ -12,22 +12,6 @@ describe "Logged-in as a Challenge Manager" do let(:user) { create_user(role: "challenge_manager") } - it "manage submissions index page is accessible with no challenges" do - visit phases_path - expect(user.role).to eq("challenge_manager") - expect(page).to(be_axe_clean) - end - - it "manage submissions index page is accessible with one challenge" do - challenge = create_challenge(user: user, title: "Boston Tea Party Cleanup") - create_phase(challenge_id: challenge.id) - - visit phases_path - expect(user.role).to eq("challenge_manager") - expect(page).to have_content("Boston Tea Party Cleanup") - expect(page).to(be_axe_clean) - end - it "manage submissions by challenge phase page is accessible with one challenge" do challenge = create_challenge(user: user, title: "Boston Tea Party Cleanup") phase = create_phase(challenge_id: challenge.id) From 20a50ed138865980b7e4150aba3c8032c57c50f5 Mon Sep 17 00:00:00 2001 From: Stephen Chudleigh Date: Thu, 14 Nov 2024 15:43:12 -0800 Subject: [PATCH 29/32] adds Submission.by_user(user) scope --- .../evaluation_forms_controller.rb | 8 +++- app/controllers/submissions_controller.rb | 2 +- app/models/submission.rb | 12 +++++ app/views/evaluation_forms/_form.html.erb | 2 +- spec/models/submission_spec.rb | 47 +++++++++++++++++++ 5 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 spec/models/submission_spec.rb diff --git a/app/controllers/evaluation_forms_controller.rb b/app/controllers/evaluation_forms_controller.rb index 71b350fe..0dcd684a 100644 --- a/app/controllers/evaluation_forms_controller.rb +++ b/app/controllers/evaluation_forms_controller.rb @@ -68,11 +68,15 @@ def confirmation; end # Use callbacks to share common setup or constraints between actions. def set_evaluation_form - @evaluation_form = EvaluationForm.find(params[:id]) + @evaluation_form = EvaluationForm. + by_user(current_user). + find(params[:id]) end def set_evaluation_forms - @evaluation_forms = EvaluationForm.by_user(current_user).includes([:challenge, :phase]) + @evaluation_forms = EvaluationForm. + by_user(current_user). + includes([:challenge, :phase]) end # Only allow a list of trusted parameters through. diff --git a/app/controllers/submissions_controller.rb b/app/controllers/submissions_controller.rb index 3e367110..c96dab53 100644 --- a/app/controllers/submissions_controller.rb +++ b/app/controllers/submissions_controller.rb @@ -23,6 +23,6 @@ def submission_params # User access enforced through their assigned challenge_manager_challenges def set_submission - @submission = Submission.where(challenge: current_user.challenge_manager_challenges).find(params[:id]) + @submission = Submission.by_user(current_user).find(params[:id]) end end diff --git a/app/models/submission.rb b/app/models/submission.rb index 7dbc04e2..83ad0e2b 100644 --- a/app/models/submission.rb +++ b/app/models/submission.rb @@ -24,6 +24,18 @@ class Submission < ApplicationRecord # Validations validates :title, presence: true + scope :by_user, lambda { |user| + case user.role + when 'challenge_manager' + where(challenge: user.challenge_manager_challenges) + when 'evaluator' + joins(:evaluators).where(evaluators: { id: user.id }) + when 'solver' + where(submitter: user) + else + none + end + } def eligible_for_evaluation? selected? or winner? end diff --git a/app/views/evaluation_forms/_form.html.erb b/app/views/evaluation_forms/_form.html.erb index cbc78bcc..8d4f2953 100644 --- a/app/views/evaluation_forms/_form.html.erb +++ b/app/views/evaluation_forms/_form.html.erb @@ -36,7 +36,7 @@
Choose the challenge this form will evaluate.