solidus_core 1.1.4 → 1.2.0.beta1
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.
- checksums.yaml +4 -4
- data/app/assets/images/logo/solidus_logo.png +0 -0
- data/app/helpers/spree/base_helper.rb +2 -3
- data/app/models/concerns/spree/adjustment_source.rb +1 -1
- data/app/models/concerns/spree/default_price.rb +3 -1
- data/app/models/concerns/spree/named_type.rb +1 -1
- data/app/models/concerns/spree/user_methods.rb +10 -0
- data/app/models/spree/adjustment.rb +1 -1
- data/app/models/spree/adjustment_reason.rb +2 -4
- data/app/models/spree/app_configuration.rb +36 -0
- data/app/models/spree/base.rb +10 -1
- data/app/models/spree/calculator/tiered_percent.rb +2 -1
- data/app/models/spree/classification.rb +1 -1
- data/app/models/spree/country.rb +3 -3
- data/app/models/spree/credit_card.rb +2 -2
- data/app/models/spree/customer_return.rb +3 -4
- data/app/models/spree/inventory_unit.rb +13 -24
- data/app/models/spree/item_adjustments.rb +5 -5
- data/app/models/spree/line_item.rb +6 -15
- data/app/models/spree/log_entry.rb +1 -1
- data/app/models/spree/option_type.rb +4 -2
- data/app/models/spree/option_type_prototype.rb +6 -0
- data/app/models/spree/option_value.rb +1 -1
- data/app/models/spree/order.rb +18 -63
- data/app/models/spree/order/checkout.rb +4 -2
- data/app/models/spree/order_cancellations.rb +52 -1
- data/app/models/spree/order_contents.rb +1 -1
- data/app/models/spree/order_merger.rb +143 -0
- data/app/models/spree/order_shipping.rb +3 -3
- data/app/models/spree/order_update_attributes.rb +42 -0
- data/app/models/spree/order_updater.rb +1 -1
- data/app/models/spree/payment.rb +16 -10
- data/app/models/spree/payment_create.rb +68 -0
- data/app/models/spree/payment_method.rb +0 -1
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/price.rb +1 -8
- data/app/models/spree/product.rb +9 -44
- data/app/models/spree/product/scopes.rb +9 -7
- data/app/models/spree/promotion/rules/nth_order.rb +1 -1
- data/app/models/spree/promotion/rules/taxon.rb +2 -1
- data/app/models/spree/promotion_chooser.rb +1 -0
- data/app/models/spree/promotion_code.rb +1 -1
- data/app/models/spree/promotion_rule_taxon.rb +6 -0
- data/app/models/spree/property.rb +2 -1
- data/app/models/spree/property_prototype.rb +6 -0
- data/app/models/spree/prototype.rb +6 -2
- data/app/models/spree/reimbursement.rb +10 -0
- data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
- data/app/models/spree/return_reason.rb +1 -7
- data/app/models/spree/role_user.rb +3 -5
- data/app/models/spree/shipment.rb +6 -11
- data/app/models/spree/shipping_method.rb +1 -7
- data/app/models/spree/shipping_rate.rb +3 -14
- data/app/models/spree/stock/coordinator.rb +48 -4
- data/app/models/spree/stock/estimator.rb +3 -6
- data/app/models/spree/stock/packer.rb +18 -2
- data/app/models/spree/stock/shipping_rate_selector.rb +16 -0
- data/app/models/spree/stock/shipping_rate_sorter.rb +16 -0
- data/app/models/spree/stock_item.rb +19 -15
- data/app/models/spree/stock_location.rb +2 -12
- data/app/models/spree/stock_transfer.rb +3 -3
- data/app/models/spree/store_credit.rb +2 -2
- data/app/models/spree/tax_category.rb +3 -2
- data/app/models/spree/tax_rate.rb +7 -14
- data/app/models/spree/taxon.rb +4 -1
- data/app/models/spree/taxonomy.rb +1 -1
- data/app/models/spree/transfer_item.rb +2 -2
- data/app/models/spree/unit_cancel.rb +2 -0
- data/app/models/spree/variant.rb +9 -14
- data/app/models/spree/zone.rb +6 -0
- data/app/models/spree/zone_member.rb +1 -4
- data/app/views/spree/order_mailer/cancel_email.text.erb +0 -0
- data/config/locales/en.yml +7 -5
- data/db/default/spree/countries.rb +1 -1
- data/db/default/spree/zones.rb +5 -11
- data/db/migrate/20130213191427_create_default_stock.rb +1 -1
- data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +1 -1
- data/db/migrate/20140309033438_create_store_from_preferences.rb +5 -2
- data/db/migrate/20141009204607_add_store_id_to_orders.rb +6 -2
- data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +5 -0
- data/db/migrate/20141217215630_update_product_slug_index.rb +6 -0
- data/db/migrate/20150225205344_move_promotion_code_to_promotion_code_value.rb +2 -2
- data/db/migrate/20150609093816_increase_scale_on_pre_tax_amounts.rb +10 -0
- data/db/migrate/20151117063249_convert_habtm_to_hmt_for_properties_prototypes.rb +17 -0
- data/db/migrate/20151124062500_convert_habtm_to_hmt_for_option_type_prototypes.rb +17 -0
- data/db/migrate/20151126063028_convert_habtm_to_hmt_for_taxons_promotion_rules.rb +15 -0
- data/db/migrate/20151219020209_add_stock_item_unique_index.rb +9 -0
- data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
- data/lib/generators/spree/dummy/templates/rails/database.yml +1 -1
- data/lib/generators/spree/install/templates/config/initializers/spree.rb +25 -1
- data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +3 -0
- data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +3 -0
- data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/backend/all.css +3 -0
- data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +3 -0
- data/lib/spree/core/controller_helpers/common.rb +1 -1
- data/lib/spree/core/controller_helpers/order.rb +1 -1
- data/lib/spree/core/controller_helpers/payment_parameters.rb +104 -5
- data/lib/spree/core/engine.rb +3 -2
- data/lib/spree/core/stock_configuration.rb +11 -0
- data/lib/spree/core/unreturned_item_charger.rb +4 -4
- data/lib/spree/core/version.rb +9 -1
- data/lib/spree/permission_sets/restricted_stock_transfer_management.rb +15 -24
- data/lib/spree/permitted_attributes.rb +3 -1
- data/lib/spree/testing_support/capybara_ext.rb +14 -40
- data/lib/spree/testing_support/factories.rb +0 -15
- data/lib/spree/testing_support/factories/address_factory.rb +3 -0
- data/lib/spree/testing_support/factories/adjustment_factory.rb +9 -1
- data/lib/spree/testing_support/factories/carton_factory.rb +4 -1
- data/lib/spree/testing_support/factories/customer_return_factory.rb +4 -0
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +5 -0
- data/lib/spree/testing_support/factories/line_item_factory.rb +3 -0
- data/lib/spree/testing_support/factories/option_type_factory.rb +6 -0
- data/lib/spree/testing_support/factories/{options_factory.rb → option_value_factory.rb} +0 -5
- data/lib/spree/testing_support/factories/order_factory.rb +13 -3
- data/lib/spree/testing_support/factories/order_promotion_factory.rb +3 -0
- data/lib/spree/testing_support/factories/payment_factory.rb +13 -5
- data/lib/spree/testing_support/factories/price_factory.rb +2 -0
- data/lib/spree/testing_support/factories/product_factory.rb +7 -1
- data/lib/spree/testing_support/factories/product_option_type_factory.rb +3 -0
- data/lib/spree/testing_support/factories/product_property_factory.rb +3 -0
- data/lib/spree/testing_support/factories/promotion_code_factory.rb +3 -0
- data/lib/spree/testing_support/factories/promotion_factory.rb +3 -0
- data/lib/spree/testing_support/factories/prototype_factory.rb +2 -0
- data/lib/spree/testing_support/factories/refund_factory.rb +10 -5
- data/lib/spree/testing_support/factories/refund_reason_factory.rb +5 -0
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +2 -0
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +4 -4
- data/lib/spree/testing_support/factories/return_item_factory.rb +4 -0
- data/lib/spree/testing_support/factories/return_reason_factory.rb +5 -0
- data/lib/spree/testing_support/factories/shipment_factory.rb +6 -1
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +22 -10
- data/lib/spree/testing_support/factories/shipping_rate_factory.rb +9 -0
- data/lib/spree/testing_support/factories/state_factory.rb +2 -0
- data/lib/spree/testing_support/factories/stock_item_factory.rb +4 -1
- data/lib/spree/testing_support/factories/stock_location_factory.rb +8 -0
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +2 -0
- data/lib/spree/testing_support/factories/{stock_factory.rb → stock_package_factory.rb} +5 -10
- data/lib/spree/testing_support/factories/stock_packer_factory.rb +13 -0
- data/lib/spree/testing_support/factories/stock_transfer_factory.rb +2 -2
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +4 -1
- data/lib/spree/testing_support/factories/store_credit_factory.rb +10 -6
- data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -0
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +4 -0
- data/lib/spree/testing_support/factories/taxon_factory.rb +2 -0
- data/lib/spree/testing_support/factories/user_factory.rb +6 -2
- data/lib/spree/testing_support/factories/variant_factory.rb +5 -0
- data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +3 -0
- data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +4 -0
- data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +3 -0
- data/lib/spree/testing_support/factories/zone_factory.rb +6 -0
- data/lib/spree/testing_support/sequences.rb +9 -0
- data/lib/tasks/exchanges.rake +4 -3
- data/lib/tasks/migrations/copy_shipped_shipments_to_cartons.rake +2 -2
- data/solidus_core.gemspec +4 -5
- data/spec/helpers/base_helper_spec.rb +6 -6
- data/spec/helpers/order_helper_spec.rb +1 -1
- data/spec/helpers/products_helper_spec.rb +2 -2
- data/spec/helpers/taxons_helper_spec.rb +1 -1
- data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +107 -7
- data/spec/lib/spree/core/importer/order_spec.rb +1 -1
- data/spec/lib/spree/core/stock_configuration_spec.rb +16 -0
- data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +24 -0
- data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +18 -0
- data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +42 -0
- data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +28 -0
- data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +49 -0
- data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +24 -0
- data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +30 -0
- data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +30 -0
- data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +30 -0
- data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/prototype_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +18 -0
- data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +18 -0
- data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +28 -0
- data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +24 -0
- data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +26 -0
- data/spec/lib/spree/core/testing_support/factories/stock_packer_factory_spec.rb +16 -0
- data/spec/lib/spree/core/testing_support/factories/stock_transfer_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +42 -0
- data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +18 -0
- data/spec/lib/spree/core/testing_support/factories/store_credit_update_reason_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/tracker_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +22 -0
- data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +36 -0
- data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +18 -0
- data/spec/lib/spree/core/unreturned_item_charger_spec.rb +1 -1
- data/spec/lib/spree/core/version_spec.rb +17 -0
- data/spec/lib/spree/money_spec.rb +1 -1
- data/spec/mailers/carton_mailer_spec.rb +1 -1
- data/spec/mailers/order_mailer_spec.rb +1 -1
- data/spec/mailers/reimbursement_mailer_spec.rb +1 -3
- data/spec/mailers/test_mailer_spec.rb +1 -3
- data/spec/models/spree/address_spec.rb +4 -4
- data/spec/models/spree/adjustment_reason_spec.rb +1 -3
- data/spec/models/spree/app_configuration_spec.rb +4 -0
- data/spec/models/spree/calculator/price_sack_spec.rb +3 -3
- data/spec/models/spree/calculator/shipping/price_sack_spec.rb +3 -3
- data/spec/models/spree/calculator/tiered_percent_spec.rb +86 -10
- data/spec/models/spree/carton_spec.rb +3 -1
- data/spec/models/spree/classification_spec.rb +3 -3
- data/spec/models/spree/credit_card_spec.rb +16 -16
- data/spec/models/spree/customer_return_spec.rb +1 -1
- data/spec/models/spree/gateway/bogus_simple.rb +1 -1
- data/spec/models/spree/inventory_unit_spec.rb +3 -3
- data/spec/models/spree/item_adjustments_spec.rb +1 -1
- data/spec/models/spree/line_item_spec.rb +2 -2
- data/spec/models/spree/option_type_spec.rb +2 -2
- data/spec/models/spree/option_value_spec.rb +2 -2
- data/spec/models/spree/order/callbacks_spec.rb +1 -1
- data/spec/models/spree/order/checkout_spec.rb +16 -11
- data/spec/models/spree/order/payment_spec.rb +24 -22
- data/spec/models/spree/order/state_machine_spec.rb +1 -1
- data/spec/models/spree/order/validations_spec.rb +1 -1
- data/spec/models/spree/order_cancellations_spec.rb +63 -0
- data/spec/models/spree/order_contents_spec.rb +1 -1
- data/spec/models/spree/order_merger_spec.rb +133 -0
- data/spec/models/spree/order_spec.rb +39 -159
- data/spec/models/spree/order_update_attributes_spec.rb +82 -0
- data/spec/models/spree/order_updater_spec.rb +6 -4
- data/spec/models/spree/payment_create_spec.rb +131 -0
- data/spec/models/spree/payment_spec.rb +130 -48
- data/spec/models/spree/permission_sets/restricted_stock_transfer_management_spec.rb +91 -33
- data/spec/models/spree/product_filter_spec.rb +3 -3
- data/spec/models/spree/product_spec.rb +80 -26
- data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +1 -1
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +2 -2
- data/spec/models/spree/promotion/rules/nth_order_spec.rb +1 -1
- data/spec/models/spree/promotion/rules/user_spec.rb +2 -2
- data/spec/models/spree/promotion_handler/coupon_spec.rb +2 -2
- data/spec/models/spree/promotion_spec.rb +18 -18
- data/spec/models/spree/reimbursement_spec.rb +22 -0
- data/spec/models/spree/return_item_spec.rb +2 -2
- data/spec/models/spree/shipment_spec.rb +28 -12
- data/spec/models/spree/shipping_method_spec.rb +2 -2
- data/spec/models/spree/shipping_rate_spec.rb +3 -3
- data/spec/models/spree/stock/coordinator_spec.rb +5 -0
- data/spec/models/spree/stock/estimator_spec.rb +35 -1
- data/spec/models/spree/stock/package_spec.rb +1 -1
- data/spec/models/spree/stock/packer_spec.rb +2 -3
- data/spec/models/spree/stock/shipping_rate_selector_spec.rb +16 -0
- data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +16 -0
- data/spec/models/spree/stock_item_spec.rb +5 -7
- data/spec/models/spree/stock_location_spec.rb +5 -9
- data/spec/models/spree/stock_transfer_spec.rb +33 -13
- data/spec/models/spree/store_credit_event_spec.rb +1 -1
- data/spec/models/spree/store_credit_spec.rb +1 -1
- data/spec/models/spree/tax_rate_spec.rb +381 -120
- data/spec/models/spree/taxon_spec.rb +3 -3
- data/spec/models/spree/transfer_item_spec.rb +4 -4
- data/spec/models/spree/unit_cancel_spec.rb +1 -1
- data/spec/models/spree/variant_spec.rb +3 -3
- data/spec/models/spree/zone_spec.rb +35 -1
- data/spec/support/concerns/working_factories.rb +9 -0
- data/vendor/assets/javascripts/jquery-migrate-1.0.0.js +498 -0
- data/vendor/assets/javascripts/jquery.payment.js +231 -80
- metadata +103 -27
- data/app/models/spree/order/currency_updater.rb +0 -40
- data/spec/models/spree/order/currency_updater_spec.rb +0 -32
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module Spree
|
|
4
|
+
RSpec.describe OrderUpdateAttributes do
|
|
5
|
+
let(:order) { create(:order) }
|
|
6
|
+
let(:request_env) { nil }
|
|
7
|
+
let(:update) { described_class.new(order, attributes, request_env: request_env) }
|
|
8
|
+
|
|
9
|
+
context 'empty attributes' do
|
|
10
|
+
let(:attributes){ {} }
|
|
11
|
+
it 'succeeds' do
|
|
12
|
+
expect(update.apply).to be_truthy
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
context 'with coupon code' do
|
|
17
|
+
let(:attributes){ {coupon_code: 'abc123'} }
|
|
18
|
+
it "sets coupon code" do
|
|
19
|
+
expect(update.apply).to be_truthy
|
|
20
|
+
expect(order.coupon_code).to eq('abc123')
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
context 'with payment attributes' do
|
|
25
|
+
let(:attributes) do
|
|
26
|
+
{
|
|
27
|
+
payments_attributes: [
|
|
28
|
+
{source_attributes: attributes_for(:credit_card)}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
context 'with params and a request_env' do
|
|
34
|
+
let(:request_env){ {'USER_AGENT' => 'Firefox'} }
|
|
35
|
+
it 'sets the request_env on the payment' do
|
|
36
|
+
expect(update.apply).to be_truthy
|
|
37
|
+
expect(order.payments.length).to eq 1
|
|
38
|
+
expect(order.payments[0].request_env).to eq({'USER_AGENT' => 'Firefox'})
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
context 'when changing shipping method' do
|
|
44
|
+
let!(:order) { create(:order_with_line_items, shipping_method: shipping_method1) }
|
|
45
|
+
let(:shipment){ order.shipments.first }
|
|
46
|
+
let!(:zone) { create(:zone) }
|
|
47
|
+
let!(:shipping_method1){ create(:shipping_method, cost: 10, zones: [zone]) }
|
|
48
|
+
let!(:shipping_method2){ create(:shipping_method, cost: 20, zones: [zone]) }
|
|
49
|
+
|
|
50
|
+
let(:attributes) do
|
|
51
|
+
{
|
|
52
|
+
shipments_attributes: {
|
|
53
|
+
0 => {selected_shipping_rate_id: shipping_method2, id: shipment.id }
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "updates shipment costs" do
|
|
59
|
+
zone.zone_members.create!(zoneable: order.ship_address.country)
|
|
60
|
+
order.create_proposed_shipments
|
|
61
|
+
order.set_shipments_cost
|
|
62
|
+
|
|
63
|
+
shipping_rate2 = shipment.shipping_rates.find_by(shipping_method_id: shipping_method2.id)
|
|
64
|
+
|
|
65
|
+
expect(order.shipment_total).to eq(10)
|
|
66
|
+
|
|
67
|
+
# We need an order which doesn't have shipping_rates loaded
|
|
68
|
+
order.reload
|
|
69
|
+
|
|
70
|
+
described_class.new(
|
|
71
|
+
order,
|
|
72
|
+
shipments_attributes: {
|
|
73
|
+
0 => {selected_shipping_rate_id: shipping_rate2.id, id: shipment.id }
|
|
74
|
+
}
|
|
75
|
+
).apply
|
|
76
|
+
|
|
77
|
+
expect(order.shipment_total).to eq(20)
|
|
78
|
+
expect(order.shipments.first.cost).to eq(20)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -12,10 +12,12 @@ module Spree
|
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
context 'with refund' do
|
|
16
|
+
it "updates payment totals" do
|
|
17
|
+
create(:payment_with_refund, order: order, amount: 33.25, refund_amount: 3)
|
|
18
|
+
Spree::OrderUpdater.new(order).update_payment_total
|
|
19
|
+
expect(order.payment_total).to eq(30.25)
|
|
20
|
+
end
|
|
19
21
|
end
|
|
20
22
|
|
|
21
23
|
it "update item total" do
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module Spree
|
|
4
|
+
RSpec.describe PaymentCreate do
|
|
5
|
+
let(:user) { nil }
|
|
6
|
+
let(:order) { create :order, user: user }
|
|
7
|
+
let(:request_env) { {} }
|
|
8
|
+
let(:payment_create) { described_class.new(order, attributes, request_env: request_env) }
|
|
9
|
+
let(:payment_method) { create(:payment_method) }
|
|
10
|
+
let(:new_payment) { payment_create.build }
|
|
11
|
+
|
|
12
|
+
context 'empty attributes' do
|
|
13
|
+
let(:attributes){ {} }
|
|
14
|
+
it "builds a new empty payment" do
|
|
15
|
+
expect(new_payment).to be_a Spree::Payment
|
|
16
|
+
expect(new_payment.order).to eq order
|
|
17
|
+
expect(new_payment.source).to be_nil
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "builds the payment in order.payments" do
|
|
21
|
+
expect(order.payments).to eq [new_payment]
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
context 'with a new source' do
|
|
26
|
+
let(:attributes) do
|
|
27
|
+
{
|
|
28
|
+
:amount => 100,
|
|
29
|
+
:payment_method => payment_method,
|
|
30
|
+
:source_attributes => {
|
|
31
|
+
:expiry =>"01 / 99",
|
|
32
|
+
:number => '1234567890123',
|
|
33
|
+
:verification_value => '123',
|
|
34
|
+
:name => 'Foo Bar'
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should build the payment's source" do
|
|
40
|
+
expect(new_payment).to be_valid
|
|
41
|
+
expect(new_payment.source).not_to be_nil
|
|
42
|
+
expect(new_payment.source.user_id).to eq order.user_id
|
|
43
|
+
expect(new_payment.source.payment_method_id).to eq payment_method.id
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
context "when payment source not valid" do
|
|
47
|
+
let(:attributes) do
|
|
48
|
+
{
|
|
49
|
+
amount: 100,
|
|
50
|
+
payment_method: payment_method,
|
|
51
|
+
source_attributes: {expiry: "1 / 12"}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
it "errors when payment source not valid" do
|
|
56
|
+
expect(new_payment).not_to be_valid
|
|
57
|
+
expect(new_payment).not_to be_persisted
|
|
58
|
+
expect(new_payment.source).not_to be_persisted
|
|
59
|
+
expect(new_payment.source).not_to be_valid
|
|
60
|
+
expect(new_payment.source.error_on(:number)).to be_present
|
|
61
|
+
expect(new_payment.source.error_on(:verification_value).size).to be_present
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
context 'with an existing credit card' do
|
|
67
|
+
let(:user) { create(:user) }
|
|
68
|
+
let!(:credit_card) { create(:credit_card, user: order.user) }
|
|
69
|
+
|
|
70
|
+
let(:attributes) do
|
|
71
|
+
{
|
|
72
|
+
source_attributes: {
|
|
73
|
+
existing_card_id: credit_card.id,
|
|
74
|
+
verification_value: '321',
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it 'sets the existing card as the source for the new payment' do
|
|
80
|
+
expect(new_payment.source).to eq(credit_card)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it 'sets the payment payment_method to that of the credit card' do
|
|
84
|
+
expect(new_payment.payment_method_id).to eq(credit_card.payment_method_id)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it 'sets the verification_value on the credit card' do
|
|
88
|
+
expect(new_payment.source.verification_value).to eq('321')
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
context 'with request_env' do
|
|
92
|
+
let(:request_env){ {'USER_AGENT' => 'Firefox'} }
|
|
93
|
+
it 'sets the request_env on the payment' do
|
|
94
|
+
expect(new_payment.request_env).to eq({'USER_AGENT' => 'Firefox'})
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
context 'the credit card belongs to a different user' do
|
|
99
|
+
let(:other_user) { create(:user) }
|
|
100
|
+
before { credit_card.update!(user: other_user) }
|
|
101
|
+
it 'errors' do
|
|
102
|
+
expect { new_payment }.to raise_error(ActiveRecord::RecordNotFound)
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
context 'the credit card has no user' do
|
|
107
|
+
before { credit_card.update!(user_id: nil) }
|
|
108
|
+
it 'errors' do
|
|
109
|
+
expect { new_payment }.to raise_error(ActiveRecord::RecordNotFound)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
context 'the order has no user' do
|
|
114
|
+
before { order.update_attributes!(user_id: nil) }
|
|
115
|
+
it 'errors' do
|
|
116
|
+
expect { new_payment }.to raise_error(ActiveRecord::RecordNotFound)
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
context 'the order and the credit card have no user' do
|
|
121
|
+
before do
|
|
122
|
+
order.update_attributes!(user_id: nil)
|
|
123
|
+
credit_card.update!(user_id: nil)
|
|
124
|
+
end
|
|
125
|
+
it 'errors' do
|
|
126
|
+
expect { new_payment }.to raise_error(ActiveRecord::RecordNotFound)
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
@@ -214,7 +214,7 @@ describe Spree::Payment, :type => :model do
|
|
|
214
214
|
expect(payment.state).to eq('invalid')
|
|
215
215
|
end
|
|
216
216
|
|
|
217
|
-
# Regression test for
|
|
217
|
+
# Regression test for https://github.com/spree/spree/issues/4598
|
|
218
218
|
it "should allow payments with a gateway_customer_profile_id" do
|
|
219
219
|
allow(payment.source).to receive_messages :gateway_customer_profile_id => "customer_1"
|
|
220
220
|
expect(payment.payment_method).to receive(:supports?).with(payment.source).and_return(false)
|
|
@@ -222,7 +222,7 @@ describe Spree::Payment, :type => :model do
|
|
|
222
222
|
payment.process!
|
|
223
223
|
end
|
|
224
224
|
|
|
225
|
-
# Another regression test for
|
|
225
|
+
# Another regression test for https://github.com/spree/spree/issues/4598
|
|
226
226
|
it "should allow payments with a gateway_payment_profile_id" do
|
|
227
227
|
allow(payment.source).to receive_messages :gateway_payment_profile_id => "customer_1"
|
|
228
228
|
expect(payment.payment_method).to receive(:supports?).with(payment.source).and_return(false)
|
|
@@ -471,7 +471,7 @@ describe Spree::Payment, :type => :model do
|
|
|
471
471
|
end
|
|
472
472
|
end
|
|
473
473
|
|
|
474
|
-
# Regression test for
|
|
474
|
+
# Regression test for https://github.com/spree/spree/issues/2119
|
|
475
475
|
context "when payment is completed" do
|
|
476
476
|
before do
|
|
477
477
|
payment.state = 'completed'
|
|
@@ -558,7 +558,7 @@ describe Spree::Payment, :type => :model do
|
|
|
558
558
|
end
|
|
559
559
|
end
|
|
560
560
|
|
|
561
|
-
# Regression test for
|
|
561
|
+
# Regression test for https://github.com/spree/spree/issues/2119
|
|
562
562
|
context "if payment is already voided" do
|
|
563
563
|
before do
|
|
564
564
|
payment.state = 'void'
|
|
@@ -601,13 +601,13 @@ describe Spree::Payment, :type => :model do
|
|
|
601
601
|
end
|
|
602
602
|
|
|
603
603
|
specify do
|
|
604
|
-
|
|
604
|
+
payment.process!
|
|
605
605
|
end
|
|
606
606
|
end
|
|
607
607
|
end
|
|
608
608
|
|
|
609
609
|
describe "#credit_allowed" do
|
|
610
|
-
# Regression test for
|
|
610
|
+
# Regression test for https://github.com/spree/spree/issues/4403 and https://github.com/spree/spree/issues/4407
|
|
611
611
|
it "is the difference between offsets total and payment amount" do
|
|
612
612
|
payment.amount = 100
|
|
613
613
|
allow(payment).to receive(:offsets_total).and_return(0)
|
|
@@ -661,13 +661,12 @@ describe Spree::Payment, :type => :model do
|
|
|
661
661
|
end
|
|
662
662
|
|
|
663
663
|
context "completed orders" do
|
|
664
|
-
let(:payment_method) { create(:check_payment_method) }
|
|
665
664
|
before { allow(order).to receive_messages completed?: true }
|
|
666
665
|
|
|
667
666
|
it "updates payment_state and shipments" do
|
|
668
667
|
expect(order.updater).to receive(:update_payment_state)
|
|
669
668
|
expect(order.updater).to receive(:update_shipment_state)
|
|
670
|
-
Spree::Payment.create
|
|
669
|
+
Spree::Payment.create(:amount => 100, :order => order)
|
|
671
670
|
end
|
|
672
671
|
end
|
|
673
672
|
|
|
@@ -693,6 +692,10 @@ describe Spree::Payment, :type => :model do
|
|
|
693
692
|
|
|
694
693
|
context "with multiple payment attempts" do
|
|
695
694
|
let(:attributes) { attributes_for(:credit_card) }
|
|
695
|
+
around do |example|
|
|
696
|
+
ActiveSupport::Deprecation.silence{ example.run }
|
|
697
|
+
end
|
|
698
|
+
|
|
696
699
|
it "should not try to create profiles on old failed payment attempts" do
|
|
697
700
|
allow_any_instance_of(Spree::Payment).to receive(:payment_method) { gateway }
|
|
698
701
|
|
|
@@ -749,49 +752,128 @@ describe Spree::Payment, :type => :model do
|
|
|
749
752
|
end
|
|
750
753
|
end
|
|
751
754
|
|
|
752
|
-
describe "#
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
:expiry =>"01 / 99",
|
|
759
|
-
:number => '1234567890123',
|
|
760
|
-
:verification_value => '123',
|
|
761
|
-
:name => 'Spree Commerce'
|
|
762
|
-
}
|
|
763
|
-
}
|
|
755
|
+
describe "#apply_source_attributes" do
|
|
756
|
+
# This method is deprecated
|
|
757
|
+
around do |example|
|
|
758
|
+
ActiveSupport::Deprecation.silence do
|
|
759
|
+
example.run
|
|
760
|
+
end
|
|
764
761
|
end
|
|
765
762
|
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
763
|
+
context 'with a new source' do
|
|
764
|
+
let(:params) do
|
|
765
|
+
{
|
|
766
|
+
:amount => 100,
|
|
767
|
+
:payment_method => gateway,
|
|
768
|
+
:source_attributes => {
|
|
769
|
+
:expiry =>"01 / 99",
|
|
770
|
+
:number => '1234567890123',
|
|
771
|
+
:verification_value => '123',
|
|
772
|
+
:name => 'Spree Commerce'
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
end
|
|
776
|
+
|
|
777
|
+
it "should build the payment's source" do
|
|
778
|
+
payment = Spree::Payment.new(params)
|
|
779
|
+
expect(payment).to be_valid
|
|
780
|
+
expect(payment.source).not_to be_nil
|
|
781
|
+
end
|
|
771
782
|
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
783
|
+
it "assigns user and gateway to payment source" do
|
|
784
|
+
order = create(:order)
|
|
785
|
+
source = order.payments.new(params).source
|
|
775
786
|
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
787
|
+
expect(source.user_id).to eq order.user_id
|
|
788
|
+
expect(source.payment_method_id).to eq gateway.id
|
|
789
|
+
end
|
|
779
790
|
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
791
|
+
it "errors when payment source not valid" do
|
|
792
|
+
params = { :amount => 100, :payment_method => gateway,
|
|
793
|
+
:source_attributes => {:expiry => "1 / 12" }}
|
|
783
794
|
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
795
|
+
payment = Spree::Payment.new(params)
|
|
796
|
+
expect(payment).not_to be_valid
|
|
797
|
+
expect(payment.source).not_to be_nil
|
|
798
|
+
expect(payment.source.error_on(:number).size).to eq(1)
|
|
799
|
+
expect(payment.source.error_on(:verification_value).size).to eq(1)
|
|
800
|
+
end
|
|
801
|
+
|
|
802
|
+
it "does not build a new source when duplicating the model with source_attributes set" do
|
|
803
|
+
payment = create(:payment)
|
|
804
|
+
payment.source_attributes = params[:source_attributes]
|
|
805
|
+
expect { payment.dup }.to_not change { payment.source }
|
|
806
|
+
end
|
|
789
807
|
end
|
|
790
808
|
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
809
|
+
context 'with an existing credit card' do
|
|
810
|
+
let(:order) { create(:order, user: user) }
|
|
811
|
+
let(:user) { create(:user) }
|
|
812
|
+
let!(:credit_card) { create(:credit_card, user_id: order.user_id) }
|
|
813
|
+
|
|
814
|
+
let(:params) do
|
|
815
|
+
{
|
|
816
|
+
source_attributes: {
|
|
817
|
+
existing_card_id: credit_card.id,
|
|
818
|
+
verification_value: '321',
|
|
819
|
+
},
|
|
820
|
+
}
|
|
821
|
+
end
|
|
822
|
+
|
|
823
|
+
it 'sets the existing card as the source for the new payment' do
|
|
824
|
+
expect {
|
|
825
|
+
order.payments.create!(params)
|
|
826
|
+
}.to change { Spree::Payment.count }.by(1)
|
|
827
|
+
|
|
828
|
+
expect(order.payments.last.source).to eq(credit_card)
|
|
829
|
+
end
|
|
830
|
+
|
|
831
|
+
it 'sets the payment payment_method to that of the credit card' do
|
|
832
|
+
order.payments.create!(params)
|
|
833
|
+
expect(order.payments.last.payment_method_id).to eq(credit_card.payment_method_id)
|
|
834
|
+
end
|
|
835
|
+
|
|
836
|
+
it 'sets the verification_value on the credit card' do
|
|
837
|
+
payment = order.payments.create!(params)
|
|
838
|
+
expect(payment.source.verification_value).to eq('321')
|
|
839
|
+
end
|
|
840
|
+
|
|
841
|
+
it 'sets the request_env on the payment' do
|
|
842
|
+
payment = order.payments.create!(params.merge(request_env: {'USER_AGENT' => 'Firefox'}))
|
|
843
|
+
expect(payment.request_env).to eq({'USER_AGENT' => 'Firefox'})
|
|
844
|
+
end
|
|
845
|
+
|
|
846
|
+
context 'the credit card belongs to a different user' do
|
|
847
|
+
let(:other_user) { create(:user) }
|
|
848
|
+
before { credit_card.update!(user_id: other_user.id) }
|
|
849
|
+
it 'errors' do
|
|
850
|
+
expect { order.payments.create!(params) }.to raise_error(ActiveRecord::RecordNotFound)
|
|
851
|
+
end
|
|
852
|
+
end
|
|
853
|
+
|
|
854
|
+
context 'the credit card has no user' do
|
|
855
|
+
before { credit_card.update!(user_id: nil) }
|
|
856
|
+
it 'errors' do
|
|
857
|
+
expect { order.payments.create!(params) }.to raise_error(ActiveRecord::RecordNotFound)
|
|
858
|
+
end
|
|
859
|
+
end
|
|
860
|
+
|
|
861
|
+
context 'the order has no user' do
|
|
862
|
+
before { order.update_attributes!(user_id: nil) }
|
|
863
|
+
it 'errors' do
|
|
864
|
+
expect { order.payments.create!(params) }.to raise_error(ActiveRecord::RecordNotFound)
|
|
865
|
+
end
|
|
866
|
+
end
|
|
867
|
+
|
|
868
|
+
context 'the order and the credit card have no user' do
|
|
869
|
+
before do
|
|
870
|
+
order.update_attributes!(user_id: nil)
|
|
871
|
+
credit_card.update!(user_id: nil)
|
|
872
|
+
end
|
|
873
|
+
it 'errors' do
|
|
874
|
+
expect { order.payments.create!(params) }.to raise_error(ActiveRecord::RecordNotFound)
|
|
875
|
+
end
|
|
876
|
+
end
|
|
795
877
|
end
|
|
796
878
|
end
|
|
797
879
|
|
|
@@ -808,7 +890,7 @@ describe Spree::Payment, :type => :model do
|
|
|
808
890
|
end
|
|
809
891
|
end
|
|
810
892
|
|
|
811
|
-
# Regression test for
|
|
893
|
+
# Regression test for https://github.com/spree/spree/issues/2216
|
|
812
894
|
describe "#gateway_options" do
|
|
813
895
|
before { allow(order).to receive_messages(:last_ip_address => "192.168.1.1") }
|
|
814
896
|
|
|
@@ -826,7 +908,7 @@ describe Spree::Payment, :type => :model do
|
|
|
826
908
|
end
|
|
827
909
|
|
|
828
910
|
describe "#set_unique_identifier" do
|
|
829
|
-
# Regression test for
|
|
911
|
+
# Regression test for https://github.com/spree/spree/issues/1998
|
|
830
912
|
it "sets a unique identifier on create" do
|
|
831
913
|
payment.run_callbacks(:create)
|
|
832
914
|
expect(payment.number).not_to be_blank
|
|
@@ -834,7 +916,7 @@ describe Spree::Payment, :type => :model do
|
|
|
834
916
|
expect(payment.number).to be_a(String)
|
|
835
917
|
end
|
|
836
918
|
|
|
837
|
-
# Regression test for
|
|
919
|
+
# Regression test for https://github.com/spree/spree/issues/3733
|
|
838
920
|
it "does not regenerate the identifier on re-save" do
|
|
839
921
|
payment.save!
|
|
840
922
|
old_number = payment.number
|
|
@@ -1040,8 +1122,8 @@ describe Spree::Payment, :type => :model do
|
|
|
1040
1122
|
end
|
|
1041
1123
|
end
|
|
1042
1124
|
|
|
1043
|
-
# Regression test for
|
|
1044
|
-
# The need for this was discovered in the research for
|
|
1125
|
+
# Regression test for https://github.com/spree/spree/issues/4072 (kinda)
|
|
1126
|
+
# The need for this was discovered in the research for https://github.com/spree/spree/issues/4072
|
|
1045
1127
|
context "state changes" do
|
|
1046
1128
|
it "are logged to the database" do
|
|
1047
1129
|
expect(payment.state_changes).to be_empty
|