From b877540f5f2314d24964b74719a1b5f13b4924ef Mon Sep 17 00:00:00 2001 From: David Cook Date: Tue, 17 Feb 2026 12:36:53 +1100 Subject: [PATCH] Create sourced variant link on clone --- app/controllers/admin/products_v3_controller.rb | 2 +- spec/requests/admin/products_v3_spec.rb | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/controllers/admin/products_v3_controller.rb b/app/controllers/admin/products_v3_controller.rb index ba7151f05b..faf4836855 100644 --- a/app/controllers/admin/products_v3_controller.rb +++ b/app/controllers/admin/products_v3_controller.rb @@ -118,10 +118,10 @@ module Admin variant = source_variant.dup #may need a VariantDuplicator like producs? variant.price = source_variant.price variant.save! + variant.source_variants << source_variant variant.on_demand = source_variant.on_demand variant.on_hand = source_variant.on_hand variant.save! - #todo: create link to source flash.now[:success] = t('.success') variant_index = "-#{variant.id}" diff --git a/spec/requests/admin/products_v3_spec.rb b/spec/requests/admin/products_v3_spec.rb index a18f0c9f74..485273c699 100644 --- a/spec/requests/admin/products_v3_spec.rb +++ b/spec/requests/admin/products_v3_spec.rb @@ -97,6 +97,12 @@ RSpec.describe "Admin::ProductsV3" do expect(response).to have_http_status(:ok) expect(response.body).to match "Original variant" # cloned variant name }.to change { variant.product.variants.count }.by(1) + + new_variant = variant.product.variants.last + # The new variant is a target of the original. It is a "sourced" variant. + expect(variant.target_variants.first).to eq new_variant + # The new variant's source is the original + expect(new_variant.source_variants.first).to eq variant end end end