Browse Source

add year page to bulk upload journey

pull/1028/head
Phil Lee 4 years ago
parent
commit
6c8d514618
  1. 27
      app/controllers/bulk_upload_lettings_logs_controller.rb
  2. 27
      app/controllers/bulk_upload_sales_logs_controller.rb
  3. 27
      app/models/forms/bulk_upload_lettings/prepare_your_file.rb
  4. 26
      app/models/forms/bulk_upload_lettings/year.rb
  5. 25
      app/models/forms/bulk_upload_sales/prepare_your_file.rb
  6. 26
      app/models/forms/bulk_upload_sales/year.rb
  7. 15
      app/views/bulk_upload_lettings_logs/forms/prepare_your_file.html.erb
  8. 16
      app/views/bulk_upload_lettings_logs/forms/year.html.erb
  9. 1
      app/views/bulk_upload_lettings_logs/show.html.erb
  10. 15
      app/views/bulk_upload_sales_logs/forms/prepare_your_file.html.erb
  11. 16
      app/views/bulk_upload_sales_logs/forms/year.html.erb
  12. 1
      app/views/bulk_upload_sales_logs/show.html.erb
  13. 12
      config/locales/en.yml
  14. 32
      spec/features/bulk_upload_lettings_logs_spec.rb
  15. 31
      spec/features/bulk_upload_sales_logs_spec.rb
  16. 1
      spec/rails_helper.rb

27
app/controllers/bulk_upload_lettings_logs_controller.rb

@ -9,9 +9,36 @@ class BulkUploadLettingsLogsController < ApplicationController
end end
end end
def show
render form.view_path
end
def update
if form.valid?
redirect_to bulk_upload_lettings_log_path(id: "prepare-your-file", form: { year: form_params[:year] })
else
render form.view_path
end
end
private private
def in_crossover_period? def in_crossover_period?
FormHandler.instance.forms.values.any?(&:in_crossover_period?) FormHandler.instance.forms.values.any?(&:in_crossover_period?)
end end
def form
@form ||= case params[:id]
when "year"
Forms::BulkUploadLettings::Year.new(form_params)
when "prepare-your-file"
Forms::BulkUploadLettings::PrepareYourFile.new(form_params)
else
raise "Page not found for path #{params[:id]}"
end
end
def form_params
params.fetch(:form, {}).permit(:year)
end
end end

27
app/controllers/bulk_upload_sales_logs_controller.rb

@ -9,9 +9,36 @@ class BulkUploadSalesLogsController < ApplicationController
end end
end end
def show
render form.view_path
end
def update
if form.valid?
redirect_to bulk_upload_sales_log_path(id: "prepare-your-file", form: { year: form_params[:year] })
else
render form.view_path
end
end
private private
def in_crossover_period? def in_crossover_period?
FormHandler.instance.forms.values.any?(&:in_crossover_period?) FormHandler.instance.forms.values.any?(&:in_crossover_period?)
end end
def form
@form ||= case params[:id]
when "year"
Forms::BulkUploadSales::Year.new(form_params)
when "prepare-your-file"
Forms::BulkUploadSales::PrepareYourFile.new(form_params)
else
raise "Page not found for path #{params[:id]}"
end
end
def form_params
params.fetch(:form, {}).permit(:year)
end
end end

27
app/models/forms/bulk_upload_lettings/prepare_your_file.rb

@ -0,0 +1,27 @@
module Forms
module BulkUploadLettings
class PrepareYourFile
include ActiveModel::Model
attr_accessor :year
def view_path
"bulk_upload_lettings_logs/forms/prepare_your_file"
end
def back_path
if in_crossover_period?
Rails.application.routes.url_helpers.bulk_upload_lettings_log_path(id: "year", form: { year: })
else
Rails.application.routes.url_helpers.lettings_logs_path
end
end
private
def in_crossover_period?
FormHandler.instance.forms.values.any?(&:in_crossover_period?)
end
end
end
end

26
app/models/forms/bulk_upload_lettings/year.rb

@ -0,0 +1,26 @@
module Forms
module BulkUploadLettings
class Year
include ActiveModel::Model
attr_accessor :year
validates :year, presence: true
def view_path
"bulk_upload_lettings_logs/forms/year"
end
def options
[
OpenStruct.new(id: "2022", name: "2022/2023"),
OpenStruct.new(id: "2021", name: "2021/2022"),
]
end
def back_path
Rails.application.routes.url_helpers.lettings_logs_path
end
end
end
end

25
app/models/forms/bulk_upload_sales/prepare_your_file.rb

@ -0,0 +1,25 @@
module Forms
module BulkUploadSales
class PrepareYourFile
include ActiveModel::Model
attr_accessor :year
def view_path
"bulk_upload_sales_logs/forms/prepare_your_file"
end
def back_path
if in_crossover_period?
Rails.application.routes.url_helpers.bulk_upload_sales_log_path(id: "year", form: { year: })
else
Rails.application.routes.url_helpers.sales_logs_path
end
end
def in_crossover_period?
FormHandler.instance.forms.values.any?(&:in_crossover_period?)
end
end
end
end

26
app/models/forms/bulk_upload_sales/year.rb

@ -0,0 +1,26 @@
module Forms
module BulkUploadSales
class Year
include ActiveModel::Model
attr_accessor :year
validates :year, presence: true
def view_path
"bulk_upload_sales_logs/forms/year"
end
def options
[
OpenStruct.new(id: "2022", name: "2022/2023"),
OpenStruct.new(id: "2021", name: "2021/2022"),
]
end
def back_path
Rails.application.routes.url_helpers.sales_logs_path
end
end
end
end

