Skip to content

Commit

Permalink
stash progress
Browse files Browse the repository at this point in the history
  • Loading branch information
jimmyli97 committed Oct 17, 2024
1 parent df4b975 commit 922afc6
Show file tree
Hide file tree
Showing 2 changed files with 109 additions and 84 deletions.
81 changes: 26 additions & 55 deletions spec/pdfs/distribution_pdf_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,9 @@
end

describe DistributionPdf do
let(:organization) {
create(:organization,
name: "Essentials Bank 1",
street: "1500 Remount Road",
city: "Front Royal",
state: "VA",
zipcode: "22630",
email: "[email protected]")
}

let(:storage_location) { create(:storage_location, organization: organization) }

let(:item1) { create(:item, name: "Item 1", package_size: 50, value_in_cents: 100) }
let(:item2) { create(:item, name: "Item 2", value_in_cents: 200) }
let(:item3) { create(:item, name: "Item 3", value_in_cents: 300) }
let(:item4) { create(:item, name: "Item 4", package_size: 25, value_in_cents: 400) }
before(:each) do
@organization, @storage_location, @item1, @item2, @item3, @item4 = create_organization_storage_items
end

describe "pdf item and column displays" do
let(:org_hiding_packages_and_values) {
Expand All @@ -30,15 +17,15 @@
let(:org_hiding_packages) { create(:organization, name: DEFAULT_TEST_ORGANIZATION_NAME, hide_package_column_on_receipt: true) }
let(:org_hiding_values) { create(:organization, name: DEFAULT_TEST_ORGANIZATION_NAME, hide_value_columns_on_receipt: true) }

let(:distribution) { create(:distribution, organization: organization, storage_location: storage_location) }
let(:distribution) { create(:distribution, organization: @organization, storage_location: @storage_location) }

before(:each) do
create_line_items_request(distribution)
create_line_items_request(distribution, @item1, @item2, @item3, @item4)
end

specify "#request_data with custom units feature" do
Flipper.enable(:enable_packs)
results = described_class.new(organization, distribution).request_data
results = described_class.new(@organization, distribution).request_data
expect(results).to eq([
["Items Received", "Requested", "Received", "Value/item", "In-Kind Value Received", "Packages"],
["Item 1", "", 50, "$1.00", "$50.00", "1"],
Expand All @@ -51,7 +38,7 @@
end

specify "#non_request_data" do
results = described_class.new(organization, distribution).non_request_data
results = described_class.new(@organization, distribution).non_request_data
expect(results).to eq([
["Items Received", "Value/item", "In-Kind Value", "Quantity", "Packages"],
["Item 1", "$1.00", "$50.00", 50, "1"],
Expand Down Expand Up @@ -147,70 +134,54 @@
end

describe "address pdf output" do
let(:partner) {
create(:partner, :uninvited, without_profile: true,
name: "Leslie Sue",
organization: organization)
}
let(:profile_name) { "Jaqueline Kihn DDS" }
let(:profile_email) { "[email protected]" }
let(:expected_pickup_file_path) { Rails.root.join("spec", "fixtures", "files", "distribution_pickup.pdf") }
let(:expected_same_address_file_path) { Rails.root.join("spec", "fixtures", "files", "distribution_same_address.pdf") }
let(:expected_different_address_file_path) { Rails.root.join("spec", "fixtures", "files", "distribution_program_address.pdf") }
before(:each) do
# Run the following from Rails sandbox console (bin/rails/console --sandbox) to regenerate these comparison PDFs:
# => load "spec/support/distribution_pdf_helper.rb"
# => Rails::ConsoleMethods.send(:prepend, DistributionPDFHelper)
# => create_comparison_pdfs
@partner, @expected_pickup_file_path, @expected_same_address_file_path, @expected_different_address_file_path = create_partner_and_file_paths(@organization)
end

context "when the partner has no addresses" do
before(:each) do
create(:partner_profile,
partner_id: partner.id,
primary_contact_name: profile_name,
primary_contact_email: profile_email,
address1: "",
address2: "",
city: "",
state: "",
zip_code: "",
program_address1: "",
program_address2: "",
program_city: "",
program_state: "",
program_zip_code: "")
create_profile_no_address(@partner)
end
it "doesn't print any address if the delivery type is pickup" do
compare_pdf(create_dist(:pick_up), expected_pickup_file_path)
compare_pdf(@organization, create_dist(@partner, @organization, @storage_location, @item1, @item2, @item3, @item4, :pick_up), @expected_pickup_file_path)
end
it "doesn't print any address if the delivery type is delivery" do
compare_pdf(create_dist(:delivery), expected_pickup_file_path)
compare_pdf(@organization, create_dist(@partner, @organization, @storage_location, @item1, @item2, @item3, @item4, :delivery), @expected_pickup_file_path)
end
it "doesn't print any address if the delivery type is shipped" do
compare_pdf(create_dist(:shipped), expected_pickup_file_path)
compare_pdf(@organization, create_dist(@partner, @organization, @storage_location, @item1, @item2, @item3, @item4, :shipped), @expected_pickup_file_path)
end
end
context "when the partner doesn't have a different program address" do
before(:each) do
create_profile_without_program_address
create_profile_without_program_address(@partner)
end
it "prints the address if the delivery type is delivery" do
compare_pdf(create_dist(:delivery), expected_same_address_file_path)
compare_pdf(@organization, create_dist(@partner, @organization, @storage_location, @item1, @item2, @item3, @item4, :delivery), @expected_same_address_file_path)
end
it "prints the address if the delivery type is shipped" do
compare_pdf(create_dist(:shipped), expected_same_address_file_path)
compare_pdf(@organization, create_dist(@partner, @organization, @storage_location, @item1, @item2, @item3, @item4, :shipped), @expected_same_address_file_path)
end
it "doesn't print the address if the delivery type is pickup" do
compare_pdf(create_dist(:pick_up), expected_pickup_file_path)
compare_pdf(@organization, create_dist(@partner, @organization, @storage_location, @item1, @item2, @item3, @item4, :pick_up), @expected_pickup_file_path)
end
end
context "when the partner has a different program/delivery address" do
before(:each) do
create_profile_with_program_address
create_profile_with_program_address(@partner)
end
it "prints the delivery address if the delivery type is delivery" do
compare_pdf(create_dist(:delivery), expected_different_address_file_path)
compare_pdf(@organization, create_dist(@partner, @organization, @storage_location, @item1, @item2, @item3, @item4, :delivery), @expected_different_address_file_path)
end
it "prints the delivery address if the delivery type is shipped" do
compare_pdf(create_dist(:shipped), expected_different_address_file_path)
compare_pdf(@organization, create_dist(@partner, @organization, @storage_location, @item1, @item2, @item3, @item4, :shipped), @expected_different_address_file_path)
end
it "doesn't print any address if the delivery type is pickup" do
compare_pdf(create_dist(:pick_up), expected_pickup_file_path)
compare_pdf(@organization, create_dist(@partner, @organization, @storage_location, @item1, @item2, @item3, @item4, :pick_up), @expected_pickup_file_path)
end
end
end
Expand Down
112 changes: 83 additions & 29 deletions spec/support/distribution_pdf_helper.rb
Original file line number Diff line number Diff line change
@@ -1,11 +1,41 @@
module DistributionPDFHelper
def create_profile(program_address1, program_address2, program_city, program_state, program_zip,
address1 = "Example Address 1", city = "Example City", state = "Example State", zip = "12345")
def create_organization_storage_items
org = FactoryBot.create(:organization,
name: "Essentials Bank 1",
street: "1500 Remount Road",
city: "Front Royal",
state: "VA",
zipcode: "22630",
email: "[email protected]")

create(:partner_profile,
storage_location = FactoryBot.create(:storage_location, organization: org)
item1 = FactoryBot.create(:item, name: "Item 1", package_size: 50, value_in_cents: 100)
item2 = FactoryBot.create(:item, name: "Item 2", value_in_cents: 200)
item3 = FactoryBot.create(:item, name: "Item 3", value_in_cents: 300)
item4 = FactoryBot.create(:item, name: "Item 4", package_size: 25, value_in_cents: 400)

[org, storage_location, item1, item2, item3, item4]
end

def create_partner_and_file_paths(organization)
partner = FactoryBot.create(:partner, :uninvited, without_profile: true,
name: "Leslie Sue",
organization: organization)

expected_pickup_file_path = Rails.root.join("spec", "fixtures", "files", "distribution_pickup.pdf")
expected_same_address_file_path = Rails.root.join("spec", "fixtures", "files", "distribution_same_address.pdf")
expected_different_address_file_path = Rails.root.join("spec", "fixtures", "files", "distribution_program_address.pdf")

[partner, expected_pickup_file_path, expected_same_address_file_path, expected_different_address_file_path]
end

private def create_profile(partner:, program_address1:, program_address2:, program_city:, program_state:, program_zip:,
address1: "Example Address 1", city: "Example City", state: "Example State", zip: "12345")

FactoryBot.create(:partner_profile,
partner_id: partner.id,
primary_contact_name: profile_name,
primary_contact_email: profile_email,
primary_contact_name: "Jaqueline Kihn DDS",
primary_contact_email: "[email protected]",
address1: address1,
address2: "",
city: city,
Expand All @@ -18,33 +48,37 @@ def create_profile(program_address1, program_address2, program_city, program_sta
program_zip_code: program_zip)
end

def create_profile_without_program_address
create_profile("", "", "", "", "")
def create_profile_no_address(partner)
create_profile(partner: partner, program_address1: "", program_address2: "", program_city: "", program_state: "", program_zip: "", address1: "", city: "", state: "", zip: "")
end

def create_profile_with_program_address
create_profile("Example Program Address 1", "", "Example Program City", "Example Program State", 54321)
def create_profile_without_program_address(partner)
create_profile(partner: partner, program_address1: "", program_address2: "", program_city: "", program_state: "", program_zip: "")
end

def create_line_items_request(distribution)
create(:line_item, itemizable: distribution, item: item1, quantity: 50)
create(:line_item, itemizable: distribution, item: item2, quantity: 100)
create(:item_unit, item: item4, name: "pack")
create(:request, :with_item_requests, distribution: distribution,
def create_profile_with_program_address(partner)
create_profile(partner: partner, program_address1: "Example Program Address 1", program_address2: "", program_city: "Example Program City", program_state: "Example Program State", program_zip: 54321)
end

def create_line_items_request(distribution, item1, item2, item3, item4)
FactoryBot.create(:line_item, itemizable: distribution, item: item1, quantity: 50)
FactoryBot.create(:line_item, itemizable: distribution, item: item2, quantity: 100)
FactoryBot.create(:item_unit, item: item4, name: "pack")
FactoryBot.create(:request, :with_item_requests, distribution: distribution,
request_items: [
{"item_id" => item2.id, "quantity" => 30},
{"item_id" => item3.id, "quantity" => 50},
{"item_id" => item4.id, "quantity" => 120, "request_unit" => "pack"}
])
end

def create_dist(delivery_method)
dist = create(:distribution, partner: partner, delivery_method: delivery_method, issued_at: DateTime.new(2024, 7, 4, 0, 0), organization: organization, storage_location: storage_location)
create_line_items_request(dist)
def create_dist(partner, organization, storage_location, item1, item2, item3, item4, delivery_method)
dist = FactoryBot.create(:distribution, partner: partner, delivery_method: delivery_method, issued_at: DateTime.new(2024, 7, 4, 0, 0), organization: organization, storage_location: storage_location)
create_line_items_request(dist, item1, item2, item3, item4)
dist
end

def compare_pdf(distribution, expected_file_path)
def compare_pdf(organization, distribution, expected_file_path)
pdf = DistributionPdf.new(organization, distribution)
begin
pdf_file = pdf.compute_and_render
Expand All @@ -56,20 +90,40 @@ def compare_pdf(distribution, expected_file_path)
end
end

# helper function you can call from Rails console to create comparison pdfs
# helper function that can be called from Rails console to generate comparison PDFs
def create_comparison_pdfs
# create_inventory
org, storage_location, item1, item2, item3, item4 = create_organization_storage_items
partner, expected_pickup_file_path, expected_same_address_file_path, expected_different_address_file_path = create_partner_and_file_paths(org)

profile = create_profile_no_address(partner)
dist = create_dist(partner, org, storage_location, item1, item2, item3, item4, :pick_up)
pdf_file = DistributionPdf.new(org, create_dist(partner, org, storage_location, item1, item2, item3, item4, :pick_up)).compute_and_render
File.binwrite(expected_pickup_file_path, pdf_file)
profile.destroy
dist.destroy

# create_profile no address
pdf_file = DistributionPdf.new(organization, create_dist(:pickup)).compute_and_render
File.binwrite(:expected_pickup_file_path, pdf_file)
profile = create_profile_without_program_address(partner)
dist = create_dist(partner, org, storage_location, item1, item2, item3, item4, :shipped)
pdf_file = DistributionPdf.new(org, create_dist(partner, org, storage_location, item1, item2, item3, item4, :delivery)).compute_and_render
File.binwrite(expected_same_address_file_path, pdf_file)
Partners::Profile.where(partner_id: partner.id).first.destroy
profile.destroy
dist.destroy

# create_profile without_program_address
pdf_file = DistributionPdf.new(organization, create_dist(:delivery)).compute_and_render
File.binwrite(:expected_same_address_file_path, pdf_file)
profile = create_profile_with_program_address(partner)
dist = create_dist(partner, org, storage_location, item1, item2, item3, item4, :delivery)
pdf_file = DistributionPdf.new(org, create_dist(partner, org, storage_location, item1, item2, item3, item4, :shipped)).compute_and_render
File.binwrite(expected_different_address_file_path, pdf_file)
Partners::Profile.where(partner_id: partner.id).first.destroy
profile.destroy
dist.destroy

# create_profile_with_program_address
pdf_file = DistributionPdf.new(organization, create_dist(:shipped)).compute_and_render
File.binwrite(:expected_different_address_file_path, pdf_file)
storage_location.destroy
partner.destroy
item1.destroy
item2.destroy
item3.destroy
item4.destroy
org.destroy
end
end

0 comments on commit 922afc6

Please sign in to comment.