require_relative '../spec_helper'

feature 'product distribution', :js do
  let(:ftt) { create(:financial_transaction_type) }
  let(:admin) { create(:admin) }
  let(:user_a) { create(:user, groups: [create(:ordergroup)]) }
  let(:user_b) { create(:user, groups: [create(:ordergroup)]) }
  let(:supplier) { create(:supplier) }
  let(:article) { create(:article, supplier: supplier, unit_quantity: 5) }
  let(:order) { create(:order, supplier: supplier, article_ids: [article.id]) }
  let(:oa) { order.order_articles.first }

  before do
    # make sure users have enough money to order
    [user_a, user_b].each do |user|
      ordergroup = Ordergroup.find(user.ordergroup.id)
      ordergroup.add_financial_transaction! 5000, 'for ordering', admin, ftt
    end
    order # make sure order is referenced
  end

  it 'agrees to documented example' do
    # gruppe a bestellt 2(3), weil sie auf jeden fall was von x bekommen will
    login user_a
    visit new_group_order_path(order_id: order.id)
    scrolldown

    # expect(page).to have_css('input[type=submit]:enabled')

    find(".goa-quantity[data-e2e-order-article-id='#{oa.id}']").set '2'
    find(".goa-tolerance[data-e2e-order-article-id='#{oa.id}']").set '3'
    find('input[type=submit]').click
    expect(page).to have_selector('body')
    # gruppe b bestellt 2(0)
    login user_b
    visit new_group_order_path(order_id: order.id)
    scrolldown
    find(".goa-quantity[data-e2e-order-article-id='#{oa.id}']").set '2'
    find('input[type=submit]').click
    expect(page).to have_css('body')
    # gruppe a faellt ein dass sie doch noch mehr braucht von x und aendert auf 4(1).
    login user_a
    visit edit_group_order_path(id: order.group_order(user_a.ordergroup).id, order_id: order.id)
    scrolldown
    find(".goa-quantity[data-e2e-order-article-id='#{oa.id}']").set '4'
    find(".goa-tolerance[data-e2e-order-article-id='#{oa.id}']").set '1'
    find('input[type=submit]').click
    expect(page).to have_css('body')
    # die zuteilung
    order.finish!(admin)
    oa.reload
    # Endstand: insg. Bestellt wurden 6(1)
    expect(oa.quantity).to eq(6)
    expect(oa.tolerance).to eq(1)
    # Gruppe a bekommt 3 einheiten.
    goa_a = oa.group_order_articles.joins(:group_order).where(group_orders: { ordergroup_id: user_a.ordergroup.id }).first
    expect(goa_a.result).to eq(3)
    # gruppe b bekommt 2 einheiten.
    goa_b = oa.group_order_articles.joins(:group_order).where(group_orders: { ordergroup_id: user_b.ordergroup.id }).first
    expect(goa_b.result).to eq(2)
  end
end
