From c08905138092c091edcd95e956180263b08dcc20 Mon Sep 17 00:00:00 2001 From: luca-landa Date: Fri, 19 Mar 2021 17:05:09 +0100 Subject: Improve subscription creation order promotion rule name --- .../subscription_creation_order_promotion_rule.rb | 40 ++++++++++++++++ .../subscription_promotion_rule.rb | 40 ---------------- ...cription_creation_order_promotion_rule.html.erb | 0 .../rules/_subscription_promotion_rule.html.erb | 0 lib/solidus_subscriptions/engine.rb | 2 +- ...scription_creation_order_promotion_rule_spec.rb | 55 ++++++++++++++++++++++ .../subscription_promotion_rule_spec.rb | 55 ---------------------- 7 files changed, 96 insertions(+), 96 deletions(-) create mode 100644 app/models/solidus_subscriptions/subscription_creation_order_promotion_rule.rb delete mode 100644 app/models/solidus_subscriptions/subscription_promotion_rule.rb create mode 100644 app/views/spree/admin/promotions/rules/_subscription_creation_order_promotion_rule.html.erb delete mode 100644 app/views/spree/admin/promotions/rules/_subscription_promotion_rule.html.erb create mode 100644 spec/lib/solidus_subscriptions/subscription_creation_order_promotion_rule_spec.rb delete mode 100644 spec/lib/solidus_subscriptions/subscription_promotion_rule_spec.rb diff --git a/app/models/solidus_subscriptions/subscription_creation_order_promotion_rule.rb b/app/models/solidus_subscriptions/subscription_creation_order_promotion_rule.rb new file mode 100644 index 0000000..9b5d465 --- /dev/null +++ b/app/models/solidus_subscriptions/subscription_creation_order_promotion_rule.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +module SolidusSubscriptions + class SubscriptionCreationOrderPromotionRule < ::Spree::PromotionRule + # Promotion can be applied to an entire order. Will only be true + # for Spree::Order + # + # @param promotable [Object] Any object which could have this + # promotion rule applied to it. + # + # @return [Boolean] + def applicable?(promotable) + promotable.is_a? ::Spree::Order + end + + # An order is eligible if it contains a line item with an associates + # subscription_line_item. This rule applies to order and so its eligibility + # will always be considered against an order. Will only return true for + # orders containing Spree::Line item with associated subscription_line_items + # + # @param order [Spree::Order] The order which could have this rule applied + # to it. + # + # @return [Boolean] + def eligible?(order, **_options) + order.subscription_line_items.any? + end + + # Certain actions create adjustments on line items. In this case, only + # line items with associated subscription_line_items are eligible to be + # adjusted. Will only return true # if :line_item has an associated + # subscription. + # + # @param line_item [Spree::LineItem] The line item which could be adjusted + # by the promotion. + def actionable?(line_item) + line_item.subscription_line_items.present? + end + end +end diff --git a/app/models/solidus_subscriptions/subscription_promotion_rule.rb b/app/models/solidus_subscriptions/subscription_promotion_rule.rb deleted file mode 100644 index fd99979..0000000 --- a/app/models/solidus_subscriptions/subscription_promotion_rule.rb +++ /dev/null @@ -1,40 +0,0 @@ -# frozen_string_literal: true - -module SolidusSubscriptions - class SubscriptionPromotionRule < ::Spree::PromotionRule - # Promotion can be applied to an entire order. Will only be true - # for Spree::Order - # - # @param promotable [Object] Any object which could have this - # promotion rule applied to it. - # - # @return [Boolean] - def applicable?(promotable) - promotable.is_a? ::Spree::Order - end - - # An order is eligible if it contains a line item with an associates - # subscription_line_item. This rule applies to order and so its eligibility - # will always be considered against an order. Will only return true for - # orders containing Spree::Line item with associated subscription_line_items - # - # @param order [Spree::Order] The order which could have this rule applied - # to it. - # - # @return [Boolean] - def eligible?(order, **_options) - order.subscription_line_items.any? - end - - # Certain actions create adjustments on line items. In this case, only - # line items with associated subscription_line_items are eligible to be - # adjusted. Will only return true # if :line_item has an associated - # subscription. - # - # @param line_item [Spree::LineItem] The line item which could be adjusted - # by the promotion. - def actionable?(line_item) - line_item.subscription_line_items.present? - end - end -end diff --git a/app/views/spree/admin/promotions/rules/_subscription_creation_order_promotion_rule.html.erb b/app/views/spree/admin/promotions/rules/_subscription_creation_order_promotion_rule.html.erb new file mode 100644 index 0000000..e69de29 diff --git a/app/views/spree/admin/promotions/rules/_subscription_promotion_rule.html.erb b/app/views/spree/admin/promotions/rules/_subscription_promotion_rule.html.erb deleted file mode 100644 index e69de29..0000000 diff --git a/lib/solidus_subscriptions/engine.rb b/lib/solidus_subscriptions/engine.rb index 2f3067e..01d7b0d 100644 --- a/lib/solidus_subscriptions/engine.rb +++ b/lib/solidus_subscriptions/engine.rb @@ -31,7 +31,7 @@ module SolidusSubscriptions end initializer 'solidus_subscriptions.register_promotion_rules', after: 'spree.promo.register.promotion.rules' do |app| - app.config.spree.promotions.rules << 'SolidusSubscriptions::SubscriptionPromotionRule' + app.config.spree.promotions.rules << 'SolidusSubscriptions::SubscriptionCreationOrderPromotionRule' app.config.spree.promotions.rules << 'SolidusSubscriptions::SubscriptionOrderPromotionRule' end diff --git a/spec/lib/solidus_subscriptions/subscription_creation_order_promotion_rule_spec.rb b/spec/lib/solidus_subscriptions/subscription_creation_order_promotion_rule_spec.rb new file mode 100644 index 0000000..651c678 --- /dev/null +++ b/spec/lib/solidus_subscriptions/subscription_creation_order_promotion_rule_spec.rb @@ -0,0 +1,55 @@ +require 'spec_helper' + +RSpec.describe SolidusSubscriptions::SubscriptionCreationOrderPromotionRule do + let(:rule) { described_class.new } + + describe '#applicable' do + subject { rule.applicable? promotable } + + context 'when the promotable is a Spree::Order' do + let(:promotable) { build_stubbed :order } + + it { is_expected.to be_truthy } + end + + context 'when the promotable is not a Spree::Order' do + let(:promotable) { build_stubbed :line_item } + + it { is_expected.to be_falsy } + end + end + + describe '#eligible?' do + subject { rule.eligible? order } + + let(:order) { create(:order, line_items: line_items) } + + context 'when the order contains a line item with a subscription' do + let(:line_items) { build_list(:line_item, 1, :with_subscription_line_items) } + + it { is_expected.to be_truthy } + end + + context 'when the order does not contain a line item with a subscription' do + let(:line_items) { build_list(:line_item, 1) } + + it { is_expected.to be_falsy } + end + end + + describe '#actionable?' do + subject { rule.actionable? line_item } + + context 'when the line item has a subscription' do + let(:line_item) { build_stubbed(:line_item, :with_subscription_line_items) } + + it { is_expected.to be_truthy } + end + + context 'when the line item has no subscription' do + let(:line_item) { build_stubbed :line_item } + + it { is_expected.to be_falsy } + end + end +end diff --git a/spec/lib/solidus_subscriptions/subscription_promotion_rule_spec.rb b/spec/lib/solidus_subscriptions/subscription_promotion_rule_spec.rb deleted file mode 100644 index f4c65cc..0000000 --- a/spec/lib/solidus_subscriptions/subscription_promotion_rule_spec.rb +++ /dev/null @@ -1,55 +0,0 @@ -require 'spec_helper' - -RSpec.describe SolidusSubscriptions::SubscriptionPromotionRule do - let(:rule) { described_class.new } - - describe '#applicable' do - subject { rule.applicable? promotable } - - context 'when the promotable is a Spree::Order' do - let(:promotable) { build_stubbed :order } - - it { is_expected.to be_truthy } - end - - context 'when the promotable is not a Spree::Order' do - let(:promotable) { build_stubbed :line_item } - - it { is_expected.to be_falsy } - end - end - - describe '#eligible?' do - subject { rule.eligible? order } - - let(:order) { create(:order, line_items: line_items) } - - context 'when the order contains a line item with a subscription' do - let(:line_items) { build_list(:line_item, 1, :with_subscription_line_items) } - - it { is_expected.to be_truthy } - end - - context 'when the order does not contain a line item with a subscription' do - let(:line_items) { build_list(:line_item, 1) } - - it { is_expected.to be_falsy } - end - end - - describe '#actionable?' do - subject { rule.actionable? line_item } - - context 'when the line item has a subscription' do - let(:line_item) { build_stubbed(:line_item, :with_subscription_line_items) } - - it { is_expected.to be_truthy } - end - - context 'when the line item has no subscription' do - let(:line_item) { build_stubbed :line_item } - - it { is_expected.to be_falsy } - end - end -end -- cgit v1.2.3