From 4a1fe822550a126b7d10058f51f60734eed6c784 Mon Sep 17 00:00:00 2001 From: carolyncole <1599081+carolyncole@users.noreply.github.com> Date: Tue, 24 Sep 2024 16:10:23 -0400 Subject: [PATCH] Adding a presenter for the project show page (#951) This is a step to allow us to display only part of the path to the user refs #941 --- app/controllers/projects_controller.rb | 4 +- app/presenters/project_show_presenter.rb | 10 ++++ app/views/projects/show.html.erb | 10 ++-- spec/models/project_show_presenter_spec.rb | 55 ++++++++++++++++++++++ 4 files changed, 73 insertions(+), 6 deletions(-) create mode 100644 app/presenters/project_show_presenter.rb create mode 100644 spec/models/project_show_presenter_spec.rb diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 2f369d6d3..f71881bdb 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -109,7 +109,9 @@ def show @project_purpose = @project_metadata[:project_purpose] respond_to do |format| - format.html + format.html do + @project = ProjectShowPresenter.new(project) + end format.json do render json: project.to_json end diff --git a/app/presenters/project_show_presenter.rb b/app/presenters/project_show_presenter.rb new file mode 100644 index 000000000..dc08ebefe --- /dev/null +++ b/app/presenters/project_show_presenter.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +class ProjectShowPresenter + delegate "id", "in_mediaflux?", "mediaflux_id", "metadata", "metadata_model", "pending?", "project_directory", "status", "title", to: :project + + attr_reader :project + + def initialize(project) + @project = project + end +end diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb index 4e26b78b3..a1fb0236f 100644 --- a/app/views/projects/show.html.erb +++ b/app/views/projects/show.html.erb @@ -25,7 +25,7 @@ Project Details:

Roles <% if @project_eligible_to_edit %> - <%= link_to "Edit", edit_project_path(@project), id:"revisible-heading", class: "btn btn-primary btn-sm" %> + <%= link_to "Edit", edit_project_path(@project.id), id:"revisible-heading", class: "btn btn-primary btn-sm" %> <% end %>

@@ -58,7 +58,7 @@ Project Details:

Project Description <% if @project_eligible_to_edit %> - <%= link_to "Edit", edit_project_path(@project), id:"revisible-heading", class: "btn btn-primary btn-sm" %> + <%= link_to "Edit", edit_project_path(@project.id), id:"revisible-heading", class: "btn btn-primary btn-sm" %> <% end %>

@@ -96,7 +96,7 @@ Project Details:
<% if !current_user.eligible_sysadmin? %> - <%= link_to "Review Contents", project_contents_path(@project), class: "btn btn-primary btn-sm" %> + <%= link_to "Review Contents", project_contents_path(@project.id), class: "btn btn-primary btn-sm" %> <%= link_to "Withdraw Project Request", "", class: "btn btn-secondary btn-sm" %> <%= link_to "Return to Dashboard", root_path, class: "btn btn-primary btn-sm" %> <% end %> @@ -105,11 +105,11 @@ Project Details:
<% if current_user.eligible_sysadmin? %> <% if @project.pending? %> - <%= link_to "Approve Project", project_approve_path(@project), class: "btn btn-primary btn-sm" %> + <%= link_to "Approve Project", project_approve_path(@project.id), class: "btn btn-primary btn-sm" %> <%= link_to "Deny Project", "", class: "btn btn-secondary btn-sm" %> <%= link_to " View Create Script", "#", class: "bi bi-code btn btn-secondary btn-sm", id: "create-script-btn" %> <% end %> - <%= link_to "Review Contents", project_contents_path(@project), class: "btn btn-primary btn-sm" %> + <%= link_to "Review Contents", project_contents_path(@project.id), class: "btn btn-primary btn-sm" %> <%= link_to "Return to Dashboard", root_path, class: "btn btn-return btn-sm" %> <% end %>
diff --git a/spec/models/project_show_presenter_spec.rb b/spec/models/project_show_presenter_spec.rb new file mode 100644 index 000000000..dafaa655a --- /dev/null +++ b/spec/models/project_show_presenter_spec.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true +require "rails_helper" + +RSpec.describe ProjectShowPresenter, type: :model, connect_to_mediaflux: false do + let(:project) { FactoryBot.create :project } + subject(:presenter) { ProjectShowPresenter.new(project) } + + describe "#id" do + it "delegates to project" do + expect(presenter.id).to eq(project.id) + end + end + + describe "#in_mediaflux?" do + it "delegates to project" do + expect(presenter.in_mediaflux?).to eq(project.in_mediaflux?) + end + end + + describe "#mediaflux_id" do + it "delegates to project" do + expect(presenter.mediaflux_id).to eq(project.mediaflux_id) + end + end + + describe "#metadata" do + it "delegates to project" do + expect(presenter.metadata).to eq(project.metadata) + end + end + + describe "#pending?" do + it "delegates to project" do + expect(presenter.pending?).to eq(project.pending?) + end + end + + describe "#project_directory" do + it "delegates to project" do + expect(presenter.project_directory).to eq(project.project_directory) + end + end + + describe "#status" do + it "delegates to project" do + expect(presenter.status).to eq(project.status) + end + end + + describe "#title" do + it "delegates to project" do + expect(presenter.title).to eq(project.title) + end + end +end