require_relative '../spec_helper' describe 'settling an order', :type => :feature do 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 } let(:oa) { order.order_articles.find_by_article_id(article.id) } let(:goa1) { create :group_order_article, group_order: go1, order_article: oa } let(:goa2) { create :group_order_article, group_order: go2, order_article: oa } 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 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 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 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 end end