diff --git a/app/furniture/marketplace/delivery_area.rb b/app/furniture/marketplace/delivery_area.rb index 9fd6be8d6..3a4ae0003 100644 --- a/app/furniture/marketplace/delivery_area.rb +++ b/app/furniture/marketplace/delivery_area.rb @@ -4,6 +4,8 @@ class DeliveryArea < Record location(parent: :marketplace) belongs_to :marketplace, inverse_of: :delivery_areas + has_many :orders, inverse_of: :delivery_area + has_many :deliveries, inverse_of: :delivery_area monetize :price_cents end diff --git a/app/furniture/marketplace/order.rb b/app/furniture/marketplace/order.rb index f3467545b..f3eea024e 100644 --- a/app/furniture/marketplace/order.rb +++ b/app/furniture/marketplace/order.rb @@ -6,6 +6,8 @@ class Order < Record belongs_to :marketplace, inverse_of: :orders delegate :space, :room, to: :marketplace + belongs_to :delivery_area, inverse_of: :orders, optional: true + belongs_to :shopper, inverse_of: :orders has_many :ordered_products, inverse_of: :order, foreign_key: :cart_id, dependent: :destroy diff --git a/app/furniture/marketplace/order/email_receipt_component.html.erb b/app/furniture/marketplace/order/email_receipt_component.html.erb index 67eecf3f7..54e4aeab2 100644 --- a/app/furniture/marketplace/order/email_receipt_component.html.erb +++ b/app/furniture/marketplace/order/email_receipt_component.html.erb @@ -51,6 +51,12 @@ Delivery Schedule: <%= render(order.delivery_window) %> +<%- if order.delivery_area.present? %> + + Delivering In: + <%= order.delivery_area.label %> + +<%- end %> Buyer Email: <%= order.contact_email %> diff --git a/spec/factories/furniture/marketplace.rb b/spec/factories/furniture/marketplace.rb index d65df630a..b13b69acd 100644 --- a/spec/factories/furniture/marketplace.rb +++ b/spec/factories/furniture/marketplace.rb @@ -100,15 +100,15 @@ trait :full do with_taxed_products - with_delivery_areas transient do product_count { (1..5).to_a.sample } end - marketplace { association(:marketplace, :with_tax_rates, :with_delivery_fees, :with_notify_emails) } + marketplace { association(:marketplace, :with_tax_rates, :with_delivery_areas, :with_delivery_fees, :with_notify_emails) } - delivery_window { Marketplace::Delivery::Window.new(1.hour.from_now) } + delivery_window { 1.hour.from_now } + delivery_area { marketplace.delivery_areas.sample } placed_at { 5.minutes.ago } delivery_address { Faker::Address.full_address } contact_email { Faker::Internet.safe_email } diff --git a/spec/furniture/marketplace/delivery_area_spec.rb b/spec/furniture/marketplace/delivery_area_spec.rb new file mode 100644 index 000000000..f3c321af6 --- /dev/null +++ b/spec/furniture/marketplace/delivery_area_spec.rb @@ -0,0 +1,7 @@ +require "rails_helper" + +RSpec.describe Marketplace::DeliveryArea, type: :model do + it { is_expected.to belong_to(:marketplace).inverse_of(:delivery_areas) } + it { is_expected.to have_many(:orders).inverse_of(:delivery_area) } + it { is_expected.to have_many(:deliveries).inverse_of(:delivery_area) } +end diff --git a/spec/furniture/marketplace/delivery_spec.rb b/spec/furniture/marketplace/delivery_spec.rb index 799ebb18a..6738c9098 100644 --- a/spec/furniture/marketplace/delivery_spec.rb +++ b/spec/furniture/marketplace/delivery_spec.rb @@ -8,6 +8,7 @@ it { is_expected.to belong_to(:marketplace) } it { is_expected.to belong_to(:shopper) } + it { is_expected.to belong_to(:delivery_area) } describe "#delivery_window" do subject(:delivery_window) { delivery.delivery_window } diff --git a/spec/furniture/marketplace/order/email_receipt_component_spec.rb b/spec/furniture/marketplace/order/email_receipt_component_spec.rb index 8e1c90b2e..d6fc615ad 100644 --- a/spec/furniture/marketplace/order/email_receipt_component_spec.rb +++ b/spec/furniture/marketplace/order/email_receipt_component_spec.rb @@ -4,6 +4,7 @@ subject(:content) { render_inline(component) } let(:component) { described_class.new(order) } + let(:order) { build(:marketplace_order, :full) } context "when the order has a particular time to be delivered" do let(:order) { build(:marketplace_order, delivery_window: 3.hours.from_now) } @@ -16,4 +17,6 @@ it { is_expected.to have_content("3pm on Sunday") } end + + it { is_expected.to have_content(/Delivering In:\s+ #{order.delivery_area.label}/) } end diff --git a/spec/furniture/marketplace/order_spec.rb b/spec/furniture/marketplace/order_spec.rb index fd831b377..804143ed5 100644 --- a/spec/furniture/marketplace/order_spec.rb +++ b/spec/furniture/marketplace/order_spec.rb @@ -8,6 +8,7 @@ it { is_expected.to belong_to(:marketplace).class_name("Marketplace::Marketplace").inverse_of(:orders) } it { is_expected.to belong_to(:shopper).inverse_of(:orders) } + it { is_expected.to belong_to(:delivery_area).inverse_of(:orders).optional } describe "#price_total" do subject(:price_total) { order.price_total }