Refactor spec

Linter said module was too big. I agreed, so made it smaller.

Best viewed with whitespace ignored.
This commit is contained in:
David Cook
2024-06-20 11:32:33 +10:00
parent 0e0a7d9d3e
commit 0cff734b86

View File

@@ -2,108 +2,100 @@
require 'spec_helper'
module Reporting
module Reports
module OrdersAndDistributors
RSpec.describe Base do
describe 'orders and distributors report' do
it 'should return a header row describing the report' do
subject = Base.new nil
RSpec.describe Reporting::Reports::OrdersAndDistributors::Base do
describe 'orders and distributors report' do
subject { described_class.new nil }
expect(subject.table_headers).to eq(
[
'Order date', 'Order Id',
'Customer Name', 'Customer Email', 'Customer Phone', 'Customer City',
'SKU', 'Item name', 'Variant', 'Quantity', 'Max Quantity', 'Cost', 'Shipping Cost',
'Payment Method',
'Distributor', 'Distributor address', 'Distributor city', 'Distributor postcode',
'Shipping Method', 'Shipping instructions'
]
)
end
it 'should return a header row describing the report' do
expect(subject.table_headers).to eq(
[
'Order date', 'Order Id',
'Customer Name', 'Customer Email', 'Customer Phone', 'Customer City',
'SKU', 'Item name', 'Variant', 'Quantity', 'Max Quantity', 'Cost', 'Shipping Cost',
'Payment Method',
'Distributor', 'Distributor address', 'Distributor city', 'Distributor postcode',
'Shipping Method', 'Shipping instructions'
]
)
end
context 'with completed order' do
let(:bill_address) { create(:address) }
let(:distributor) { create(:distributor_enterprise) }
let(:distributor1) { create(:distributor_enterprise) }
let(:product) { create(:product) }
let(:shipping_method) { create(:shipping_method) }
let(:shipping_instructions) { 'pick up on thursday please!' }
let(:order) {
create(:order,
state: 'complete', completed_at: Time.zone.now,
distributor:, bill_address:,
special_instructions: shipping_instructions)
}
let(:payment_method) { create(:payment_method, distributors: [distributor]) }
let(:payment) { create(:payment, payment_method:, order:) }
let(:line_item) { create(:line_item_with_shipment, product:, order:) }
context 'with completed order' do
let(:bill_address) { create(:address) }
let(:distributor) { create(:distributor_enterprise) }
let(:distributor1) { create(:distributor_enterprise) }
let(:product) { create(:product) }
let(:shipping_method) { create(:shipping_method) }
let(:shipping_instructions) { 'pick up on thursday please!' }
let(:order) {
create(:order,
state: 'complete', completed_at: Time.zone.now,
distributor:, bill_address:,
special_instructions: shipping_instructions)
}
let(:payment_method) { create(:payment_method, distributors: [distributor]) }
let(:payment) { create(:payment, payment_method:, order:) }
let(:line_item) { create(:line_item_with_shipment, product:, order:) }
subject { described_class.new create(:admin_user) }
before do
order.select_shipping_method(shipping_method.id)
order.payments << payment
order.line_items << line_item
end
before do
order.select_shipping_method(shipping_method.id)
order.payments << payment
order.line_items << line_item
end
it 'should denormalise order and distributor details for display as csv' do
subject = Base.new create(:admin_user), {}
allow(subject).to receive(:unformatted_render?).and_return(true)
table = subject.table_rows
it 'should denormalise order and distributor details for display as csv' do
allow(subject).to receive(:unformatted_render?).and_return(true)
table = subject.table_rows
expect(table.size).to eq 1
expect(table[0]).to eq([
order.reload.completed_at.strftime("%F %T"),
order.id,
bill_address.full_name,
order.email,
bill_address.phone,
bill_address.city,
line_item.product.sku,
line_item.product.name,
line_item.options_text,
line_item.quantity,
line_item.max_quantity,
line_item.price * line_item.quantity,
line_item.distribution_fee,
payment_method.name,
distributor.name,
distributor.address.address1,
distributor.address.city,
distributor.address.zipcode,
shipping_method.name,
shipping_instructions
])
end
expect(table.size).to eq 1
expect(table[0]).to eq([
order.reload.completed_at.strftime("%F %T"),
order.id,
bill_address.full_name,
order.email,
bill_address.phone,
bill_address.city,
line_item.product.sku,
line_item.product.name,
line_item.options_text,
line_item.quantity,
line_item.max_quantity,
line_item.price * line_item.quantity,
line_item.distribution_fee,
payment_method.name,
distributor.name,
distributor.address.address1,
distributor.address.city,
distributor.address.zipcode,
shipping_method.name,
shipping_instructions
])
end
it "prints one row per line item" do
create(:line_item_with_shipment, order:)
it "prints one row per line item" do
create(:line_item_with_shipment, order:)
subject = Base.new(create(:admin_user))
table = subject.table_rows
expect(table.size).to eq 2
end
table = subject.table_rows
expect(table.size).to eq 2
end
context "filtering by distributor" do
it do
create(:line_item_with_shipment, order:)
context "filtering by distributor" do
it do
create(:line_item_with_shipment, order:)
report1 = described_class.new(create(:admin_user), {})
table = report1.table_rows
expect(table.size).to eq 2
report1 = Base.new(create(:admin_user), {})
table = report1.table_rows
expect(table.size).to eq 2
report2 = described_class.new(create(:admin_user),
{ q: { distributor_id_in: [distributor.id] } })
table2 = report2.table_rows
expect(table2.size).to eq 2
report2 = Base.new(create(:admin_user),
{ q: { distributor_id_in: [distributor.id] } })
table2 = report2.table_rows
expect(table2.size).to eq 2
report3 = Base.new(create(:admin_user),
{ q: { distributor_id_in: [distributor1.id] } })
table3 = report3.table_rows
expect(table3.size).to eq 0
end
end
end
report3 = described_class.new(create(:admin_user),
{ q: { distributor_id_in: [distributor1.id] } })
table3 = report3.table_rows
expect(table3.size).to eq 0
end
end
end