15
app/views/bulk_upload_lettings_logs/forms/prepare_your_file.html.erb

@ -0,0 +1,15 @@
<% content_for :before_content do %>
<%= govuk_back_link href: @form.back_path %>
<% end %>
<%= form_with model: @form, scope: :form, url: bulk_upload_lettings_log_path(id: "prepare-your-file"), method: :patch do |f| %>
<div>
prepare file goes here
</div>
<div>
year selected <%= @form.year %>
</div>
<%= f.govuk_submit %>
<% end %>

16
app/views/bulk_upload_lettings_logs/forms/year.html.erb

@ -0,0 +1,16 @@
<% content_for :before_content do %>
<%= govuk_back_link href: @form.back_path %>
<% end %>
<%= form_with model: @form, scope: :form, url: bulk_upload_lettings_log_path(id: "year"), method: :patch do |f| %>
<%= f.govuk_error_summary %>
<%= f.govuk_collection_radio_buttons :year,
@form.options,
:id,
:name,
legend: { text: "Which year are you uploading data for?", size: "l" },
caption: { text: "Upload lettings logs in bulk", size: "l" } %>
<%= f.govuk_submit %>
<% end %>

1
app/views/bulk_upload_lettings_logs/show.html.erb

@ -1 +0,0 @@
Find me in app/views/bulk_upload_lettings_logs/show.html.erb

15
app/views/bulk_upload_sales_logs/forms/prepare_your_file.html.erb

@ -0,0 +1,15 @@
<% content_for :before_content do %>
<%= govuk_back_link href: @form.back_path %>
<% end %>
<%= form_with model: @form, scope: :form, url: bulk_upload_sales_log_path(id: "prepare-your-file"), method: :patch do |f| %>
<div>
prepare file goes here
</div>
<div>
year selected <%= @form.year %>
</div>
<%= f.govuk_submit %>
<% end %>

16
app/views/bulk_upload_sales_logs/forms/year.html.erb

@ -0,0 +1,16 @@
<% content_for :before_content do %>
<%= govuk_back_link href: @form.back_path %>
<% end %>
<%= form_with model: @form, scope: :form, url: bulk_upload_sales_log_path(id: "year"), method: :patch do |f| %>
<%= f.govuk_error_summary %>
<%= f.govuk_collection_radio_buttons :year,
@form.options,
:id,
:name,
legend: { text: "Which year are you uploading data for?", size: "l" },
caption: { text: "Upload sales logs in bulk", size: "l" } %>
<%= f.govuk_submit %>
<% end %>

1
app/views/bulk_upload_sales_logs/show.html.erb

@ -1 +0,0 @@
Find me in app/views/bulk_upload_sales_logs/show.html.erb

12
config/locales/en.yml

@ -38,6 +38,18 @@ en:
create_password: "Create a password to finish setting up your account" create_password: "Create a password to finish setting up your account"
reset_password: "Reset your password" reset_password: "Reset your password"
activemodel:
errors:
models:
forms/bulk_upload_lettings/year:
attributes:
year:
blank: You must select a collection period to upload for
forms/bulk_upload_sales/year:
attributes:
year:
blank: You must select a collection period to upload for
activerecord: activerecord:
errors: errors:
models: models:

32
spec/features/bulk_upload_lettings_logs_spec.rb

@ -0,0 +1,32 @@
require "rails_helper"
RSpec.describe "Bulk upload lettings log" do
let(:user) { create(:user) }
before do
sign_in user
end
context "when during crossover period" do
it "shows journey with year option" do
Timecop.freeze(2023, 6, 1) do
visit("/lettings-logs")
expect(page).to have_link("Upload lettings log in bulk")
click_link("Upload lettings log in bulk")
expect(page).to have_content("Which year")
click_button("Continue")
expect(page).to have_content("You must select a collection period to upload for")
choose("2022/2023")
click_button("Continue")
expect(page).to have_content("prepare file goes here")
click_link("Back")
expect(page.find_field("form-year-2022-field")).to be_checked
end
end
end
end

31
spec/features/bulk_upload_sales_logs_spec.rb

@ -0,0 +1,31 @@
require "rails_helper"
RSpec.describe "Bulk upload sales log" do
let(:user) { create(:user) }
before do
sign_in user
end
context "when during crossover period" do
it "shows journey with year option" do
Timecop.freeze(2023, 6, 1) do
visit("/sales-logs")
expect(page).to have_link("Upload sales log in bulk")
click_link("Upload sales log in bulk")
expect(page).to have_content("Which year")
click_button("Continue")
expect(page).to have_content("You must select a collection period to upload for")
choose("2022/2023")
click_button("Continue")
expect(page).to have_content("prepare file goes here")
click_link("Back")
expect(page.find_field("form-year-2022-field")).to be_checked
end
end
end
end

1
spec/rails_helper.rb

@ -82,6 +82,7 @@ RSpec.configure do |config|
config.include Devise::Test::ControllerHelpers, type: :controller config.include Devise::Test::ControllerHelpers, type: :controller
config.include Devise::Test::ControllerHelpers, type: :view config.include Devise::Test::ControllerHelpers, type: :view
config.include Devise::Test::IntegrationHelpers, type: :request config.include Devise::Test::IntegrationHelpers, type: :request
config.include Devise::Test::IntegrationHelpers, type: :feature
config.include ViewComponent::TestHelpers, type: :component config.include ViewComponent::TestHelpers, type: :component
config.include Capybara::RSpecMatchers, type: :component config.include Capybara::RSpecMatchers, type: :component
config.include ActiveJob::TestHelper config.include ActiveJob::TestHelper

Loading…
Cancel
Save