From 7159efe64cc94b802469934e2f01b4615a66fa03 Mon Sep 17 00:00:00 2001 From: Kat Date: Thu, 10 Oct 2024 08:36:51 +0100 Subject: [PATCH] Add upload new resource page --- .../collection_resources_controller.rb | 11 +++ .../_collection_resource_summary_list.erb | 2 +- app/views/collection_resources/new.html.erb | 32 +++++++++ .../collection_resources_controller_spec.rb | 69 ++++++++++++++++++- 4 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 app/views/collection_resources/new.html.erb diff --git a/app/controllers/collection_resources_controller.rb b/app/controllers/collection_resources_controller.rb index ed080c749..b11904b70 100644 --- a/app/controllers/collection_resources_controller.rb +++ b/app/controllers/collection_resources_controller.rb @@ -91,6 +91,17 @@ class CollectionResourcesController < ApplicationController redirect_to collection_resources_path end + def new + return render_not_found unless current_user.support? + + year = params[:year].to_i + log_type = params[:log_type] + + return render_not_found unless editable_collection_resource_years.include?(year) + + @collection_resource = CollectionResource.new(year:, log_type:) + end + private def resource_params diff --git a/app/views/collection_resources/_collection_resource_summary_list.erb b/app/views/collection_resources/_collection_resource_summary_list.erb index 8ef588fd5..d806d043e 100644 --- a/app/views/collection_resources/_collection_resource_summary_list.erb +++ b/app/views/collection_resources/_collection_resource_summary_list.erb @@ -25,7 +25,7 @@ <% end %> <% end %>
- <%= govuk_link_to "Add new #{mandatory_resources.first.log_type} #{text_year_range_format(mandatory_resources.first.year)} resource", href: "/" %> + <%= govuk_link_to "Add new #{mandatory_resources.first.log_type} #{text_year_range_format(mandatory_resources.first.year)} resource", href: new_collection_resource_path(year: mandatory_resources.first.year, log_type: mandatory_resources.first.log_type) %>

diff --git a/app/views/collection_resources/new.html.erb b/app/views/collection_resources/new.html.erb new file mode 100644 index 000000000..006636b26 --- /dev/null +++ b/app/views/collection_resources/new.html.erb @@ -0,0 +1,32 @@ +<% content_for :before_content do %> + <%= govuk_back_link href: collection_resources_path %> +<% end %> + +
+
+ <%= form_with model: @collection_resource, url: collection_resources_path, method: :post do |f| %> + <%= f.hidden_field :year %> + <%= f.hidden_field :log_type %> + <%= f.hidden_field :mandatory, value: false %> + + <%= f.govuk_error_summary %> + + <%= "#{@collection_resource.log_type.humanize} #{text_year_range_format(@collection_resource.year)}" %> +

Add a new collection resource

+ +

+ This file will be available for all users to download. +

+ + <%= f.govuk_file_field :file, + label: { text: "Upload file", size: "m" } %> + + <%= f.govuk_text_field :display_name, + label: nil, + hint: { text: "This will be used in the download link on the homepage. Do not include the log type or collection year. For example, if you enter “bulk upload change log”, the download link will say “Download the lettings bulk upload change log (2024 to 2025)”." } %> + + <%= f.govuk_submit "Add resource" %> + <%= govuk_button_link_to "Cancel", collection_resources_path, secondary: true %> + <% end %> +
+
diff --git a/spec/requests/collection_resources_controller_spec.rb b/spec/requests/collection_resources_controller_spec.rb index 7c9bb0f05..d6da21589 100644 --- a/spec/requests/collection_resources_controller_spec.rb +++ b/spec/requests/collection_resources_controller_spec.rb @@ -62,7 +62,7 @@ RSpec.describe CollectionResourcesController, type: :request do expect(page).to have_content("Sales 2025 to 2026") end - it "displays mandatory filed" do + it "displays mandatory files" do get collection_resources_path expect(page).to have_content("Paper form") @@ -70,6 +70,15 @@ RSpec.describe CollectionResourcesController, type: :request do expect(page).to have_content("Bulk upload specification") end + it "allows uploading new resources" do + get collection_resources_path + + expect(page).to have_link("Add new sales 2024 to 2025 resource", href: new_collection_resource_path(year: 2024, log_type: "sales")) + expect(page).to have_link("Add new lettings 2024 to 2025 resource", href: new_collection_resource_path(year: 2024, log_type: "lettings")) + expect(page).to have_link("Add new sales 2025 to 2026 resource", href: new_collection_resource_path(year: 2025, log_type: "sales")) + expect(page).to have_link("Add new lettings 2025 to 2026 resource", href: new_collection_resource_path(year: 2025, log_type: "lettings")) + end + context "when files are on S3" do before do allow(storage_service).to receive(:file_exists?).and_return(true) @@ -473,4 +482,62 @@ RSpec.describe CollectionResourcesController, type: :request do end end end + + describe "GET #new_collection_resource" do + context "when user is not signed in" do + it "redirects to the sign in page" do + get new_collection_resource_path(year: 2025, log_type: "sales") + expect(response).to redirect_to(new_user_session_path) + end + end + + context "when user is signed in as a data coordinator" do + let(:user) { create(:user, :data_coordinator) } + + before do + sign_in user + end + + it "returns page not found" do + get new_collection_resource_path(year: 2025, log_type: "sales") + expect(response).to have_http_status(:not_found) + end + end + + context "when user is signed in as a data provider" do + let(:user) { create(:user, :data_provider) } + + before do + sign_in user + end + + it "returns page not found" do + get new_collection_resource_path(year: 2025, log_type: "sales") + expect(response).to have_http_status(:not_found) + end + end + + context "when user is signed in as a support user" do + let(:user) { create(:user, :support) } + + before do + # rubocop:disable RSpec/AnyInstance + allow_any_instance_of(CollectionResourcesHelper).to receive(:editable_collection_resource_years).and_return([2025, 2026]) + # rubocop:enable RSpec/AnyInstance + allow(user).to receive(:need_two_factor_authentication?).and_return(false) + sign_in user + end + + it "displays new collection resource page content" do + get new_collection_resource_path(year: 2025, log_type: "sales") + + expect(page).to have_content("Sales 2025 to 2026") + expect(page).to have_content("Add a new collection resource") + expect(page).to have_content("Upload file") + expect(page).to have_button("Add resource") + expect(page).to have_link("Back", href: collection_resources_path) + expect(page).to have_link("Cancel", href: collection_resources_path) + end + end + end end