From 63530b91213f383822a98ab3f8622100209c8286 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 12 Sep 2024 11:05:36 +1000 Subject: [PATCH] Add lookup of variants by semantic id --- app/models/spree/variant.rb | 5 +++++ spec/models/spree/variant_spec.rb | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/app/models/spree/variant.rb b/app/models/spree/variant.rb index 5950886104f..26a601d94ab 100644 --- a/app/models/spree/variant.rb +++ b/app/models/spree/variant.rb @@ -170,6 +170,11 @@ def self.active(currency = nil) select("spree_variants.id") }) end + def self.linked_to(semantic_id) + includes(:semantic_links).references(:semantic_links) + .where(semantic_links: { semantic_id: }).first + end + def tax_category super || TaxCategory.find_by(is_default: true) end diff --git a/spec/models/spree/variant_spec.rb b/spec/models/spree/variant_spec.rb index ef1f22fcdf7..36860d1872a 100644 --- a/spec/models/spree/variant_spec.rb +++ b/spec/models/spree/variant_spec.rb @@ -488,6 +488,19 @@ end end + describe ".linked_to" do + let!(:variant_unlinked) { create(:variant) } + let!(:variant_linked) { create(:variant, semantic_links: [link]) } + let!(:variant_linked_unrelated) { create(:variant, semantic_links: [unrelated_link]) } + let(:link) { SemanticLink.new(semantic_id: "#my_precious") } + let(:unrelated_link) { SemanticLink.new(semantic_id: "#other") } + + it "finds a variant by link" do + expect(Spree::Variant.linked_to("#my_precious")) + .to eq variant_linked + end + end + describe "generating the product and variant name" do let(:product) { variant.product }