diff --git a/app/controllers/collection_resources_controller.rb b/app/controllers/collection_resources_controller.rb index e8e25487d..ed080c749 100644 --- a/app/controllers/collection_resources_controller.rb +++ b/app/controllers/collection_resources_controller.rb @@ -78,6 +78,19 @@ class CollectionResourcesController < ApplicationController render "collection_resources/confirm_mandatory_collection_resources_release" end + def release_mandatory_collection_resources + return render_not_found unless current_user.support? + + year = params[:year].to_i + + return render_not_found unless editable_collection_resource_years.include?(year) + + MandatoryCollectionResourcesService.release_resources(year) + + flash[:notice] = "The #{text_year_range_format(year)} collection resources are now available to users." + redirect_to collection_resources_path + end + private def resource_params diff --git a/app/services/mandatory_collection_resources_service.rb b/app/services/mandatory_collection_resources_service.rb index 82a6bd41e..8b34153e9 100644 --- a/app/services/mandatory_collection_resources_service.rb +++ b/app/services/mandatory_collection_resources_service.rb @@ -30,6 +30,17 @@ class MandatoryCollectionResourcesService ) end + def self.release_resources(year) + sales_resources = resources_per_year(year, "sales") + lettings_resources = resources_per_year(year, "lettings") + + (sales_resources + lettings_resources).each do |resource| + resource.released_to_user = true + resource.mandatory = true + resource.save! + end + end + def self.display_name(resource, year, log_type) year_range = "#{year} to #{year + 1}" case resource diff --git a/spec/requests/collection_resources_controller_spec.rb b/spec/requests/collection_resources_controller_spec.rb index dbc48d28d..e79867e09 100644 --- a/spec/requests/collection_resources_controller_spec.rb +++ b/spec/requests/collection_resources_controller_spec.rb @@ -401,4 +401,72 @@ RSpec.describe CollectionResourcesController, type: :request do end end end + + describe "PATCH #release_mandatory_collection_resources_path" do + let(:some_file) { File.open(file_fixture("blank_bulk_upload_sales.csv")) } + + before do + allow(UploadCollectionResourcesService).to receive(:upload_collection_resource) + end + + context "when user is not signed in" do + it "redirects to the sign in page" do + patch release_mandatory_collection_resources_path(year: 2024) + 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 + patch release_mandatory_collection_resources_path(year: 2024) + 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 + patch release_mandatory_collection_resources_path(year: 2024) + 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]) + # rubocop:enable RSpec/AnyInstance + allow(user).to receive(:need_two_factor_authentication?).and_return(false) + sign_in user + end + + it "saves resources as released to users" do + expect(CollectionResource.where(year: 2025, mandatory: true, released_to_user: true).count).to eq(0) + + patch release_mandatory_collection_resources_path(year: 2025) + expect(CollectionResource.all.count).to eq(6) + expect(CollectionResource.where(year: 2025, mandatory: true, released_to_user: true, log_type: "sales", resource_type: "paper_form").count).to eq(1) + expect(CollectionResource.where(year: 2025, mandatory: true, released_to_user: true, log_type: "sales", resource_type: "bulk_upload_template").count).to eq(1) + expect(CollectionResource.where(year: 2025, mandatory: true, released_to_user: true, log_type: "sales", resource_type: "bulk_upload_specification").count).to eq(1) + expect(CollectionResource.where(year: 2025, mandatory: true, released_to_user: true, log_type: "lettings", resource_type: "paper_form").count).to eq(1) + expect(CollectionResource.where(year: 2025, mandatory: true, released_to_user: true, log_type: "lettings", resource_type: "bulk_upload_template").count).to eq(1) + expect(CollectionResource.where(year: 2025, mandatory: true, released_to_user: true, log_type: "lettings", resource_type: "bulk_upload_specification").count).to eq(1) + expect(response).to redirect_to(collection_resources_path) + expect(flash[:notice]).to eq("The 2025 to 2026 collection resources are now available to users.") + end + end + end end