summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Desantis <desa.alessandro@gmail.com>2020-09-24 14:23:54 +0200
committerAlessandro Desantis <desa.alessandro@gmail.com>2020-09-25 11:52:52 +0200
commita98ab3aeefca1b679376b6e05b91f5a516f8d802 (patch)
tree74312a78db6d2948d9d6129c9823c82195ea9072
parentc2ff76ed6f1b9aa377f566d7d98e743446919c0a (diff)
Fix coding style violations
-rw-r--r--.rubocop.yml4
-rw-r--r--.rubocop_todo.yml256
-rw-r--r--app/controllers/solidus_subscriptions/api/v1/line_items_controller.rb62
-rw-r--r--app/controllers/solidus_subscriptions/api/v1/subscriptions_controller.rb102
-rw-r--r--app/controllers/spree/admin/installments_controller.rb6
-rw-r--r--app/controllers/spree/admin/subscription_events_controller.rb6
-rw-r--r--app/controllers/spree/admin/subscriptions_controller.rb36
-rw-r--r--app/decorators/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb2
-rw-r--r--app/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb2
-rw-r--r--app/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb2
-rw-r--r--app/decorators/models/solidus_subscriptions/spree/order/after_create.rb2
-rw-r--r--app/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb2
-rw-r--r--app/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb2
-rw-r--r--app/decorators/models/solidus_subscriptions/spree/product/delegate_subscribable.rb2
-rw-r--r--app/decorators/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb2
-rw-r--r--app/decorators/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb2
-rw-r--r--app/jobs/solidus_subscriptions/process_installments_job.rb30
-rw-r--r--app/models/solidus_subscriptions/installment.rb11
-rw-r--r--app/models/solidus_subscriptions/installment_detail.rb4
-rw-r--r--app/models/solidus_subscriptions/interval.rb2
-rw-r--r--app/models/solidus_subscriptions/line_item.rb6
-rw-r--r--app/models/solidus_subscriptions/subscription.rb27
-rw-r--r--app/models/solidus_subscriptions/subscription_event.rb2
-rw-r--r--app/models/solidus_subscriptions/subscription_order_promotion_rule.rb2
-rw-r--r--app/models/solidus_subscriptions/subscription_promotion_rule.rb2
-rw-r--r--app/overrides/views/admin_subscribable_product_checkbox.rb2
-rw-r--r--app/overrides/views/admin_subscribable_variant_checkbox.rb2
-rw-r--r--app/overrides/views/admin_subscriptions_menu_link.rb2
-rw-r--r--app/overrides/views/subscription_line_item_fields.rb2
-rw-r--r--app/services/solidus_subscriptions/checkout.rb3
-rw-r--r--app/services/solidus_subscriptions/dispatcher.rb2
-rw-r--r--app/services/solidus_subscriptions/failure_dispatcher.rb2
-rw-r--r--app/services/solidus_subscriptions/line_item_builder.rb4
-rw-r--r--app/services/solidus_subscriptions/order_builder.rb2
-rw-r--r--app/services/solidus_subscriptions/out_of_stock_dispatcher.rb2
-rw-r--r--app/services/solidus_subscriptions/payment_failed_dispatcher.rb2
-rw-r--r--app/services/solidus_subscriptions/subscription_generator.rb4
-rw-r--r--app/services/solidus_subscriptions/subscription_line_item_builder.rb2
-rw-r--r--app/services/solidus_subscriptions/success_dispatcher.rb2
-rw-r--r--app/services/solidus_subscriptions/unsubscribable_error.rb2
-rw-r--r--app/services/solidus_subscriptions/user_mismatch_error.rb2
-rw-r--r--lib/solidus_subscriptions/ability.rb2
-rw-r--r--lib/solidus_subscriptions/configuration.rb27
-rw-r--r--lib/solidus_subscriptions/engine.rb1
-rw-r--r--lib/solidus_subscriptions/permitted_attributes.rb2
-rw-r--r--lib/solidus_subscriptions/processor.rb20
-rw-r--r--lib/solidus_subscriptions/testing_support/factories.rb2
-rw-r--r--lib/solidus_subscriptions/testing_support/factories/installment_detail_factory.rb2
-rw-r--r--lib/solidus_subscriptions/testing_support/factories/installment_factory.rb2
-rw-r--r--lib/solidus_subscriptions/testing_support/factories/line_item_factory.rb2
-rw-r--r--lib/solidus_subscriptions/testing_support/factories/spree/line_item_factory.rb2
-rw-r--r--lib/solidus_subscriptions/testing_support/factories/spree/order_factory.rb2
-rw-r--r--lib/solidus_subscriptions/testing_support/factories/spree_modification_factory.rb2
-rw-r--r--lib/solidus_subscriptions/testing_support/factories/subscription_event_factory.rb2
-rw-r--r--lib/solidus_subscriptions/testing_support/factories/subscription_factory.rb2
-rw-r--r--lib/tasks/process_subscriptions.rake2
-rw-r--r--spec/controllers/solidus_subscriptions/api/v1/line_items_controller_spec.rb16
-rw-r--r--spec/controllers/solidus_subscriptions/api/v1/subscriptions_controller_spec.rb12
-rw-r--r--spec/controllers/spree/admin/subscriptions_controller_spec.rb5
-rw-r--r--spec/controllers/spree/api/users_controller_spec.rb2
-rw-r--r--spec/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association_spec.rb1
-rw-r--r--spec/features/admin_link_spec.rb6
-rw-r--r--spec/lib/solidus_subscriptions/ability_spec.rb21
-rw-r--r--spec/lib/solidus_subscriptions/processor_spec.rb2
-rw-r--r--spec/models/solidus_subscriptions/installment_detail_spec.rb2
-rw-r--r--spec/models/solidus_subscriptions/installment_spec.rb22
-rw-r--r--spec/models/solidus_subscriptions/line_item_spec.rb8
-rw-r--r--spec/models/solidus_subscriptions/subscription_spec.rb29
-rw-r--r--spec/requests/solidus_subscriptions/api/v1/subscriptions_spec.rb6
-rw-r--r--spec/services/solidus_subscriptions/checkout_spec.rb38
-rw-r--r--spec/services/solidus_subscriptions/failure_dispatcher_spec.rb2
-rw-r--r--spec/services/solidus_subscriptions/line_item_builder_spec.rb2
-rw-r--r--spec/services/solidus_subscriptions/order_builder_spec.rb4
-rw-r--r--spec/services/solidus_subscriptions/out_of_stock_dispatcher_spec.rb1
-rw-r--r--spec/services/solidus_subscriptions/payment_failed_dispatcher_spec.rb3
-rw-r--r--spec/services/solidus_subscriptions/subscription_order_promotion_rule_spec.rb4
-rw-r--r--spec/services/solidus_subscriptions/subscription_promotion_rule_spec.rb7
-rw-r--r--spec/services/solidus_subscriptions/success_dispatcher_spec.rb1
-rw-r--r--spec/spec_helper.rb2
79 files changed, 534 insertions, 347 deletions
diff --git a/.rubocop.yml b/.rubocop.yml
index 544964e..4714d8d 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -1,4 +1,4 @@
+inherit_from: .rubocop_todo.yml
+
require:
- solidus_dev_support/rubocop
-
-inherit_from: .rubocop_todo.yml
diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
index cdaa6a2..4edc2f5 100644
--- a/.rubocop_todo.yml
+++ b/.rubocop_todo.yml
@@ -1,156 +1,152 @@
-Capybara/CurrentPathExpectation:
- Enabled: false
-
-Capybara/FeatureMethods:
- Enabled: false
-
-Layout/AlignHash:
- Enabled: false
-
-Layout/ElseAlignment:
- Enabled: false
-
-Layout/EmptyLineAfterGuardClause:
- Enabled: false
-
-Layout/EndAlignment:
- Enabled: false
-
-Layout/IndentationWidth:
- Enabled: false
-
-Layout/IndentFirstHashElement:
- Enabled: false
-
-Layout/MultilineMethodCallIndentation:
- Enabled: false
-
+# This configuration was generated by
+# `rubocop --auto-gen-config`
+# on 2020-09-24 12:23:52 UTC using RuboCop version 0.91.1.
+# The point is for the user to remove these configuration records
+# one by one as the offenses are removed from the code base.
+# Note that changes in the inspected code, or installation of new
+# versions of RuboCop, may require this file to be generated again.
+
+# Offense count: 3
Lint/AmbiguousBlockAssociation:
- Enabled: false
-
-Lint/BooleanSymbol:
- Enabled: false
-
-Metrics/LineLength:
- Enabled: true
- Max: 160
-
+ Exclude:
+ - 'spec/controllers/spree/admin/subscriptions_controller_spec.rb'
+ - 'spec/services/solidus_subscriptions/checkout_spec.rb'
+
+# Offense count: 1
+Lint/MissingSuper:
+ Exclude:
+ - 'app/services/solidus_subscriptions/user_mismatch_error.rb'
+
+# Offense count: 1
+# Configuration parameters: EnforcedStyleForLeadingUnderscores.
+# SupportedStylesForLeadingUnderscores: disallowed, required, optional
Naming/MemoizedInstanceVariableName:
- Enabled: false
-
-Rails/ApplicationJob:
- Enabled: false
-
-Rails/ApplicationRecord:
- Enabled: false
-
-Rails/Delegate:
- Enabled: false
-
-Rails/DynamicFindBy:
- Enabled: false
-
-Rails/HasManyOrHasOneDependent:
- Enabled: false
-
-Rails/HttpStatus:
- Enabled: false
-
-Rails/ReflectionClassName:
- Enabled: false
-
-Rails/ReversibleMigration:
- Enabled: false
-
-Rails/SafeNavigation:
- Enabled: false
-
-Rails/SkipsModelValidations:
- Enabled: false
+ Exclude:
+ - 'lib/solidus_subscriptions/processor.rb'
+# Offense count: 1
RSpec/AnyInstance:
- Enabled: false
+ Exclude:
+ - 'spec/jobs/solidus_subscriptions/process_installments_job_spec.rb'
+# Offense count: 46
+# Configuration parameters: Prefixes.
+# Prefixes: when, with, without
RSpec/ContextWording:
- Enabled: false
-
-RSpec/LetSetup:
- Enabled: false
-
-RSpec/EmptyLineAfterExample:
- Enabled: false
-
-RSpec/EmptyLineAfterFinalLet:
- Enabled: false
-
-RSpec/EmptyLineAfterHook:
- Enabled: false
-
-RSpec/EmptyLineAfterSubject:
- Enabled: false
-
-RSpec/ExpectChange:
- Enabled: false
-
+ Exclude:
+ - 'spec/controllers/solidus_subscriptions/api/v1/line_items_controller_spec.rb'
+ - 'spec/controllers/spree/admin/subscriptions_controller_spec.rb'
+ - 'spec/lib/solidus_subscriptions/ability_spec.rb'
+ - 'spec/lib/solidus_subscriptions/processor_spec.rb'
+ - 'spec/models/solidus_subscriptions/installment_detail_spec.rb'
+ - 'spec/models/solidus_subscriptions/installment_spec.rb'
+ - 'spec/models/solidus_subscriptions/line_item_spec.rb'
+ - 'spec/models/solidus_subscriptions/subscription_spec.rb'
+ - 'spec/services/solidus_subscriptions/checkout_spec.rb'
+ - 'spec/services/solidus_subscriptions/line_item_builder_spec.rb'
+ - 'spec/services/solidus_subscriptions/order_builder_spec.rb'
+
+# Offense count: 2
+# Configuration parameters: CustomTransform, IgnoreMethods, SpecSuffixOnly.
RSpec/FilePath:
- Enabled: false
-
-RSpec/ImplicitExpect:
- Enabled: false
+ Exclude:
+ - 'spec/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscrptions_spec.rb'
+ - 'spec/decorators/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb'
+# Offense count: 1
+# Configuration parameters: AssignmentOnly.
RSpec/InstanceVariable:
- Enabled: false
-
-RSpec/LeadingSubject:
- Enabled: false
-
-RSpec/LetBeforeExamples:
- Enabled: false
+ Exclude:
+ - 'spec/services/solidus_subscriptions/checkout_spec.rb'
+# Offense count: 18
+RSpec/LetSetup:
+ Exclude:
+ - 'spec/controllers/solidus_subscriptions/api/v1/subscriptions_controller_spec.rb'
+ - 'spec/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items_spec.rb'
+ - 'spec/lib/solidus_subscriptions/processor_spec.rb'
+ - 'spec/services/solidus_subscriptions/checkout_spec.rb'
+ - 'spec/services/solidus_subscriptions/line_item_builder_spec.rb'
+
+# Offense count: 8
+# Configuration parameters: EnforcedStyle.
+# SupportedStyles: have_received, receive
RSpec/MessageSpies:
- Enabled: false
+ Exclude:
+ - 'spec/services/solidus_subscriptions/failure_dispatcher_spec.rb'
+ - 'spec/services/solidus_subscriptions/out_of_stock_dispatcher_spec.rb'
+ - 'spec/services/solidus_subscriptions/payment_failed_dispatcher_spec.rb'
+ - 'spec/services/solidus_subscriptions/success_dispatcher_spec.rb'
+# Offense count: 2
RSpec/MultipleExpectations:
- Enabled: false
+ Max: 2
+# Offense count: 27
+# Configuration parameters: AllowSubject.
+RSpec/MultipleMemoizedHelpers:
+ Max: 14
+
+# Offense count: 90
+# Configuration parameters: IgnoreSharedExamples.
RSpec/NamedSubject:
Enabled: false
+# Offense count: 11
RSpec/NestedGroups:
- Enabled: false
-
-RSpec/NotToNot:
- Enabled: false
-
-RSpec/PredicateMatcher:
- Enabled: false
+ Max: 4
-RSpec/ScatteredLet:
- Enabled: false
-
-Style/BracesAroundHashParameters:
- Enabled: false
+# Offense count: 4
+# Configuration parameters: Include.
+# Include: app/models/**/*.rb
+Rails/HasManyOrHasOneDependent:
+ Exclude:
+ - 'app/models/solidus_subscriptions/installment.rb'
+ - 'app/models/solidus_subscriptions/subscription.rb'
-Style/ClassAndModuleChildren:
- Enabled: false
+# Offense count: 2
+# Configuration parameters: Include.
+# Include: db/migrate/*.rb
+Rails/ReversibleMigration:
+ Exclude:
+ - 'db/migrate/20160922164101_add_interval_length_and_units_to_subscription_line_items.rb'
+ - 'db/migrate/20170106224713_change_line_item_max_installments_to_end_date.rb'
+# Offense count: 5
+# Configuration parameters: ForbiddenMethods, AllowedMethods.
+# ForbiddenMethods: decrement!, decrement_counter, increment!, increment_counter, insert, insert!, insert_all, insert_all!, toggle!, touch, touch_all, update_all, update_attribute, update_column, update_columns, update_counters, upsert, upsert_all
+Rails/SkipsModelValidations:
+ Exclude:
+ - 'app/services/solidus_subscriptions/failure_dispatcher.rb'
+ - 'app/services/solidus_subscriptions/order_builder.rb'
+ - 'app/services/solidus_subscriptions/payment_failed_dispatcher.rb'
+ - 'spec/services/solidus_subscriptions/checkout_spec.rb'
+
+# Offense count: 1
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SingleLineConditionsOnly, IncludeTernaryExpressions.
+# SupportedStyles: assign_to_condition, assign_inside_condition
Style/ConditionalAssignment:
- Enabled: false
-
-Style/FrozenStringLiteralComment:
- Enabled: false
+ Exclude:
+ - 'app/controllers/spree/admin/subscriptions_controller.rb'
+# Offense count: 4
+# Configuration parameters: MinBodyLength.
Style/GuardClause:
- Enabled: false
-
-Style/MutableConstant:
- Enabled: false
+ Exclude:
+ - 'app/models/solidus_subscriptions/subscription.rb'
+# Offense count: 1
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle.
+# SupportedStyles: compact, exploded
Style/RaiseArgs:
- Enabled: false
-
-Style/RegexpLiteral:
- Enabled: false
-
-Style/SymbolProc:
- Enabled: false
+ Exclude:
+ - 'app/services/solidus_subscriptions/checkout.rb'
+
+# Offense count: 11
+# Cop supports --auto-correct.
+# Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
+# URISchemes: http, https
+Layout/LineLength:
+ Max: 290
diff --git a/app/controllers/solidus_subscriptions/api/v1/line_items_controller.rb b/app/controllers/solidus_subscriptions/api/v1/line_items_controller.rb
index 3ef1ef0..1ca466d 100644
--- a/app/controllers/solidus_subscriptions/api/v1/line_items_controller.rb
+++ b/app/controllers/solidus_subscriptions/api/v1/line_items_controller.rb
@@ -1,35 +1,43 @@
-class SolidusSubscriptions::Api::V1::LineItemsController < Spree::Api::BaseController
- before_action :load_line_item, only: [:update, :destroy]
- wrap_parameters :subscription_line_item
-
- def update
- authorize! :crud, @line_item, @order
- if @line_item.update(line_item_params)
- render json: @line_item.to_json
- else
- render json: @line_item.errors.to_json, status: 422
- end
- end
+# frozen_string_literal: true
- def destroy
- authorize! :crud, @line_item, @order
- return render json: {}, status: 400 if @line_item.order.complete?
+module SolidusSubscriptions
+ module Api
+ module V1
+ class LineItemsController < Spree::Api::BaseController
+ before_action :load_line_item, only: [:update, :destroy]
+ wrap_parameters :subscription_line_item
- @line_item.destroy!
- @line_item.order.recalculate
+ def update
+ authorize! :crud, @line_item, @order
+ if @line_item.update(line_item_params)
+ render json: @line_item.to_json
+ else
+ render json: @line_item.errors.to_json, status: :unprocessable_entity
+ end
+ end
- render json: @line_item.to_json
- end
+ def destroy
+ authorize! :crud, @line_item, @order
+ return render json: {}, status: :bad_request if @line_item.order.complete?
- private
+ @line_item.destroy!
+ @line_item.order.recalculate
- def line_item_params
- params.require(:subscription_line_item).permit(
- SolidusSubscriptions::PermittedAttributes.subscription_line_item_attributes - [:subscribable_id]
- )
- end
+ render json: @line_item.to_json
+ end
- def load_line_item
- @line_item = SolidusSubscriptions::LineItem.find(params[:id])
+ private
+
+ def line_item_params
+ params.require(:subscription_line_item).permit(
+ SolidusSubscriptions::PermittedAttributes.subscription_line_item_attributes - [:subscribable_id]
+ )
+ end
+
+ def load_line_item
+ @line_item = SolidusSubscriptions::LineItem.find(params[:id])
+ end
+ end
+ end
end
end
diff --git a/app/controllers/solidus_subscriptions/api/v1/subscriptions_controller.rb b/app/controllers/solidus_subscriptions/api/v1/subscriptions_controller.rb
index 8c37c25..eac8ac5 100644
--- a/app/controllers/solidus_subscriptions/api/v1/subscriptions_controller.rb
+++ b/app/controllers/solidus_subscriptions/api/v1/subscriptions_controller.rb
@@ -1,50 +1,58 @@
-class SolidusSubscriptions::Api::V1::SubscriptionsController < Spree::Api::BaseController
- before_action :load_subscription, only: [:cancel, :update, :skip]
-
- protect_from_forgery unless: -> { request.format.json? }
-
- def update
- if @subscription.update(subscription_params)
- render json: @subscription.to_json(include: [:line_items, :shipping_address, :billing_address])
- else
- render json: @subscription.errors.to_json, status: 422
- end
- end
-
- def skip
- if @subscription.skip
- render json: @subscription.to_json
- else
- render json: @subscription.errors.to_json, status: 422
- end
- end
-
- def cancel
- if @subscription.cancel
- render json: @subscription.to_json
- else
- render json: @subscription.errors.to_json, status: 422
+# frozen_string_literal: true
+
+module SolidusSubscriptions
+ module Api
+ module V1
+ class SubscriptionsController < Spree::Api::BaseController
+ before_action :load_subscription, only: [:cancel, :update, :skip]
+
+ protect_from_forgery unless: -> { request.format.json? }
+
+ def update
+ if @subscription.update(subscription_params)
+ render json: @subscription.to_json(include: [:line_items, :shipping_address, :billing_address])
+ else
+ render json: @subscription.errors.to_json, status: :unprocessable_entity
+ end
+ end
+
+ def skip
+ if @subscription.skip
+ render json: @subscription.to_json
+ else
+ render json: @subscription.errors.to_json, status: :unprocessable_entity
+ end
+ end
+
+ def cancel
+ if @subscription.cancel
+ render json: @subscription.to_json
+ else
+ render json: @subscription.errors.to_json, status: :unprocessable_entity
+ end
+ end
+
+ private
+
+ def load_subscription
+ @subscription = current_api_user.subscriptions.find(params[:id])
+ end
+
+ def subscription_params
+ params.require(:subscription).permit(
+ :interval_units,
+ :interval_length,
+ :end_date,
+ line_items_attributes: line_item_attributes,
+ shipping_address_attributes: Spree::PermittedAttributes.address_attributes,
+ billing_address_attributes: Spree::PermittedAttributes.address_attributes,
+ )
+ end
+
+ def line_item_attributes
+ SolidusSubscriptions.configuration.subscription_line_item_attributes - [:subscribable_id] + [:id]
+ end
+ end
end
end
-
- private
-
- def load_subscription
- @subscription = current_api_user.subscriptions.find(params[:id])
- end
-
- def subscription_params
- params.require(:subscription).permit(
- :interval_units,
- :interval_length,
- :end_date,
- line_items_attributes: line_item_attributes,
- shipping_address_attributes: Spree::PermittedAttributes.address_attributes,
- billing_address_attributes: Spree::PermittedAttributes.address_attributes,
- )
- end
-
- def line_item_attributes
- SolidusSubscriptions.configuration.subscription_line_item_attributes - [:subscribable_id] + [:id]
- end
end
diff --git a/app/controllers/spree/admin/installments_controller.rb b/app/controllers/spree/admin/installments_controller.rb
index e687746..97e6f4a 100644
--- a/app/controllers/spree/admin/installments_controller.rb
+++ b/app/controllers/spree/admin/installments_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module Spree
module Admin
class InstallmentsController < ResourceController
@@ -9,8 +11,8 @@ module Spree
@search = collection.ransack((params[:q] || {}).reverse_merge(s: 'created_at desc'))
@installments = @search.result(distinct: true).
- page(params[:page]).
- per(params[:per_page] || Spree::Config[:orders_per_page])
+ page(params[:page]).
+ per(params[:per_page] || Spree::Config[:orders_per_page])
end
private
diff --git a/app/controllers/spree/admin/subscription_events_controller.rb b/app/controllers/spree/admin/subscription_events_controller.rb
index ad86887..71fa6f0 100644
--- a/app/controllers/spree/admin/subscription_events_controller.rb
+++ b/app/controllers/spree/admin/subscription_events_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module Spree
module Admin
class SubscriptionEventsController < ResourceController
@@ -9,8 +11,8 @@ module Spree
@search = collection.ransack((params[:q] || {}).reverse_merge(s: 'created_at desc'))
@subscription_events = @search.result(distinct: true).
- page(params[:page]).
- per(params[:per_page] || 20)
+ page(params[:page]).
+ per(params[:per_page] || 20)
end
private
diff --git a/app/controllers/spree/admin/subscriptions_controller.rb b/app/controllers/spree/admin/subscriptions_controller.rb
index 596516d..cde63a0 100644
--- a/app/controllers/spree/admin/subscriptions_controller.rb
+++ b/app/controllers/spree/admin/subscriptions_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module Spree
module Admin
class SubscriptionsController < ResourceController
@@ -5,12 +7,12 @@ module Spree
def index
@search = SolidusSubscriptions::Subscription.
- accessible_by(current_ability, :index).ransack(params[:q])
+ accessible_by(current_ability, :index).ransack(params[:q])
@subscriptions = @search.result(distinct: true).
- includes(:line_items, :user).
- page(params[:page]).
- per(params[:per_page] || Spree::Config[:orders_per_page])
+ includes(:line_items, :user).
+ page(params[:page]).
+ per(params[:per_page] || Spree::Config[:orders_per_page])
end
def new
@@ -29,9 +31,9 @@ module Spree
if @subscription.payment_method&.source_required?
@subscription.payment_source = @subscription
- .payment_method
- .payment_source_class
- .find_by(id: params[:subscription][:payment_source_id])
+ .payment_method
+ .payment_source_class
+ .find_by(id: params[:subscription][:payment_source_id])
else
@subscription.payment_source = nil
end
@@ -45,11 +47,11 @@ module Spree
@subscription.cancel
end
- if @subscription.errors.none?
- notice = I18n.t('spree.admin.subscriptions.successfully_canceled')
- else
- notice = @subscription.errors.full_messages.to_sentence
- end
+ notice = if @subscription.errors.none?
+ I18n.t('spree.admin.subscriptions.successfully_canceled')
+ else
+ @subscription.errors.full_messages.to_sentence
+ end
redirect_back(fallback_location: spree.admin_subscriptions_path, notice: notice)
end
@@ -57,11 +59,11 @@ module Spree
def activate
@subscription.activate
- if @subscription.errors.none?
- notice = I18n.t('spree.admin.subscriptions.successfully_activated')
- else
- notice = @subscription.errors.full_messages.to_sentence
- end
+ notice = if @subscription.errors.none?
+ I18n.t('spree.admin.subscriptions.successfully_activated')
+ else
+ @subscription.errors.full_messages.to_sentence
+ end
redirect_back(fallback_location: spree.admin_subscriptions_path, notice: notice)
end
diff --git a/app/decorators/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb b/app/decorators/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb
index d24de49..7872a2a 100644
--- a/app/decorators/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb
+++ b/app/decorators/controllers/solidus_subscriptions/spree/api/line_items_controller/create_subscription_line_items.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Create new subscription line items associated to the current order, when
# a line item is added to the cart which includes subscription_line_item
# params.
diff --git a/app/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb b/app/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb
index 5925089..6b39b4c 100644
--- a/app/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb
+++ b/app/decorators/controllers/solidus_subscriptions/spree/orders_controller/create_subscription_line_items.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Create new subscription line items associated to the current order, when
# a line item is added to the cart which includes subscription_line_item
# params.
diff --git a/app/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb b/app/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb
index 2faead3..ccb483f 100644
--- a/app/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb
+++ b/app/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Each Spree::LineItem can have multiple subscription_line_items. This
# allows a cart to represent multiple subscriptions to the same item in
# the same order.
diff --git a/app/decorators/models/solidus_subscriptions/spree/order/after_create.rb b/app/decorators/models/solidus_subscriptions/spree/order/after_create.rb
index 234929a..c67cb96 100644
--- a/app/decorators/models/solidus_subscriptions/spree/order/after_create.rb
+++ b/app/decorators/models/solidus_subscriptions/spree/order/after_create.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module SolidusSubscriptions
module Spree
module Order
diff --git a/app/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb b/app/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb
index 6117c35..568e5a8 100644
--- a/app/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb
+++ b/app/decorators/models/solidus_subscriptions/spree/order/finalize_creates_subscriptions.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Once an order is finalized its subscriptions line items should be converted
# into active subscriptions. This hooks into Spree::Order#finalize! and
# passes all subscription_line_items present on the order to the Subscription
diff --git a/app/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb b/app/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb
index 1d6fde4..3b48225 100644
--- a/app/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb
+++ b/app/decorators/models/solidus_subscriptions/spree/order/subscription_line_items_association.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Spree::Orders may contain many subscription_line_items. When the order is
# finalized these subscription_line_items are converted into subscritpions.
# The order needs to be able to get a list of associated subscription_line_items
diff --git a/app/decorators/models/solidus_subscriptions/spree/product/delegate_subscribable.rb b/app/decorators/models/solidus_subscriptions/spree/product/delegate_subscribable.rb
index cdabb7f..740b9d8 100644
--- a/app/decorators/models/solidus_subscriptions/spree/product/delegate_subscribable.rb
+++ b/app/decorators/models/solidus_subscriptions/spree/product/delegate_subscribable.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module SolidusSubscriptions
module Spree
module Product
diff --git a/app/decorators/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb b/app/decorators/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb
index 1d5524f..561e5a1 100644
--- a/app/decorators/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb
+++ b/app/decorators/models/solidus_subscriptions/spree/user/have_many_subscriptions.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Spree::Users maintain a list of the subscriptions associated with them
module SolidusSubscriptions
module Spree
diff --git a/app/decorators/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb b/app/decorators/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb
index 9b2a5f8..671dcbe 100644
--- a/app/decorators/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb
+++ b/app/decorators/models/solidus_subscriptions/spree/variant/variant_pretty_name.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module SolidusSubscriptions
module Spree
module Variant
diff --git a/app/jobs/solidus_subscriptions/process_installments_job.rb b/app/jobs/solidus_subscriptions/process_installments_job.rb
index 6048ee6..e7e1f63 100644
--- a/app/jobs/solidus_subscriptions/process_installments_job.rb
+++ b/app/jobs/solidus_subscriptions/process_installments_job.rb
@@ -1,22 +1,24 @@
+# frozen_string_literal: true
+
# This job is responsible for creating a consolidated installment from a
# list of installments and processing it.
module SolidusSubscriptions
- class ProcessInstallmentsJob < ActiveJob::Base
- queue_as SolidusSubscriptions.configuration.processing_queue
+ class ProcessInstallmentsJob < ApplicationJob
+ queue_as SolidusSubscriptions.configuration.processing_queue
- # Process a collection of installments
- #
- # @param installment_ids [Array<Integer>] The ids of the
- # installments to be processed together and fulfilled by the same order
- #
- # @return [Spree::Order] The order which fulfills the list of installments
- def perform(installment_ids)
- return if installment_ids.empty?
+ # Process a collection of installments
+ #
+ # @param installment_ids [Array<Integer>] The ids of the
+ # installments to be processed together and fulfilled by the same order
+ #
+ # @return [Spree::Order] The order which fulfills the list of installments
+ def perform(installment_ids)
+ return if installment_ids.empty?
- installments = SolidusSubscriptions::Installment.where(id: installment_ids).
- includes(subscription: [:line_items, :user])
- Checkout.new(installments).process
- end
+ installments = SolidusSubscriptions::Installment.where(id: installment_ids).
+ includes(subscription: [:line_items, :user])
+ Checkout.new(installments).process
+ end
end
end
diff --git a/app/models/solidus_subscriptions/installment.rb b/app/models/solidus_subscriptions/installment.rb
index c5b4f6c..33146e6 100644
--- a/app/models/solidus_subscriptions/installment.rb
+++ b/app/models/solidus_subscriptions/installment.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
# This class represents a single iteration of a subscription. It is fulfilled
# by a completed order and maintains an association which tracks all attempts
# successful or otherwise at fulfilling this installment
module SolidusSubscriptions
- class Installment < ActiveRecord::Base
+ class Installment < ApplicationRecord
has_many :details, class_name: 'SolidusSubscriptions::InstallmentDetail'
belongs_to(
:subscription,
@@ -30,9 +32,7 @@ module SolidusSubscriptions
# object
#
# @return [SolidusSubscriptions::LineItemBuilder]
- def line_item_builder
- subscription.line_item_builder
- end
+ delegate :line_item_builder, to: :subscription
# Mark this installment as out of stock.
#
@@ -92,7 +92,7 @@ module SolidusSubscriptions
#
# @return [Boolean]
def fulfilled?
- details.where(success: true).exists?
+ details.exists?(success: true)
end
# Returns the state of this fulfillment
@@ -127,6 +127,7 @@ module SolidusSubscriptions
def next_actionable_date
return if SolidusSubscriptions.configuration.reprocessing_interval.nil?
+
(DateTime.current + SolidusSubscriptions.configuration.reprocessing_interval).beginning_of_minute
end
end
diff --git a/app/models/solidus_subscriptions/installment_detail.rb b/app/models/solidus_subscriptions/installment_detail.rb
index cfd4e70..cf5df73 100644
--- a/app/models/solidus_subscriptions/installment_detail.rb
+++ b/app/models/solidus_subscriptions/installment_detail.rb
@@ -1,7 +1,9 @@
+# frozen_string_literal: true
+
# This class represents a single attempt to fulfill an installment. It will
# indicate the result of that attempt.
module SolidusSubscriptions
- class InstallmentDetail < ActiveRecord::Base
+ class InstallmentDetail < ApplicationRecord
belongs_to(
:installment,
class_name: 'SolidusSubscriptions::Installment',
diff --git a/app/models/solidus_subscriptions/interval.rb b/app/models/solidus_subscriptions/interval.rb
index 6c747cf..909ee0a 100644
--- a/app/models/solidus_subscriptions/interval.rb
+++ b/app/models/solidus_subscriptions/interval.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This module is intended to be included into any active record
# model which needs to be aware of how intervals are stored and
# calculated in the db.
diff --git a/app/models/solidus_subscriptions/line_item.rb b/app/models/solidus_subscriptions/line_item.rb
index bd424fd..46b0a0e 100644
--- a/app/models/solidus_subscriptions/line_item.rb
+++ b/app/models/solidus_subscriptions/line_item.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# The LineItem class is responsible for associating Line items to subscriptions. # It tracks the following values:
#
# [Spree::LineItem] :spree_line_item The spree object which created this instance
@@ -15,7 +17,7 @@
#
# [Integer] :installments How many subscription orders should be placed
module SolidusSubscriptions
- class LineItem < ActiveRecord::Base
+ class LineItem < ApplicationRecord
include Interval
belongs_to(
@@ -32,7 +34,7 @@ module SolidusSubscriptions
optional: true
)
- validates :subscribable_id, presence: :true
+ validates :subscribable_id, presence: true
validates :quantity, numericality: { greater_than: 0 }
validates :interval_length, numericality: { greater_than: 0 }, unless: -> { subscription }
diff --git a/app/models/solidus_subscriptions/subscription.rb b/app/models/solidus_subscriptions/subscription.rb
index 3eb449a..bd8f688 100644
--- a/app/models/solidus_subscriptions/subscription.rb
+++ b/app/models/solidus_subscriptions/subscription.rb
@@ -1,11 +1,13 @@
+# frozen_string_literal: true
+
# The subscription class is responsible for grouping together the
# information required for the system to place a subscriptions order on
# behalf of a specific user.
module SolidusSubscriptions
- class Subscription < ActiveRecord::Base
+ class Subscription < ApplicationRecord
include Interval
- PROCESSING_STATES = [:pending, :failed, :success]
+ PROCESSING_STATES = [:pending, :failed, :success].freeze
belongs_to :user, class_name: "::#{::Spree.user_class}"
has_many :line_items, class_name: 'SolidusSubscriptions::LineItem', inverse_of: :subscription
@@ -17,7 +19,7 @@ module SolidusSubscriptions
belongs_to :payment_method, class_name: '::Spree::PaymentMethod', optional: true
belongs_to :payment_source, polymorphic: true, optional: true
- validates :user, presence: :true
+ validates :user, presence: true
validates :skip_count, :successive_skip_count, presence: true, numericality: { greater_than_or_equal_to: 0 }
validates :interval_length, numericality: { greater_than: 0 }
validates :payment_method, presence: true, if: -> { payment_source }
@@ -28,8 +30,8 @@ module SolidusSubscriptions
accepts_nested_attributes_for :line_items, allow_destroy: true, reject_if: ->(p) { p[:quantity].blank? }
before_validation :set_payment_method
- before_update :update_actionable_date_if_interval_changed
after_create :track_creation_event
+ before_update :update_actionable_date_if_interval_changed
# Find all subscriptions that are "actionable"; that is, ones that have an
# actionable_date in the past and are not invalid or canceled.
@@ -56,7 +58,7 @@ module SolidusSubscriptions
when :pending
includes(:installments).where(solidus_subscriptions_installments: { id: nil })
else
- raise ArgumentError.new("state must be one of: :success, :failed, :pending")
+ raise ArgumentError, "state must be one of: :success, :failed, :pending"
end
end)
@@ -93,7 +95,7 @@ module SolidusSubscriptions
state_machine :state, initial: :active do
event :cancel do
transition [:active, :pending_cancellation] => :canceled,
- if: ->(subscription) { subscription.can_be_canceled? }
+ if: ->(subscription) { subscription.can_be_canceled? }
transition active: :pending_cancellation
end
@@ -102,7 +104,7 @@ module SolidusSubscriptions
event :deactivate do
transition active: :inactive,
- if: ->(subscription) { subscription.can_be_deactivated? }
+ if: ->(subscription) { subscription.can_be_deactivated? }
end
event :activate do
@@ -133,6 +135,7 @@ module SolidusSubscriptions
# pending cancellation will still be processed.
def can_be_canceled?
return true if actionable_date.nil?
+
(actionable_date - SolidusSubscriptions.configuration.minimum_cancellation_notice).future?
end
@@ -168,6 +171,7 @@ module SolidusSubscriptions
# eligible to be processed.
def next_actionable_date
return nil unless active?
+
new_date = (actionable_date || Time.zone.now)
(new_date + interval).beginning_of_minute
end
@@ -200,6 +204,7 @@ module SolidusSubscriptions
# if the last installment was fulfilled.
def processing_state
return 'pending' if installments.empty?
+
installments.last.fulfilled? ? 'success' : 'failed'
end
@@ -244,10 +249,10 @@ module SolidusSubscriptions
def update_actionable_date_if_interval_changed
if persisted? && (interval_length_previously_changed? || interval_units_previously_changed?)
base_date = if installments.any?
- installments.last.created_at
- else
- created_at
- end
+ installments.last.created_at
+ else
+ created_at
+ end
new_date = interval.since(base_date)
diff --git a/app/models/solidus_subscriptions/subscription_event.rb b/app/models/solidus_subscriptions/subscription_event.rb
index 93552fd..8476470 100644
--- a/app/models/solidus_subscriptions/subscription_event.rb
+++ b/app/models/solidus_subscriptions/subscription_event.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module SolidusSubscriptions
class SubscriptionEvent < ApplicationRecord
belongs_to :subscription, class_name: 'SolidusSubscriptions::Subscription', inverse_of: :events
diff --git a/app/models/solidus_subscriptions/subscription_order_promotion_rule.rb b/app/models/solidus_subscriptions/subscription_order_promotion_rule.rb
index b78b96a..17d280e 100644
--- a/app/models/solidus_subscriptions/subscription_order_promotion_rule.rb
+++ b/app/models/solidus_subscriptions/subscription_order_promotion_rule.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module SolidusSubscriptions
class SubscriptionOrderPromotionRule < ::Spree::PromotionRule
# Promotion can be applied to an entire order. Will only be true
diff --git a/app/models/solidus_subscriptions/subscription_promotion_rule.rb b/app/models/solidus_subscriptions/subscription_promotion_rule.rb
index 9a76136..fd99979 100644
--- a/app/models/solidus_subscriptions/subscription_promotion_rule.rb
+++ b/app/models/solidus_subscriptions/subscription_promotion_rule.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module SolidusSubscriptions
class SubscriptionPromotionRule < ::Spree::PromotionRule
# Promotion can be applied to an entire order. Will only be true
diff --git a/app/overrides/views/admin_subscribable_product_checkbox.rb b/app/overrides/views/admin_subscribable_product_checkbox.rb
index 221ed1d..aafa2ef 100644
--- a/app/overrides/views/admin_subscribable_product_checkbox.rb
+++ b/app/overrides/views/admin_subscribable_product_checkbox.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
Deface::Override.new(
virtual_path: "spree/admin/products/_form",
name: "solidus_subscriptions_product_subscribable_checkbox",
diff --git a/app/overrides/views/admin_subscribable_variant_checkbox.rb b/app/overrides/views/admin_subscribable_variant_checkbox.rb
index afd44b7..744fee5 100644
--- a/app/overrides/views/admin_subscribable_variant_checkbox.rb
+++ b/app/overrides/views/admin_subscribable_variant_checkbox.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
Deface::Override.new(
virtual_path: "spree/admin/variants/_form",
name: "solidus_subscriptions_variant_subscribable_checkbox",
diff --git a/app/overrides/views/admin_subscriptions_menu_link.rb b/app/overrides/views/admin_subscriptions_menu_link.rb
index d709590..aaffe33 100644
--- a/app/overrides/views/admin_subscriptions_menu_link.rb
+++ b/app/overrides/views/admin_subscriptions_menu_link.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
if !Spree::Backend::Config.respond_to?(:menu_items)
Deface::Override.new(
virtual_path: 'spree/admin/shared/_menu',
diff --git a/app/overrides/views/subscription_line_item_fields.rb b/app/overrides/views/subscription_line_item_fields.rb
index 5870c0c..a076026 100644
--- a/app/overrides/views/subscription_line_item_fields.rb
+++ b/app/overrides/views/subscription_line_item_fields.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
Deface::Override.new(
virtual_path: "spree/products/_cart_form",
name: "subscription_line_item_fields",
diff --git a/app/services/solidus_subscriptions/checkout.rb b/app/services/solidus_subscriptions/checkout.rb
index 244cb0b..6116502 100644
--- a/app/services/solidus_subscriptions/checkout.rb
+++ b/app/services/solidus_subscriptions/checkout.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This class takes a collection of installments and populates a new spree
# order with the correct contents based on the subscriptions associated to the
# intallments. This is to group together subscriptions being
@@ -104,6 +106,7 @@ module SolidusSubscriptions
end
return if installments.empty?
+
order_builder.add_line_items(order_line_items)
end
diff --git a/app/services/solidus_subscriptions/dispatcher.rb b/app/services/solidus_subscriptions/dispatcher.rb
index f52745d..b2162c0 100644
--- a/app/services/solidus_subscriptions/dispatcher.rb
+++ b/app/services/solidus_subscriptions/dispatcher.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module SolidusSubscriptions
class Dispatcher
attr_reader :installments, :order
diff --git a/app/services/solidus_subscriptions/failure_dispatcher.rb b/app/services/solidus_subscriptions/failure_dispatcher.rb
index 72d47f9..4fdb828 100644
--- a/app/services/solidus_subscriptions/failure_dispatcher.rb
+++ b/app/services/solidus_subscriptions/failure_dispatcher.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# A handler for behaviour that should happen after installments are marked as
# failures
module SolidusSubscriptions
diff --git a/app/services/solidus_subscriptions/line_item_builder.rb b/app/services/solidus_subscriptions/line_item_builder.rb
index b288629..1d3ea9b 100644
--- a/app/services/solidus_subscriptions/line_item_builder.rb
+++ b/app/services/solidus_subscriptions/line_item_builder.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This class is responsible for taking SubscriptionLineItems and building
# them into Spree::LineItems which can be added to an order
module SolidusSubscriptions
@@ -22,7 +24,7 @@ module SolidusSubscriptions
line_items = subscription_line_items.map do |subscription_line_item|
variant = subscribables.fetch(subscription_line_item.subscribable_id)
- raise UnsubscribableError.new(variant) unless variant.subscribable?
+ raise UnsubscribableError, variant unless variant.subscribable?
next unless variant.can_supply?(subscription_line_item.quantity)
::Spree::LineItem.new(variant: variant, quantity: subscription_line_item.quantity)
diff --git a/app/services/solidus_subscriptions/order_builder.rb b/app/services/solidus_subscriptions/order_builder.rb
index 30cf8a2..a577e98 100644
--- a/app/services/solidus_subscriptions/order_builder.rb
+++ b/app/services/solidus_subscriptions/order_builder.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This class is responsible for adding line items to order without going
# through order contents.
module SolidusSubscriptions
diff --git a/app/services/solidus_subscriptions/out_of_stock_dispatcher.rb b/app/services/solidus_subscriptions/out_of_stock_dispatcher.rb
index 811e8eb..b9c181e 100644
--- a/app/services/solidus_subscriptions/out_of_stock_dispatcher.rb
+++ b/app/services/solidus_subscriptions/out_of_stock_dispatcher.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This service class is intended to provide callback behaviour to handle
# the case where an installment cannot be processed due to lack of stock.
module SolidusSubscriptions
diff --git a/app/services/solidus_subscriptions/payment_failed_dispatcher.rb b/app/services/solidus_subscriptions/payment_failed_dispatcher.rb
index 172758e..d404db0 100644
--- a/app/services/solidus_subscriptions/payment_failed_dispatcher.rb
+++ b/app/services/solidus_subscriptions/payment_failed_dispatcher.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This service class is intended to provide callback behaviour to handle
# the case where a subscription order cannot be processed because a payment
# failed
diff --git a/app/services/solidus_subscriptions/subscription_generator.rb b/app/services/solidus_subscriptions/subscription_generator.rb
index cf3743f..8153912 100644
--- a/app/services/solidus_subscriptions/subscription_generator.rb
+++ b/app/services/solidus_subscriptions/subscription_generator.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This module is responsible for taking SolidusSubscriptions::LineItem
# objects and creating SolidusSubscriptions::Subscription Objects
module SolidusSubscriptions
@@ -47,7 +49,7 @@ module SolidusSubscriptions
subscription_line_items.group_by do |li|
subscription_configuration(li)
end.
- values
+ values
end
private
diff --git a/app/services/solidus_subscriptions/subscription_line_item_builder.rb b/app/services/solidus_subscriptions/subscription_line_item_builder.rb
index 19660c4..7354102 100644
--- a/app/services/solidus_subscriptions/subscription_line_item_builder.rb
+++ b/app/services/solidus_subscriptions/subscription_line_item_builder.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module SolidusSubscriptions
module SubscriptionLineItemBuilder
private
diff --git a/app/services/solidus_subscriptions/success_dispatcher.rb b/app/services/solidus_subscriptions/success_dispatcher.rb
index 3335222..ea4a8d3 100644
--- a/app/services/solidus_subscriptions/success_dispatcher.rb
+++ b/app/services/solidus_subscriptions/success_dispatcher.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This service class is intended to provide callback behaviour to handle
# an installment successfully being processed
module SolidusSubscriptions
diff --git a/app/services/solidus_subscriptions/unsubscribable_error.rb b/app/services/solidus_subscriptions/unsubscribable_error.rb
index 3785983..b7e431f 100644
--- a/app/services/solidus_subscriptions/unsubscribable_error.rb
+++ b/app/services/solidus_subscriptions/unsubscribable_error.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This error should be raised if a user attempts to subscribe to a item which
# is not subscribable
module SolidusSubscriptions
diff --git a/app/services/solidus_subscriptions/user_mismatch_error.rb b/app/services/solidus_subscriptions/user_mismatch_error.rb
index c3bf513..1d227ca 100644
--- a/app/services/solidus_subscriptions/user_mismatch_error.rb
+++ b/app/services/solidus_subscriptions/user_mismatch_error.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module SolidusSubscriptions
class UserMismatchError < StandardError
def initialize(installments)
diff --git a/lib/solidus_subscriptions/ability.rb b/lib/solidus_subscriptions/ability.rb
index 38699cd..6ce4b2d 100644
--- a/lib/solidus_subscriptions/ability.rb
+++ b/lib/solidus_subscriptions/ability.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module SolidusSubscriptions
class Ability
include CanCan::Ability
diff --git a/lib/solidus_subscriptions/configuration.rb b/lib/solidus_subscriptions/configuration.rb
index d128198..7743295 100644
--- a/lib/solidus_subscriptions/configuration.rb
+++ b/lib/solidus_subscriptions/configuration.rb
@@ -1,52 +1,52 @@
+# frozen_string_literal: true
+
module SolidusSubscriptions
class Configuration
- attr_writer :success_dispatcher_class
+ attr_accessor :maximum_total_skips
+
+ attr_writer(
+ :success_dispatcher_class, :failure_dispatcher_class, :payment_failed_dispatcher_class,
+ :out_of_stock_dispatcher, :maximum_successive_skips, :reprocessing_interval,
+ :minimum_cancellation_notice, :processing_queue, :subscription_line_item_attributes,
+ :subscription_attributes,
+ )
+
def success_dispatcher_class
@success_dispatcher_class ||= 'SolidusSubscriptions::SuccessDispatcher'
@success_dispatcher_class.constantize
end
- attr_writer :failure_dispatcher_class
def failure_dispatcher_class
@failure_dispatcher_class ||= 'SolidusSubscriptions::FailureDispatcher'
@failure_dispatcher_class.constantize
end
- attr_writer :payment_failed_dispatcher_class
def payment_failed_dispatcher_class
@payment_failed_dispatcher_class ||= 'SolidusSubscriptions::PaymentFailedDispatcher'
@payment_failed_dispatcher_class.constantize
end
- attr_writer :out_of_stock_dispatcher
def out_of_stock_dispatcher_class
@out_of_stock_dispatcher_class ||= 'SolidusSubscriptions::OutOfStockDispatcher'
@out_of_stock_dispatcher_class.constantize
end
- attr_writer :maximum_successive_skips
def maximum_successive_skips
@maximum_successive_skips ||= 1
end
- attr_accessor :maximum_total_skips
-
- attr_writer :reprocessing_interval
def reprocessing_interval
@reprocessing_interval ||= 1.day
end
- attr_writer :minimum_cancellation_notice
def minimum_cancellation_notice
@minimum_cancellation_notice ||= 1.day
end
- attr_writer :processing_queue
def processing_queue
@processing_queue ||= :default
end
- attr_writer :subscription_line_item_attributes
def subscription_line_item_attributes
@subscription_line_item_attributes ||= [
:quantity,
@@ -57,15 +57,14 @@ module SolidusSubscriptions
]
end
- attr_writer :subscription_attributes
def subscription_attributes
@subscription_attributes ||= [
:interval_length,
:interval_units,
:end_date,
:actionable_date,
- shipping_address_attributes: Spree::PermittedAttributes.address_attributes,
- billing_address_attributes: Spree::PermittedAttributes.address_attributes,
+ { shipping_address_attributes: Spree::PermittedAttributes.address_attributes,
+ billing_address_attributes: Spree::PermittedAttributes.address_attributes },
]
end
end
diff --git a/lib/solidus_subscriptions/engine.rb b/lib/solidus_subscriptions/engine.rb
index 0f18d95..ad43db3 100644
--- a/lib/solidus_subscriptions/engine.rb
+++ b/lib/solidus_subscriptions/engine.rb
@@ -37,6 +37,7 @@ module SolidusSubscriptions
initializer 'solidus_subscriptions.configure_backend' do
next unless ::Spree::Backend::Config.respond_to?(:menu_items)
+
::Spree::Backend::Config.configure do |config|
config.menu_items << config.class::MenuItem.new(
[:subscriptions],
diff --git a/lib/solidus_subscriptions/permitted_attributes.rb b/lib/solidus_subscriptions/permitted_attributes.rb
index f689e90..d9ec072 100644
--- a/lib/solidus_subscriptions/permitted_attributes.rb
+++ b/lib/solidus_subscriptions/permitted_attributes.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This module is responsible for managing what attributes can be updated
# through the api. It also overrides Spree::Permitted attributes to allow the
# solidus api to accept nested params for subscription models as well
diff --git a/lib/solidus_subscriptions/processor.rb b/lib/solidus_subscriptions/processor.rb
index be8a2f5..817d957 100644
--- a/lib/solidus_subscriptions/processor.rb
+++ b/lib/solidus_subscriptions/processor.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This class is responsible for finding subscriptions and installments
# which need to be processed. It will group them together by user and attempts
# to process them together. Subscriptions will also be grouped by their
@@ -61,7 +63,7 @@ module SolidusSubscriptions
[i.subscription.shipping_address_id, i.subscription.billing_address_id]
end
- installemts_by_address_and_user.values.each do |grouped_installments|
+ installemts_by_address_and_user.each_value do |grouped_installments|
ProcessInstallmentsJob.perform_later grouped_installments.map(&:id)
end
end
@@ -71,18 +73,18 @@ module SolidusSubscriptions
def subscriptions_by_id
@subscriptions_by_id ||= Subscription.
- actionable.
- includes(:line_items, :user).
- where(user_id: user_ids).
- group_by(&:user_id)
+ actionable.
+ includes(:line_items, :user).
+ where(user_id: user_ids).
+ group_by(&:user_id)
end
def retry_installments
@failed_installments ||= Installment.
- actionable.
- includes(:subscription).
- where(solidus_subscriptions_subscriptions: { user_id: user_ids }).
- group_by { |i| i.subscription.user_id }
+ actionable.
+ includes(:subscription).
+ where(solidus_subscriptions_subscriptions: { user_id: user_ids }).
+ group_by { |i| i.subscription.user_id }
end
def installments(user)
diff --git a/lib/solidus_subscriptions/testing_support/factories.rb b/lib/solidus_subscriptions/testing_support/factories.rb
index 8423e0d..c19a785 100644
--- a/lib/solidus_subscriptions/testing_support/factories.rb
+++ b/lib/solidus_subscriptions/testing_support/factories.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'factory_bot'
require 'spree/testing_support/factories'
diff --git a/lib/solidus_subscriptions/testing_support/factories/installment_detail_factory.rb b/lib/solidus_subscriptions/testing_support/factories/installment_detail_factory.rb
index 6f90bf7..6910c0f 100644
--- a/lib/solidus_subscriptions/testing_support/factories/installment_detail_factory.rb
+++ b/lib/solidus_subscriptions/testing_support/factories/installment_detail_factory.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
FactoryBot.define do
factory :installment_detail, class: 'SolidusSubscriptions::InstallmentDetail' do
installment
diff --git a/lib/solidus_subscriptions/testing_support/factories/installment_factory.rb b/lib/solidus_subscriptions/testing_support/factories/installment_factory.rb
index 9914019..2eb5069 100644
--- a/lib/solidus_subscriptions/testing_support/factories/installment_factory.rb
+++ b/lib/solidus_subscriptions/testing_support/factories/installment_factory.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
FactoryBot.define do
factory :installment, class: 'SolidusSubscriptions::Installment' do
transient {
diff --git a/lib/solidus_subscriptions/testing_support/factories/line_item_factory.rb b/lib/solidus_subscriptions/testing_support/factories/line_item_factory.rb
index 51926a6..8d454d6 100644
--- a/lib/solidus_subscriptions/testing_support/factories/line_item_factory.rb
+++ b/lib/solidus_subscriptions/testing_support/factories/line_item_factory.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
FactoryBot.define do
factory :subscription_line_item, class: 'SolidusSubscriptions::LineItem' do
subscribable_id { create(:variant, subscribable: true).id }
diff --git a/lib/solidus_subscriptions/testing_support/factories/spree/line_item_factory.rb b/lib/solidus_subscriptions/testing_support/factories/spree/line_item_factory.rb
index c9d1012..c0dcf1e 100644
--- a/lib/solidus_subscriptions/testing_support/factories/spree/line_item_factory.rb
+++ b/lib/solidus_subscriptions/testing_support/factories/spree/line_item_factory.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
FactoryBot.modify do
factory :line_item do
trait :with_subscription_line_items do
diff --git a/lib/solidus_subscriptions/testing_support/factories/spree/order_factory.rb b/lib/solidus_subscriptions/testing_support/factories/spree/order_factory.rb
index 3eca360..ed51e3f 100644
--- a/lib/solidus_subscriptions/testing_support/factories/spree/order_factory.rb
+++ b/lib/solidus_subscriptions/testing_support/factories/spree/order_factory.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
FactoryBot.modify do
factory :order do
trait :with_subscription_line_items do
diff --git a/lib/solidus_subscriptions/testing_support/factories/spree_modification_factory.rb b/lib/solidus_subscriptions/testing_support/factories/spree_modification_factory.rb
index 39e0e46..9870d85 100644
--- a/lib/solidus_subscriptions/testing_support/factories/spree_modification_factory.rb
+++ b/lib/solidus_subscriptions/testing_support/factories/spree_modification_factory.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
FactoryBot.modify do
factory :user do
trait :subscription_user do
diff --git a/lib/solidus_subscriptions/testing_support/factories/subscription_event_factory.rb b/lib/solidus_subscriptions/testing_support/factories/subscription_event_factory.rb
index 0158e2e..8504037 100644
--- a/lib/solidus_subscriptions/testing_support/factories/subscription_event_factory.rb
+++ b/lib/solidus_subscriptions/testing_support/factories/subscription_event_factory.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
FactoryBot.define do
factory :subscription_event, class: 'SolidusSubscriptions::SubscriptionEvent' do
subscription
diff --git a/lib/solidus_subscriptions/testing_support/factories/subscription_factory.rb b/lib/solidus_subscriptions/testing_support/factories/subscription_factory.rb
index 8660b13..2898d36 100644
--- a/lib/solidus_subscriptions/testing_support/factories/subscription_factory.rb
+++ b/lib/solidus_subscriptions/testing_support/factories/subscription_factory.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
FactoryBot.define do
factory :subscription, class: 'SolidusSubscriptions::Subscription' do
store
diff --git a/lib/tasks/process_subscriptions.rake b/lib/tasks/process_subscriptions.rake
index 154b434..1da05ec 100644
--- a/lib/tasks/process_subscriptions.rake
+++ b/lib/tasks/process_subscriptions.rake
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
namespace :solidus_subscriptions do
desc 'Create orders for actionable subscriptions'
task process: :environment do
diff --git a/spec/controllers/solidus_subscriptions/api/v1/line_items_controller_spec.rb b/spec/controllers/solidus_subscriptions/api/v1/line_items_controller_spec.rb
index b570bca..bf8ac5f 100644
--- a/spec/controllers/solidus_subscriptions/api/v1/line_items_controller_spec.rb
+++ b/spec/controllers/solidus_subscriptions/api/v1/line_items_controller_spec.rb
@@ -4,11 +4,13 @@ RSpec.describe SolidusSubscriptions::Api::V1::LineItemsController, type: :contro
routes { SolidusSubscriptions::Engine.routes }
let!(:user) { create(:user) }
- before { user.generate_spree_api_key! }
-
let(:line) { create :subscription_line_item, order: order }
+ before { user.generate_spree_api_key! }
+
describe "#update" do
+ subject { post :update, params: params }
+
let(:params) do
{
id: line.id,
@@ -17,7 +19,6 @@ RSpec.describe SolidusSubscriptions::Api::V1::LineItemsController, type: :contro
format: :json
}
end
- subject { post :update, params: params }
context 'guest user' do
let(:order) { create :order }
@@ -36,6 +37,7 @@ RSpec.describe SolidusSubscriptions::Api::V1::LineItemsController, type: :contro
let(:json_body) { JSON.parse(subject.body) }
it { is_expected.to be_successful }
+
it "returns the updated record" do
expect(json_body["quantity"]).to eq 21
end
@@ -62,6 +64,7 @@ RSpec.describe SolidusSubscriptions::Api::V1::LineItemsController, type: :contro
let(:json_body) { JSON.parse(subject.body) }
it { is_expected.to be_successful }
+
it "returns the updated record" do
expect(json_body["quantity"]).to eq 21
end
@@ -83,11 +86,14 @@ RSpec.describe SolidusSubscriptions::Api::V1::LineItemsController, type: :contro
context "when the order belongs to someone else" do
let(:order) { create :order, user: create(:user) }
+
it { is_expected.to be_unauthorized }
end
end
describe "#destroy" do
+ subject { delete :destroy, params: params }
+
let(:params) {
{
id: line.id,
@@ -96,20 +102,22 @@ RSpec.describe SolidusSubscriptions::Api::V1::LineItemsController, type: :contro
format: :json
}
}
- subject { delete :destroy, params: params }
context "when the order is not ours" do
let(:order) { create :order, user: create(:user) }
+
it { is_expected.to be_unauthorized }
end
context "when the order is finalised" do
let(:order) { create :completed_order_with_totals, user: user }
+
it { is_expected.to be_bad_request }
end
context "when the order is ours and incomplete" do
let(:order) { create :order, user: user }
+
it { is_expected.to be_successful }
end
end
diff --git a/spec/controllers/solidus_subscriptions/api/v1/subscriptions_controller_spec.rb b/spec/controllers/solidus_subscriptions/api/v1/subscriptions_controller_spec.rb
index 163f089..90dd089 100644
--- a/spec/controllers/solidus_subscriptions/api/v1/subscriptions_controller_spec.rb
+++ b/spec/controllers/solidus_subscriptions/api/v1/subscriptions_controller_spec.rb
@@ -4,6 +4,7 @@ RSpec.describe SolidusSubscriptions::Api::V1::SubscriptionsController, type: :co
routes { SolidusSubscriptions::Engine.routes }
let!(:user) { create :user }
+
before { user.generate_spree_api_key! }
shared_examples "an authenticated subscription" do
@@ -22,17 +23,20 @@ RSpec.describe SolidusSubscriptions::Api::V1::SubscriptionsController, type: :co
context "when the subscription belongs to someone else" do
let!(:subscription) { create :subscription, user: create(:user) }
+
it { is_expected.to be_not_found }
end
context 'when the subscription is canceled' do
let!(:subscription) { create :subscription, user: user, state: 'canceled' }
+
it { is_expected.to be_unprocessable }
end
end
describe 'PATCH :update' do
subject { patch :update, params: params }
+
let(:params) do
{
id: subscription.id,
@@ -75,6 +79,7 @@ RSpec.describe SolidusSubscriptions::Api::V1::SubscriptionsController, type: :co
context 'when the subscription belongs to the user' do
let!(:subscription) { create :subscription, :with_line_item, user: user }
+
it { is_expected.to be_successful }
context 'when the params are not valid' do
@@ -93,21 +98,24 @@ RSpec.describe SolidusSubscriptions::Api::V1::SubscriptionsController, type: :co
context 'when the subscription belongs to someone else' do
let!(:subscription) { create :subscription, :with_line_item, user: create(:user) }
+
it { is_expected.to be_not_found }
end
end
describe "POST :skip" do
- let(:params) { { id: subscription.id, token: user.spree_api_key } }
subject { post :skip, params: params }
+ let(:params) { { id: subscription.id, token: user.spree_api_key } }
+
it_behaves_like "an authenticated subscription"
end
describe "POST :cancel" do
- let(:params) { { id: subscription.id, token: user.spree_api_key } }
subject { post :cancel, params: params }
+ let(:params) { { id: subscription.id, token: user.spree_api_key } }
+
it_behaves_like "an authenticated subscription"
end
end
diff --git a/spec/controllers/spree/admin/subscriptions_controller_spec.rb b/spec/controllers/spree/admin/subscriptions_controller_spec.rb
index d4de33c..7626efd 100644
--- a/spec/controllers/spree/admin/subscriptions_controller_spec.rb
+++ b/spec/controllers/spree/admin/subscriptions_controller_spec.rb
@@ -61,6 +61,7 @@ RSpec.describe Spree::Admin::SubscriptionsController, type: :request do
describe 'POST cancel' do
subject { delete spree.cancel_admin_subscription_path(subscription) }
+
context 'the subscription can be canceled' do
let(:subscription) { create :subscription, :actionable }
@@ -87,7 +88,7 @@ RSpec.describe Spree::Admin::SubscriptionsController, type: :request do
end
it 'cancels the subscription' do
- expect { subject }.to_not change { subscription.reload.state }
+ expect { subject }.not_to change { subscription.reload.state }
end
end
end
@@ -121,7 +122,7 @@ RSpec.describe Spree::Admin::SubscriptionsController, type: :request do
end
it 'cancels the subscription' do
- expect { subject }.to_not change { subscription.reload.state }
+ expect { subject }.not_to change { subscription.reload.state }
end
end
end
diff --git a/spec/controllers/spree/api/users_controller_spec.rb b/spec/controllers/spree/api/users_controller_spec.rb
index 3acbcc7..0155498 100644
--- a/spec/controllers/spree/api/users_controller_spec.rb
+++ b/spec/controllers/spree/api/users_controller_spec.rb
@@ -6,7 +6,7 @@ RSpec.describe Spree::Api::UsersController, type: :controller do
routes { Spree::Core::Engine.routes }
let!(:user) do
- create(:user) { |user| user.generate_spree_api_key }.tap(&:save)
+ create(:user, &:generate_spree_api_key).tap(&:save)
end
let!(:subscription) { create :subscription, :with_line_item, user: user }
diff --git a/spec/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association_spec.rb b/spec/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association_spec.rb
index 1674c5e..a0d58d5 100644
--- a/spec/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association_spec.rb
+++ b/spec/decorators/models/solidus_subscriptions/spree/line_item/subscription_line_items_association_spec.rb
@@ -2,6 +2,7 @@ require 'spec_helper'
RSpec.describe SolidusSubscriptions::Spree::LineItem::SubscriptionLineItemsAssociation, type: :model do
subject { Spree::LineItem.new }
+
it { is_expected.to have_many :subscription_line_items }
it { is_expected.to accept_nested_attributes_for :subscription_line_items }
end
diff --git a/spec/features/admin_link_spec.rb b/spec/features/admin_link_spec.rb
index 8ec1176..53b30bc 100644
--- a/spec/features/admin_link_spec.rb
+++ b/spec/features/admin_link_spec.rb
@@ -1,11 +1,11 @@
require 'spec_helper'
-RSpec.feature 'Subscriptions admin link', type: :feature do
+RSpec.describe 'Subscriptions admin link', type: :feature do
stub_authorization!
- scenario 'Navigating to the subscriptions backend' do
+ it 'Navigating to the subscriptions backend' do
visit '/admin'
click_on "Subscriptions"
- expect(page.current_path).to match /admin\/subscriptions/
+ expect(page).to have_current_path %r{admin/subscriptions}
end
end
diff --git a/spec/lib/solidus_subscriptions/ability_spec.rb b/spec/lib/solidus_subscriptions/ability_spec.rb
index 5e2903d..f27c15c 100644
--- a/spec/lib/solidus_subscriptions/ability_spec.rb
+++ b/spec/lib/solidus_subscriptions/ability_spec.rb
@@ -13,7 +13,7 @@ RSpec.describe SolidusSubscriptions::Ability do
create :subscription_line_item, order: order
end
- it { should be_able_to :crud, line_item, order }
+ it { is_expected.to be_able_to :crud, line_item, order }
end
context 'doesnt own the order' do
@@ -24,30 +24,31 @@ RSpec.describe SolidusSubscriptions::Ability do
create :subscription_line_item, order: order
end
- it { should_not be_able_to :crud, line_item, another_order }
+ it { is_expected.not_to be_able_to :crud, line_item, another_order }
end
context 'the user owns a subscription' do
let(:subscription) { create :subscription, user: user }
- it { should be_able_to :crud, subscription }
- it { should be_able_to :skip, subscription }
- it { should be_able_to :cancel, subscription }
+
+ it { is_expected.to be_able_to :crud, subscription }
+ it { is_expected.to be_able_to :skip, subscription }
+ it { is_expected.to be_able_to :cancel, subscription }
end
context 'the doesnt own a subscription' do
let(:another_user) { create :user }
let(:subscription) { create :subscription, user: another_user }
- it { should_not be_able_to :crud, subscription }
- it { should_not be_able_to :skip, subscription }
- it { should_not be_able_to :cancel, subscription }
+ it { is_expected.not_to be_able_to :crud, subscription }
+ it { is_expected.not_to be_able_to :skip, subscription }
+ it { is_expected.not_to be_able_to :cancel, subscription }
end
end
context 'the user is an admin' do
let(:user) { create :admin_user }
- it { should be_able_to :manage, SolidusSubscriptions::Subscription }
- it { should be_able_to :manage, SolidusSubscriptions::LineItem }
+ it { is_expected.to be_able_to :manage, SolidusSubscriptions::Subscription }
+ it { is_expected.to be_able_to :manage, SolidusSubscriptions::LineItem }
end
end
diff --git a/spec/lib/solidus_subscriptions/processor_spec.rb b/spec/lib/solidus_subscriptions/processor_spec.rb
index 96ac9f9..b70d501 100644
--- a/spec/lib/solidus_subscriptions/processor_spec.rb
+++ b/spec/lib/solidus_subscriptions/processor_spec.rb
@@ -121,11 +121,13 @@ RSpec.describe SolidusSubscriptions::Processor, :checkout do
describe '.run' do
subject { described_class.run }
+
it_behaves_like 'a subscription order'
end
describe '#build_jobs' do
subject { described_class.new([user]).build_jobs }
+
it_behaves_like 'a subscription order'
end
end
diff --git a/spec/models/solidus_subscriptions/installment_detail_spec.rb b/spec/models/solidus_subscriptions/installment_detail_spec.rb
index d645057..53f0b53 100644
--- a/spec/models/solidus_subscriptions/installment_detail_spec.rb
+++ b/spec/models/solidus_subscriptions/installment_detail_spec.rb
@@ -8,11 +8,13 @@ RSpec.describe SolidusSubscriptions::InstallmentDetail, type: :model do
context 'the detail was successful' do
let(:success) { true }
+
it { is_expected.to be_falsy }
end
context 'the detail was not successfuly' do
let(:success) { false }
+
it { is_expected.to be_truthy }
end
end
diff --git a/spec/models/solidus_subscriptions/installment_spec.rb b/spec/models/solidus_subscriptions/installment_spec.rb
index c09d949..0928c3c 100644
--- a/spec/models/solidus_subscriptions/installment_spec.rb
+++ b/spec/models/solidus_subscriptions/installment_spec.rb
@@ -1,10 +1,10 @@
require 'spec_helper'
RSpec.describe SolidusSubscriptions::Installment, type: :model do
- it { is_expected.to validate_presence_of :subscription }
-
let(:installment) { create :installment }
+ it { is_expected.to validate_presence_of :subscription }
+
describe '#line_item_builder' do
subject { installment.line_item_builder }
@@ -22,7 +22,8 @@ RSpec.describe SolidusSubscriptions::Installment, type: :model do
end
it { is_expected.to be_a SolidusSubscriptions::InstallmentDetail }
- it { is_expected.to_not be_successful }
+ it { is_expected.not_to be_successful }
+
it 'has the correct message' do
expect(subject).to have_attributes(
message: I18n.t('solidus_subscriptions.installment_details.out_of_stock')
@@ -46,7 +47,7 @@ RSpec.describe SolidusSubscriptions::Installment, type: :model do
it 'removes any actionable date if any' do
expect { subject }.
- to change { installment.actionable_date }.
+ to change(installment, :actionable_date).
from(actionable_date).to(nil)
end
@@ -67,6 +68,7 @@ RSpec.describe SolidusSubscriptions::Installment, type: :model do
describe '#failed!' do
subject { installment.failed!(order) }
+
let(:order) { create :order }
let(:expected_date) do
@@ -74,7 +76,8 @@ RSpec.describe SolidusSubscriptions::Installment, type: :model do
end
it { is_expected.to be_a SolidusSubscriptions::InstallmentDetail }
- it { is_expected.to_not be_successful }
+ it { is_expected.not_to be_successful }
+
it 'has the correct message' do
expect(subject).to have_attributes(
message: I18n.t('solidus_subscriptions.installment_details.failed'),
@@ -103,30 +106,36 @@ RSpec.describe SolidusSubscriptions::Installment, type: :model do
describe '#unfulfilled?' do
subject { installment.unfulfilled? }
+
let(:installment) { create(:installment, details: details) }
context 'the installment has an associated successful detail' do
let(:details) { create_list :installment_detail, 1, success: true }
+
it { is_expected.to be_falsy }
end
context 'the installment has no associated successful detail' do
let(:details) { create_list :installment_detail, 1 }
+
it { is_expected.to be_truthy }
end
end
describe '#fulfilled' do
subject { installment.fulfilled? }
+
let(:installment) { create(:installment, details: details) }
context 'the installment has an associated completed order' do
let(:details) { create_list :installment_detail, 1, success: true }
+
it { is_expected.to be_truthy }
end
context 'the installment has no associated completed order' do
let(:details) { create_list :installment_detail, 1 }
+
it { is_expected.to be_falsy }
end
end
@@ -141,7 +150,8 @@ RSpec.describe SolidusSubscriptions::Installment, type: :model do
end
it { is_expected.to be_a SolidusSubscriptions::InstallmentDetail }
- it { is_expected.to_not be_successful }
+ it { is_expected.not_to be_successful }
+
it 'has the correct message' do
expect(subject).to have_attributes(
order: order,
diff --git a/spec/models/solidus_subscriptions/line_item_spec.rb b/spec/models/solidus_subscriptions/line_item_spec.rb
index 26fa757..7312b33 100644
--- a/spec/models/solidus_subscriptions/line_item_spec.rb
+++ b/spec/models/solidus_subscriptions/line_item_spec.rb
@@ -49,16 +49,19 @@ RSpec.describe SolidusSubscriptions::LineItem, type: :model do
end
describe "#interval" do
+ subject { line_item.interval }
+
let(:line_item) { create :subscription_line_item, :with_subscription }
+
before do
Timecop.freeze(Date.parse("2016-09-22"))
line_item.subscription.update!(actionable_date: Date.current)
end
- after { Timecop.return }
- subject { line_item.interval }
+ after { Timecop.return }
it { is_expected.to be_a ActiveSupport::Duration }
+
it "calculates the duration correctly" do
expect(subject.from_now).to eq Date.parse("2016-10-22")
end
@@ -68,6 +71,7 @@ RSpec.describe SolidusSubscriptions::LineItem, type: :model do
subject { line_item.as_json }
around { |e| Timecop.freeze { e.run } }
+
let(:line_item) { create(:subscription_line_item, :with_subscription) }
let(:expected_hash) do
diff --git a/spec/models/solidus_subscriptions/subscription_spec.rb b/spec/models/solidus_subscriptions/subscription_spec.rb
index 38b430c..54a1cba 100644
--- a/spec/models/solidus_subscriptions/subscription_spec.rb
+++ b/spec/models/solidus_subscriptions/subscription_spec.rb
@@ -50,7 +50,7 @@ RSpec.describe SolidusSubscriptions::Subscription, type: :model do
it 'is canceled' do
subject
- expect(subscription.canceled?).to be_truthy
+ expect(subscription).to be_canceled
end
it 'creates a subscription_canceled event' do
@@ -64,7 +64,7 @@ RSpec.describe SolidusSubscriptions::Subscription, type: :model do
it 'is pending cancelation' do
subject
- expect(subscription.pending_cancellation?).to be_truthy
+ expect(subscription).to be_pending_cancellation
end
it 'creates a subscription_canceled event' do
@@ -105,11 +105,12 @@ RSpec.describe SolidusSubscriptions::Subscription, type: :model do
context 'when the successive skips have been exceeded' do
let(:successive_skips) { 1 }
+
it { is_expected.to be_falsy }
it 'adds errors to the subscription' do
subject
- expect(subscription.errors[:successive_skip_count]).to_not be_empty
+ expect(subscription.errors[:successive_skip_count]).not_to be_empty
end
it 'does not create an event' do
@@ -119,11 +120,12 @@ RSpec.describe SolidusSubscriptions::Subscription, type: :model do
context 'when the total skips have been exceeded' do
let(:total_skips) { 1 }
+
it { is_expected.to be_falsy }
it 'adds errors to the subscription' do
subject
- expect(subscription.errors[:skip_count]).to_not be_empty
+ expect(subscription.errors[:skip_count]).not_to be_empty
end
it 'does not create an event' do
@@ -158,7 +160,7 @@ RSpec.describe SolidusSubscriptions::Subscription, type: :model do
it 'is inactive' do
subject
- expect(subscription.inactive?).to be_truthy
+ expect(subscription).to be_inactive
end
it 'creates a subscription_deactivated event' do
@@ -236,6 +238,7 @@ RSpec.describe SolidusSubscriptions::Subscription, type: :model do
context "when the subscription is not active" do
let(:subscription) { build_stubbed :subscription, :with_line_item, state: :canceled }
+
it { is_expected.to be_nil }
end
end
@@ -263,27 +266,27 @@ RSpec.describe SolidusSubscriptions::Subscription, type: :model do
end
describe ".actionable" do
+ subject { described_class.actionable }
+
let!(:past_subscription) { create :subscription, actionable_date: 2.days.ago }
let!(:future_subscription) { create :subscription, actionable_date: 1.month.from_now }
let!(:inactive_subscription) { create :subscription, state: "inactive", actionable_date: 7.days.ago }
let!(:canceled_subscription) { create :subscription, state: "canceled", actionable_date: 4.days.ago }
- subject { described_class.actionable }
-
it "returns subscriptions that have an actionable date in the past" do
expect(subject).to include past_subscription
end
it "does not include future subscriptions" do
- expect(subject).to_not include future_subscription
+ expect(subject).not_to include future_subscription
end
it "does not include inactive subscriptions" do
- expect(subject).to_not include inactive_subscription
+ expect(subject).not_to include inactive_subscription
end
it "does not include canceled subscriptions" do
- expect(subject).to_not include canceled_subscription
+ expect(subject).not_to include canceled_subscription
end
end
@@ -302,6 +305,7 @@ RSpec.describe SolidusSubscriptions::Subscription, type: :model do
context 'when the subscription has never been processed' do
let(:subscription) { build_stubbed :subscription }
+
it { is_expected.to eq 'pending' }
end
@@ -337,6 +341,7 @@ RSpec.describe SolidusSubscriptions::Subscription, type: :model do
describe '.ransackable_scopes' do
subject { described_class.ransackable_scopes }
+
it { is_expected.to match_array [:in_processing_state] }
end
@@ -349,16 +354,19 @@ RSpec.describe SolidusSubscriptions::Subscription, type: :model do
context 'successfull subscriptions' do
let(:state) { :success }
+
it { is_expected.to match_array success_subs }
end
context 'failed subscriptions' do
let(:state) { :failed }
+
it { is_expected.to match_array failed_subs }
end
context 'new subscriptions' do
let(:state) { :pending }
+
it { is_expected.to match_array new_subs }
end
@@ -373,6 +381,7 @@ RSpec.describe SolidusSubscriptions::Subscription, type: :model do
describe '.processing_states' do
subject { described_class.processing_states }
+
it { is_expected.to match_array [:pending, :success, :failed] }
end
diff --git a/spec/requests/solidus_subscriptions/api/v1/subscriptions_spec.rb b/spec/requests/solidus_subscriptions/api/v1/subscriptions_spec.rb
index 6167081..bab7b23 100644
--- a/spec/requests/solidus_subscriptions/api/v1/subscriptions_spec.rb
+++ b/spec/requests/solidus_subscriptions/api/v1/subscriptions_spec.rb
@@ -3,6 +3,7 @@ require 'spec_helper'
RSpec.describe "Subscription endpoints", type: :request do
let(:json_resp) { JSON.parse(response.body) }
let(:user) { create :user }
+
before { user.generate_spree_api_key! }
describe "#cancel" do
@@ -30,10 +31,11 @@ RSpec.describe "Subscription endpoints", type: :request do
describe "#skip" do
let(:subscription) { create :subscription, :with_line_item, actionable_date: 1.day.from_now, user: user }
+ let(:expected_date) { "2016-10-27T00:00:00.000Z" }
+
before { Timecop.freeze(Date.parse("2016-09-26")) }
- after { Timecop.return }
- let(:expected_date) { "2016-10-27T00:00:00.000Z" }
+ after { Timecop.return }
it "returns the updated record", :aggregate_failures do
post solidus_subscriptions.skip_api_v1_subscription_path(subscription), params: { token: user.spree_api_key }
diff --git a/spec/services/solidus_subscriptions/checkout_spec.rb b/spec/services/solidus_subscriptions/checkout_spec.rb
index aee7129..bd66bbc 100644
--- a/spec/services/solidus_subscriptions/checkout_spec.rb
+++ b/spec/services/solidus_subscriptions/checkout_spec.rb
@@ -30,6 +30,7 @@ RSpec.describe SolidusSubscriptions::Checkout do
context 'initialized with installments belonging to multiple users' do
subject { checkout }
+
let(:installments) { build_stubbed_list :installment, 2 }
it 'raises an error' do
@@ -40,10 +41,12 @@ RSpec.describe SolidusSubscriptions::Checkout do
describe '#process', :checkout do
subject(:order) { checkout.process }
+
let(:subscription_line_item) { installments.first.subscription.line_items.first }
shared_examples 'a completed checkout' do
it { is_expected.to be_a Spree::Order }
+
let(:total) { 49.98 }
let(:quantity) { installments.length }
@@ -108,7 +111,7 @@ RSpec.describe SolidusSubscriptions::Checkout do
it { is_expected.to be_nil }
it 'creates no order' do
- expect { subject }.to_not change { Spree::Order.count }
+ expect { subject }.not_to change { Spree::Order.count }
end
end
@@ -140,6 +143,7 @@ RSpec.describe SolidusSubscriptions::Checkout do
context 'the variant is out of stock' do
let(:subscription_line_item) { installments.last.subscription.line_items.first }
+ let(:expected_date) { (DateTime.current + SolidusSubscriptions.configuration.reprocessing_interval).beginning_of_minute }
# Remove stock for 1 variant in the consolidated installment
before do
@@ -148,13 +152,11 @@ RSpec.describe SolidusSubscriptions::Checkout do
variant.stock_items.update_all(count_on_hand: 0, backorderable: false)
end
- let(:expected_date) { (DateTime.current + SolidusSubscriptions.configuration.reprocessing_interval).beginning_of_minute }
-
it 'creates a failed installment detail' do
subject
detail = installments.first.details.last
- expect(detail).to_not be_successful
+ expect(detail).not_to be_successful
expect(detail.message).
to eq I18n.t('solidus_subscriptions.installment_details.out_of_stock')
end
@@ -253,9 +255,10 @@ RSpec.describe SolidusSubscriptions::Checkout do
end
context 'the user has store credit' do
- it_behaves_like 'a completed checkout'
- let!(:store_credit_payment_method) { create :store_credit_payment_method }
let!(:store_credit) { create :store_credit, user: subscription_user }
+ let!(:store_credit_payment_method) { create :store_credit_payment_method }
+
+ it_behaves_like 'a completed checkout'
it 'has a valid store credit payment' do
expect(order.payments.valid.store_credits).to be_present
@@ -263,8 +266,6 @@ RSpec.describe SolidusSubscriptions::Checkout do
end
context 'the subscription has a shipping address' do
- it_behaves_like 'a completed checkout'
- let(:shipping_address) { create :address }
let(:installment_traits) do
{
subscription_traits: [{
@@ -274,6 +275,9 @@ RSpec.describe SolidusSubscriptions::Checkout do
}]
}
end
+ let(:shipping_address) { create :address }
+
+ it_behaves_like 'a completed checkout'
it 'ships to the subscription address' do
expect(subject.ship_address).to eq shipping_address
@@ -281,8 +285,6 @@ RSpec.describe SolidusSubscriptions::Checkout do
end
context 'the subscription has a billing address' do
- it_behaves_like 'a completed checkout'
- let(:billing_address) { create :address }
let(:installment_traits) do
{
subscription_traits: [{
@@ -292,6 +294,9 @@ RSpec.describe SolidusSubscriptions::Checkout do
}]
}
end
+ let(:billing_address) { create :address }
+
+ it_behaves_like 'a completed checkout'
it 'bills to the subscription address' do
expect(subject.bill_address).to eq billing_address
@@ -299,8 +304,6 @@ RSpec.describe SolidusSubscriptions::Checkout do
end
context 'the subscription has a payment method' do
- it_behaves_like 'a completed checkout'
- let(:payment_method) { create :check_payment_method }
let(:installment_traits) do
{
subscription_traits: [{
@@ -310,6 +313,9 @@ RSpec.describe SolidusSubscriptions::Checkout do
}]
}
end
+ let(:payment_method) { create :check_payment_method }
+
+ it_behaves_like 'a completed checkout'
it 'pays with the payment method' do
expect(subject.payments.valid.first.payment_method).to eq payment_method
@@ -317,9 +323,6 @@ RSpec.describe SolidusSubscriptions::Checkout do
end
context 'the subscription has a payment method and a source' do
- it_behaves_like 'a completed checkout'
- let(:payment_method) { create :credit_card_payment_method }
- let(:payment_source) { create :credit_card, payment_method: payment_method, user: subscription_user }
let(:installment_traits) do
{
subscription_traits: [{
@@ -330,6 +333,10 @@ RSpec.describe SolidusSubscriptions::Checkout do
}]
}
end
+ let(:payment_source) { create :credit_card, payment_method: payment_method, user: subscription_user }
+ let(:payment_method) { create :credit_card_payment_method }
+
+ it_behaves_like 'a completed checkout'
it 'pays with the payment method' do
expect(subject.payments.valid.first.payment_method).to eq payment_method
@@ -361,6 +368,7 @@ RSpec.describe SolidusSubscriptions::Checkout do
describe '#order' do
subject { checkout.order }
+
let(:user) { installments.first.subscription.user }
it { is_expected.to be_a Spree::Order }
diff --git a/spec/services/solidus_subscriptions/failure_dispatcher_spec.rb b/spec/services/solidus_subscriptions/failure_dispatcher_spec.rb
index c24508a..47a1463 100644
--- a/spec/services/solidus_subscriptions/failure_dispatcher_spec.rb
+++ b/spec/services/solidus_subscriptions/failure_dispatcher_spec.rb
@@ -23,7 +23,7 @@ RSpec.describe SolidusSubscriptions::FailureDispatcher do
if Spree.solidus_gem_version > Gem::Version.new('2.10')
skip 'Orders in cart state cannot be canceled starting from Solidus 2.11'
end
- expect { subject }.to change { order.state }.to 'canceled'
+ expect { subject }.to change(order, :state).to 'canceled'
end
end
end
diff --git a/spec/services/solidus_subscriptions/line_item_builder_spec.rb b/spec/services/solidus_subscriptions/line_item_builder_spec.rb
index b05c34a..96ca027 100644
--- a/spec/services/solidus_subscriptions/line_item_builder_spec.rb
+++ b/spec/services/solidus_subscriptions/line_item_builder_spec.rb
@@ -10,6 +10,7 @@ RSpec.describe SolidusSubscriptions::LineItemBuilder do
describe '#spree_line_items' do
subject { builder.spree_line_items }
+
let(:expected_attributes) do
{
variant_id: subscription_line_item.subscribable_id,
@@ -36,6 +37,7 @@ RSpec.describe SolidusSubscriptions::LineItemBuilder do
context 'the variant is out of stock' do
before { create :stock_location, backorderable_default: false }
+
it { is_expected.to be_empty }
end
end
diff --git a/spec/services/solidus_subscriptions/order_builder_spec.rb b/spec/services/solidus_subscriptions/order_builder_spec.rb
index 07f5d3b..3463bd1 100644
--- a/spec/services/solidus_subscriptions/order_builder_spec.rb
+++ b/spec/services/solidus_subscriptions/order_builder_spec.rb
@@ -36,8 +36,8 @@ RSpec.describe SolidusSubscriptions::OrderBuilder do
context 'the line item already exists on the order' do
let(:line_items_attributes) do
[{
- variant: variant,
- quantity: 3
+ variant: variant,
+ quantity: 3
}]
end
diff --git a/spec/services/solidus_subscriptions/out_of_stock_dispatcher_spec.rb b/spec/services/solidus_subscriptions/out_of_stock_dispatcher_spec.rb
index 5108d2f..6a1de74 100644
--- a/spec/services/solidus_subscriptions/out_of_stock_dispatcher_spec.rb
+++ b/spec/services/solidus_subscriptions/out_of_stock_dispatcher_spec.rb
@@ -6,6 +6,7 @@ RSpec.describe SolidusSubscriptions::OutOfStockDispatcher do
describe 'initialization' do
subject { dispatcher }
+
it { is_expected.to be_a described_class }
end
diff --git a/spec/services/solidus_subscriptions/payment_failed_dispatcher_spec.rb b/spec/services/solidus_subscriptions/payment_failed_dispatcher_spec.rb
index 3c3f0b7..a8986b2 100644
--- a/spec/services/solidus_subscriptions/payment_failed_dispatcher_spec.rb
+++ b/spec/services/solidus_subscriptions/payment_failed_dispatcher_spec.rb
@@ -7,6 +7,7 @@ RSpec.describe SolidusSubscriptions::PaymentFailedDispatcher do
describe 'initialization' do
subject { dispatcher }
+
it { is_expected.to be_a described_class }
end
@@ -27,7 +28,7 @@ RSpec.describe SolidusSubscriptions::PaymentFailedDispatcher do
if Spree.solidus_gem_version > Gem::Version.new('2.10')
skip 'Orders in cart state cannot be canceled starting from Solidus 2.11'
end
- expect { subject }.to change { order.state }.to 'canceled'
+ expect { subject }.to change(order, :state).to 'canceled'
end
end
end
diff --git a/spec/services/solidus_subscriptions/subscription_order_promotion_rule_spec.rb b/spec/services/solidus_subscriptions/subscription_order_promotion_rule_spec.rb
index 847ab0c..bacbef2 100644
--- a/spec/services/solidus_subscriptions/subscription_order_promotion_rule_spec.rb
+++ b/spec/services/solidus_subscriptions/subscription_order_promotion_rule_spec.rb
@@ -8,11 +8,13 @@ RSpec.describe SolidusSubscriptions::SubscriptionOrderPromotionRule do
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
@@ -22,11 +24,13 @@ RSpec.describe SolidusSubscriptions::SubscriptionOrderPromotionRule do
context 'when the order fulfills a subscription installment' do
let(:order) { create(:order, subscription_order: true) }
+
it { is_expected.to be_truthy }
end
context 'when the order contains does not fulfill a subscription installment' do
let(:order) { create(:order) }
+
it { is_expected.to be_falsy }
end
end
diff --git a/spec/services/solidus_subscriptions/subscription_promotion_rule_spec.rb b/spec/services/solidus_subscriptions/subscription_promotion_rule_spec.rb
index 9bd2dd2..f4c65cc 100644
--- a/spec/services/solidus_subscriptions/subscription_promotion_rule_spec.rb
+++ b/spec/services/solidus_subscriptions/subscription_promotion_rule_spec.rb
@@ -8,26 +8,31 @@ RSpec.describe SolidusSubscriptions::SubscriptionPromotionRule do
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
@@ -37,11 +42,13 @@ RSpec.describe SolidusSubscriptions::SubscriptionPromotionRule do
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
diff --git a/spec/services/solidus_subscriptions/success_dispatcher_spec.rb b/spec/services/solidus_subscriptions/success_dispatcher_spec.rb
index ef7d255..2185e0c 100644
--- a/spec/services/solidus_subscriptions/success_dispatcher_spec.rb
+++ b/spec/services/solidus_subscriptions/success_dispatcher_spec.rb
@@ -6,6 +6,7 @@ RSpec.describe SolidusSubscriptions::SuccessDispatcher do
describe 'initialization' do
subject { dispatcher }
+
it { is_expected.to be_a described_class }
end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 4087c5b..b1657e9 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -19,7 +19,7 @@ require 'solidus_dev_support/rspec/feature_helper'
Dir["#{__dir__}/support/**/*.rb"].sort.each { |f| require f }
# Requires factories defined in lib/solidus_subscriptions/factories.rb
-require 'solidus_subscriptions/factories'
+require 'solidus_subscriptions/testing_support/factories'
RSpec.configure do |config|
config.infer_spec_type_from_file_location!