require_relative '../spec_helper'

feature Order, js: true do
  let(:admin) { create :user, groups:[create(:workgroup, role_orders: true)] }
  let(:article) { create :article, unit_quantity: 1 }
  let(:order) { create :order, supplier: article.supplier, article_ids: [article.id] } # need to ref article
  let(:go1) { create :group_order, order: order }
  let(:oa) { order.order_articles.find_by_article_id(article.id) }
  let(:goa1) { create :group_order_article, group_order: go1, order_article: oa }

  before { login admin }

  it 'can get to the new order page' do
    article.supplier
    visit orders_path
    click_link_or_button I18n.t('orders.index.new_order')
    click_link_or_button order.name
    expect(page).to have_text I18n.t('orders.new.title')
    expect(page).to have_text article.name
  end

  it 'fills in the end date with a schedule' do
    FoodsoftConfig[:time_zone] = 'UTC'
    FoodsoftConfig[:order_schedule] = {ends: {recurr: 'FREQ=MONTHLY;BYMONTHDAY=1', time: '12:00'}}
    visit new_order_path(supplier_id: article.supplier.id)
    expect(page).to have_text I18n.t('orders.new.title')
    expect(find_field('order_ends_time_value').value).to eq '12:00'
    expect(find_field('order_ends_date_value').value).to eq Date.today.next_month.at_beginning_of_month.strftime('%Y-%m-%d')
  end

  it 'can create a new order' do
    visit new_order_path(supplier_id: article.supplier.id)
    expect(page).to have_text I18n.t('orders.new.title')
    find('input[type="submit"]').click
    expect(Order.count).to eq 1
    expect(Order.first.supplier).to eq article.supplier
  end

  it 'can close an order' do
    setup_and_close_order
    expect(order).to be_finished
    expect(page).to_not have_link I18n.t('orders.index.action_end')
    expect(oa.units_to_order).to eq 1
  end

  def setup_and_close_order
    # have at least something ordered
    goa1.update_quantities 1, 0
    oa.update_results!
    # and close the order
    visit orders_path
    click_link_or_button I18n.t('orders.index.action_end')
    accept_alert
    sleep 0.8
    order.reload
    oa.reload
  end
end