From c66e5fe1e97917c69621a2e439dafc42333d0c01 Mon Sep 17 00:00:00 2001 From: luisramos0 Date: Sun, 22 Sep 2019 14:59:59 +0100 Subject: [PATCH] Make subscription line items handle soft deleted variants This ensures subscription list page works. The variant can be removed from the subscription by the user in the edit subscription page --- app/models/subscription_line_item.rb | 5 ++++ .../subscription_line_item_serializer_spec.rb | 25 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 spec/serializers/api/admin/subscription_line_item_serializer_spec.rb diff --git a/app/models/subscription_line_item.rb b/app/models/subscription_line_item.rb index 38f2694be0..d7d96fedc5 100644 --- a/app/models/subscription_line_item.rb +++ b/app/models/subscription_line_item.rb @@ -10,6 +10,11 @@ class SubscriptionLineItem < ActiveRecord::Base (price_estimate || 0) * (quantity || 0) end + # Ensure SubscriptionLineItem always has access to soft-deleted Variant attribute + def variant + Spree::Variant.unscoped { super } + end + # Used to calculators to estimate fees alias_method :amount, :total_estimate diff --git a/spec/serializers/api/admin/subscription_line_item_serializer_spec.rb b/spec/serializers/api/admin/subscription_line_item_serializer_spec.rb new file mode 100644 index 0000000000..5542c5d482 --- /dev/null +++ b/spec/serializers/api/admin/subscription_line_item_serializer_spec.rb @@ -0,0 +1,25 @@ +require 'spec_helper' + +module Api + module Admin + describe SubscriptionLineItemSerializer do + let(:subscription_line_item) { create(:subscription_line_item) } + + it "serializes a subscription line item with the product name" do + serializer = described_class.new(subscription_line_item) + + expect(serializer.to_json).to match subscription_line_item.variant.product.name + end + + context "when the variant of the subscription line item is soft deleted" do + it "serializers the subscription line item with the product name" do + subscription_line_item.variant.update_attribute :deleted_at, Time.zone.now + + serializer = described_class.new(subscription_line_item.reload) + + expect(serializer.to_json).to match subscription_line_item.variant.product.name + end + end + end + end +end