require 'spec_helper' describe "Properties", type: :feature, js: true do stub_authorization! before(:each) do visit spree.admin_products_path end context "Property index" do before do create(:property, name: 'shirt size', presentation: 'size') create(:property, name: 'shirt fit', presentation: 'fit') click_link "Products" click_link "Properties" end context "listing product properties" do it "should list the existing product properties" do within_row(1) do expect(column_text(1)).to eq("shirt size") expect(column_text(2)).to eq("size") end within_row(2) do expect(column_text(1)).to eq("shirt fit") expect(column_text(2)).to eq("fit") end end end context "searching properties" do it 'should list properties matching search query' do click_on "Filter" fill_in "q_name_cont", with: "size" click_on 'Search' expect(page).to have_content("shirt size") expect(page).not_to have_content("shirt fit") end end end context "creating a property" do it "should allow an admin to create a new product property" do click_link "Products" click_link "Properties" click_link "new_property_link" within('.content-header') { expect(page).to have_content("New Property") } fill_in "property_name", with: "color of band" fill_in "property_presentation", with: "color" click_button "Create" expect(page).to have_content("successfully created!") end end context "editing a property" do before(:each) do create(:property) click_link "Products" click_link "Properties" within_row(1) { click_icon :edit } end it "should allow an admin to edit an existing product property" do fill_in "property_name", with: "model 99" click_button "Update" expect(page).to have_content("successfully updated!") expect(page).to have_content("model 99") end it "should show validation errors" do fill_in "property_name", with: "" click_button "Update" expect(page).to have_content("Name can't be blank") end end context "linking a property to a product" do before do create(:product) visit spree.admin_products_path click_icon :edit click_link "Properties" end # Regression test for #2279 it "successfully create and then remove product property" do fill_in_property # Sometimes the page doesn't load before the all check is done # lazily finding the element gives the page 10 seconds expect(page).to have_css("tbody#product_properties tr:nth-child(2)") expect(all("tbody#product_properties tr").count).to eq(2) delete_product_property check_property_row_count(1) end # Regression test for #4466 it "successfully remove and create a product property at the same time" do fill_in_property fill_in "product_product_properties_attributes_1_property_name", with: "New Property" fill_in "product_product_properties_attributes_1_value", with: "New Value" delete_product_property # Give fadeOut time to complete expect(page).not_to have_selector("#product_product_properties_attributes_0_property_name") expect(page).not_to have_selector("#product_product_properties_attributes_0_value") click_button "Update" expect(page).not_to have_content("Product is not found") check_property_row_count(2) end def fill_in_property fill_in "product_product_properties_attributes_0_property_name", with: "A Property" fill_in "product_product_properties_attributes_0_value", with: "A Value" click_button "Update" click_link "Properties" end def delete_product_property accept_alert do click_icon :delete wait_for_ajax # delete action must finish before reloading end end def check_property_row_count(expected_row_count) click_link "Properties" expect(page).to have_css("tbody#product_properties") expect(all("tbody#product_properties tr").count).to eq(expected_row_count) end end end