2013-09-18 12:44:41 +02:00
|
|
|
require_relative '../spec_helper'
|
2013-07-26 18:34:03 +02:00
|
|
|
|
|
|
|
describe 'settling an order', :type => :feature do
|
2013-09-18 12:44:41 +02:00
|
|
|
let(:admin) { create :user, groups:[create(:workgroup, role_finance: true)] }
|
|
|
|
let(:supplier) { create :supplier }
|
|
|
|
let(:article) { create :article, supplier: supplier, unit_quantity: 1 }
|
|
|
|
let(:order) { create :order, supplier: supplier, article_ids: [article.id] } # need to ref article
|
|
|
|
let(:go1) { create :group_order, order: order }
|
|
|
|
let(:go2) { create :group_order, order: order }
|
2013-07-26 18:34:03 +02:00
|
|
|
let(:oa) { order.order_articles.find_by_article_id(article.id) }
|
2013-09-18 12:44:41 +02:00
|
|
|
let(:goa1) { create :group_order_article, group_order: go1, order_article: oa }
|
|
|
|
let(:goa2) { create :group_order_article, group_order: go2, order_article: oa }
|
2013-07-26 18:34:03 +02:00
|
|
|
before do
|
|
|
|
goa1.update_quantities(3, 0)
|
|
|
|
goa2.update_quantities(1, 0)
|
|
|
|
oa.update_results!
|
|
|
|
order.finish!(admin)
|
|
|
|
goa1.reload
|
|
|
|
goa2.reload
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'has correct order result' do
|
|
|
|
expect(oa.quantity).to eq(4)
|
|
|
|
expect(oa.tolerance).to eq(0)
|
|
|
|
expect(goa1.result).to eq(3)
|
|
|
|
expect(goa2.result).to eq(1)
|
|
|
|
end
|
|
|
|
|
|
|
|
describe :type => :feature, :js => true do
|
|
|
|
before { login admin }
|
|
|
|
before { visit new_finance_order_path(order_id: order.id) }
|
|
|
|
|
|
|
|
it 'has product ordered visible' do
|
|
|
|
expect(page).to have_content(article.name)
|
|
|
|
expect(page).to have_selector("#order_article_#{oa.id}")
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'shows order result' do
|
|
|
|
click_link article.name
|
|
|
|
expect(page).to have_selector("#group_order_articles_#{oa.id}")
|
|
|
|
within("#group_order_articles_#{oa.id}") do
|
|
|
|
# make sure these ordergroup names are in the list for this product
|
|
|
|
expect(page).to have_content(go1.ordergroup.name)
|
|
|
|
expect(page).to have_content(go2.ordergroup.name)
|
|
|
|
# and that their order results match what we expect
|
|
|
|
expect(page).to have_selector("#group_order_article_#{goa1.id}_quantity")
|
|
|
|
expect(find("#group_order_article_#{goa1.id}_quantity").text.to_f).to eq(3)
|
|
|
|
expect(page).to have_selector("#group_order_article_#{goa2.id}_quantity")
|
|
|
|
expect(find("#group_order_article_#{goa2.id}_quantity").text.to_f).to eq(1)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-09-13 15:37:30 +02:00
|
|
|
it 'keeps ordered quantities when article is deleted from resulting order' do
|
|
|
|
within("#order_article_#{oa.id}") do
|
|
|
|
click_link I18n.t('ui.delete')
|
|
|
|
page.driver.browser.switch_to.alert.accept
|
|
|
|
end
|
|
|
|
expect(page).to_not have_selector("#order_article_#{oa.id}")
|
|
|
|
expect(OrderArticle.exists?(oa.id)).to be_true
|
|
|
|
oa.reload
|
|
|
|
expect(oa.quantity).to eq(4)
|
|
|
|
expect(oa.tolerance).to eq(0)
|
|
|
|
expect(oa.units_to_order).to eq(0)
|
|
|
|
expect(goa1.reload.result).to eq(0)
|
|
|
|
expect(goa2.reload.result).to eq(0)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'deletes an OrderArticle with no GroupOrderArticles' do
|
|
|
|
goa1.destroy
|
|
|
|
goa2.destroy
|
|
|
|
within("#order_article_#{oa.id}") do
|
|
|
|
click_link I18n.t('ui.delete')
|
|
|
|
page.driver.browser.switch_to.alert.accept
|
|
|
|
end
|
|
|
|
expect(page).to_not have_selector("#order_article_#{oa.id}")
|
|
|
|
expect(OrderArticle.exists?(oa.id)).to be_false
|
|
|
|
end
|
|
|
|
|
2013-09-17 14:19:46 +02:00
|
|
|
it 'keeps ordered quantities when GroupOrderArticle is deleted from resulting order' do
|
|
|
|
click_link article.name
|
|
|
|
expect(page).to have_selector("#group_order_article_#{goa1.id}")
|
|
|
|
within("#group_order_article_#{goa1.id}") do
|
|
|
|
click_link I18n.t('ui.delete')
|
|
|
|
end
|
|
|
|
expect(page).to_not have_selector("#group_order_article_#{goa1.id}")
|
|
|
|
expect(OrderArticle.exists?(oa.id)).to be_true
|
|
|
|
expect(GroupOrderArticle.exists?(goa1.id)).to be_true
|
|
|
|
goa1.reload
|
|
|
|
expect(goa1.result).to eq(0)
|
|
|
|
expect(goa1.quantity).to eq(3)
|
|
|
|
expect(goa1.tolerance).to eq(0)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'deletes a GroupOrderArticle with no ordered amounts' do
|
|
|
|
goa1.update_attributes({:quantity => 0, :tolerance => 0})
|
|
|
|
click_link article.name
|
|
|
|
expect(page).to have_selector("#group_order_article_#{goa1.id}")
|
|
|
|
within("#group_order_article_#{goa1.id}") do
|
|
|
|
click_link I18n.t('ui.delete')
|
|
|
|
end
|
|
|
|
expect(page).to_not have_selector("#group_order_article_#{goa1.id}")
|
|
|
|
expect(OrderArticle.exists?(oa.id)).to be_true
|
|
|
|
expect(GroupOrderArticle.exists?(goa1.id)).to be_false
|
|
|
|
end
|
|
|
|
|
2013-10-02 16:32:01 +02:00
|
|
|
it 'keeps product when amount is set to zero' do
|
|
|
|
within("#order_article_#{oa.id}") do
|
|
|
|
click_link I18n.t('ui.edit')
|
|
|
|
end
|
|
|
|
within("#edit_order_article_#{oa.id}") do
|
|
|
|
fill_in :order_article_units_to_order, :with => 0
|
|
|
|
find('input[type="submit"]').click
|
|
|
|
end
|
|
|
|
expect(page).to have_selector("#order_article_#{oa.id}")
|
|
|
|
# make sure it still works after reloading
|
|
|
|
visit new_finance_order_path(order_id: order.id)
|
|
|
|
expect(page).to have_selector("#order_article_#{oa.id}")
|
|
|
|
expect(OrderArticle.exists?(oa.id)).to be_true
|
|
|
|
oa.reload
|
|
|
|
expect(oa.units_to_order).to eq(0)
|
|
|
|
end
|
|
|
|
|
2013-07-26 18:34:03 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|