# frozen_string_literal: true

RSpec.describe Api::CurrentOrderSerializer do
  let(:distributor) { build(:distributor_enterprise) }
  let(:order_cycle) { build(:simple_order_cycle) }
  let(:line_item) { build(:line_item, variant: create(:variant)) }
  let(:order) { build(:order, line_items: [line_item]) }
  let(:serializer) do
    Api::CurrentOrderSerializer.new(
      order,
      current_distributor: distributor,
      current_order_cycle: order_cycle
    ).to_json
  end

  it "serializers the current order" do
    expect(serializer).to match order.id.to_s
  end

  it "includes line items" do
    expect(serializer).to match line_item.id.to_s
  end

  it "includes variants of line items" do
    expect(serializer).to match line_item.variant.name
  end

  context 'when there is no shipment' do
    it 'includes the shipping method of the order' do
      expect(serializer).to match('\"shipping_method_id\":null')
    end
  end

  context 'when there is a shipment' do
    let(:shipping_method) { build(:shipping_method) }

    before do
      allow(order).to receive(:shipping_method).and_return(shipping_method)
    end

    it 'includes the shipping method of the order' do
      expect(serializer).to match("\"shipping_method_id\":#{order.shipping_method.id}")
    end
  end
end
