Skip to content

Commit 68d917f

Browse files
committed
Feature: Adds print_picklist to requests controller
1 parent 7b9ad29 commit 68d917f

2 files changed

Lines changed: 67 additions & 0 deletions

File tree

app/controllers/requests_controller.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,23 @@ def start
4242
redirect_to new_distribution_path(request_id: request.id)
4343
end
4444

45+
def print_picklist
46+
request = current_organization
47+
.requests
48+
.includes(:item_requests, partner: [:profile])
49+
.find(params[:id])
50+
51+
respond_to do |format|
52+
format.any do
53+
pdf = PicklistsPdf.new(current_organization, [request])
54+
send_data pdf.compute_and_render,
55+
filename: format("Picklists_%s.pdf", Time.current.to_fs(:long)),
56+
type: "application/pdf",
57+
disposition: "inline"
58+
end
59+
end
60+
end
61+
4562
def print_unfulfilled
4663
requests = current_organization
4764
.requests

spec/requests/partners/requests_spec.rb

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,4 +479,54 @@
479479
expect(response.body).to eq("fake pdf content")
480480
end
481481
end
482+
483+
describe "GET #print_picklist" do
484+
let(:organization) { create(:organization) }
485+
let(:partner) { create(:partner, organization: organization) }
486+
let(:partner_user) { partner.primary_user }
487+
let(:org_admin) { create(:organization_admin, organization: organization) }
488+
let(:request) { create(:request, :with_item_requests, organization: organization, partner: partner, partner_user: org_admin) }
489+
490+
before do
491+
sign_in(org_admin)
492+
end
493+
494+
it "generates a PDF for a single request" do
495+
# Create a double for the PDF instance
496+
pdf_double = double("PicklistsPdf")
497+
498+
# Expect PicklistsPdf.new to be called with correct args and return our double
499+
expect(PicklistsPdf).to receive(:new)
500+
.with(organization, [request])
501+
.and_return(pdf_double)
502+
503+
# Expect compute_and_render to be called on our double and return some PDF data
504+
expect(pdf_double).to receive(:compute_and_render)
505+
.and_return("fake pdf content")
506+
507+
# Make the request
508+
get print_picklist_request_path(request, format: :pdf)
509+
510+
# Verify the response
511+
expect(response).to be_successful
512+
expect(response.content_type).to eq("application/pdf")
513+
expect(response.headers["Content-Disposition"]).to include("inline")
514+
expect(response.headers["Content-Disposition"]).to include("Picklists_")
515+
expect(response.body).to eq("fake pdf content")
516+
end
517+
518+
it "includes correct associations in the query" do
519+
pdf_double = double("PicklistsPdf", compute_and_render: "pdf content")
520+
521+
expect(PicklistsPdf).to receive(:new) do |org, requests|
522+
# Verify the request includes the necessary associations
523+
expect(requests.first.association(:item_requests)).to be_loaded
524+
expect(requests.first.association(:partner)).to be_loaded
525+
expect(requests.first.partner.association(:profile)).to be_loaded
526+
pdf_double
527+
end
528+
529+
get print_picklist_request_path(request, format: :pdf)
530+
end
531+
end
482532
end

0 commit comments

Comments
 (0)