diff --git a/app/views/admin/products_v3/_table.html.haml b/app/views/admin/products_v3/_table.html.haml index 794d9408a2..139fddd56f 100644 --- a/app/views/admin/products_v3/_table.html.haml +++ b/app/views/admin/products_v3/_table.html.haml @@ -59,22 +59,24 @@ %td.align-left .line-clamp-1= product.inherits_properties ? 'YES' : 'NO' #TODO: consider using https://github.com/RST-J/human_attribute_values, else use I18n.t (also below) - product.variants.each do |variant| - %tr.condensed - %td.align-left - .line-clamp-1= variant.display_name - %td.align-right - .line-clamp-1= variant.sku - %td.align-right - .line-clamp-1= variant.unit_to_display - %td.align-right - .line-clamp-1= number_to_currency(variant.price) - %td.align-right - .line-clamp-1= variant.on_hand || 0 #TODO: spec for this according to requirements. - %td.align-left - .line-clamp-1= variant.product.supplier.name # same as product - %td.align-left - -# empty - %td.align-left - .line-clamp-1= variant.tax_category&.name || "None" # TODO: convert to dropdown, else translate hardcoded string. - %td.align-left - -# empty + = form.fields_for(variant) do |variant_form| + %tr.condensed + %td.align-left + = variant_form.hidden_field :id, name: "[products][#{i}][variants_attributes][][id]" + = variant_form.text_field :display_name, name: "[products][#{i}][variants_attributes][][display_name]", 'aria-label': t('admin.products_page.columns.name'), placeholder: product.name + %td.align-right + .line-clamp-1= variant.sku + %td.align-right + .line-clamp-1= variant.unit_to_display + %td.align-right + .line-clamp-1= number_to_currency(variant.price) + %td.align-right + .line-clamp-1= variant.on_hand || 0 #TODO: spec for this according to requirements. + %td.align-left + .line-clamp-1= variant.product.supplier.name # same as product + %td.align-left + -# empty + %td.align-left + .line-clamp-1= variant.tax_category&.name || "None" # TODO: convert to dropdown, else translate hardcoded string. + %td.align-left + -# empty diff --git a/spec/reflexes/products_reflex_spec.rb b/spec/reflexes/products_reflex_spec.rb index 436f809b7a..c07bc1352f 100644 --- a/spec/reflexes/products_reflex_spec.rb +++ b/spec/reflexes/products_reflex_spec.rb @@ -36,10 +36,11 @@ describe ProductsReflex, type: :reflex do describe '#bulk_update' do let!(:product_b) { create(:simple_product, name: "Bananas", sku: "BAN-01") } let!(:product_a) { create(:simple_product, name: "Apples", sku: "APL-01") } + let(:variant_a1) { create(:variant, product: product_a, display_name: "Medium box") } it "saves valid changes" do params = { - # '[products][][name]' + # '[products][][name]' "products" => [ { "id" => product_a.id.to_s, @@ -53,7 +54,33 @@ describe ProductsReflex, type: :reflex do run_reflex(:bulk_update, params:) product_a.reload }.to change{ product_a.name }.to("Pommes") - .and change{ product_a.sku }.to("POM-01") + .and change{ product_a.sku }.to("POM-01") + end + + it "saves valid changes to nested variants" do + params = { + # '[products][][name]' + # '[products][][variants_attributes][][display_name]' + "products" => [ + { + "id" => product_a.id.to_s, + "name" => "Pommes", + "variants_attributes" => [ + { + "id" => variant_a1.id.to_s, + "display_name" => "Large box", + } + ], + } + ] + } + + expect{ + run_reflex(:bulk_update, params:) + product_a.reload + variant_a1.reload + }.to change{ product_a.name }.to("Pommes") + .and change{ variant_a1.display_name }.to("Large box") end describe "sorting" do diff --git a/spec/system/admin/products_v3/products_spec.rb b/spec/system/admin/products_v3/products_spec.rb index 0d73ac610f..0ed767708d 100644 --- a/spec/system/admin/products_v3/products_spec.rb +++ b/spec/system/admin/products_v3/products_spec.rb @@ -158,30 +158,40 @@ describe 'As an admin, I can see the new product page' do end describe "updating" do + let!(:variant_a1) { create(:variant, product: product_a, display_name: "Medium box") } let!(:product_a) { create(:simple_product, name: "Apples", sku: "APL-01") } before do visit admin_products_v3_index_url end - it "can update product fields" do + it "can update product and variant fields" do within row_containing_name("Apples") do fill_in "Name", with: "Pommes" fill_in "SKU", with: "POM-01" end + within row_containing_name("Medium box") do + fill_in "Name", with: "Large box" + end expect { click_button "Save changes" product_a.reload + variant_a1.reload }.to( change { product_a.name }.to("Pommes") .and change{ product_a.sku }.to("POM-01") + .and change{ variant_a1.display_name }.to("Large box") ) within row_containing_name("Pommes") do expect(page).to have_field "Name", with: "Pommes" expect(page).to have_field "SKU", with: "POM-01" end + within row_containing_name("Large box") do + expect(page).to have_field "Name", with: "Large box" + end + pending expect(page).to have_content "Changes saved" end