solidus_core 2.10.3 → 2.11.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of solidus_core might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/assets/javascripts/spree.js.erb +31 -2
- data/app/controllers/spree/base_controller.rb +1 -0
- data/app/mailers/spree/base_mailer.rb +4 -0
- data/app/mailers/spree/order_mailer.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
- data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
- data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
- data/app/models/concerns/spree/default_price.rb +1 -1
- data/app/models/concerns/spree/soft_deletable.rb +18 -0
- data/app/models/concerns/spree/user_address_book.rb +86 -32
- data/app/models/concerns/spree/user_methods.rb +3 -2
- data/app/models/spree/ability.rb +34 -10
- data/app/models/spree/address.rb +94 -17
- data/app/models/spree/address/name.rb +49 -0
- data/app/models/spree/address/state_validator.rb +71 -0
- data/app/models/spree/adjustment.rb +1 -1
- data/app/models/spree/base.rb +2 -2
- data/app/models/spree/calculator.rb +4 -4
- data/app/models/spree/calculator/default_tax.rb +1 -1
- data/app/models/spree/calculator/free_shipping.rb +1 -0
- data/app/models/spree/calculator/percent_per_item.rb +6 -4
- data/app/models/spree/calculator/price_sack.rb +2 -1
- data/app/models/spree/credit_card.rb +2 -2
- data/app/models/spree/customer_return.rb +4 -2
- data/app/models/spree/exchange.rb +1 -1
- data/app/models/spree/image/active_storage_attachment.rb +21 -0
- data/app/models/spree/inventory_unit.rb +1 -1
- data/app/models/spree/line_item.rb +13 -4
- data/app/models/spree/option_type.rb +1 -1
- data/app/models/spree/option_value.rb +2 -2
- data/app/models/spree/order.rb +91 -20
- data/app/models/spree/order/checkout.rb +1 -0
- data/app/models/spree/order/payments.rb +2 -2
- data/app/models/spree/order_inventory.rb +16 -4
- data/app/models/spree/order_merger.rb +6 -4
- data/app/models/spree/order_promotion.rb +1 -1
- data/app/models/spree/order_updater.rb +11 -10
- data/app/models/spree/payment.rb +3 -3
- data/app/models/spree/payment/cancellation.rb +3 -22
- data/app/models/spree/payment/processing.rb +54 -30
- data/app/models/spree/payment_method.rb +8 -9
- data/app/models/spree/payment_source.rb +2 -2
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/price.rb +2 -8
- data/app/models/spree/product.rb +19 -14
- data/app/models/spree/product/scopes.rb +9 -5
- data/app/models/spree/promotion.rb +18 -7
- data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
- data/app/models/spree/promotion_action.rb +1 -7
- data/app/models/spree/promotion_code.rb +6 -1
- data/app/models/spree/promotion_code_batch.rb +1 -1
- data/app/models/spree/promotion_handler/coupon.rb +2 -2
- data/app/models/spree/promotion_rule.rb +1 -1
- data/app/models/spree/promotion_rule_role.rb +1 -1
- data/app/models/spree/refund.rb +60 -12
- data/app/models/spree/reimbursement.rb +27 -0
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
- data/app/models/spree/return_authorization.rb +1 -1
- data/app/models/spree/return_item.rb +21 -10
- data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
- data/app/models/spree/role.rb +1 -1
- data/app/models/spree/shipment.rb +2 -2
- data/app/models/spree/shipping_calculator.rb +1 -1
- data/app/models/spree/shipping_manifest.rb +2 -2
- data/app/models/spree/shipping_method.rb +2 -9
- data/app/models/spree/shipping_rate.rb +1 -1
- data/app/models/spree/shipping_rate_tax.rb +1 -1
- data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
- data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
- data/app/models/spree/stock/package.rb +1 -1
- data/app/models/spree/stock/simple_coordinator.rb +1 -3
- data/app/models/spree/stock_item.rb +2 -8
- data/app/models/spree/stock_movement.rb +2 -0
- data/app/models/spree/store.rb +1 -1
- data/app/models/spree/store_credit.rb +1 -7
- data/app/models/spree/store_credit_category.rb +30 -3
- data/app/models/spree/store_credit_event.rb +1 -7
- data/app/models/spree/store_credit_reason.rb +0 -4
- data/app/models/spree/tax/tax_helpers.rb +1 -1
- data/app/models/spree/tax_category.rb +2 -8
- data/app/models/spree/tax_rate.rb +7 -7
- data/app/models/spree/taxon.rb +1 -1
- data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
- data/app/models/spree/user_address.rb +8 -2
- data/app/models/spree/variant.rb +7 -13
- data/app/models/spree/variant_property_rule.rb +5 -1
- data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
- data/app/models/spree/zone.rb +1 -1
- data/config/locales/en.yml +44 -5
- data/db/default/spree/countries.rb +1 -1
- data/db/default/spree/states.rb +12 -4
- data/db/default/spree/store_credit.rb +2 -2
- data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
- data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
- data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
- data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
- data/lib/generators/solidus/install/install_generator.rb +253 -0
- data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
- data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
- data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
- data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
- data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
- data/lib/generators/spree/dummy/templates/rails/test.rb +1 -1
- data/lib/generators/spree/install/install_generator.rb +7 -189
- data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
- data/lib/spree/app_configuration.rb +117 -51
- data/lib/spree/awesome_nested_set_override.rb +44 -0
- data/lib/spree/core.rb +6 -11
- data/lib/spree/core/controller_helpers/auth.rb +17 -4
- data/lib/spree/core/controller_helpers/current_host.rb +17 -0
- data/lib/spree/core/controller_helpers/order.rb +8 -7
- data/lib/spree/core/engine.rb +39 -2
- data/lib/spree/core/importer/order.rb +24 -10
- data/lib/spree/core/permalinks.rb +1 -3
- data/lib/spree/core/product_filters.rb +6 -5
- data/lib/spree/core/state_machines.rb +20 -1
- data/lib/spree/core/state_machines/order.rb +249 -0
- data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/encryptor.rb +25 -0
- data/lib/spree/event.rb +40 -7
- data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
- data/lib/spree/event/configuration.rb +11 -6
- data/lib/spree/event/subscriber.rb +38 -18
- data/lib/spree/event/subscriber_registry.rb +92 -0
- data/lib/spree/i18n.rb +1 -1
- data/lib/spree/mailer_previews/carton_preview.rb +2 -1
- data/lib/spree/paranoia_deprecations.rb +32 -12
- data/lib/spree/permission_sets/configuration_display.rb +14 -14
- data/lib/spree/permission_sets/default_customer.rb +16 -16
- data/lib/spree/permission_sets/order_display.rb +11 -11
- data/lib/spree/permission_sets/order_management.rb +1 -1
- data/lib/spree/permission_sets/product_display.rb +9 -9
- data/lib/spree/permission_sets/promotion_display.rb +5 -5
- data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
- data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
- data/lib/spree/permission_sets/stock_display.rb +2 -2
- data/lib/spree/permission_sets/stock_management.rb +1 -1
- data/lib/spree/permission_sets/user_display.rb +3 -3
- data/lib/spree/permission_sets/user_management.rb +4 -3
- data/lib/spree/permitted_attributes.rb +9 -8
- data/lib/spree/preferences/preferable.rb +4 -3
- data/lib/spree/preferences/preferable_class_methods.rb +22 -3
- data/lib/spree/testing_support.rb +40 -0
- data/lib/spree/testing_support/ability_helpers.rb +9 -9
- data/lib/spree/testing_support/authorization_helpers.rb +1 -0
- data/lib/spree/testing_support/blacklist_urls.rb +23 -0
- data/lib/spree/testing_support/capybara_ext.rb +3 -0
- data/lib/spree/testing_support/common_rake.rb +3 -3
- data/lib/spree/testing_support/dummy_app.rb +44 -23
- data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
- data/lib/spree/testing_support/factories.rb +2 -4
- data/lib/spree/testing_support/factories/address_factory.rb +3 -4
- data/lib/spree/testing_support/factories/adjustment_factory.rb +2 -5
- data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +3 -0
- data/lib/spree/testing_support/factories/calculator_factory.rb +3 -0
- data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
- data/lib/spree/testing_support/factories/country_factory.rb +3 -0
- data/lib/spree/testing_support/factories/credit_card_factory.rb +3 -0
- data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -3
- data/lib/spree/testing_support/factories/image_factory.rb +4 -1
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +2 -4
- data/lib/spree/testing_support/factories/line_item_factory.rb +2 -2
- data/lib/spree/testing_support/factories/option_type_factory.rb +3 -0
- data/lib/spree/testing_support/factories/option_value_factory.rb +3 -0
- data/lib/spree/testing_support/factories/order_factory.rb +2 -6
- data/lib/spree/testing_support/factories/order_promotion_factory.rb +2 -2
- data/lib/spree/testing_support/factories/payment_factory.rb +2 -4
- data/lib/spree/testing_support/factories/payment_method_factory.rb +3 -0
- data/lib/spree/testing_support/factories/price_factory.rb +2 -1
- data/lib/spree/testing_support/factories/product_factory.rb +2 -5
- data/lib/spree/testing_support/factories/product_option_type_factory.rb +2 -2
- data/lib/spree/testing_support/factories/product_property_factory.rb +2 -2
- data/lib/spree/testing_support/factories/promotion_category_factory.rb +3 -0
- data/lib/spree/testing_support/factories/promotion_code_factory.rb +2 -2
- data/lib/spree/testing_support/factories/promotion_factory.rb +8 -2
- data/lib/spree/testing_support/factories/property_factory.rb +3 -0
- data/lib/spree/testing_support/factories/refund_factory.rb +3 -2
- data/lib/spree/testing_support/factories/refund_reason_factory.rb +3 -0
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +3 -2
- data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +3 -0
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +2 -3
- data/lib/spree/testing_support/factories/return_item_factory.rb +2 -4
- data/lib/spree/testing_support/factories/return_reason_factory.rb +3 -0
- data/lib/spree/testing_support/factories/role_factory.rb +3 -0
- data/lib/spree/testing_support/factories/shipment_factory.rb +2 -3
- data/lib/spree/testing_support/factories/shipping_category_factory.rb +3 -0
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +2 -3
- data/lib/spree/testing_support/factories/shipping_rate_factory.rb +2 -2
- data/lib/spree/testing_support/factories/state_factory.rb +2 -1
- data/lib/spree/testing_support/factories/stock_item_factory.rb +2 -2
- data/lib/spree/testing_support/factories/stock_location_factory.rb +2 -3
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +2 -1
- data/lib/spree/testing_support/factories/stock_package_factory.rb +2 -2
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +11 -0
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +3 -2
- data/lib/spree/testing_support/factories/store_credit_factory.rb +2 -3
- data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +6 -1
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +3 -0
- data/lib/spree/testing_support/factories/store_factory.rb +4 -1
- data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -1
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +2 -3
- data/lib/spree/testing_support/factories/taxon_factory.rb +6 -1
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +3 -0
- data/lib/spree/testing_support/factories/user_factory.rb +2 -3
- data/lib/spree/testing_support/factories/variant_factory.rb +2 -4
- data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +2 -2
- data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +2 -3
- data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +2 -2
- data/lib/spree/testing_support/factories/zone_factory.rb +3 -3
- data/lib/spree/testing_support/fixtures/blank.jpg +0 -0
- data/lib/spree/testing_support/job_helpers.rb +24 -0
- data/lib/spree/testing_support/order_walkthrough.rb +1 -1
- data/lib/spree/testing_support/precompiled_assets.rb +15 -0
- data/lib/spree/testing_support/preferences.rb +3 -1
- data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
- data/lib/spree/testing_support/translations.rb +25 -0
- data/{app/models → lib}/spree/user_class_handle.rb +0 -0
- data/lib/tasks/email.rake +3 -2
- data/solidus_core.gemspec +8 -5
- metadata +97 -374
- data/script/rails +0 -10
- data/spec/fixtures/thinking-cat.jpg +0 -0
- data/spec/helpers/base_helper_spec.rb +0 -168
- data/spec/helpers/products_helper_spec.rb +0 -202
- data/spec/helpers/taxons_helper_spec.rb +0 -43
- data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
- data/spec/lib/calculated_adjustments_spec.rb +0 -133
- data/spec/lib/i18n_spec.rb +0 -97
- data/spec/lib/search/base_spec.rb +0 -91
- data/spec/lib/search/variant_spec.rb +0 -115
- data/spec/lib/spree/app_configuration_spec.rb +0 -140
- data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
- data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
- data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
- data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
- data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
- data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
- data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
- data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
- data/spec/lib/spree/core/current_store_spec.rb +0 -33
- data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
- data/spec/lib/spree/core/importer/order_spec.rb +0 -484
- data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
- data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
- data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
- data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
- data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
- data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
- data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
- data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
- data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
- data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
- data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
- data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
- data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
- data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
- data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
- data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
- data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
- data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
- data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
- data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
- data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
- data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
- data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
- data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
- data/spec/lib/spree/core/validators/email_spec.rb +0 -53
- data/spec/lib/spree/core/version_spec.rb +0 -19
- data/spec/lib/spree/event/subscriber_spec.rb +0 -85
- data/spec/lib/spree/event_spec.rb +0 -130
- data/spec/lib/spree/localized_number_spec.rb +0 -45
- data/spec/lib/spree/migrations_spec.rb +0 -32
- data/spec/lib/spree/money_spec.rb +0 -298
- data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
- data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
- data/spec/lib/spree/promo/environment_spec.rb +0 -53
- data/spec/lib/tasks/dummy_task.rake +0 -12
- data/spec/lib/tasks/dummy_task_spec.rb +0 -30
- data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
- data/spec/mailers/carton_mailer_spec.rb +0 -44
- data/spec/mailers/order_mailer_spec.rb +0 -117
- data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
- data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
- data/spec/mailers/test_mailer_spec.rb +0 -13
- data/spec/models/spree/ability_spec.rb +0 -279
- data/spec/models/spree/address_spec.rb +0 -399
- data/spec/models/spree/adjustment_reason_spec.rb +0 -11
- data/spec/models/spree/adjustment_spec.rb +0 -339
- data/spec/models/spree/asset_spec.rb +0 -25
- data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
- data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
- data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
- data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
- data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
- data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
- data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
- data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
- data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
- data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
- data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
- data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
- data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
- data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
- data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
- data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
- data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
- data/spec/models/spree/calculator_spec.rb +0 -43
- data/spec/models/spree/carton_spec.rb +0 -145
- data/spec/models/spree/classification_spec.rb +0 -126
- data/spec/models/spree/concerns/display_money_spec.rb +0 -44
- data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
- data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
- data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
- data/spec/models/spree/country_spec.rb +0 -154
- data/spec/models/spree/credit_card_spec.rb +0 -373
- data/spec/models/spree/customer_return_spec.rb +0 -294
- data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
- data/spec/models/spree/exchange_spec.rb +0 -76
- data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
- data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
- data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
- data/spec/models/spree/gateway/bogus_simple.rb +0 -14
- data/spec/models/spree/gateway/bogus_spec.rb +0 -14
- data/spec/models/spree/gateway_spec.rb +0 -14
- data/spec/models/spree/image_spec.rb +0 -25
- data/spec/models/spree/inventory_unit_spec.rb +0 -309
- data/spec/models/spree/line_item_spec.rb +0 -240
- data/spec/models/spree/option_type_spec.rb +0 -16
- data/spec/models/spree/option_value_spec.rb +0 -52
- data/spec/models/spree/order/address_spec.rb +0 -52
- data/spec/models/spree/order/adjustments_spec.rb +0 -29
- data/spec/models/spree/order/callbacks_spec.rb +0 -44
- data/spec/models/spree/order/checkout_spec.rb +0 -740
- data/spec/models/spree/order/finalizing_spec.rb +0 -92
- data/spec/models/spree/order/number_generator_spec.rb +0 -47
- data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
- data/spec/models/spree/order/payment_spec.rb +0 -280
- data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
- data/spec/models/spree/order/state_machine_spec.rb +0 -122
- data/spec/models/spree/order/totals_spec.rb +0 -26
- data/spec/models/spree/order/validations_spec.rb +0 -17
- data/spec/models/spree/order_cancellations_spec.rb +0 -233
- data/spec/models/spree/order_capturing_spec.rb +0 -16
- data/spec/models/spree/order_contents_spec.rb +0 -362
- data/spec/models/spree/order_inventory_spec.rb +0 -285
- data/spec/models/spree/order_merger_spec.rb +0 -162
- data/spec/models/spree/order_mutex_spec.rb +0 -89
- data/spec/models/spree/order_promotion_spec.rb +0 -33
- data/spec/models/spree/order_shipping_spec.rb +0 -247
- data/spec/models/spree/order_spec.rb +0 -1687
- data/spec/models/spree/order_taxation_spec.rb +0 -128
- data/spec/models/spree/order_update_attributes_spec.rb +0 -49
- data/spec/models/spree/order_updater_spec.rb +0 -556
- data/spec/models/spree/payment/cancellation_spec.rb +0 -84
- data/spec/models/spree/payment_create_spec.rb +0 -195
- data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
- data/spec/models/spree/payment_method/check_spec.rb +0 -80
- data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
- data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
- data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
- data/spec/models/spree/payment_method_spec.rb +0 -408
- data/spec/models/spree/payment_spec.rb +0 -1270
- data/spec/models/spree/permission_sets/base_spec.rb +0 -14
- data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
- data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
- data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
- data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
- data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
- data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
- data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
- data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
- data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
- data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
- data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
- data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
- data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
- data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
- data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
- data/spec/models/spree/preference_spec.rb +0 -79
- data/spec/models/spree/preferences/configuration_spec.rb +0 -27
- data/spec/models/spree/preferences/preferable_spec.rb +0 -334
- data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
- data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
- data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
- data/spec/models/spree/preferences/store_spec.rb +0 -40
- data/spec/models/spree/price_spec.rb +0 -150
- data/spec/models/spree/product/scopes_spec.rb +0 -164
- data/spec/models/spree/product_duplicator_spec.rb +0 -92
- data/spec/models/spree/product_filter_spec.rb +0 -28
- data/spec/models/spree/product_property_spec.rb +0 -20
- data/spec/models/spree/product_spec.rb +0 -584
- data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
- data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
- data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
- data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
- data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
- data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
- data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
- data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
- data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
- data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
- data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
- data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
- data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
- data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
- data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
- data/spec/models/spree/promotion_action_spec.rb +0 -44
- data/spec/models/spree/promotion_category_spec.rb +0 -19
- data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
- data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
- data/spec/models/spree/promotion_code_spec.rb +0 -206
- data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
- data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
- data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
- data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
- data/spec/models/spree/promotion_rule_spec.rb +0 -34
- data/spec/models/spree/promotion_spec.rb +0 -945
- data/spec/models/spree/refund_spec.rb +0 -200
- data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
- data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
- data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
- data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
- data/spec/models/spree/reimbursement_spec.rb +0 -278
- data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
- data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
- data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
- data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
- data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
- data/spec/models/spree/return_authorization_spec.rb +0 -226
- data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
- data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
- data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
- data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
- data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
- data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
- data/spec/models/spree/return_item_spec.rb +0 -785
- data/spec/models/spree/returns_calculator_spec.rb +0 -16
- data/spec/models/spree/shipment_spec.rb +0 -914
- data/spec/models/spree/shipping_calculator_spec.rb +0 -45
- data/spec/models/spree/shipping_manifest_spec.rb +0 -110
- data/spec/models/spree/shipping_method_spec.rb +0 -292
- data/spec/models/spree/shipping_rate_spec.rb +0 -154
- data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
- data/spec/models/spree/state_spec.rb +0 -43
- data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
- data/spec/models/spree/stock/availability_spec.rb +0 -143
- data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
- data/spec/models/spree/stock/content_item_spec.rb +0 -70
- data/spec/models/spree/stock/differentiator_spec.rb +0 -41
- data/spec/models/spree/stock/estimator_spec.rb +0 -241
- data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
- data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
- data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
- data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
- data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
- data/spec/models/spree/stock/package_spec.rb +0 -182
- data/spec/models/spree/stock/quantifier_spec.rb +0 -113
- data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
- data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
- data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
- data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
- data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
- data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
- data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
- data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
- data/spec/models/spree/stock_item_spec.rb +0 -348
- data/spec/models/spree/stock_location_spec.rb +0 -288
- data/spec/models/spree/stock_movement_spec.rb +0 -58
- data/spec/models/spree/stock_quantities_spec.rb +0 -249
- data/spec/models/spree/store_credit_category_spec.rb +0 -19
- data/spec/models/spree/store_credit_event_spec.rb +0 -328
- data/spec/models/spree/store_credit_spec.rb +0 -900
- data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
- data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
- data/spec/models/spree/store_spec.rb +0 -156
- data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
- data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
- data/spec/models/spree/tax/tax_location_spec.rb +0 -79
- data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
- data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
- data/spec/models/spree/tax_category_spec.rb +0 -50
- data/spec/models/spree/tax_rate_spec.rb +0 -317
- data/spec/models/spree/taxon_spec.rb +0 -197
- data/spec/models/spree/taxonomy_spec.rb +0 -15
- data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
- data/spec/models/spree/unit_cancel_spec.rb +0 -126
- data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
- data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
- data/spec/models/spree/user_spec.rb +0 -247
- data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
- data/spec/models/spree/variant/price_selector_spec.rb +0 -90
- data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
- data/spec/models/spree/variant/scopes_spec.rb +0 -94
- data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
- data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
- data/spec/models/spree/variant_property_rule_spec.rb +0 -85
- data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
- data/spec/models/spree/variant_spec.rb +0 -862
- data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
- data/spec/models/spree/wallet_spec.rb +0 -155
- data/spec/models/spree/zone_spec.rb +0 -248
- data/spec/rails_helper.rb +0 -46
- data/spec/shared_examples/calculator_shared_examples.rb +0 -10
- data/spec/spec_helper.rb +0 -36
- data/spec/support/big_decimal.rb +0 -7
- data/spec/support/concerns/default_price.rb +0 -44
- data/spec/support/concerns/payment_source.rb +0 -66
- data/spec/support/concerns/working_factories.rb +0 -15
- data/spec/support/dummy_ability.rb +0 -7
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
|
-
RSpec.describe Spree::StoreCreditCategory, type: :model do
|
6
|
-
describe "#non_expiring?" do
|
7
|
-
let(:store_credit_category) { build(:store_credit_category, name: category_name) }
|
8
|
-
|
9
|
-
context "non-expiring type store credit" do
|
10
|
-
let(:category_name) { "Non-expiring" }
|
11
|
-
it { expect(store_credit_category).to be_non_expiring }
|
12
|
-
end
|
13
|
-
|
14
|
-
context "expiring type store credit" do
|
15
|
-
let(:category_name) { "Expiring" }
|
16
|
-
it { expect(store_credit_category).not_to be_non_expiring }
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,328 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
|
-
RSpec.describe Spree::StoreCreditEvent do
|
6
|
-
describe ".exposed_events" do
|
7
|
-
[
|
8
|
-
Spree::StoreCredit::ELIGIBLE_ACTION,
|
9
|
-
Spree::StoreCredit::AUTHORIZE_ACTION
|
10
|
-
].each do |action|
|
11
|
-
let(:action) { action }
|
12
|
-
it "excludes #{action} actions" do
|
13
|
-
event = create(:store_credit_event, action: action)
|
14
|
-
expect(described_class.exposed_events).not_to include event
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
[
|
19
|
-
Spree::StoreCredit::VOID_ACTION,
|
20
|
-
Spree::StoreCredit::CREDIT_ACTION,
|
21
|
-
Spree::StoreCredit::CAPTURE_ACTION,
|
22
|
-
Spree::StoreCredit::ALLOCATION_ACTION
|
23
|
-
].each do |action|
|
24
|
-
it "includes #{action} actions" do
|
25
|
-
event = create(:store_credit_event, action: action)
|
26
|
-
expect(described_class.exposed_events).to include event
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
it "excludes invalidated store credit events" do
|
31
|
-
invalidated_store_credit = create(:store_credit, invalidated_at: Time.current)
|
32
|
-
event = create(:store_credit_event, action: Spree::StoreCredit::VOID_ACTION, store_credit: invalidated_store_credit)
|
33
|
-
expect(described_class.exposed_events).not_to include event
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe "update store credit reason validation" do
|
38
|
-
subject { event.valid? }
|
39
|
-
|
40
|
-
context "adjustment event" do
|
41
|
-
context "has a store credit reason" do
|
42
|
-
let(:event) { build(:store_credit_adjustment_event) }
|
43
|
-
|
44
|
-
it "returns true" do
|
45
|
-
expect(subject).to eq true
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context "doesn't have a store credit reason" do
|
50
|
-
let(:event) { build(:store_credit_adjustment_event, store_credit_reason: nil) }
|
51
|
-
|
52
|
-
it "returns false" do
|
53
|
-
expect(subject).to eq false
|
54
|
-
end
|
55
|
-
|
56
|
-
it "adds an error message indicating the store credit reason is missing" do
|
57
|
-
subject
|
58
|
-
expect(event.errors.full_messages).to match ["Store credit reason can't be blank"]
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
context "invalidate event" do
|
64
|
-
context "has a store credit reason" do
|
65
|
-
let(:event) { build(:store_credit_invalidate_event) }
|
66
|
-
|
67
|
-
it "returns true" do
|
68
|
-
expect(subject).to eq true
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
context "doesn't have a store credit reason" do
|
73
|
-
let(:event) { build(:store_credit_invalidate_event, store_credit_reason: nil) }
|
74
|
-
|
75
|
-
it "returns false" do
|
76
|
-
expect(subject).to eq false
|
77
|
-
end
|
78
|
-
|
79
|
-
it "adds an error message indicating the store credit reason is missing" do
|
80
|
-
subject
|
81
|
-
expect(event.errors.full_messages).to match ["Store credit reason can't be blank"]
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
context "event doesn't require a store credit reason" do
|
87
|
-
let(:event) { build(:store_credit_auth_event) }
|
88
|
-
|
89
|
-
it "returns true" do
|
90
|
-
expect(subject).to eq true
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
describe "#capture_action?" do
|
96
|
-
subject { event.capture_action? }
|
97
|
-
|
98
|
-
context "for capture events" do
|
99
|
-
let(:event) { create(:store_credit_capture_event) }
|
100
|
-
|
101
|
-
it "returns true" do
|
102
|
-
expect(subject).to eq true
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
context "for non-capture events" do
|
107
|
-
let(:event) { create(:store_credit_auth_event) }
|
108
|
-
|
109
|
-
it "returns false" do
|
110
|
-
expect(subject).to eq false
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
describe "#authorization_action?" do
|
116
|
-
subject { event.authorization_action? }
|
117
|
-
|
118
|
-
context "for auth events" do
|
119
|
-
let(:event) { create(:store_credit_auth_event) }
|
120
|
-
|
121
|
-
it "returns true" do
|
122
|
-
expect(subject).to eq true
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
context "for non-auth events" do
|
127
|
-
let(:event) { create(:store_credit_capture_event) }
|
128
|
-
|
129
|
-
it "returns false" do
|
130
|
-
expect(subject).to eq false
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
describe "#action_requires_reason?" do
|
136
|
-
subject { event.action_requires_reason? }
|
137
|
-
|
138
|
-
context "for adjustment events" do
|
139
|
-
let(:event) { create(:store_credit_adjustment_event) }
|
140
|
-
|
141
|
-
it "returns true" do
|
142
|
-
expect(subject).to eq true
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
context "for invalidate events" do
|
147
|
-
let(:event) { create(:store_credit_invalidate_event) }
|
148
|
-
|
149
|
-
it "returns true" do
|
150
|
-
expect(subject).to eq true
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
context "for capture events" do
|
155
|
-
let(:event) { create(:store_credit_capture_event) }
|
156
|
-
|
157
|
-
it "returns false" do
|
158
|
-
expect(subject).to eq false
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
context "for authorize events" do
|
163
|
-
let(:event) { create(:store_credit_auth_event) }
|
164
|
-
|
165
|
-
it "returns false" do
|
166
|
-
expect(subject).to eq false
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
context "for allocation events" do
|
171
|
-
let(:event) { create(:store_credit_event, action: Spree::StoreCredit::ALLOCATION_ACTION) }
|
172
|
-
|
173
|
-
it "returns false" do
|
174
|
-
expect(subject).to eq false
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
context "for void events" do
|
179
|
-
let(:event) { create(:store_credit_event, action: Spree::StoreCredit::VOID_ACTION) }
|
180
|
-
|
181
|
-
it "returns false" do
|
182
|
-
expect(subject).to eq false
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
context "for credit events" do
|
187
|
-
let(:event) { create(:store_credit_event, action: Spree::StoreCredit::CREDIT_ACTION) }
|
188
|
-
|
189
|
-
it "returns false" do
|
190
|
-
expect(subject).to eq false
|
191
|
-
end
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
describe "#display_amount" do
|
196
|
-
let(:event_amount) { 120.0 }
|
197
|
-
|
198
|
-
subject { create(:store_credit_auth_event, amount: event_amount) }
|
199
|
-
|
200
|
-
it "returns a Spree::Money instance" do
|
201
|
-
expect(subject.display_amount).to be_instance_of(Spree::Money)
|
202
|
-
end
|
203
|
-
|
204
|
-
it "uses the events amount attribute" do
|
205
|
-
expect(subject.display_amount).to eq Spree::Money.new(event_amount, { currency: subject.currency })
|
206
|
-
end
|
207
|
-
end
|
208
|
-
|
209
|
-
describe "#display_user_total_amount" do
|
210
|
-
let(:user_total_amount) { 300.0 }
|
211
|
-
|
212
|
-
subject { create(:store_credit_auth_event, user_total_amount: user_total_amount) }
|
213
|
-
|
214
|
-
it "returns a Spree::Money instance" do
|
215
|
-
expect(subject.display_user_total_amount).to be_instance_of(Spree::Money)
|
216
|
-
end
|
217
|
-
|
218
|
-
it "uses the events user_total_amount attribute" do
|
219
|
-
expect(subject.display_user_total_amount).to eq Spree::Money.new(user_total_amount, { currency: subject.currency })
|
220
|
-
end
|
221
|
-
end
|
222
|
-
|
223
|
-
describe "#display_remaining_amount" do
|
224
|
-
let(:amount_remaining) { 300.0 }
|
225
|
-
|
226
|
-
subject { create(:store_credit_auth_event, amount_remaining: amount_remaining) }
|
227
|
-
|
228
|
-
it "returns a Spree::Money instance" do
|
229
|
-
expect(subject.display_remaining_amount).to be_instance_of(Spree::Money)
|
230
|
-
end
|
231
|
-
|
232
|
-
it "uses the events amount_remaining attribute" do
|
233
|
-
expect(subject.display_remaining_amount).to eq Spree::Money.new(amount_remaining, { currency: subject.currency })
|
234
|
-
end
|
235
|
-
end
|
236
|
-
|
237
|
-
describe "#display_event_date" do
|
238
|
-
let(:date) { Time.zone.parse("2014-06-01") }
|
239
|
-
|
240
|
-
subject { create(:store_credit_auth_event, created_at: date) }
|
241
|
-
|
242
|
-
it "returns the date the event was created with the format month/date/year" do
|
243
|
-
expect(subject.display_event_date).to eq "June 01, 2014"
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
describe "#display_action" do
|
248
|
-
subject { event.display_action }
|
249
|
-
|
250
|
-
context "capture event" do
|
251
|
-
let(:event) { create(:store_credit_capture_event) }
|
252
|
-
|
253
|
-
it "returns the action's display text" do
|
254
|
-
expect(subject).to eq "Used"
|
255
|
-
end
|
256
|
-
end
|
257
|
-
|
258
|
-
context "allocation event" do
|
259
|
-
let(:event) { create(:store_credit_event, action: Spree::StoreCredit::ALLOCATION_ACTION) }
|
260
|
-
|
261
|
-
it "returns the action's display text" do
|
262
|
-
expect(subject).to eq "Added"
|
263
|
-
end
|
264
|
-
end
|
265
|
-
|
266
|
-
context "void event" do
|
267
|
-
let(:event) { create(:store_credit_event, action: Spree::StoreCredit::VOID_ACTION) }
|
268
|
-
|
269
|
-
it "returns the action's display text" do
|
270
|
-
expect(subject).to eq "Credit"
|
271
|
-
end
|
272
|
-
end
|
273
|
-
|
274
|
-
context "credit event" do
|
275
|
-
let(:event) { create(:store_credit_event, action: Spree::StoreCredit::CREDIT_ACTION) }
|
276
|
-
|
277
|
-
it "returns the action's display text" do
|
278
|
-
expect(subject).to eq "Credit"
|
279
|
-
end
|
280
|
-
end
|
281
|
-
|
282
|
-
context "adjustment event" do
|
283
|
-
let(:event) { create(:store_credit_adjustment_event) }
|
284
|
-
|
285
|
-
it "returns the action's display text" do
|
286
|
-
expect(subject).to eq "Adjustment"
|
287
|
-
end
|
288
|
-
end
|
289
|
-
|
290
|
-
context "authorize event" do
|
291
|
-
let(:event) { create(:store_credit_auth_event) }
|
292
|
-
|
293
|
-
it "returns nil" do
|
294
|
-
expect(subject).to be_nil
|
295
|
-
end
|
296
|
-
end
|
297
|
-
|
298
|
-
context "eligible event" do
|
299
|
-
let(:event) { create(:store_credit_event, action: Spree::StoreCredit::ELIGIBLE_ACTION) }
|
300
|
-
|
301
|
-
it "returns nil" do
|
302
|
-
expect(subject).to be_nil
|
303
|
-
end
|
304
|
-
end
|
305
|
-
end
|
306
|
-
|
307
|
-
describe "#order" do
|
308
|
-
context "there is no associated payment with the event" do
|
309
|
-
subject { create(:store_credit_auth_event) }
|
310
|
-
|
311
|
-
it "returns nil" do
|
312
|
-
expect(subject.order).to be_nil
|
313
|
-
end
|
314
|
-
end
|
315
|
-
|
316
|
-
context "there is an associated payment with the event" do
|
317
|
-
let(:authorization_code) { "1-SC-TEST" }
|
318
|
-
let(:order) { create(:order) }
|
319
|
-
let!(:payment) { create(:store_credit_payment, order: order, response_code: authorization_code) }
|
320
|
-
|
321
|
-
subject { create(:store_credit_auth_event, action: Spree::StoreCredit::CAPTURE_ACTION, authorization_code: authorization_code) }
|
322
|
-
|
323
|
-
it "returns the order associated with the payment" do
|
324
|
-
expect(subject.order).to eq order
|
325
|
-
end
|
326
|
-
end
|
327
|
-
end
|
328
|
-
end
|
@@ -1,900 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
|
-
RSpec.describe Spree::StoreCredit do
|
6
|
-
include ActiveSupport::Testing::TimeHelpers
|
7
|
-
|
8
|
-
let(:currency) { "TEST" }
|
9
|
-
let(:store_credit) { build(:store_credit, store_credit_attrs) }
|
10
|
-
let(:store_credit_attrs) { {} }
|
11
|
-
|
12
|
-
describe "callbacks" do
|
13
|
-
subject { store_credit.save }
|
14
|
-
|
15
|
-
context "amount used is greater than zero" do
|
16
|
-
let(:store_credit) { create(:store_credit, amount: 100, amount_used: 1) }
|
17
|
-
|
18
|
-
describe "#discard" do
|
19
|
-
subject { store_credit.discard }
|
20
|
-
|
21
|
-
it 'can not delete the store credit' do
|
22
|
-
subject
|
23
|
-
expect(store_credit.reload).to eq store_credit
|
24
|
-
expect(store_credit.errors[:amount_used]).to include("is greater than zero. Can not delete store credit")
|
25
|
-
expect(store_credit).not_to be_discarded
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context "category is a non-expiring type" do
|
31
|
-
let!(:secondary_credit_type) { create(:secondary_credit_type) }
|
32
|
-
let(:store_credit) { build(:store_credit, credit_type: nil) }
|
33
|
-
|
34
|
-
before do
|
35
|
-
allow(store_credit.category).to receive(:non_expiring?).and_return(true)
|
36
|
-
end
|
37
|
-
|
38
|
-
it "sets the credit type to non-expiring" do
|
39
|
-
subject
|
40
|
-
expect(store_credit.credit_type.name).to eq secondary_credit_type.name
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context "category is an expiring type" do
|
45
|
-
before do
|
46
|
-
allow(store_credit.category).to receive(:non_expiring?).and_return(false)
|
47
|
-
end
|
48
|
-
|
49
|
-
it "sets the credit type to expiring" do
|
50
|
-
subject
|
51
|
-
expect(store_credit.credit_type.name).to eq "Expiring"
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
context "the type is set" do
|
56
|
-
let!(:secondary_credit_type) { create(:secondary_credit_type) }
|
57
|
-
let(:store_credit) { build(:store_credit, credit_type: secondary_credit_type) }
|
58
|
-
|
59
|
-
before do
|
60
|
-
allow(store_credit.category).to receive(:non_expiring?).and_return(false)
|
61
|
-
end
|
62
|
-
|
63
|
-
it "doesn't overwrite the type" do
|
64
|
-
expect{ subject }.to_not change{ store_credit.credit_type }
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
describe "validations" do
|
70
|
-
describe "used amount should not be greater than the credited amount" do
|
71
|
-
context "the used amount is defined" do
|
72
|
-
let(:invalid_store_credit) { build(:store_credit, amount: 100, amount_used: 150) }
|
73
|
-
|
74
|
-
it "should not be valid" do
|
75
|
-
expect(invalid_store_credit).not_to be_valid
|
76
|
-
end
|
77
|
-
|
78
|
-
it "should set the correct error message" do
|
79
|
-
invalid_store_credit.valid?
|
80
|
-
expect(invalid_store_credit.errors.full_messages).to include("Amount Used cannot be greater than the credited amount")
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
context "the used amount is not defined yet" do
|
85
|
-
let(:store_credit) { build(:store_credit, amount: 100) }
|
86
|
-
|
87
|
-
it "should be valid" do
|
88
|
-
expect(store_credit).to be_valid
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
describe "amount used less than or equal to amount" do
|
94
|
-
subject { build(:store_credit, amount_used: 101.0, amount: 100.0) }
|
95
|
-
|
96
|
-
it "is not valid" do
|
97
|
-
expect(subject).not_to be_valid
|
98
|
-
end
|
99
|
-
|
100
|
-
it "adds an error message about the invalid amount used" do
|
101
|
-
subject.valid?
|
102
|
-
expect(subject.errors[:amount_used]).to include("cannot be greater than the credited amount")
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
describe "amount authorized less than or equal to amount" do
|
107
|
-
subject { build(:store_credit, amount_authorized: 101.0, amount: 100.0) }
|
108
|
-
|
109
|
-
it "is not valid" do
|
110
|
-
expect(subject).not_to be_valid
|
111
|
-
end
|
112
|
-
|
113
|
-
it "adds an error message about the invalid authorized amount" do
|
114
|
-
subject.valid?
|
115
|
-
expect(subject.errors[:amount_authorized]).to include(" exceeds the available credit")
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
describe "editing category" do
|
120
|
-
let!(:store_credit) { create(:store_credit) }
|
121
|
-
let!(:test_category) { create(:store_credit_category, name: "Testing") }
|
122
|
-
|
123
|
-
subject { store_credit.update(category: test_category) }
|
124
|
-
|
125
|
-
it "returns false" do
|
126
|
-
expect(subject).to eq false
|
127
|
-
end
|
128
|
-
|
129
|
-
it "category doesn't change" do
|
130
|
-
expect { subject }.not_to change { store_credit.reload.category }
|
131
|
-
end
|
132
|
-
|
133
|
-
it "adds an error message about not being able to edit the category" do
|
134
|
-
subject
|
135
|
-
expect(store_credit.errors[:category]).to include("cannot be modified")
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
describe "#display_amount" do
|
141
|
-
it "returns a Spree::Money instance" do
|
142
|
-
expect(store_credit.display_amount).to be_instance_of(Spree::Money)
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
describe "#display_amount_used" do
|
147
|
-
it "returns a Spree::Money instance" do
|
148
|
-
expect(store_credit.display_amount_used).to be_instance_of(Spree::Money)
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
describe "#display_amount_authorized" do
|
153
|
-
it "returns a Spree::Money instance" do
|
154
|
-
expect(store_credit.display_amount_authorized).to be_instance_of(Spree::Money)
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
describe "#amount_remaining" do
|
159
|
-
context "invalidated" do
|
160
|
-
before { allow(store_credit).to receive(:invalidated?) { true } }
|
161
|
-
it { expect(store_credit.amount_remaining).to eq 0.0 }
|
162
|
-
end
|
163
|
-
|
164
|
-
context "the amount_used is not defined" do
|
165
|
-
context "the authorized amount is not defined" do
|
166
|
-
it "returns the credited amount" do
|
167
|
-
expect(store_credit.amount_remaining).to eq store_credit.amount
|
168
|
-
end
|
169
|
-
end
|
170
|
-
context "the authorized amount is defined" do
|
171
|
-
let(:authorized_amount) { 15.00 }
|
172
|
-
|
173
|
-
before { store_credit.update(amount_authorized: authorized_amount) }
|
174
|
-
|
175
|
-
it "subtracts the authorized amount from the credited amount" do
|
176
|
-
expect(store_credit.amount_remaining).to eq(store_credit.amount - authorized_amount)
|
177
|
-
end
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
context "the amount_used is defined" do
|
182
|
-
let(:amount_used) { 10.0 }
|
183
|
-
|
184
|
-
before { store_credit.update(amount_used: amount_used) }
|
185
|
-
|
186
|
-
context "the authorized amount is not defined" do
|
187
|
-
it "subtracts the amount used from the credited amount" do
|
188
|
-
expect(store_credit.amount_remaining).to eq(store_credit.amount - amount_used)
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
context "the authorized amount is defined" do
|
193
|
-
let(:authorized_amount) { 15.00 }
|
194
|
-
|
195
|
-
before { store_credit.update(amount_authorized: authorized_amount) }
|
196
|
-
|
197
|
-
it "subtracts the amount used and the authorized amount from the credited amount" do
|
198
|
-
expect(store_credit.amount_remaining).to eq(store_credit.amount - amount_used - authorized_amount)
|
199
|
-
end
|
200
|
-
end
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
describe "#authorize" do
|
205
|
-
context "amount is valid" do
|
206
|
-
let(:authorization_amount) { 1.0 }
|
207
|
-
let(:added_authorization_amount) { 3.0 }
|
208
|
-
let(:originator) { nil }
|
209
|
-
|
210
|
-
context "amount has not been authorized yet" do
|
211
|
-
before { store_credit.update(amount_authorized: authorization_amount) }
|
212
|
-
|
213
|
-
it "returns true" do
|
214
|
-
expect(store_credit.authorize(store_credit.amount - authorization_amount, store_credit.currency)).to be_truthy
|
215
|
-
end
|
216
|
-
|
217
|
-
it "adds the new amount to authorized amount" do
|
218
|
-
store_credit.authorize(added_authorization_amount, store_credit.currency)
|
219
|
-
expect(store_credit.reload.amount_authorized).to eq(authorization_amount + added_authorization_amount)
|
220
|
-
end
|
221
|
-
|
222
|
-
context "originator is present" do
|
223
|
-
let(:originator) { create(:user) } # won't actually be a user. just giving it a valid model here
|
224
|
-
|
225
|
-
subject { store_credit.authorize(added_authorization_amount, store_credit.currency, action_originator: originator) }
|
226
|
-
|
227
|
-
it "records the originator" do
|
228
|
-
expect { subject }.to change { Spree::StoreCreditEvent.count }.by(1)
|
229
|
-
expect(Spree::StoreCreditEvent.last.originator).to eq originator
|
230
|
-
end
|
231
|
-
end
|
232
|
-
end
|
233
|
-
|
234
|
-
context "authorization has already happened" do
|
235
|
-
let!(:auth_event) { create(:store_credit_auth_event, store_credit: store_credit) }
|
236
|
-
|
237
|
-
before { store_credit.update(amount_authorized: store_credit.amount) }
|
238
|
-
|
239
|
-
it "returns true" do
|
240
|
-
expect(store_credit.authorize(store_credit.amount, store_credit.currency, action_authorization_code: auth_event.authorization_code)).to be true
|
241
|
-
end
|
242
|
-
end
|
243
|
-
end
|
244
|
-
|
245
|
-
context "amount is invalid" do
|
246
|
-
it "returns false" do
|
247
|
-
expect(store_credit.authorize(store_credit.amount * 2, store_credit.currency)).to be false
|
248
|
-
end
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
describe "#validate_authorization" do
|
253
|
-
context "insufficient funds" do
|
254
|
-
subject { store_credit.validate_authorization(store_credit.amount * 2, store_credit.currency) }
|
255
|
-
|
256
|
-
it "returns false" do
|
257
|
-
expect(subject).to be false
|
258
|
-
end
|
259
|
-
|
260
|
-
it "adds an error to the model" do
|
261
|
-
subject
|
262
|
-
expect(store_credit.errors.full_messages).to include("Store credit amount remaining is not sufficient")
|
263
|
-
end
|
264
|
-
end
|
265
|
-
|
266
|
-
context "currency mismatch" do
|
267
|
-
subject { store_credit.validate_authorization(store_credit.amount, "EUR") }
|
268
|
-
|
269
|
-
it "returns false" do
|
270
|
-
expect(subject).to be false
|
271
|
-
end
|
272
|
-
|
273
|
-
it "adds an error to the model" do
|
274
|
-
subject
|
275
|
-
expect(store_credit.errors.full_messages).to include("Store credit currency does not match order currency")
|
276
|
-
end
|
277
|
-
end
|
278
|
-
|
279
|
-
context "valid authorization" do
|
280
|
-
subject { store_credit.validate_authorization(store_credit.amount, store_credit.currency) }
|
281
|
-
|
282
|
-
it "returns true" do
|
283
|
-
expect(subject).to be true
|
284
|
-
end
|
285
|
-
end
|
286
|
-
|
287
|
-
context 'troublesome floats' do
|
288
|
-
# 8.21.to_d < 8.21 => true
|
289
|
-
let(:store_credit_attrs) { { amount: 8.21 } }
|
290
|
-
|
291
|
-
subject { store_credit.validate_authorization(store_credit_attrs[:amount], store_credit.currency) }
|
292
|
-
|
293
|
-
it { is_expected.to be_truthy }
|
294
|
-
end
|
295
|
-
end
|
296
|
-
|
297
|
-
describe "#capture" do
|
298
|
-
let(:authorized_amount) { 10.00 }
|
299
|
-
let(:auth_code) { "23-SC-20140602164814476128" }
|
300
|
-
|
301
|
-
before do
|
302
|
-
@original_authed_amount = store_credit.amount_authorized
|
303
|
-
@auth_code = store_credit.authorize(authorized_amount, store_credit.currency)
|
304
|
-
end
|
305
|
-
|
306
|
-
context "insufficient funds" do
|
307
|
-
subject { store_credit.capture(authorized_amount * 2, @auth_code, store_credit.currency) }
|
308
|
-
|
309
|
-
it "returns false" do
|
310
|
-
expect(subject).to be false
|
311
|
-
end
|
312
|
-
|
313
|
-
it "adds an error to the model" do
|
314
|
-
subject
|
315
|
-
expect(store_credit.errors.full_messages).to include("Unable to capture more than authorized amount")
|
316
|
-
end
|
317
|
-
|
318
|
-
it "does not update the store credit model" do
|
319
|
-
expect { subject }.to_not change { store_credit }
|
320
|
-
end
|
321
|
-
end
|
322
|
-
|
323
|
-
context "currency mismatch" do
|
324
|
-
subject { store_credit.capture(authorized_amount, @auth_code, "EUR") }
|
325
|
-
|
326
|
-
it "returns false" do
|
327
|
-
expect(subject).to be false
|
328
|
-
end
|
329
|
-
|
330
|
-
it "adds an error to the model" do
|
331
|
-
subject
|
332
|
-
expect(store_credit.errors.full_messages).to include("Store credit currency does not match order currency")
|
333
|
-
end
|
334
|
-
|
335
|
-
it "does not update the store credit model" do
|
336
|
-
expect { subject }.to_not change { store_credit }
|
337
|
-
end
|
338
|
-
end
|
339
|
-
|
340
|
-
context "valid capture" do
|
341
|
-
let(:remaining_authorized_amount) { 1 }
|
342
|
-
let(:originator) { nil }
|
343
|
-
|
344
|
-
subject { store_credit.capture(authorized_amount - remaining_authorized_amount, @auth_code, store_credit.currency, action_originator: originator) }
|
345
|
-
|
346
|
-
it "returns true" do
|
347
|
-
expect(subject).to be_truthy
|
348
|
-
end
|
349
|
-
|
350
|
-
it "updates the authorized amount to the difference between the store credits total authed amount and the authorized amount for this event" do
|
351
|
-
subject
|
352
|
-
expect(store_credit.reload.amount_authorized).to eq(@original_authed_amount)
|
353
|
-
end
|
354
|
-
|
355
|
-
it "updates the used amount to the current used amount plus the captured amount" do
|
356
|
-
subject
|
357
|
-
expect(store_credit.reload.amount_used).to eq authorized_amount - remaining_authorized_amount
|
358
|
-
end
|
359
|
-
|
360
|
-
context "originator is present" do
|
361
|
-
let(:originator) { create(:user) } # won't actually be a user. just giving it a valid model here
|
362
|
-
|
363
|
-
it "records the originator" do
|
364
|
-
expect { subject }.to change { Spree::StoreCreditEvent.count }.by(1)
|
365
|
-
expect(Spree::StoreCreditEvent.last.originator).to eq originator
|
366
|
-
end
|
367
|
-
end
|
368
|
-
end
|
369
|
-
end
|
370
|
-
|
371
|
-
describe "#void" do
|
372
|
-
let(:auth_code) { "1-SC-20141111111111" }
|
373
|
-
let(:store_credit) { create(:store_credit, amount_used: 150.0) }
|
374
|
-
let(:originator) { nil }
|
375
|
-
|
376
|
-
subject do
|
377
|
-
store_credit.void(auth_code, action_originator: originator)
|
378
|
-
end
|
379
|
-
|
380
|
-
context "no event found for auth_code" do
|
381
|
-
it "returns false" do
|
382
|
-
expect(subject).to be false
|
383
|
-
end
|
384
|
-
|
385
|
-
it "adds an error to the model" do
|
386
|
-
subject
|
387
|
-
expect(store_credit.errors.full_messages).to include("Unable to void code: #{auth_code}")
|
388
|
-
end
|
389
|
-
end
|
390
|
-
|
391
|
-
context "capture event found for auth_code" do
|
392
|
-
let(:captured_amount) { 10.0 }
|
393
|
-
let!(:capture_event) {
|
394
|
-
create(:store_credit_auth_event,
|
395
|
-
action: Spree::StoreCredit::CAPTURE_ACTION,
|
396
|
-
authorization_code: auth_code,
|
397
|
-
amount: captured_amount,
|
398
|
-
store_credit: store_credit)
|
399
|
-
}
|
400
|
-
|
401
|
-
it "returns false" do
|
402
|
-
expect(subject).to be false
|
403
|
-
end
|
404
|
-
|
405
|
-
it "does not change the amount used on the store credit" do
|
406
|
-
expect { subject }.to_not change{ store_credit.amount_used.to_f }
|
407
|
-
end
|
408
|
-
end
|
409
|
-
|
410
|
-
context "auth event found for auth_code" do
|
411
|
-
let(:auth_event) { create(:store_credit_auth_event) }
|
412
|
-
|
413
|
-
let(:authorized_amount) { 10.0 }
|
414
|
-
let!(:auth_event) {
|
415
|
-
create(:store_credit_auth_event,
|
416
|
-
authorization_code: auth_code,
|
417
|
-
amount: authorized_amount,
|
418
|
-
store_credit: store_credit)
|
419
|
-
}
|
420
|
-
|
421
|
-
it "returns true" do
|
422
|
-
expect(subject).to be true
|
423
|
-
end
|
424
|
-
|
425
|
-
it "returns the authorized amount to the store credit" do
|
426
|
-
expect { subject }.to change{ store_credit.amount_authorized.to_f }.by(-authorized_amount)
|
427
|
-
end
|
428
|
-
|
429
|
-
context "originator is present" do
|
430
|
-
let(:originator) { create(:user) } # won't actually be a user. just giving it a valid model here
|
431
|
-
|
432
|
-
it "records the originator" do
|
433
|
-
expect { subject }.to change { Spree::StoreCreditEvent.count }.by(1)
|
434
|
-
expect(Spree::StoreCreditEvent.last.originator).to eq originator
|
435
|
-
end
|
436
|
-
end
|
437
|
-
end
|
438
|
-
end
|
439
|
-
|
440
|
-
describe "#credit" do
|
441
|
-
let(:event_auth_code) { "1-SC-20141111111111" }
|
442
|
-
let(:amount_used) { 10.0 }
|
443
|
-
let(:store_credit) { create(:store_credit, amount_used: amount_used) }
|
444
|
-
let!(:capture_event) {
|
445
|
-
create(:store_credit_auth_event,
|
446
|
-
action: Spree::StoreCredit::CAPTURE_ACTION,
|
447
|
-
authorization_code: event_auth_code,
|
448
|
-
amount: captured_amount,
|
449
|
-
store_credit: store_credit)
|
450
|
-
}
|
451
|
-
let(:originator) { nil }
|
452
|
-
|
453
|
-
subject { store_credit.credit(credit_amount, auth_code, currency, action_originator: originator) }
|
454
|
-
|
455
|
-
context "currency does not match" do
|
456
|
-
let(:currency) { "AUD" }
|
457
|
-
let(:credit_amount) { 5.0 }
|
458
|
-
let(:captured_amount) { 100.0 }
|
459
|
-
let(:auth_code) { event_auth_code }
|
460
|
-
|
461
|
-
it "returns false" do
|
462
|
-
expect(subject).to be false
|
463
|
-
end
|
464
|
-
|
465
|
-
it "adds an error message about the currency mismatch" do
|
466
|
-
subject
|
467
|
-
expect(store_credit.errors.full_messages).to include("Store credit currency does not match order currency")
|
468
|
-
end
|
469
|
-
end
|
470
|
-
|
471
|
-
context "unable to find capture event" do
|
472
|
-
let(:currency) { "USD" }
|
473
|
-
let(:credit_amount) { 5.0 }
|
474
|
-
let(:captured_amount) { 100.0 }
|
475
|
-
let(:auth_code) { "UNKNOWN_CODE" }
|
476
|
-
|
477
|
-
it "returns false" do
|
478
|
-
expect(subject).to be false
|
479
|
-
end
|
480
|
-
|
481
|
-
it "adds an error message about the currency mismatch" do
|
482
|
-
subject
|
483
|
-
expect(store_credit.errors.full_messages).to include("Unable to credit code: #{auth_code}")
|
484
|
-
end
|
485
|
-
end
|
486
|
-
|
487
|
-
context "amount is more than what is captured" do
|
488
|
-
let(:currency) { "USD" }
|
489
|
-
let(:credit_amount) { 100.0 }
|
490
|
-
let(:captured_amount) { 5.0 }
|
491
|
-
let(:auth_code) { event_auth_code }
|
492
|
-
|
493
|
-
it "returns false" do
|
494
|
-
expect(subject).to be false
|
495
|
-
end
|
496
|
-
|
497
|
-
it "adds an error message about the currency mismatch" do
|
498
|
-
subject
|
499
|
-
expect(store_credit.errors.full_messages).to include("Unable to credit code: #{auth_code}")
|
500
|
-
end
|
501
|
-
end
|
502
|
-
|
503
|
-
context "amount is successfully credited" do
|
504
|
-
let(:currency) { "USD" }
|
505
|
-
let(:credit_amount) { 5.0 }
|
506
|
-
let(:captured_amount) { 100.0 }
|
507
|
-
let(:auth_code) { event_auth_code }
|
508
|
-
|
509
|
-
context "credit_to_new_allocation is set" do
|
510
|
-
before { stub_spree_preferences(credit_to_new_allocation: true) }
|
511
|
-
|
512
|
-
it "returns true" do
|
513
|
-
expect(subject).to be true
|
514
|
-
end
|
515
|
-
|
516
|
-
it "creates a new store credit record" do
|
517
|
-
expect { subject }.to change { Spree::StoreCredit.count }.by(1)
|
518
|
-
end
|
519
|
-
|
520
|
-
it "does not create a new store credit event on the parent store credit" do
|
521
|
-
expect { subject }.to_not change { store_credit.store_credit_events.count }
|
522
|
-
end
|
523
|
-
|
524
|
-
context "credits the passed amount to a new store credit record" do
|
525
|
-
before do
|
526
|
-
subject
|
527
|
-
@new_store_credit = Spree::StoreCredit.last
|
528
|
-
end
|
529
|
-
|
530
|
-
it "does not set the amount used on the originating store credit" do
|
531
|
-
expect(store_credit.reload.amount_used).to eq amount_used
|
532
|
-
end
|
533
|
-
|
534
|
-
it "sets the correct amount on the new store credit" do
|
535
|
-
expect(@new_store_credit.amount).to eq credit_amount
|
536
|
-
end
|
537
|
-
|
538
|
-
[:user_id, :category_id, :created_by_id, :currency, :type_id].each do |attr|
|
539
|
-
it "sets attribute #{attr} inherited from the originating store credit" do
|
540
|
-
expect(@new_store_credit.send(attr)).to eq store_credit.send(attr)
|
541
|
-
end
|
542
|
-
end
|
543
|
-
|
544
|
-
it "sets a memo" do
|
545
|
-
expect(@new_store_credit.memo).to eq "This is a credit from store credit ID #{store_credit.id}"
|
546
|
-
end
|
547
|
-
end
|
548
|
-
|
549
|
-
context "originator is present" do
|
550
|
-
let(:originator) { create(:user) } # won't actually be a user. just giving it a valid model here
|
551
|
-
|
552
|
-
it "records the originator" do
|
553
|
-
expect { subject }.to change { Spree::StoreCreditEvent.count }.by(1)
|
554
|
-
expect(Spree::StoreCreditEvent.last.originator).to eq originator
|
555
|
-
end
|
556
|
-
end
|
557
|
-
end
|
558
|
-
|
559
|
-
context "credit_to_new_allocation is not set" do
|
560
|
-
it "returns true" do
|
561
|
-
expect(subject).to be true
|
562
|
-
end
|
563
|
-
|
564
|
-
it "credits the passed amount to the store credit amount used" do
|
565
|
-
subject
|
566
|
-
expect(store_credit.reload.amount_used).to eq(amount_used - credit_amount)
|
567
|
-
end
|
568
|
-
|
569
|
-
it "creates a new store credit event" do
|
570
|
-
expect { subject }.to change { store_credit.store_credit_events.count }.by(1)
|
571
|
-
end
|
572
|
-
end
|
573
|
-
end
|
574
|
-
end
|
575
|
-
|
576
|
-
describe "#amount_used" do
|
577
|
-
context "amount used is not defined" do
|
578
|
-
subject { Spree::StoreCredit.new }
|
579
|
-
|
580
|
-
it "returns zero" do
|
581
|
-
expect(subject.amount_used).to be_zero
|
582
|
-
end
|
583
|
-
end
|
584
|
-
|
585
|
-
context "amount used is defined" do
|
586
|
-
let(:amount_used) { 100.0 }
|
587
|
-
|
588
|
-
subject { create(:store_credit, amount_used: amount_used) }
|
589
|
-
|
590
|
-
it "returns the attribute value" do
|
591
|
-
expect(subject.amount_used).to eq amount_used
|
592
|
-
end
|
593
|
-
end
|
594
|
-
end
|
595
|
-
|
596
|
-
describe "#amount_authorized" do
|
597
|
-
context "amount authorized is not defined" do
|
598
|
-
subject { Spree::StoreCredit.new }
|
599
|
-
|
600
|
-
it "returns zero" do
|
601
|
-
expect(subject.amount_authorized).to be_zero
|
602
|
-
end
|
603
|
-
end
|
604
|
-
|
605
|
-
context "amount authorized is defined" do
|
606
|
-
let(:amount_authorized) { 100.0 }
|
607
|
-
|
608
|
-
subject { create(:store_credit, amount_authorized: amount_authorized) }
|
609
|
-
|
610
|
-
it "returns the attribute value" do
|
611
|
-
expect(subject.amount_authorized).to eq amount_authorized
|
612
|
-
end
|
613
|
-
end
|
614
|
-
end
|
615
|
-
|
616
|
-
describe "#can_capture?" do
|
617
|
-
let(:store_credit) { create(:store_credit) }
|
618
|
-
let(:payment) { create(:payment, state: payment_state) }
|
619
|
-
|
620
|
-
subject { store_credit.can_capture?(payment) }
|
621
|
-
|
622
|
-
context "pending payment" do
|
623
|
-
let(:payment_state) { 'pending' }
|
624
|
-
|
625
|
-
it "returns true" do
|
626
|
-
expect(subject).to be true
|
627
|
-
end
|
628
|
-
end
|
629
|
-
|
630
|
-
context "checkout payment" do
|
631
|
-
let(:payment_state) { 'checkout' }
|
632
|
-
|
633
|
-
it "returns true" do
|
634
|
-
expect(subject).to be true
|
635
|
-
end
|
636
|
-
end
|
637
|
-
|
638
|
-
context "void payment" do
|
639
|
-
let(:payment_state) { Spree::StoreCredit::VOID_ACTION }
|
640
|
-
|
641
|
-
it "returns false" do
|
642
|
-
expect(subject).to be false
|
643
|
-
end
|
644
|
-
end
|
645
|
-
|
646
|
-
context "invalid payment" do
|
647
|
-
let(:payment_state) { 'invalid' }
|
648
|
-
|
649
|
-
it "returns false" do
|
650
|
-
expect(subject).to be false
|
651
|
-
end
|
652
|
-
end
|
653
|
-
|
654
|
-
context "complete payment" do
|
655
|
-
let(:payment_state) { 'completed' }
|
656
|
-
|
657
|
-
it "returns false" do
|
658
|
-
expect(subject).to be false
|
659
|
-
end
|
660
|
-
end
|
661
|
-
end
|
662
|
-
|
663
|
-
describe "#can_void?" do
|
664
|
-
let(:store_credit) { create(:store_credit) }
|
665
|
-
let(:payment) { create(:payment, state: payment_state) }
|
666
|
-
|
667
|
-
subject { store_credit.can_void?(payment) }
|
668
|
-
|
669
|
-
context "pending payment" do
|
670
|
-
let(:payment_state) { 'pending' }
|
671
|
-
|
672
|
-
it "returns true" do
|
673
|
-
expect(subject).to be true
|
674
|
-
end
|
675
|
-
end
|
676
|
-
|
677
|
-
context "checkout payment" do
|
678
|
-
let(:payment_state) { 'checkout' }
|
679
|
-
|
680
|
-
it "returns false" do
|
681
|
-
expect(subject).to be false
|
682
|
-
end
|
683
|
-
end
|
684
|
-
|
685
|
-
context "void payment" do
|
686
|
-
let(:payment_state) { Spree::StoreCredit::VOID_ACTION }
|
687
|
-
|
688
|
-
it "returns false" do
|
689
|
-
expect(subject).to be false
|
690
|
-
end
|
691
|
-
end
|
692
|
-
|
693
|
-
context "invalid payment" do
|
694
|
-
let(:payment_state) { 'invalid' }
|
695
|
-
|
696
|
-
it "returns false" do
|
697
|
-
expect(subject).to be false
|
698
|
-
end
|
699
|
-
end
|
700
|
-
|
701
|
-
context "complete payment" do
|
702
|
-
let(:payment_state) { 'completed' }
|
703
|
-
|
704
|
-
it "returns false" do
|
705
|
-
expect(subject).to be false
|
706
|
-
end
|
707
|
-
end
|
708
|
-
end
|
709
|
-
|
710
|
-
describe "#can_credit?" do
|
711
|
-
let(:store_credit) { create(:store_credit) }
|
712
|
-
let(:payment) { create(:payment, state: payment_state) }
|
713
|
-
|
714
|
-
subject { store_credit.can_credit?(payment) }
|
715
|
-
|
716
|
-
context "payment is not completed" do
|
717
|
-
let(:payment_state) { "pending" }
|
718
|
-
|
719
|
-
it "returns false" do
|
720
|
-
expect(subject).to be false
|
721
|
-
end
|
722
|
-
end
|
723
|
-
|
724
|
-
context "payment is completed" do
|
725
|
-
let(:payment_state) { "completed" }
|
726
|
-
|
727
|
-
context "credit is owed on the order" do
|
728
|
-
before { allow(payment.order).to receive_messages(payment_state: 'credit_owed') }
|
729
|
-
|
730
|
-
context "payment doesn't have allowed credit" do
|
731
|
-
before { allow(payment).to receive_messages(credit_allowed: 0.0) }
|
732
|
-
|
733
|
-
it "returns false" do
|
734
|
-
expect(subject).to be false
|
735
|
-
end
|
736
|
-
end
|
737
|
-
|
738
|
-
context "payment has allowed credit" do
|
739
|
-
before { allow(payment).to receive_messages(credit_allowed: 5.0) }
|
740
|
-
|
741
|
-
it "returns true" do
|
742
|
-
expect(subject).to be true
|
743
|
-
end
|
744
|
-
end
|
745
|
-
end
|
746
|
-
end
|
747
|
-
|
748
|
-
describe "#store_event" do
|
749
|
-
context "create" do
|
750
|
-
context "user has one store credit" do
|
751
|
-
let(:store_credit_amount) { 100.0 }
|
752
|
-
|
753
|
-
subject { create(:store_credit, amount: store_credit_amount) }
|
754
|
-
|
755
|
-
it "creates a store credit event" do
|
756
|
-
expect { subject }.to change { Spree::StoreCreditEvent.count }.by(1)
|
757
|
-
end
|
758
|
-
|
759
|
-
it "makes the store credit event an allocation event" do
|
760
|
-
expect(subject.store_credit_events.first.action).to eq Spree::StoreCredit::ALLOCATION_ACTION
|
761
|
-
end
|
762
|
-
|
763
|
-
it "saves the user's total store credit in the event" do
|
764
|
-
expect(subject.store_credit_events.first.user_total_amount).to eq store_credit_amount
|
765
|
-
end
|
766
|
-
|
767
|
-
it "saves the user's unused store credit in the event" do
|
768
|
-
expect(subject.store_credit_events.first.amount_remaining).to eq store_credit_amount
|
769
|
-
end
|
770
|
-
end
|
771
|
-
|
772
|
-
context "user has multiple store credits" do
|
773
|
-
let(:store_credit_amount) { 100.0 }
|
774
|
-
let(:additional_store_credit_amount) { 200.0 }
|
775
|
-
let(:user) { create(:user) }
|
776
|
-
|
777
|
-
let!(:store_credits) do
|
778
|
-
[
|
779
|
-
create(:store_credit, user: user, amount: store_credit_amount),
|
780
|
-
create(:store_credit, user: user.reload, amount: additional_store_credit_amount)
|
781
|
-
]
|
782
|
-
end
|
783
|
-
|
784
|
-
subject { store_credits.flat_map(&:store_credit_events) }
|
785
|
-
|
786
|
-
it "saves the user's total store credit in the event" do
|
787
|
-
expect(subject.first.user_total_amount).to eq store_credit_amount
|
788
|
-
expect(subject.last.user_total_amount).to eq(store_credit_amount + additional_store_credit_amount)
|
789
|
-
end
|
790
|
-
|
791
|
-
it "saves the user's unused store credit in the event" do
|
792
|
-
expect(subject.first.amount_remaining).to eq store_credit_amount
|
793
|
-
expect(subject.last.amount_remaining).to eq additional_store_credit_amount
|
794
|
-
end
|
795
|
-
end
|
796
|
-
|
797
|
-
context "an action is specified" do
|
798
|
-
it "creates an event with the set action" do
|
799
|
-
store_credit = build(:store_credit)
|
800
|
-
store_credit.action = Spree::StoreCredit::VOID_ACTION
|
801
|
-
store_credit.action_authorization_code = "1-SC-TEST"
|
802
|
-
|
803
|
-
expect { store_credit.save! }.to change { Spree::StoreCreditEvent.where(action: Spree::StoreCredit::VOID_ACTION).count }.by(1)
|
804
|
-
end
|
805
|
-
end
|
806
|
-
end
|
807
|
-
end
|
808
|
-
end
|
809
|
-
|
810
|
-
describe "#update_amount" do
|
811
|
-
let(:invalidation_user) { create(:user) }
|
812
|
-
let(:invalidation_reason) { create(:store_credit_reason) }
|
813
|
-
|
814
|
-
subject { store_credit.update_amount(amount, invalidation_reason, invalidation_user) }
|
815
|
-
|
816
|
-
context "amount is valid" do
|
817
|
-
let(:amount) { 10.0 }
|
818
|
-
|
819
|
-
before { store_credit.update!(amount: 30.0) }
|
820
|
-
|
821
|
-
it "returns true" do
|
822
|
-
expect(subject).to eq true
|
823
|
-
end
|
824
|
-
|
825
|
-
it "creates an adjustment store credit event" do
|
826
|
-
expect { subject }.to change { store_credit.store_credit_events.where(action: Spree::StoreCredit::ADJUSTMENT_ACTION).count }.from(0).to(1)
|
827
|
-
end
|
828
|
-
|
829
|
-
it "sets the adjustment amount on the store credit event correctly" do
|
830
|
-
subject
|
831
|
-
expect(store_credit.store_credit_events.find_by(action: Spree::StoreCredit::ADJUSTMENT_ACTION).amount).to eq(-20)
|
832
|
-
end
|
833
|
-
|
834
|
-
it "sets the originator on the store credit event correctly" do
|
835
|
-
subject
|
836
|
-
expect(store_credit.store_credit_events.find_by(action: Spree::StoreCredit::ADJUSTMENT_ACTION).originator).to eq invalidation_user
|
837
|
-
end
|
838
|
-
end
|
839
|
-
|
840
|
-
context "amount is invalid" do
|
841
|
-
let(:amount) { -10.0 }
|
842
|
-
|
843
|
-
it "returns false" do
|
844
|
-
expect(subject).to eq false
|
845
|
-
end
|
846
|
-
|
847
|
-
it "doesn't create an adjustment store credit event" do
|
848
|
-
expect { subject }.to_not change { store_credit.store_credit_events.where(action: Spree::StoreCredit::ADJUSTMENT_ACTION).count }
|
849
|
-
end
|
850
|
-
end
|
851
|
-
end
|
852
|
-
|
853
|
-
describe "#invalidate" do
|
854
|
-
let(:invalidation_user) { create(:user) }
|
855
|
-
let(:invalidation_reason) { create(:store_credit_reason) }
|
856
|
-
|
857
|
-
before do
|
858
|
-
store_credit.save!
|
859
|
-
end
|
860
|
-
|
861
|
-
subject { store_credit.invalidate(invalidation_reason, invalidation_user) }
|
862
|
-
|
863
|
-
it "sets the invalidated_at field to the current time" do
|
864
|
-
invalidated_at = 2.minutes.from_now
|
865
|
-
travel_to(invalidated_at) do
|
866
|
-
subject
|
867
|
-
expect(store_credit.invalidated_at).to be_within(1.second).of invalidated_at
|
868
|
-
end
|
869
|
-
end
|
870
|
-
|
871
|
-
context "there is an uncaptured authorization" do
|
872
|
-
before { store_credit.authorize(5.0, "USD") }
|
873
|
-
it "prevents invalidation" do
|
874
|
-
expect { subject }.to_not change { store_credit.reload.invalidated_at }
|
875
|
-
expect(store_credit.errors[:invalidated_at].join).to match /uncaptured authorization/
|
876
|
-
end
|
877
|
-
end
|
878
|
-
|
879
|
-
context "there is a captured authorization" do
|
880
|
-
before do
|
881
|
-
auth_code = store_credit.authorize(5.0, "USD")
|
882
|
-
store_credit.capture(5.0, auth_code, "USD")
|
883
|
-
end
|
884
|
-
|
885
|
-
it "can invalidate the rest of the store credit" do
|
886
|
-
expect { subject }.to change { store_credit.reload.invalidated_at }
|
887
|
-
expect(store_credit.errors).to be_blank
|
888
|
-
end
|
889
|
-
|
890
|
-
it "creates a store credit event for the invalidation" do
|
891
|
-
expect { subject }.to change { store_credit.store_credit_events.where(action: Spree::StoreCredit::INVALIDATE_ACTION).count }.from(0).to(1)
|
892
|
-
end
|
893
|
-
|
894
|
-
it "assigns the originator as the user that is performing the invalidation" do
|
895
|
-
subject
|
896
|
-
expect(store_credit.store_credit_events.find_by(action: Spree::StoreCredit::INVALIDATE_ACTION).originator).to eq invalidation_user
|
897
|
-
end
|
898
|
-
end
|
899
|
-
end
|
900
|
-
end
|