Browse Source

Happy path

pull/84/head
baarkerlounger 4 years ago
parent
commit
1710673674
  1. 24
      app/controllers/bulk_upload_controller.rb
  2. BIN
      spec/fixtures/files/2021_22_lettings_bulk_upload.xlsx
  3. 38
      spec/requests/bulk_upload_controller_spec.rb

24
app/controllers/bulk_upload_controller.rb

@ -1,13 +1,33 @@
class BulkUploadController < ApplicationController 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 def show
render "case_logs/bulk_upload" render "case_logs/bulk_upload"
end end
def process_bulk_upload 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) 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 end
end end

BIN
spec/fixtures/files/2021_22_lettings_bulk_upload.xlsx vendored

Binary file not shown.

38
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(/<input id="case-log-bulk-upload-field" class="govuk-file-upload"/)
expect(response.body).to match(/<button type="submit" formnovalidate="formnovalidate" class="govuk-button"/)
end
end
describe "POST #bulk upload" do
before do
@file = fixture_file_upload('2021_22_lettings_bulk_upload.xlsx', 'application/vnd.ms-excel')
end
subject { post url, params: { case_log_bulk_upload: @file } }
context "given a valid file based on the upload template" do
it "creates case logs for each row in the template" do
expect { subject }.to change(CaseLog, :count).by(2)
end
it "redirects to the case log index page" do
expect(subject).to redirect_to(case_logs_path)
end
end
end
end
Loading…
Cancel
Save