require_relative '../spec_helper'

describe GroupOrderArticle do
  let(:user) { create :user, groups: [create(:ordergroup)] }
  let(:order) { create(:order) }
  let(:go) { create :group_order, order: order, ordergroup: user.ordergroup }
  let(:goa) { create :group_order_article, group_order: go, order_article: order.order_articles.first }

  it 'has zero quantity by default'    do expect(goa.quantity).to eq(0) end
  it 'has zero tolerance by default'   do expect(goa.tolerance).to eq(0) end
  it 'has zero result by default'      do expect(goa.result).to eq(0) end
  it 'has zero total price by default' do expect(goa.total_price).to eq(0) end

  describe do
    let(:article) { create :article, supplier: order.supplier, unit_quantity: 1 }
    let(:oa) { order.order_articles.create(:article => article) }
    let(:goa) { create :group_order_article, group_order: go, order_article: oa }

    it 'can be ordered by piece' do
      goa.update_quantities(1, 0)
      expect(goa.quantity).to eq(1)
      expect(goa.tolerance).to eq(0)
    end

    it 'can be ordered in larger amounts' do
      quantity, tolerance = rand(13..99), rand(0..99)
      goa.update_quantities(quantity, tolerance)
      expect(goa.quantity).to eq(quantity)
      expect(goa.tolerance).to eq(tolerance)
    end

    it 'has a proper total price' do
      quantity = rand(1..99)
      goa.update_quantities(quantity, 0)
      expect(goa.total_price).to eq(quantity * goa.order_article.price.fc_price)
    end

    it 'can unorder a product' do
      goa.update_quantities(rand(1..99), rand(0..99))
      goa.update_quantities(0, 0)
      expect(GroupOrderArticle.exists?(goa.id)).to be false
    end
  end

end