From 2046317f1653c44bff4e41a29830772462a3bc82 Mon Sep 17 00:00:00 2001 From: GeorgeThoppil Date: Mon, 18 Apr 2022 20:23:10 -0400 Subject: [PATCH] Allow update of subscriptions containing deleted products --- .../subscriptions/validator.rb | 6 +++- .../subscriptions/validator_spec.rb | 18 ++++++++--- spec/system/admin/subscriptions_spec.rb | 32 ++++++++++++++++--- 3 files changed, 46 insertions(+), 10 deletions(-) diff --git a/engines/order_management/app/services/order_management/subscriptions/validator.rb b/engines/order_management/app/services/order_management/subscriptions/validator.rb index dcb44665b4..16d562c077 100644 --- a/engines/order_management/app/services/order_management/subscriptions/validator.rb +++ b/engines/order_management/app/services/order_management/subscriptions/validator.rb @@ -103,7 +103,11 @@ module OrderManagement end def requested_variants_available? - subscription_line_items.each { |sli| verify_availability_of(sli.variant) } + persisting_line_items.each { |sli| verify_availability_of(sli.variant) } + end + + def persisting_line_items + subscription_line_items.reject(&:marked_for_destruction?) end def verify_availability_of(variant) diff --git a/engines/order_management/spec/services/order_management/subscriptions/validator_spec.rb b/engines/order_management/spec/services/order_management/subscriptions/validator_spec.rb index 6d03ae91be..37a6003ff7 100644 --- a/engines/order_management/spec/services/order_management/subscriptions/validator_spec.rb +++ b/engines/order_management/spec/services/order_management/subscriptions/validator_spec.rb @@ -507,15 +507,25 @@ module OrderManagement end context "when subscription line items exist" do - let(:variant1) { instance_double(Spree::Variant, id: 1) } + let(:variant1) { instance_double(Spree::Variant, id: 1, deleted_at: nil) } let(:variant2) { instance_double(Spree::Variant, id: 2) } + let(:variant3) { instance_double(Spree::Variant, id: 1, deleted_at: Time.zone.now ) } let(:subscription_line_item1) { - instance_double(SubscriptionLineItem, variant: variant1) + instance_double(SubscriptionLineItem, + variant: variant1, + marked_for_destruction?: false) } let(:subscription_line_item2) { - instance_double(SubscriptionLineItem, variant: variant2) + instance_double(SubscriptionLineItem, + variant: variant2, + marked_for_destruction?: false) } - let(:subscription_line_items) { [subscription_line_item1] } + let(:subscription_line_item3) { + instance_double(SubscriptionLineItem, + variant: variant3, + marked_for_destruction?: true) + } + let(:subscription_line_items) { [subscription_line_item1, subscription_line_item3] } context "but some variants are unavailable" do let(:product) { instance_double(Spree::Product, name: "some_name") } diff --git a/spec/system/admin/subscriptions_spec.rb b/spec/system/admin/subscriptions_spec.rb index 01b9fdab3a..82c10e3e0d 100644 --- a/spec/system/admin/subscriptions_spec.rb +++ b/spec/system/admin/subscriptions_spec.rb @@ -513,7 +513,9 @@ describe 'Subscriptions' do let!(:customer) { create(:customer, enterprise: shop) } let!(:credit_card) { create(:stored_credit_card, user: customer.user) } let!(:shop_product) { create(:product, supplier: shop) } + let!(:shop_product2) { create(:product, supplier: shop) } let!(:shop_variant) { create(:variant, product: shop_product, unit_value: "2000") } + let!(:shop_variant2) { create(:variant, product: shop_product2, unit_value: "1000") } let!(:permitted_supplier) do create(:supplier_enterprise).tap do |supplier| create(:enterprise_relationship, child: shop, parent: supplier, @@ -562,13 +564,14 @@ describe 'Subscriptions' do # Add products expect(page).to have_content "NAME OR SKU" add_variant_to_subscription shop_variant, 3 - expect_not_in_open_or_upcoming_order_cycle_warning 1 - add_variant_to_subscription permitted_supplier_variant, 4 + add_variant_to_subscription shop_variant2, 1 expect_not_in_open_or_upcoming_order_cycle_warning 2 + add_variant_to_subscription permitted_supplier_variant, 4 + expect_not_in_open_or_upcoming_order_cycle_warning 3 add_variant_to_subscription incoming_exchange_variant, 5 - expect_not_in_open_or_upcoming_order_cycle_warning 3 + expect_not_in_open_or_upcoming_order_cycle_warning 4 add_variant_to_subscription outgoing_exchange_variant, 6 - expect_not_in_open_or_upcoming_order_cycle_warning 3 + expect_not_in_open_or_upcoming_order_cycle_warning 4 click_button "Next" # Submit form @@ -579,7 +582,7 @@ describe 'Subscriptions' do # Subscription line items are created subscription = Subscription.last - expect(subscription.subscription_line_items.count).to eq 4 + expect(subscription.subscription_line_items.count).to eq 5 # Edit the subscription visit edit_admin_subscription_path(subscription) @@ -597,6 +600,25 @@ describe 'Subscriptions' do # Subscription is saved visit edit_admin_subscription_path(subscription) + expect(page).to have_selector "#subscription-line-items .item", count: 4 + + # Delete an existing product + login_as_admin_and_visit spree.admin_products_path + within "#p_#{shop_product2.id}" do + accept_alert { page.find("[data-powertip=Remove]").click } + end + + visit edit_admin_subscription_path(subscription) + + # Remove deleted shop_variant from the subscription + click_button "edit-products" + within "#sli_0" do + expect(page).to have_selector ".description", text: shop_variant2.name + find("a.delete-item").click + end + click_button "Save Changes" + expect(page).to have_current_path admin_subscriptions_path + visit edit_admin_subscription_path(subscription) expect(page).to have_selector "#subscription-line-items .item", count: 3 end end