Browse Source

Add upload new resource page

pull/2690/head
Kat 2 years ago
parent
commit
7159efe64c
  1. 11
      app/controllers/collection_resources_controller.rb
  2. 2
      app/views/collection_resources/_collection_resource_summary_list.erb
  3. 32
      app/views/collection_resources/new.html.erb
  4. 69
      spec/requests/collection_resources_controller_spec.rb

11
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

2
app/views/collection_resources/_collection_resource_summary_list.erb

@ -25,7 +25,7 @@
<% end %>
<% end %>
<div class="govuk-!-margin-bottom-6">
<%= 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) %>
</div>
<hr class="govuk-section-break govuk-section-break--visible govuk-section-break--m">
</div>

32
app/views/collection_resources/new.html.erb

@ -0,0 +1,32 @@
<% content_for :before_content do %>
<%= govuk_back_link href: collection_resources_path %>
<% end %>
<div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds">
<%= 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 %>
<span class="govuk-caption-l"><%= "#{@collection_resource.log_type.humanize} #{text_year_range_format(@collection_resource.year)}" %></span>
<h1 class="govuk-heading-l">Add a new collection resource</h1>
<p class="govuk-body">
This file will be available for all users to download.
</p>
<%= 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 %>
</div>
</div>

69
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

Loading…
Cancel
Save