require 'spec_helper' describe "Stock Management", type: :feature, js: true do stub_authorization! context "given a product with a variant and a stock location" do let!(:stock_location) { create(:stock_location, name: 'Default') } let!(:product) { create(:product, name: 'apache baseball cap', price: 10) } let!(:variant) { product.master } before do stock_location.stock_item(variant).update_column(:count_on_hand, 10) visit spree.stock_admin_product_path(product) end context "toggle backorderable for a variant's stock item" do let(:backorderable) { find ".stock_item_backorderable" } before do expect(backorderable).to be_checked backorderable.set(false) wait_for_ajax end it "persists the value when page reload" do visit current_path expect(backorderable).not_to be_checked end end context "toggle track inventory for a variant's stock item" do let(:track_inventory) { find ".track_inventory_checkbox" } before do expect(track_inventory).to be_checked track_inventory.set(false) wait_for_ajax end it "persists the value when page reloaded" do visit current_path expect(track_inventory).not_to be_checked end end # Regression test for #2896 # The regression was that unchecking the last checkbox caused a redirect # to happen. By ensuring that we're still on an /admin/products URL, we # assert that the redirect is *not* happening. it "can toggle backorderable for the second variant stock item" do new_location = create(:stock_location, name: "Another Location") visit current_url new_location_backorderable = find "#stock_item_backorderable_#{new_location.id}" new_location_backorderable.set(false) wait_for_ajax expect(page.current_url).to include("/admin/products") end it "can create a new stock movement" do fill_in "stock_movement_quantity", with: 5 select2 "default", from: "Stock Location" click_button "Add Stock" expect(page).to have_content('successfully created') within(:css, '.stock_location_info table') do expect(column_text(2)).to eq '15' end end it "can create a new negative stock movement" do fill_in "stock_movement_quantity", with: -5 select2 "default", from: "Stock Location" click_button "Add Stock" expect(page).to have_content('successfully created') within(:css, '.stock_location_info table') do expect(column_text(2)).to eq '5' end end context "with multiple variants" do let!(:variant) { create(:variant, product: product, sku: 'SPREEC') } before do variant.stock_items.first.update_column(:count_on_hand, 30) visit current_url end it "can create a new stock movement for the specified variant" do fill_in "stock_movement_quantity", with: 10 select2 "SPREEC", from: "Variant" click_button "Add Stock" expect(page).to have_content('successfully created') within("#listing_product_stock tr", :text => "SPREEC") do within("table") do expect(column_text(2)).to eq '40' end end end end # Regression test for #3304 context "with no stock location" do let(:product) { create(:product, name: 'apache baseball cap', price: 10) } let(:variant) { create(:variant, product: product, sku: 'FOOBAR') } before do Spree::StockLocation.delete_all visit spree.stock_admin_product_path(product) end it "redirects to stock locations page", js: false do expect(page).to have_content(Spree.t(:stock_management_requires_a_stock_location)) expect(page.current_url).to include("admin/stock_locations") end end end end