Browse Source

add start of bulk upload logs journey

pull/1024/head
Phil Lee 4 years ago
parent
commit
fe380e5ff4
  1. 37
      app/controllers/bulk_upload_logs_controller.rb
  2. 21
      app/helpers/logs_helper.rb
  3. 4
      app/helpers/navigation_items_helper.rb
  4. 8
      app/models/form.rb
  5. 1
      app/views/bulk_upload_logs/show.html.erb
  6. 12
      app/views/logs/index.html.erb
  7. 4
      config/initializers/feature_toggle.rb
  8. 14
      config/routes.rb
  9. 34
      spec/models/form_spec.rb
  10. 54
      spec/requests/bulk_upload_logs_controller_spec.rb

37
app/controllers/bulk_upload_logs_controller.rb

@ -0,0 +1,37 @@
class BulkUploadLogsController < ApplicationController
before_action :authenticate_user!
def start
if in_crossover_period?
redirect_to bulk_upload_path(id: "year")
else
redirect_to bulk_upload_path(id: "prepare-your-file")
end
end
private
def in_crossover_period?
FormHandler.instance.forms.values.any?(&:in_crossover_period?)
end
def bulk_upload_path(id:)
case log_type
when "lettings"
bulk_upload_lettings_log_path(id:)
when "sales"
bulk_upload_sales_log_path(id:)
end
end
def log_type
case request.path.split("/")[1]
when "lettings-logs"
"lettings"
when "sales-logs"
"sales"
else
raise "Log type not handled"
end
end
end

21
app/helpers/logs_helper.rb

@ -0,0 +1,21 @@
module LogsHelper
def log_type_for_controller(controller)
case controller.class.to_s
when "LettingsLogsController"
"lettings"
when "SalesLogsController"
"sales"
else
raise "Log type not found for #{controller.class}"
end
end
def bulk_upload_path_for_controller(controller, id:)
case log_type_for_controller(controller)
when "lettings"
bulk_upload_lettings_log_path(id:)
when "sales"
bulk_upload_sales_log_path(id:)
end
end
end

4
app/helpers/navigation_items_helper.rb

@ -65,11 +65,11 @@ module NavigationItemsHelper
private
def lettings_logs_current?(path)
path == "/lettings-logs"
path.starts_with?("/lettings-logs")
end
def sales_logs_current?(path)
path == "/sales-logs"
path.starts_with?("/sales-logs")
end
def users_current?(path)

8
app/models/form.rb

@ -223,4 +223,12 @@ class Form
end
end
end
def in_crossover_period?(now: Time.zone.now)
((end_date - 3.months) < now) && (now < end_date)
end
def inspect
"#<#{self.class} @type=#{type} @name=#{name}>"
end
end

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

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

12
app/views/logs/index.html.erb

@ -10,14 +10,18 @@
<% end %>
<div class="app-filter-layout" data-controller="filter-layout">
<div class="govuk-button-group app-filter-toggle">
<div class="govuk-button-group app-filter-toggle govuk-!-margin-bottom-6">
<% if current_page?(controller: 'lettings_logs', action: 'index') %>
<%= govuk_button_to "Create a new lettings log", lettings_logs_path %>
<%= govuk_button_to "Create a new lettings log", lettings_logs_path, class: "govuk-!-margin-right-6" %>
<% end %>
<% if FeatureToggle.sales_log_enabled? && current_page?(controller: 'sales_logs', action: 'index') %>
<%= govuk_button_to "Create a new sales log", sales_logs_path %>
<%= govuk_button_to "Create a new sales log", sales_logs_path, class: "govuk-!-margin-right-6" %>
<% end %>
<% if FeatureToggle.bulk_upload_logs? %>
<%= govuk_button_link_to "Upload #{log_type_for_controller(controller)} log in bulk", bulk_upload_path_for_controller(controller, id: "start"), secondary: true %>
<% end %>
<%#= govuk_link_to "Upload logs", bulk_upload_lettings_logs_path %>
</div>
<%= render partial: "log_filters" %>

4
config/initializers/feature_toggle.rb

@ -22,4 +22,8 @@ class FeatureToggle
def self.managing_for_other_user_enabled?
!Rails.env.production?
end
def self.bulk_upload_logs?
!Rails.env.production?
end
end

14
config/routes.rb

@ -109,6 +109,12 @@ Rails.application.routes.draw do
get "csv-download", to: "lettings_logs#download_csv"
post "email-csv", to: "lettings_logs#email_csv"
get "csv-confirmation", to: "lettings_logs#csv_confirmation"
resources :bulk_upload_logs, path: "bulk-upload-logs", as: "bulk_upload_lettings_logs" do
collection do
get :start
end
end
end
member do
@ -128,6 +134,14 @@ Rails.application.routes.draw do
end
resources :sales_logs, path: "/sales-logs" do
collection do
resources :bulk_upload_logs, path: "bulk-upload-logs", as: "bulk_upload_sales_logs" do
collection do
get :start
end
end
end
FormHandler.instance.sales_forms.each do |_key, form|
form.pages.map do |page|
get page.id.to_s.dasherize, to: "form#show_page"

34
spec/models/form_spec.rb

@ -235,4 +235,38 @@ RSpec.describe Form, type: :model do
expect(form.sections[1].class).to eq(Form::Sales::Sections::PropertyInformation)
end
end
describe "#in_crossover_period?" do
context "when now not specified" do
context "when after end period" do
subject(:form) { described_class.new(nil, 2022, [], "sales") }
it "returns false" do
Timecop.freeze(2023, 8, 1) do
expect(form).not_to be_in_crossover_period
end
end
end
context "when during crossover" do
subject(:form) { described_class.new(nil, 2022, [], "sales") }
it "returns true" do
Timecop.freeze(2023, 6, 1) do
expect(form).to be_in_crossover_period
end
end
end
context "when before crossover" do
subject(:form) { described_class.new(nil, 2022, [], "sales") }
it "returns false" do
Timecop.freeze(2023, 1, 1) do
expect(form).not_to be_in_crossover_period
end
end
end
end
end
end

54
spec/requests/bulk_upload_logs_controller_spec.rb

@ -0,0 +1,54 @@
require "rails_helper"
RSpec.describe BulkUploadLogsController, type: :request do
let(:user) { FactoryBot.create(:user) }
let(:organisation) { user.organisation }
before do
sign_in user
end
describe "GET /lettings-logs/bulk-upload-logs/start" do
context "when not in crossover period" do
it "redirects to /prepare-your-file" do
Timecop.freeze(2023, 8, 1) do
get "/lettings-logs/bulk-upload-logs/start", params: {}
expect(response).to redirect_to("/lettings-logs/bulk-upload-logs/prepare-your-file")
end
end
end
context "when in crossover period" do
it "redirects to /year" do
Timecop.freeze(2023, 6, 1) do
get "/lettings-logs/bulk-upload-logs/start", params: {}
expect(response).to redirect_to("/lettings-logs/bulk-upload-logs/year")
end
end
end
end
describe "GET /sales-logs/bulk-upload-logs/start" do
context "when not in crossover period" do
it "redirects to /prepare-your-file" do
Timecop.freeze(2023, 8, 1) do
get "/sales-logs/bulk-upload-logs/start", params: {}
expect(response).to redirect_to("/sales-logs/bulk-upload-logs/prepare-your-file")
end
end
end
context "when in crossover period" do
it "redirects to /year" do
Timecop.freeze(2023, 6, 1) do
get "/sales-logs/bulk-upload-logs/start", params: {}
expect(response).to redirect_to("/sales-logs/bulk-upload-logs/year")
end
end
end
end
end
Loading…
Cancel
Save