diff --git a/spec/system/admin/products_spec.rb b/spec/system/admin/products_spec.rb
index 5a95b93733..43c808a691 100644
--- a/spec/system/admin/products_spec.rb
+++ b/spec/system/admin/products_spec.rb
@@ -13,23 +13,18 @@ RSpec.describe '
let!(:taxon) { create(:taxon) }
let!(:stock_location) { create(:stock_location, backorderable_default: false) }
let!(:shipping_category) { DefaultShippingCategory.find_or_create }
-
- before do
- @supplier = create(:supplier_enterprise, name: 'New supplier')
- @distributors = (1..3).map { create(:distributor_enterprise) }
- @enterprise_fees = (0..2).map { |i| create(:enterprise_fee, enterprise: @distributors[i]) }
- end
+ let!(:supplier) { create(:supplier_enterprise, name: 'New supplier') }
describe "creating a product" do
let!(:tax_category) { create(:tax_category, name: 'Test Tax Category') }
+ before do
+ login_as_admin
+ visit spree.new_admin_product_path
+ end
+
it "display all attributes when submitting with error: no name" do
- login_to_admin_section
-
- click_link 'Products'
- click_link 'New Product'
-
- select @supplier.name, from: 'product_supplier_id'
+ select supplier.name, from: 'product_supplier_id'
select "Weight (kg)", from: 'product_variant_unit_with_scale'
fill_in 'product_unit_value', with: "5.00 g"
assert_selector(:field, placeholder: "5kg g")
@@ -44,7 +39,7 @@ RSpec.describe '
click_button 'Create'
expect(page).to have_content "Name can't be blank"
- expect(page).to have_field 'product_supplier_id', with: @supplier.id
+ expect(page).to have_field 'product_supplier_id', with: supplier.id
expect(page).to have_field 'product_unit_value', with: "5.00 g"
expect(page).to have_field 'product_display_as', with: "Big Box of Chocolates"
expect(page).to have_field 'product_primary_taxon_id', with: taxon.id
@@ -60,10 +55,6 @@ RSpec.describe '
end
it "display all attributes when submitting with error: Unit Value must be grater than 0" do
- login_to_admin_section
-
- visit spree.new_admin_product_path
-
select 'New supplier', from: 'product_supplier_id'
fill_in 'product_name', with: "new product name"
select "Weight (kg)", from: 'product_variant_unit_with_scale'
@@ -80,7 +71,7 @@ RSpec.describe '
click_button 'Create'
expect(page).to have_field 'product_name', with: "new product name"
- expect(page).to have_field 'product_supplier_id', with: @supplier.id
+ expect(page).to have_field 'product_supplier_id', with: supplier.id
expect(page).to have_field 'product_unit_value', with: "0 g"
expect(page).to have_field 'product_display_as', with: "Big Box of Chocolates"
expect(page).to have_field 'product_primary_taxon_id', with: taxon.id
@@ -96,11 +87,6 @@ RSpec.describe '
end
it "preserves 'Items' 'Unit Size' selection when submitting with error" do
- login_to_admin_section
-
- click_link 'Products'
- click_link 'New Product'
-
select "Items", from: 'product_variant_unit_with_scale'
click_button 'Create'
@@ -109,11 +95,6 @@ RSpec.describe '
end
it "assigning important attributes" do
- login_to_admin_section
-
- click_link 'Products'
- click_link 'New Product'
-
expect(find_field('product_shipping_category_id').text).to eq(shipping_category.name)
select 'New supplier', from: 'product_supplier_id'
@@ -146,15 +127,10 @@ RSpec.describe '
variant = product.variants.first
expect(variant.unit_presentation).to eq("5kg")
- expect(variant.supplier).to eq(@supplier)
+ expect(variant.supplier).to eq(supplier)
end
it "creating an on-demand product" do
- login_as_admin
- visit spree.admin_products_path
-
- click_link 'New Product'
-
fill_in 'product_name', with: 'Hot Cakes'
select 'New supplier', from: 'product_supplier_id'
select "Weight (kg)", from: 'product_variant_unit_with_scale'
@@ -177,11 +153,6 @@ RSpec.describe '
end
it "creating product with empty unit value" do
- login_as_admin
- visit spree.admin_products_path
-
- click_link 'New Product'
-
fill_in 'product_name', with: 'Hot Cakes'
select 'New supplier', from: 'product_supplier_id'
select "Weight (kg)", from: 'product_variant_unit_with_scale'
@@ -228,9 +199,6 @@ RSpec.describe '
context "when enable_localized_number is set to #{localized_number}" do
before do
allow(Spree::Config).to receive(:enable_localized_number?).and_return(localized_number)
- login_as_admin
- visit spree.admin_products_path
- click_link 'New Product'
end
it "and price is #{price}" do
@@ -370,23 +338,22 @@ RSpec.describe '
let!(:tax_category) { create(:tax_category) }
let(:filter) { { producerFilter: 2 } }
let(:image_file_path) { Rails.root.join(file_fixture_path, "thinking-cat.jpg") }
+ let(:supplier2) { create(:supplier_enterprise, name: 'Another Supplier') }
+ let(:supplier_permitted) { create(:supplier_enterprise, name: 'Permitted Supplier') }
+ let(:new_user) { create(:user) }
before do
- @new_user = create(:user)
- @supplier2 = create(:supplier_enterprise, name: 'Another Supplier')
- @supplier_permitted = create(:supplier_enterprise, name: 'Permitted Supplier')
- @new_user.enterprise_roles.build(enterprise: @supplier2).save
- @new_user.enterprise_roles.build(enterprise: @distributors[0]).save
- create(:enterprise_relationship, parent: @supplier_permitted, child: @supplier2,
- permissions_list: [:manage_products])
+ new_user.enterprise_roles.build(enterprise: supplier2).save
- login_as @new_user
+ login_as new_user
end
context "products do not require a tax category" do
it "creating a new product" do
- visit spree.admin_products_path
- click_link 'New Product'
+ create(:enterprise_relationship, parent: supplier_permitted, child: supplier2,
+ permissions_list: [:manage_products])
+
+ visit spree.new_admin_product_path
fill_in 'product_name', with: 'A new product !!!'
fill_in 'product_price', with: '19.99'
@@ -400,8 +367,8 @@ RSpec.describe '
# Should only have suppliers listed which the user can manage
expect(page).to have_select 'product_supplier_id',
- with_options: [@supplier2.name, @supplier_permitted.name]
- expect(page).not_to have_select 'product_supplier_id', with_options: [@supplier.name]
+ with_options: [supplier2.name, supplier_permitted.name]
+ expect(page).not_to have_select 'product_supplier_id', with_options: [supplier.name]
click_button 'Create'
@@ -409,369 +376,350 @@ RSpec.describe '
product = Spree::Product.find_by(name: 'A new product !!!')
variant = product.variants.first
expect(variant.tax_category).to be_nil
- expect(variant.supplier).to eq(@supplier2)
+ expect(variant.supplier).to eq(supplier2)
end
end
- it "editing a product" do
- product = create(:simple_product, name: 'a product', supplier_id: @supplier2.id)
+ describe "editing page" do
+ let!(:product) { create(:simple_product, name: 'a product', supplier_id: supplier2.id) }
- visit spree.edit_admin_product_path product
+ it "editing a product" do
+ visit spree.edit_admin_product_path product
- fill_in_trix_editor 'product_description', with: 'A description...'
- click_button 'Update'
- expect(flash_message).to eq('Product "a product" has been successfully updated!')
- product.reload
- expect(product.description).to eq("
A description...
")
- end
+ fill_in_trix_editor 'product_description', with: 'A description...'
+ click_button 'Update'
+ expect(flash_message).to eq('Product "a product" has been successfully updated!')
+ product.reload
+ expect(product.description).to eq("A description...
")
+ end
- it "editing a product comming from the bulk product update page with filter" do
- product = create(:simple_product, name: 'a product', supplier_id: @supplier2.id)
+ it "editing a product comming from the bulk product update page with filter" do
+ visit spree.edit_admin_product_path(product, filter)
- visit spree.edit_admin_product_path(product, filter)
+ click_button 'Update'
+ expect(flash_message).to eq('Product "a product" has been successfully updated!')
- click_button 'Update'
- expect(flash_message).to eq('Product "a product" has been successfully updated!')
+ # Check the url still includes the filters
+ uri = URI.parse(current_url)
+ expect("#{uri.path}?#{uri.query}").to eq spree.edit_admin_product_path(product, filter)
- # Check the url still includes the filters
- uri = URI.parse(current_url)
- expect("#{uri.path}?#{uri.query}").to eq spree.edit_admin_product_path(product, filter)
+ # Link back to the bulk product update page should include the filters
+ expected_admin_product_url =
+ Regexp.new(Regexp.escape("#{spree.admin_products_path}#?#{filter.to_query}"))
+ expect(page).to have_link('Back to products list',
+ href: expected_admin_product_url)
+ expect(page).to have_link('Cancel', href: expected_admin_product_url)
- # Link back to the bulk product update page should include the filters
- expected_admin_product_url =
- Regexp.new(Regexp.escape("#{spree.admin_products_path}#?#{filter.to_query}"))
- expect(page).to have_link('Back to products list',
- href: expected_admin_product_url)
- expect(page).to have_link('Cancel', href: expected_admin_product_url)
+ expected_product_url = Regexp.new(Regexp.escape(spree.edit_admin_product_path(
+ product.id, filter
+ )))
+ expect(page).to have_link('Product Details',
+ href: expected_product_url)
- expected_product_url = Regexp.new(Regexp.escape(spree.edit_admin_product_path(
- product.id, filter
- )))
- expect(page).to have_link('Product Details',
- href: expected_product_url)
-
- expected_product_image_url = Regexp.new(Regexp.escape(spree.admin_product_images_path(
- product.id, filter
- )))
- expect(page).to have_link('Images',
- href: expected_product_image_url)
-
- expected_product_variant_url = Regexp.new(Regexp.escape(spree.admin_product_variants_path(
+ expected_product_image_url = Regexp.new(Regexp.escape(spree.admin_product_images_path(
product.id, filter
)))
- expect(page).to have_link('Variants',
- href: expected_product_variant_url)
+ expect(page).to have_link('Images',
+ href: expected_product_image_url)
- expected_product_properties_url =
- Regexp.new(Regexp.escape(spree.admin_product_product_properties_path(
- product.id, filter
- )))
- expect(page).to have_link('Product Properties',
- href: expected_product_properties_url)
+ expected_product_variant_url = Regexp.new(Regexp.escape(spree.admin_product_variants_path(
+ product.id, filter
+ )))
+ expect(page).to have_link('Variants',
+ href: expected_product_variant_url)
- expected_product_group_buy_option_url =
- Regexp.new(Regexp.escape(spree.group_buy_options_admin_product_path(
- product.id, filter
- )))
- expect(page).to have_link('Group Buy Options',
- href: expected_product_group_buy_option_url)
+ expected_product_properties_url =
+ Regexp.new(Regexp.escape(spree.admin_product_product_properties_path(
+ product.id, filter
+ )))
+ expect(page).to have_link('Product Properties',
+ href: expected_product_properties_url)
- expected_product_seo_url = Regexp.new(Regexp.escape(spree.seo_admin_product_path(
- product.id, filter
- )))
- expect(page).to have_link('Search', href: expected_product_seo_url)
- end
+ expected_product_group_buy_option_url =
+ Regexp.new(Regexp.escape(spree.group_buy_options_admin_product_path(
+ product.id, filter
+ )))
+ expect(page).to have_link('Group Buy Options',
+ href: expected_product_group_buy_option_url)
- it "editing product group buy options" do
- product = create(:simple_product, supplier_id: @supplier2.id)
-
- visit spree.edit_admin_product_path product
- within('#sidebar') { click_link 'Group Buy Options' }
- choose('product_group_buy_1')
- fill_in 'Bulk unit size', with: '10'
-
- click_button 'Update'
-
- expect(flash_message).to eq("Product \"#{product.name}\" has been successfully updated!")
- product.reload
- expect(product.group_buy).to be true
- expect(product.group_buy_unit_size).to eq(10.0)
- end
-
- it "loading editing product group buy options with url filters" do
- product = create(:simple_product, supplier_id: @supplier2.id)
-
- visit spree.group_buy_options_admin_product_path(product, filter)
-
- expected_cancel_link = Regexp.new(Regexp.escape(spree.edit_admin_product_path(product,
- filter)))
- expect(page).to have_link('Cancel', href: expected_cancel_link)
- end
-
- it "editing product group buy options with url filter" do
- product = create(:simple_product, supplier_id: @supplier2.id)
-
- visit spree.group_buy_options_admin_product_path(product, filter)
- choose('product_group_buy_1')
- fill_in 'Bulk unit size', with: '10'
-
- click_button 'Update'
-
- uri = URI.parse(current_url)
- expect("#{uri.path}?#{uri.query}").to eq spree.edit_admin_product_path(product, filter)
- end
-
- it "editing product Search" do
- product = create(:simple_product, supplier_id: @supplier2.id)
- visit spree.edit_admin_product_path product
- within('#sidebar') { click_link 'Search' }
- fill_in 'Product Search Keywords', with: 'Product Search Keywords'
- fill_in 'Notes', with: 'Just testing Notes'
- click_button 'Update'
- expect(flash_message).to eq("Product \"#{product.name}\" has been successfully updated!")
- product.reload
- expect(product.notes).to eq('Just testing Notes')
- expect(product.meta_keywords).to eq('Product Search Keywords')
- end
-
- it "loading editing product Search with url filters" do
- product = create(:simple_product, supplier_id: @supplier2.id)
-
- visit spree.seo_admin_product_path(product, filter)
-
- expected_cancel_link = Regexp.new(Regexp.escape(spree.edit_admin_product_path(product,
- filter)))
- expect(page).to have_link('Cancel', href: expected_cancel_link)
- end
-
- it "editing product Search with url filter" do
- product = create(:simple_product, supplier_id: @supplier2.id)
-
- visit spree.seo_admin_product_path(product, filter)
-
- fill_in 'Product Search Keywords', with: 'Product Search Keywords'
- fill_in 'Notes', with: 'Just testing Notes'
-
- click_button 'Update'
-
- uri = URI.parse(current_url)
- expect("#{uri.path}?#{uri.query}").to eq spree.edit_admin_product_path(product, filter)
- end
-
- it "loading product properties page including url filters" do
- product = create(:simple_product, supplier_id: @supplier2.id)
- visit spree.admin_product_product_properties_path(product, filter)
-
- uri = URI.parse(current_url)
- # we stay on the same url as the new image content is loaded via an ajax call
- expect("#{uri.path}?#{uri.query}").to eq spree.admin_product_product_properties_path(product,
- filter)
-
- expected_cancel_link = Regexp.new(Regexp.escape(spree.admin_product_product_properties_path(
- product, filter
- )))
- expect(page).to have_link('Cancel', href: expected_cancel_link)
- end
-
- it "deleting product properties" do
- # Given a product with a property
- product = create(:simple_product, supplier_id: @supplier2.id)
- product.set_property('fooprop', 'fooval')
-
- # When I navigate to the product properties page
- visit spree.admin_product_product_properties_path(product)
- expect(page).to have_select2 'product_product_properties_attributes_0_property_name',
- selected: 'fooprop'
- expect(page).to have_field 'product_product_properties_attributes_0_value', with: 'fooval'
-
- # And I delete the property
- accept_alert do
- page.all('a.delete-resource').first.click
- end
- click_button 'Update'
-
- # Then the property should have been deleted
- expect(page).not_to have_field 'product_product_properties_attributes_0_property_name',
- with: 'fooprop'
- expect(page).not_to have_field 'product_product_properties_attributes_0_value', with: 'fooval'
- expect(product.reload.property('fooprop')).to be_nil
- end
-
- it "deleting product properties including url filters" do
- # Given a product with a property
- product = create(:simple_product, supplier_id: @supplier2.id)
- product.set_property('fooprop', 'fooval')
-
- # When I navigate to the product properties page
- visit spree.admin_product_product_properties_path(product, filter)
-
- # And I delete the property
- accept_alert do
- page.all('a.delete-resource').first.click
+ expected_product_seo_url = Regexp.new(Regexp.escape(spree.seo_admin_product_path(
+ product.id, filter
+ )))
+ expect(page).to have_link('Search', href: expected_product_seo_url)
end
- uri = URI.parse(current_url)
- expect("#{uri.path}?#{uri.query}").to eq spree.admin_product_product_properties_path(product,
- filter)
- end
+ it "editing product group buy options" do
+ visit spree.edit_admin_product_path product
+ within('#sidebar') { click_link 'Group Buy Options' }
+ choose('product_group_buy_1')
+ fill_in 'Bulk unit size', with: '10'
- it "adding product properties including url filters" do
- # Given a product
- product = create(:simple_product, supplier_id: @supplier2.id)
- product.set_property('fooprop', 'fooval')
+ click_button 'Update'
- # When I navigate to the product properties page
- visit spree.admin_product_product_properties_path(product, filter)
+ expect(flash_message).to eq("Product \"#{product.name}\" has been successfully updated!")
+ product.reload
+ expect(product.group_buy).to be true
+ expect(product.group_buy_unit_size).to eq(10.0)
+ end
- # And I add a property
- select 'fooprop', from: 'product_product_properties_attributes_0_property_name'
- fill_in 'product_product_properties_attributes_0_value', with: 'fooval2'
+ it "loading editing product group buy options with url filters" do
+ visit spree.group_buy_options_admin_product_path(product, filter)
- click_button 'Update'
-
- uri = URI.parse(current_url)
- expect("#{uri.path}?#{uri.query}").to eq spree.edit_admin_product_path(product, filter)
- end
-
- it "loading new product image page" do
- product = create(:simple_product, supplier_id: @supplier2.id)
-
- visit spree.admin_product_images_path(product)
- expect(page).to have_selector ".no-objects-found"
-
- page.find('a#new_image_link').click
- expect(page).to have_selector "#image_attachment"
- end
-
- it "loading new product image page including url filters" do
- product = create(:simple_product, supplier_id: @supplier2.id)
-
- visit spree.admin_product_images_path(product, filter)
-
- page.find('a#new_image_link').click
-
- expected_cancel_link = Regexp.new(Regexp.escape(spree.admin_product_images_path(product,
+ expected_cancel_link = Regexp.new(Regexp.escape(spree.edit_admin_product_path(product,
filter)))
- expect(page).to have_link('Cancel', href: expected_cancel_link)
- end
+ expect(page).to have_link('Cancel', href: expected_cancel_link)
+ end
- it "upload a new product image including url filters" do
- product = create(:simple_product, supplier_id: @supplier2.id)
+ it "editing product group buy options with url filter" do
+ visit spree.group_buy_options_admin_product_path(product, filter)
+ choose('product_group_buy_1')
+ fill_in 'Bulk unit size', with: '10'
- visit spree.admin_product_images_path(product, filter)
+ click_button 'Update'
- page.find('a#new_image_link').click
+ uri = URI.parse(current_url)
+ expect("#{uri.path}?#{uri.query}").to eq spree.edit_admin_product_path(product, filter)
+ end
- attach_file('image_attachment', image_file_path)
- click_button "Create"
+ it "editing product Search" do
+ visit spree.edit_admin_product_path product
- uri = URI.parse(current_url)
- expect("#{uri.path}?#{uri.query}").to eq spree.admin_product_images_path(product, filter)
- end
+ within('#sidebar') { click_link 'Search' }
+ fill_in 'Product Search Keywords', with: 'Product Search Keywords'
+ fill_in 'Notes', with: 'Just testing Notes'
+ click_button 'Update'
+ expect(flash_message).to eq("Product \"#{product.name}\" has been successfully updated!")
+ product.reload
+ expect(product.notes).to eq('Just testing Notes')
+ expect(product.meta_keywords).to eq('Product Search Keywords')
+ end
- it "loading image page including url filter" do
- product = create(:simple_product, supplier_id: @supplier2.id)
+ it "loading editing product Search with url filters" do
+ visit spree.seo_admin_product_path(product, filter)
- visit spree.admin_product_images_path(product, filter)
-
- expected_new_image_link = Regexp.new(Regexp.escape(spree.new_admin_product_image_path(
- product, filter
- )))
- expect(page).to have_link('New Image', href: expected_new_image_link)
- end
-
- it "loading edit product image page including url filter" do
- product = create(:simple_product, supplier_id: @supplier2.id)
- image = white_logo_file
- image_object = Spree::Image.create(viewable_id: product.id,
- viewable_type: 'Spree::Product', alt: "position 1",
- attachment: image, position: 1)
-
- visit spree.admin_product_images_path(product, filter)
-
- page.find("a.icon-edit").click
-
- uri = URI.parse(current_url)
- expect("#{uri.path}?#{uri.query}")
- .to eq spree.edit_admin_product_image_path(product, image_object, filter)
-
- expected_cancel_link = Regexp.new(Regexp.escape(spree.admin_product_images_path(product,
+ expected_cancel_link = Regexp.new(Regexp.escape(spree.edit_admin_product_path(product,
filter)))
- expect(page).to have_link('Cancel', href: expected_cancel_link)
- expect(page).to have_link("Back To Images List", href: expected_cancel_link)
- end
-
- it "updating a product image including url filter" do
- product = create(:simple_product, supplier_id: @supplier2.id)
- image = white_logo_file
- image_object = Spree::Image.create(viewable_id: product.id,
- viewable_type: 'Spree::Product', alt: "position 1",
- attachment: image, position: 1)
-
- visit spree.admin_product_images_path(product, filter)
-
- page.find("a.icon-edit").click
-
- attach_file('image_attachment', image_file_path)
- click_button "Update"
-
- uri = URI.parse(current_url)
- expect("#{uri.path}?#{uri.query}").to eq spree.admin_product_images_path(product, filter)
- end
-
- it "checks error when creating product image with unsupported format" do
- unsupported_image_file_path = Rails.root.join("README.md").to_s
- product = create(:simple_product, supplier_id: @supplier2.id)
-
- image = white_logo_file
- Spree::Image.create(viewable_id: product.id, viewable_type: 'Spree::Product',
- alt: "position 1", attachment: image, position: 1)
-
- visit spree.admin_product_images_path(product)
- page.find('a#new_image_link').click
- attach_file('image_attachment', unsupported_image_file_path)
- click_button "Create"
-
- expect(page).to have_text "Attachment has an invalid content type"
- expect(page).to have_text "Attachment is not a valid image"
- end
-
- it "deleting product images" do
- product = create(:simple_product, supplier_id: @supplier2.id)
- image = white_logo_file
- Spree::Image.create(viewable_id: product.id, viewable_type: 'Spree::Product',
- alt: "position 1", attachment: image, position: 1)
-
- visit spree.admin_product_images_path(product)
- expect(page).to have_selector "table.index td img"
- expect(product.reload.image).not_to be_nil
-
- accept_alert do
- page.find('a.delete-resource').click
+ expect(page).to have_link('Cancel', href: expected_cancel_link)
end
- expect(page).not_to have_selector "table.index td img"
- expect(product.reload.image).to be_nil
- end
+ it "editing product Search with url filter" do
+ visit spree.seo_admin_product_path(product, filter)
- it "deleting product image including url filter" do
- product = create(:simple_product, supplier_id: @supplier2.id)
- image = white_logo_file
- Spree::Image.create(viewable_id: product.id, viewable_type: 'Spree::Product',
- alt: "position 1", attachment: image, position: 1)
+ fill_in 'Product Search Keywords', with: 'Product Search Keywords'
+ fill_in 'Notes', with: 'Just testing Notes'
- visit spree.admin_product_images_path(product, filter)
+ click_button 'Update'
- accept_alert do
- page.find('a.delete-resource').click
+ uri = URI.parse(current_url)
+ expect("#{uri.path}?#{uri.query}").to eq spree.edit_admin_product_path(product, filter)
end
- uri = URI.parse(current_url)
- expect("#{uri.path}?#{uri.query}").to eq spree.admin_product_images_path(product, filter)
+ it "loading product properties page including url filters" do
+ visit spree.admin_product_product_properties_path(product, filter)
+
+ uri = URI.parse(current_url)
+ # we stay on the same url as the new image content is loaded via an ajax call
+ expect("#{uri.path}?#{uri.query}").to eq(
+ spree.admin_product_product_properties_path(product, filter)
+ )
+
+ expected_cancel_link = Regexp.new(
+ Regexp.escape(spree.admin_product_product_properties_path(product, filter))
+ )
+ expect(page).to have_link('Cancel', href: expected_cancel_link)
+ end
+ end
+
+ describe "product properties" do
+ # Given a product with a property
+ let!(:product) {
+ create(:simple_product, supplier_id: supplier2.id).tap do |product|
+ product.set_property('fooprop', 'fooval')
+ end
+ }
+
+ it "deleting product properties" do
+ # When I navigate to the product properties page
+ visit spree.admin_product_product_properties_path(product)
+ expect(page).to have_select2 'product_product_properties_attributes_0_property_name',
+ selected: 'fooprop'
+ expect(page).to have_field 'product_product_properties_attributes_0_value', with: 'fooval'
+
+ # And I delete the property
+ accept_alert do
+ page.all('a.delete-resource').first.click
+ end
+ click_button 'Update'
+
+ # Then the property should have been deleted
+ expect(page).not_to have_field 'product_product_properties_attributes_0_property_name',
+ with: 'fooprop'
+ expect(page).not_to have_field 'product_product_properties_attributes_0_value',
+ with: 'fooval'
+ expect(product.reload.property('fooprop')).to be_nil
+ end
+
+ it "deleting product properties including url filters" do
+ # When I navigate to the product properties page
+ visit spree.admin_product_product_properties_path(product, filter)
+
+ # And I delete the property
+ accept_alert do
+ page.all('a.delete-resource').first.click
+ end
+
+ uri = URI.parse(current_url)
+ expect("#{uri.path}?#{uri.query}").to eq(
+ spree.admin_product_product_properties_path(product, filter)
+ )
+ end
+
+ it "adding product properties including url filters" do
+ # When I navigate to the product properties page
+ visit spree.admin_product_product_properties_path(product, filter)
+
+ # And I add a property
+ select 'fooprop', from: 'product_product_properties_attributes_0_property_name'
+ fill_in 'product_product_properties_attributes_0_value', with: 'fooval2'
+
+ click_button 'Update'
+
+ uri = URI.parse(current_url)
+ expect("#{uri.path}?#{uri.query}").to eq spree.edit_admin_product_path(product, filter)
+ end
+ end
+
+ describe "image page" do
+ let!(:product) { create(:simple_product, supplier_id: supplier2.id) }
+
+ it "loading new product image page" do
+ visit spree.admin_product_images_path(product)
+ expect(page).to have_selector ".no-objects-found"
+
+ page.find('a#new_image_link').click
+ expect(page).to have_selector "#image_attachment"
+ end
+
+ it "loading new product image page including url filters" do
+ visit spree.admin_product_images_path(product, filter)
+
+ page.find('a#new_image_link').click
+
+ expected_cancel_link = Regexp.new(Regexp.escape(spree.admin_product_images_path(product,
+ filter)))
+ expect(page).to have_link('Cancel', href: expected_cancel_link)
+ end
+
+ it "upload a new product image including url filters" do
+ visit spree.admin_product_images_path(product, filter)
+
+ page.find('a#new_image_link').click
+
+ attach_file('image_attachment', image_file_path)
+ click_button "Create"
+
+ uri = URI.parse(current_url)
+ expect("#{uri.path}?#{uri.query}").to eq spree.admin_product_images_path(product, filter)
+ end
+
+ it "loading image page including url filter" do
+ visit spree.admin_product_images_path(product, filter)
+
+ expected_new_image_link = Regexp.new(Regexp.escape(spree.new_admin_product_image_path(
+ product, filter
+ )))
+ expect(page).to have_link('New Image', href: expected_new_image_link)
+ end
+
+ it "loading edit product image page including url filter" do
+ image = white_logo_file
+ image_object = Spree::Image.create(viewable_id: product.id,
+ viewable_type: 'Spree::Product', alt: "position 1",
+ attachment: image, position: 1)
+
+ visit spree.admin_product_images_path(product, filter)
+
+ page.find("a.icon-edit").click
+
+ uri = URI.parse(current_url)
+ expect("#{uri.path}?#{uri.query}")
+ .to eq spree.edit_admin_product_image_path(product, image_object, filter)
+
+ expected_cancel_link = Regexp.new(Regexp.escape(spree.admin_product_images_path(product,
+ filter)))
+ expect(page).to have_link('Cancel', href: expected_cancel_link)
+ expect(page).to have_link("Back To Images List", href: expected_cancel_link)
+ end
+
+ it "updating a product image including url filter" do
+ image = white_logo_file
+ image_object = Spree::Image.create(viewable_id: product.id,
+ viewable_type: 'Spree::Product', alt: "position 1",
+ attachment: image, position: 1)
+
+ visit spree.admin_product_images_path(product, filter)
+
+ page.find("a.icon-edit").click
+
+ attach_file('image_attachment', image_file_path)
+ click_button "Update"
+
+ uri = URI.parse(current_url)
+ expect("#{uri.path}?#{uri.query}").to eq spree.admin_product_images_path(product, filter)
+ end
+
+ it "checks error when creating product image with unsupported format" do
+ unsupported_image_file_path = Rails.root.join("README.md").to_s
+ product = create(:simple_product, supplier_id: @supplier2.id)
+
+ image = white_logo_file
+ Spree::Image.create(viewable_id: product.id, viewable_type: 'Spree::Product',
+ alt: "position 1", attachment: image, position: 1)
+
+ visit spree.admin_product_images_path(product)
+ page.find('a#new_image_link').click
+ attach_file('image_attachment', unsupported_image_file_path)
+ click_button "Create"
+
+ expect(page).to have_text "Attachment has an invalid content type"
+ expect(page).to have_text "Attachment is not a valid image"
+ end
+
+ it "deleting product images" do
+ image = white_logo_file
+ Spree::Image.create(viewable_id: product.id, viewable_type: 'Spree::Product',
+ alt: "position 1", attachment: image, position: 1)
+
+ visit spree.admin_product_images_path(product)
+ expect(page).to have_selector "table.index td img"
+ expect(product.reload.image).not_to be_nil
+
+ accept_alert do
+ page.find('a.delete-resource').click
+ end
+
+ expect(page).not_to have_selector "table.index td img"
+ expect(product.reload.image).to be_nil
+ end
+
+ it "deleting product image including url filter" do
+ image = white_logo_file
+ Spree::Image.create(viewable_id: product.id, viewable_type: 'Spree::Product',
+ alt: "position 1", attachment: image, position: 1)
+
+ visit spree.admin_product_images_path(product, filter)
+
+ accept_alert do
+ page.find('a.delete-resource').click
+ end
+
+ uri = URI.parse(current_url)
+ expect("#{uri.path}?#{uri.query}").to eq spree.admin_product_images_path(product, filter)
+ end
end
context "editing a product's variant unit scale" do
- let(:product) { create(:simple_product, name: 'a product', supplier_id: @supplier2.id) }
+ let(:product) { create(:simple_product, name: 'a product', supplier_id: supplier2.id) }
before do
allow(Spree::Config).to receive(:available_units).and_return("g,lb,oz,kg,T,mL,L,kL")