From 1710673674d3db08b58c12472e0331aa2ca69b66 Mon Sep 17 00:00:00 2001 From: baarkerlounger Date: Tue, 9 Nov 2021 17:06:11 +0000 Subject: [PATCH] Happy path --- app/controllers/bulk_upload_controller.rb | 24 ++++++++++- .../files/2021_22_lettings_bulk_upload.xlsx | Bin 0 -> 24714 bytes spec/requests/bulk_upload_controller_spec.rb | 38 ++++++++++++++++++ 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 spec/fixtures/files/2021_22_lettings_bulk_upload.xlsx create mode 100644 spec/requests/bulk_upload_controller_spec.rb diff --git a/app/controllers/bulk_upload_controller.rb b/app/controllers/bulk_upload_controller.rb index 12ad21547..bc28180e3 100644 --- a/app/controllers/bulk_upload_controller.rb +++ b/app/controllers/bulk_upload_controller.rb @@ -1,13 +1,33 @@ class BulkUploadController < ApplicationController - XLS = "application/vnd.ms-excel".freeze + SPREADSHEET_CONTENT_TYPES = %w[ + application/vnd.ms-excel + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet + ] + + FIRST_DATA_ROW = 7 def show render "case_logs/bulk_upload" end def process_bulk_upload - if params["case_log_bulk_upload"].content_type == XLS + if SPREADSHEET_CONTENT_TYPES.include?(params["case_log_bulk_upload"].content_type) xlsx = Roo::Spreadsheet.open(params["case_log_bulk_upload"].tempfile, extension: :xlsx) + sheet = xlsx.sheet(0) + last_row = sheet.last_row + if last_row < FIRST_DATA_ROW + head :no_content + else + data_range = FIRST_DATA_ROW..last_row + data_range.map do |row_num| + row = sheet.row(row_num) + CaseLog.create!( + tenant_code: row[7], + startertenancy: row[8] + ) + end + redirect_to(case_logs_path) + end end end end diff --git a/spec/fixtures/files/2021_22_lettings_bulk_upload.xlsx b/spec/fixtures/files/2021_22_lettings_bulk_upload.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..df0745700e567db43fb6780fa6618bd351fbc3ae GIT binary patch literal 24714 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 LrJUkh$Y1{grOs>+ literal 0 HcmV?d00001 diff --git a/spec/requests/bulk_upload_controller_spec.rb b/spec/requests/bulk_upload_controller_spec.rb new file mode 100644 index 000000000..63cb5ec27 --- /dev/null +++ b/spec/requests/bulk_upload_controller_spec.rb @@ -0,0 +1,38 @@ +require "rails_helper" + +RSpec.describe BulkUploadController, type: :request do + let(:url) { "/case_logs/bulk_upload" } + + before do + get url, params: {} + end + + describe "GET #show" do + it "returns a success response" do + expect(response).to be_successful + end + + it "returns a page with a file upload form" do + expect(response.body).to match(/