require_relative '../spec_helper'

describe Article do
  let(:supplier) { create :supplier }
  let(:article) { create :article, supplier: supplier }

  it 'has a unique name' do
    article2 = FactoryGirl.build :article, supplier: supplier, name: article.name
    expect(article2).to be_invalid
  end

  it 'computes the gross price correctly' do
    article.deposit = 0
    article.tax = 12
    expect(article.gross_price).to eq((article.price * 1.12).round(2))
    article.deposit = 1.20
    expect(article.gross_price).to eq(((article.price + 1.20) * 1.12).round(2))
  end

  it 'gross price >= net price' do
    expect(article.gross_price).to be >= article.price
  end

  it 'fc-price >= gross price' do
    if article.gross_price > 0
      expect(article.fc_price).to be > article.gross_price
    else
      expect(article.fc_price).to be >= article.gross_price
    end
  end

  it 'knows when it is deleted' do
    expect(supplier.deleted?).to be_false
    supplier.mark_as_deleted
    expect(supplier.deleted?).to be_true
  end

  it 'keeps a price history' do
    expect(article.article_prices.all.map(&:price)).to eq([article.price])
    oldprice = article.price
    sleep 1 # so that the new price really has a later creation time
    article.price += 1
    article.save!
    expect(article.article_prices.all.map(&:price)).to eq([article.price, oldprice])
  end

  it 'is not in an open order by default' do
    expect(article.in_open_order).to be_nil
  end

  it 'is knows its open order' do
    order = create :order, supplier: supplier, article_ids: [article.id]
    expect(article.in_open_order).to eq(order)
  end
end