Browse Source

Controller response

pull/440/head
baarkerlounger 3 years ago
parent
commit
92607239cc
  1. 5
      app/controllers/case_logs_controller.rb
  2. 1
      app/models/case_log.rb
  3. 15
      app/models/concerns/generate_csv.rb
  4. 26
      spec/requests/case_logs_controller_spec.rb

5
app/controllers/case_logs_controller.rb

@ -8,6 +8,11 @@ class CaseLogsController < ApplicationController
def index
@pagy, @case_logs = pagy(current_user.case_logs)
respond_to do |format|
format.html
format.csv { send_data @case_logs.to_csv, filename: "case-logs-#{Time.zone.now}" }
end
end
def create

1
app/models/case_log.rb

@ -18,6 +18,7 @@ end
class CaseLog < ApplicationRecord
include Validations::SoftValidations
include GenerateCsv
has_paper_trail

15
app/models/concerns/generate_csv.rb

@ -0,0 +1,15 @@
module GenerateCsv
extend ActiveSupport::Concern
class_methods do
def to_csv
CSV.generate(headers: true) do |csv|
csv << self.attribute_names
all.each do |record|
csv << record.attributes.values
end
end
end
end
end

26
spec/requests/case_logs_controller_spec.rb

@ -482,6 +482,32 @@ RSpec.describe CaseLogsController, type: :request do
end
end
describe "CSV download" do
let(:headers) { { "Accept" => "text/csv" } }
let(:user) { FactoryBot.create(:user) }
let(:organisation) { user.organisation }
let(:other_organisation) { FactoryBot.create(:organisation) }
let!(:case_log) do
FactoryBot.create(
:case_log,
owning_organisation: organisation,
managing_organisation: organisation,
)
end
before do
sign_in user
get "/logs", headers: headers, params: {}
end
it "downloads a CSV file with headers" do
csv = CSV.parse(response.body)
expect(csv.count).to eq(2)
expect(csv.first.first).to eq("id")
expect(csv.second.first).to eq(case_log.id.to_s)
end
end
describe "PATCH" do
let(:case_log) do
FactoryBot.create(:case_log, :in_progress, tenant_code: "Old Value", postcode_full: "M1 1AE")

Loading…
Cancel
Save