Slide 20
Slide 20 text
describe CreateShipmentHistoryReport do
describe "#process" do
let(:user) { create(:user, :signup_complete) }
let(:subscription) { create(:subscription) }
let(:product_1) { create(:product) }
let(:product_2) { create(:product) }
let(:product_3) { create(:product) }
let(:product_4) { create(:product) }
let!(:shipment_1) { create(:shipment, product: product_1,
created_at: 2.days.ago) }
let!(:shipment_2) { create(:shipment, product: product_2,
created_at: 3.days.ago) }
let!(:shipment_3) { create(:shipment, product: product_3,
created_at: 4.days.ago) }
let!(:shipment_4) { create(:shipment, product: product_4,
created_at: 5.days.ago) }
let(:subject) { described_class.new(user).process }
let(:csv_data) { CSV.parse(subject) }
let(:shipments) do
[
shipment_1,
shipment_2,
shipment_3,
shipment_4
]
end
let(:output_records) do
[
[shipment_4.created_on, shipment_4.completed_on,
user.name, product_4.name],
[shipment_3.created_on, shipment_3.completed_on,
user.name, product_3.name],
[shipment_2.created_on, shipment_2.completed_on,
user.name, product_2.name],
[shipment_1.created_on, shipment_1.completed_on,
user.name, product_1.name],
]
end
before do
user.subscriptions << subscription
expect(user)
.to receive(:shipments)
.and_return(shipments)
expect_any_instance_of(described_class)
.to receive(:save_to_s3)
.and_return(true)
expect_any_instance_of(described_class)
.to receive(:email_user)
.and_return(true)
end
it "generates an array of strings" do
expect(csv_data.length).to eq(shipments.length)
expect(csv_data).to all(be_an(Array))
end
it "matches the expected output" do
expect(csv_data).to eq(output_records)
end
end
end