solidus_core 1.0.2 → 1.0.3
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/CHANGELOG.md +1 -0
- data/Gemfile +3 -0
- data/Rakefile +16 -0
- data/script/rails +9 -0
- data/solidus_core.gemspec +48 -0
- data/spec/fixtures/thinking-cat.jpg +0 -0
- data/spec/helpers/base_helper_spec.rb +173 -0
- data/spec/helpers/order_helper_spec.rb +12 -0
- data/spec/helpers/products_helper_spec.rb +220 -0
- data/spec/helpers/taxons_helper_spec.rb +17 -0
- data/spec/lib/calculated_adjustments_spec.rb +7 -0
- data/spec/lib/i18n_spec.rb +123 -0
- data/spec/lib/search/base_spec.rb +86 -0
- data/spec/lib/search/variant_spec.rb +92 -0
- data/spec/lib/spree/core/controller_helpers/auth_spec.rb +66 -0
- data/spec/lib/spree/core/controller_helpers/order_spec.rb +92 -0
- data/spec/lib/spree/core/controller_helpers/search_spec.rb +17 -0
- data/spec/lib/spree/core/controller_helpers/store_spec.rb +16 -0
- data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +39 -0
- data/spec/lib/spree/core/current_store_spec.rb +36 -0
- data/spec/lib/spree/core/delegate_belongs_to_spec.rb +22 -0
- data/spec/lib/spree/core/importer/order_spec.rb +431 -0
- data/spec/lib/spree/core/role_configuration_spec.rb +138 -0
- data/spec/lib/spree/core/validators/email_spec.rb +48 -0
- data/spec/lib/spree/localized_number_spec.rb +38 -0
- data/spec/lib/spree/migrations_spec.rb +36 -0
- data/spec/lib/spree/money_spec.rb +127 -0
- data/spec/lib/tasks/exchanges_spec.rb +231 -0
- data/spec/lib/tasks/migrations/copy_shipped_shipments_to_cartons_spec.rb +115 -0
- data/spec/lib/tasks/order_capturing_spec.rb +56 -0
- data/spec/mailers/carton_mailer_spec.rb +43 -0
- data/spec/mailers/order_mailer_spec.rb +122 -0
- data/spec/mailers/reimbursement_mailer_spec.rb +40 -0
- data/spec/mailers/test_mailer_spec.rb +15 -0
- data/spec/models/spree/ability_spec.rb +276 -0
- data/spec/models/spree/address_spec.rb +250 -0
- data/spec/models/spree/adjustment_reason_spec.rb +13 -0
- data/spec/models/spree/adjustment_spec.rb +177 -0
- data/spec/models/spree/app_configuration_spec.rb +20 -0
- data/spec/models/spree/asset_spec.rb +24 -0
- data/spec/models/spree/calculator/default_tax_spec.rb +127 -0
- data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +25 -0
- data/spec/models/spree/calculator/flat_rate_spec.rb +47 -0
- data/spec/models/spree/calculator/flexi_rate_spec.rb +41 -0
- data/spec/models/spree/calculator/percent_on_line_item_spec.rb +15 -0
- data/spec/models/spree/calculator/price_sack_spec.rb +30 -0
- data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +51 -0
- data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +23 -0
- data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +13 -0
- data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +52 -0
- data/spec/models/spree/calculator/shipping/per_item_spec.rb +20 -0
- data/spec/models/spree/calculator/shipping/price_sack_spec.rb +30 -0
- data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +36 -0
- data/spec/models/spree/calculator/tiered_percent_spec.rb +47 -0
- data/spec/models/spree/calculator_spec.rb +36 -0
- data/spec/models/spree/carton_spec.rb +133 -0
- data/spec/models/spree/classification_spec.rb +15 -0
- data/spec/models/spree/concerns/display_money_spec.rb +43 -0
- data/spec/models/spree/concerns/user_methods_spec.rb +41 -0
- data/spec/models/spree/credit_card_spec.rb +334 -0
- data/spec/models/spree/customer_return_spec.rb +276 -0
- data/spec/models/spree/exchange_spec.rb +79 -0
- data/spec/models/spree/gateway/bogus_simple.rb +20 -0
- data/spec/models/spree/gateway/bogus_spec.rb +13 -0
- data/spec/models/spree/gateway_spec.rb +82 -0
- data/spec/models/spree/inventory_unit_spec.rb +307 -0
- data/spec/models/spree/item_adjustments_spec.rb +256 -0
- data/spec/models/spree/line_item_spec.rb +191 -0
- data/spec/models/spree/option_type_spec.rb +14 -0
- data/spec/models/spree/option_value_spec.rb +22 -0
- data/spec/models/spree/order/address_spec.rb +50 -0
- data/spec/models/spree/order/adjustments_spec.rb +39 -0
- data/spec/models/spree/order/callbacks_spec.rb +42 -0
- data/spec/models/spree/order/checkout_spec.rb +902 -0
- data/spec/models/spree/order/currency_updater_spec.rb +32 -0
- data/spec/models/spree/order/finalizing_spec.rb +111 -0
- data/spec/models/spree/order/payment_spec.rb +210 -0
- data/spec/models/spree/order/risk_assessment_spec.rb +68 -0
- data/spec/models/spree/order/state_machine_spec.rb +221 -0
- data/spec/models/spree/order/tax_spec.rb +84 -0
- data/spec/models/spree/order/totals_spec.rb +24 -0
- data/spec/models/spree/order/updating_spec.rb +18 -0
- data/spec/models/spree/order/validations_spec.rb +15 -0
- data/spec/models/spree/order_cancellations_spec.rb +120 -0
- data/spec/models/spree/order_capturing_spec.rb +116 -0
- data/spec/models/spree/order_contents_spec.rb +265 -0
- data/spec/models/spree/order_inventory_spec.rb +228 -0
- data/spec/models/spree/order_mutex_spec.rb +85 -0
- data/spec/models/spree/order_promotion_spec.rb +31 -0
- data/spec/models/spree/order_shipping_spec.rb +247 -0
- data/spec/models/spree/order_spec.rb +1412 -0
- data/spec/models/spree/order_stock_location_spec.rb +18 -0
- data/spec/models/spree/order_updater_spec.rb +299 -0
- data/spec/models/spree/payment_method/store_credit_spec.rb +294 -0
- data/spec/models/spree/payment_method_spec.rb +96 -0
- data/spec/models/spree/payment_spec.rb +1044 -0
- data/spec/models/spree/permission_sets/base_spec.rb +12 -0
- data/spec/models/spree/permission_sets/configuration_display.rb +82 -0
- data/spec/models/spree/permission_sets/configuration_management_spec.rb +50 -0
- data/spec/models/spree/permission_sets/dashboard_display_spec.rb +22 -0
- data/spec/models/spree/permission_sets/order_display_spec.rb +49 -0
- data/spec/models/spree/permission_sets/order_management_spec.rb +36 -0
- data/spec/models/spree/permission_sets/product_display_spec.rb +60 -0
- data/spec/models/spree/permission_sets/product_management_spec.rb +40 -0
- data/spec/models/spree/permission_sets/promotion_display_spec.rb +34 -0
- data/spec/models/spree/permission_sets/promotion_management_spec.rb +26 -0
- data/spec/models/spree/permission_sets/report_display_spec.rb +24 -0
- data/spec/models/spree/permission_sets/restricted_transfer_management_spec.rb +132 -0
- data/spec/models/spree/permission_sets/stock_display_spec.rb +26 -0
- data/spec/models/spree/permission_sets/stock_management_spec.rb +24 -0
- data/spec/models/spree/permission_sets/user_display_spec.rb +36 -0
- data/spec/models/spree/permission_sets/user_management_spec.rb +28 -0
- data/spec/models/spree/preference_spec.rb +80 -0
- data/spec/models/spree/preferences/configuration_spec.rb +30 -0
- data/spec/models/spree/preferences/preferable_spec.rb +294 -0
- data/spec/models/spree/preferences/scoped_store_spec.rb +58 -0
- data/spec/models/spree/preferences/static_model_preferences_spec.rb +78 -0
- data/spec/models/spree/preferences/statically_configurable_spec.rb +60 -0
- data/spec/models/spree/preferences/store_spec.rb +39 -0
- data/spec/models/spree/price_spec.rb +42 -0
- data/spec/models/spree/product/scopes_spec.rb +148 -0
- data/spec/models/spree/product_duplicator_spec.rb +103 -0
- data/spec/models/spree/product_filter_spec.rb +26 -0
- data/spec/models/spree/product_property_spec.rb +20 -0
- data/spec/models/spree/product_spec.rb +437 -0
- data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +96 -0
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +165 -0
- data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +115 -0
- data/spec/models/spree/promotion/actions/free_shipping_spec.rb +40 -0
- data/spec/models/spree/promotion/rules/first_order_spec.rb +75 -0
- data/spec/models/spree/promotion/rules/item_total_spec.rb +67 -0
- data/spec/models/spree/promotion/rules/nth_order_spec.rb +70 -0
- data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +42 -0
- data/spec/models/spree/promotion/rules/option_value_spec.rb +94 -0
- data/spec/models/spree/promotion/rules/product_spec.rb +143 -0
- data/spec/models/spree/promotion/rules/taxon_spec.rb +102 -0
- data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +27 -0
- data/spec/models/spree/promotion/rules/user_spec.rb +37 -0
- data/spec/models/spree/promotion_builder_spec.rb +118 -0
- data/spec/models/spree/promotion_category_spec.rb +17 -0
- data/spec/models/spree/promotion_code/code_builder_spec.rb +79 -0
- data/spec/models/spree/promotion_code_spec.rb +187 -0
- data/spec/models/spree/promotion_handler/cart_spec.rb +114 -0
- data/spec/models/spree/promotion_handler/coupon_spec.rb +335 -0
- data/spec/models/spree/promotion_handler/free_shipping_spec.rb +47 -0
- data/spec/models/spree/promotion_handler/page_spec.rb +44 -0
- data/spec/models/spree/promotion_rule_spec.rb +28 -0
- data/spec/models/spree/promotion_spec.rb +767 -0
- data/spec/models/spree/refund_spec.rb +204 -0
- data/spec/models/spree/reimbursement/credit_spec.rb +36 -0
- data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +140 -0
- data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +83 -0
- data/spec/models/spree/reimbursement_performer_spec.rb +30 -0
- data/spec/models/spree/reimbursement_spec.rb +231 -0
- data/spec/models/spree/reimbursement_tax_calculator_spec.rb +51 -0
- data/spec/models/spree/reimbursement_type/credit_spec.rb +53 -0
- data/spec/models/spree/reimbursement_type/exchange_spec.rb +46 -0
- data/spec/models/spree/reimbursement_type/original_payment_spec.rb +107 -0
- data/spec/models/spree/reimbursement_type/store_credit_spec.rb +97 -0
- data/spec/models/spree/return_authorization_spec.rb +290 -0
- data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +77 -0
- data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +58 -0
- data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +85 -0
- data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +32 -0
- data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +29 -0
- data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +35 -0
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +65 -0
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +43 -0
- data/spec/models/spree/return_item_spec.rb +775 -0
- data/spec/models/spree/returns_calculator_spec.rb +14 -0
- data/spec/models/spree/shipment_spec.rb +709 -0
- data/spec/models/spree/shipping_calculator_spec.rb +45 -0
- data/spec/models/spree/shipping_method_spec.rb +88 -0
- data/spec/models/spree/shipping_rate_spec.rb +142 -0
- data/spec/models/spree/state_spec.rb +14 -0
- data/spec/models/spree/stock/availability_validator_spec.rb +83 -0
- data/spec/models/spree/stock/coordinator_spec.rb +116 -0
- data/spec/models/spree/stock/differentiator_spec.rb +39 -0
- data/spec/models/spree/stock/estimator_spec.rb +146 -0
- data/spec/models/spree/stock/inventory_unit_builder_spec.rb +38 -0
- data/spec/models/spree/stock/package_spec.rb +163 -0
- data/spec/models/spree/stock/packer_spec.rb +91 -0
- data/spec/models/spree/stock/prioritizer_spec.rb +125 -0
- data/spec/models/spree/stock/quantifier_spec.rb +115 -0
- data/spec/models/spree/stock/splitter/backordered_spec.rb +29 -0
- data/spec/models/spree/stock/splitter/base_spec.rb +21 -0
- data/spec/models/spree/stock/splitter/shipping_category_spec.rb +50 -0
- data/spec/models/spree/stock/splitter/weight_spec.rb +29 -0
- data/spec/models/spree/stock_item_spec.rb +426 -0
- data/spec/models/spree/stock_location_spec.rb +279 -0
- data/spec/models/spree/stock_movement_spec.rb +56 -0
- data/spec/models/spree/stock_transfer_spec.rb +290 -0
- data/spec/models/spree/store_credit_category_spec.rb +17 -0
- data/spec/models/spree/store_credit_event_spec.rb +314 -0
- data/spec/models/spree/store_credit_spec.rb +876 -0
- data/spec/models/spree/store_spec.rb +55 -0
- data/spec/models/spree/tax_category_spec.rb +27 -0
- data/spec/models/spree/tax_rate_spec.rb +378 -0
- data/spec/models/spree/taxon_spec.rb +74 -0
- data/spec/models/spree/taxonomy_spec.rb +18 -0
- data/spec/models/spree/tracker_spec.rb +21 -0
- data/spec/models/spree/transfer_item_spec.rb +264 -0
- data/spec/models/spree/unit_cancel_spec.rb +148 -0
- data/spec/models/spree/user_spec.rb +223 -0
- data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +23 -0
- data/spec/models/spree/variant/scopes_spec.rb +55 -0
- data/spec/models/spree/variant_spec.rb +546 -0
- data/spec/models/spree/zone_spec.rb +305 -0
- data/spec/spec_helper.rb +78 -0
- data/spec/support/big_decimal.rb +5 -0
- data/spec/support/concerns/default_price.rb +34 -0
- data/spec/support/dummy_ability.rb +4 -0
- data/spec/support/test_gateway.rb +2 -0
- metadata +229 -3
- data/lib/spree/testing_support/rspec-activemodel-mocks_patch.rb +0 -8
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe 'spree:migrations:copy_shipped_shipments_to_cartons' do
|
|
4
|
+
before do
|
|
5
|
+
Rails.application.load_tasks
|
|
6
|
+
task.reenable
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe 'up' do
|
|
10
|
+
let(:task) do
|
|
11
|
+
Rake::Task['spree:migrations:copy_shipped_shipments_to_cartons:up']
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# should generate a carton
|
|
15
|
+
let!(:shipped_shipment) { shipped_order.shipments.first }
|
|
16
|
+
# should not generate a carton because it's not shipped
|
|
17
|
+
let!(:unshipped_shipment) { create(:shipment) }
|
|
18
|
+
# should not generate a carton because it has no inventory units
|
|
19
|
+
let!(:shipped_shipment_without_units) do
|
|
20
|
+
shipped_order_without_units.shipments.first
|
|
21
|
+
end
|
|
22
|
+
# should not generate a carton because it already has a carton
|
|
23
|
+
let!(:shipped_and_cartonized_shipment) do
|
|
24
|
+
shipped_and_cartonized_order.shipments.first
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
let(:shipped_order) { create(:shipped_order, line_items_count: 1, with_cartons: false) }
|
|
28
|
+
|
|
29
|
+
let(:shipped_order_without_units) do
|
|
30
|
+
create(:shipped_order, line_items_count: 1) do |order|
|
|
31
|
+
order.inventory_units.delete_all
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
let(:shipped_and_cartonized_order) do
|
|
36
|
+
create(:order_ready_to_ship, line_items_count: 1).tap do |order|
|
|
37
|
+
order.shipping.ship_shipment(order.shipments.first)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'creates the expected carton' do
|
|
42
|
+
expect {
|
|
43
|
+
task.invoke
|
|
44
|
+
}.to change { Spree::Carton.count }.by(1)
|
|
45
|
+
|
|
46
|
+
carton = Spree::Carton.last
|
|
47
|
+
|
|
48
|
+
expect(carton).to be_valid
|
|
49
|
+
|
|
50
|
+
expect(carton.imported_from_shipment_id).to eq shipped_shipment.id
|
|
51
|
+
expect(carton.orders).to eq [shipped_order]
|
|
52
|
+
|
|
53
|
+
expect(carton.number).to eq "C#{shipped_shipment.number}"
|
|
54
|
+
expect(carton.stock_location).to eq shipped_shipment.stock_location
|
|
55
|
+
expect(carton.address).to eq shipped_shipment.address
|
|
56
|
+
expect(carton.shipping_method).to eq shipped_shipment.shipping_method
|
|
57
|
+
expect(carton.tracking).to eq shipped_shipment.tracking
|
|
58
|
+
expect(carton.shipped_at).to eq shipped_shipment.shipped_at
|
|
59
|
+
expect(carton.created_at).to be_present
|
|
60
|
+
expect(carton.updated_at).to be_present
|
|
61
|
+
|
|
62
|
+
expect(carton.inventory_units).to match_array shipped_shipment.inventory_units
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
describe 'when run a second time' do
|
|
66
|
+
before do
|
|
67
|
+
task.invoke
|
|
68
|
+
task.reenable
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
let!(:second_shipped_shipment) { second_shipped_order.shipments.first }
|
|
72
|
+
|
|
73
|
+
let(:second_shipped_order) { create(:shipped_order, line_items_count: 1, with_cartons: false) }
|
|
74
|
+
|
|
75
|
+
it 'creates only a carton for the second shipment' do
|
|
76
|
+
expect {
|
|
77
|
+
task.invoke
|
|
78
|
+
}.to change { Spree::Carton.count }.by(1)
|
|
79
|
+
|
|
80
|
+
carton = Spree::Carton.last
|
|
81
|
+
|
|
82
|
+
expect(carton.imported_from_shipment_id).to eq second_shipped_shipment.id
|
|
83
|
+
expect(carton.orders).to eq [second_shipped_order]
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
describe 'down' do
|
|
89
|
+
let(:task) do
|
|
90
|
+
Rake::Task['spree:migrations:copy_shipped_shipments_to_cartons:down']
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
let!(:migrated_carton) { create(:carton) }
|
|
94
|
+
let!(:preexisting_carton) { create(:carton) }
|
|
95
|
+
|
|
96
|
+
let!(:migrated_carton_inventory_units) { migrated_carton.inventory_units.to_a }
|
|
97
|
+
let!(:preexisting_carton_inventory_units) { preexisting_carton.inventory_units.to_a }
|
|
98
|
+
|
|
99
|
+
before do
|
|
100
|
+
migrated_carton.update!(imported_from_shipment_id: migrated_carton.inventory_units.first.shipment_id)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it 'clears out the correct carton' do
|
|
104
|
+
expect {
|
|
105
|
+
task.invoke
|
|
106
|
+
}.to change { Spree::Carton.count }.by(-1)
|
|
107
|
+
|
|
108
|
+
expect(Spree::Carton.find_by(id: migrated_carton.id)).to be_nil
|
|
109
|
+
|
|
110
|
+
expect(migrated_carton_inventory_units.map(&:reload).map(&:carton_id)).to all(be_nil)
|
|
111
|
+
expect(preexisting_carton_inventory_units.map(&:reload).map(&:carton_id)).to all(eq preexisting_carton.id)
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "order_capturing:capture_payments" do
|
|
4
|
+
let(:task) do
|
|
5
|
+
Rake::Task['order_capturing:capture_payments']
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
before do
|
|
9
|
+
Rails.application.load_tasks
|
|
10
|
+
task.reenable
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
subject { task }
|
|
14
|
+
|
|
15
|
+
describe '#prerequisites' do
|
|
16
|
+
subject { super().prerequisites }
|
|
17
|
+
it { is_expected.to include("environment") }
|
|
18
|
+
end
|
|
19
|
+
let(:order) { create(:completed_order_with_pending_payment, line_items_count: 2) }
|
|
20
|
+
let(:payment) { order.payments.first }
|
|
21
|
+
|
|
22
|
+
context "with a mix of canceled and shipped inventory" do
|
|
23
|
+
before do
|
|
24
|
+
Spree::OrderCancellations.new(order).short_ship([order.inventory_units.first])
|
|
25
|
+
order.shipping.ship_shipment(order.shipments.first)
|
|
26
|
+
order.update_attributes!(payment_state: 'balance_due')
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "charges the order" do
|
|
30
|
+
expect(order.inventory_units.any?(&:on_hand?)).to eq false
|
|
31
|
+
expect(order.inventory_units.all? {|iu| iu.canceled? || iu.shipped? }).to eq true
|
|
32
|
+
expect {
|
|
33
|
+
expect { subject.invoke }.to change { payment.reload.state }.to('completed')
|
|
34
|
+
}.to change { order.reload.payment_state }.to('paid')
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
context "when there is an error capturing payment" do
|
|
38
|
+
before do
|
|
39
|
+
allow_any_instance_of(Spree::OrderCapturing).to receive(:capture_payments).and_raise(StateMachines::InvalidTransition)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "raises a OrderCapturingFailures" do
|
|
43
|
+
expect { subject.invoke }.to raise_error(Spree::OrderCapturingFailures)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
context "with any inventory not shipped or canceled" do
|
|
49
|
+
it "does not charge for the order" do
|
|
50
|
+
expect(order.inventory_units.any?(&:on_hand?)).to eq true
|
|
51
|
+
expect {
|
|
52
|
+
expect { subject.invoke }.not_to change { payment.reload }
|
|
53
|
+
}.not_to change { order.reload.payment_state }
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'email_spec'
|
|
3
|
+
|
|
4
|
+
describe Spree::CartonMailer do
|
|
5
|
+
include EmailSpec::Helpers
|
|
6
|
+
include EmailSpec::Matchers
|
|
7
|
+
|
|
8
|
+
let(:carton) { create(:carton) }
|
|
9
|
+
|
|
10
|
+
# Regression test for #2196
|
|
11
|
+
it "doesn't include out of stock in the email body" do
|
|
12
|
+
shipment_email = Spree::CartonMailer.shipped_email(carton.id)
|
|
13
|
+
expect(shipment_email.body).not_to include(%Q{Out of Stock})
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
context "with resend option" do
|
|
17
|
+
subject do
|
|
18
|
+
Spree::CartonMailer.shipped_email(carton.id, resend: true).subject
|
|
19
|
+
end
|
|
20
|
+
it { is_expected.to match /^\[RESEND\] / }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
context "emails must be translatable" do
|
|
24
|
+
context "shipped_email" do
|
|
25
|
+
context "pt-BR locale" do
|
|
26
|
+
before do
|
|
27
|
+
pt_br_shipped_email = { :spree => { :shipment_mailer => { :shipped_email => { :dear_customer => 'Caro Cliente,' } } } }
|
|
28
|
+
I18n.backend.store_translations :'pt-BR', pt_br_shipped_email
|
|
29
|
+
I18n.locale = :'pt-BR'
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
after do
|
|
33
|
+
I18n.locale = I18n.default_locale
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
specify do
|
|
37
|
+
shipped_email = Spree::CartonMailer.shipped_email(carton.id)
|
|
38
|
+
expect(shipped_email.body).to include("Caro Cliente,")
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'email_spec'
|
|
3
|
+
|
|
4
|
+
describe Spree::OrderMailer, :type => :mailer do
|
|
5
|
+
include EmailSpec::Helpers
|
|
6
|
+
include EmailSpec::Matchers
|
|
7
|
+
|
|
8
|
+
let(:order) do
|
|
9
|
+
order = stub_model(Spree::Order)
|
|
10
|
+
product = stub_model(Spree::Product, :name => %Q{The "BEST" product})
|
|
11
|
+
variant = stub_model(Spree::Variant, :product => product)
|
|
12
|
+
price = stub_model(Spree::Price, :variant => variant, :amount => 5.00)
|
|
13
|
+
store = FactoryGirl.build :store, mail_from_address: "store@example.com"
|
|
14
|
+
line_item = stub_model(Spree::LineItem, :variant => variant, :order => order, :quantity => 1, :price => 4.99)
|
|
15
|
+
allow(variant).to receive_messages(:default_price => price)
|
|
16
|
+
allow(order).to receive_messages(:line_items => [line_item])
|
|
17
|
+
allow(order).to receive(:store).and_return(store)
|
|
18
|
+
order
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "uses the order's store for the from address" do
|
|
22
|
+
message = Spree::OrderMailer.confirm_email(order)
|
|
23
|
+
expect(message.from).to eq ["store@example.com"]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "doesn't aggressively escape double quotes in confirmation body" do
|
|
27
|
+
confirmation_email = Spree::OrderMailer.confirm_email(order)
|
|
28
|
+
expect(confirmation_email.body).not_to include(""")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "confirm_email accepts an order id as an alternative to an Order object" do
|
|
32
|
+
expect(Spree::Order).to receive(:find).with(order.id).and_return(order)
|
|
33
|
+
expect {
|
|
34
|
+
Spree::OrderMailer.confirm_email(order.id).body
|
|
35
|
+
}.not_to raise_error
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "cancel_email accepts an order id as an alternative to an Order object" do
|
|
39
|
+
expect(Spree::Order).to receive(:find).with(order.id).and_return(order)
|
|
40
|
+
expect {
|
|
41
|
+
Spree::OrderMailer.cancel_email(order.id).body
|
|
42
|
+
}.not_to raise_error
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
context "only shows eligible adjustments in emails" do
|
|
46
|
+
before do
|
|
47
|
+
create(:adjustment, :order => order, :eligible => true, :label => "Eligible Adjustment")
|
|
48
|
+
create(:adjustment, :order => order, :eligible => false, :label => "Ineligible Adjustment")
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
let!(:confirmation_email) { Spree::OrderMailer.confirm_email(order) }
|
|
52
|
+
let!(:cancel_email) { Spree::OrderMailer.cancel_email(order) }
|
|
53
|
+
|
|
54
|
+
specify do
|
|
55
|
+
expect(confirmation_email.body).not_to include("Ineligible Adjustment")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
specify do
|
|
59
|
+
expect(cancel_email.body).not_to include("Ineligible Adjustment")
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
context "displays unit costs from line item" do
|
|
64
|
+
# Regression test for #2772
|
|
65
|
+
|
|
66
|
+
# Tests mailer view spree/order_mailer/confirm_email.text.erb
|
|
67
|
+
specify do
|
|
68
|
+
confirmation_email = Spree::OrderMailer.confirm_email(order)
|
|
69
|
+
expect(confirmation_email).to have_body_text("4.99")
|
|
70
|
+
expect(confirmation_email).to_not have_body_text("5.00")
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Tests mailer view spree/order_mailer/cancel_email.text.erb
|
|
74
|
+
specify do
|
|
75
|
+
cancel_email = Spree::OrderMailer.cancel_email(order)
|
|
76
|
+
expect(cancel_email).to have_body_text("4.99")
|
|
77
|
+
expect(cancel_email).to_not have_body_text("5.00")
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
context "emails must be translatable" do
|
|
82
|
+
|
|
83
|
+
context "pt-BR locale" do
|
|
84
|
+
before do
|
|
85
|
+
I18n.enforce_available_locales = false
|
|
86
|
+
pt_br_confirm_mail = { :spree => { :order_mailer => { :confirm_email => { :dear_customer => 'Caro Cliente,' } } } }
|
|
87
|
+
pt_br_cancel_mail = { :spree => { :order_mailer => { :cancel_email => { :order_summary_canceled => 'Resumo da Pedido [CANCELADA]' } } } }
|
|
88
|
+
I18n.backend.store_translations :'pt-BR', pt_br_confirm_mail
|
|
89
|
+
I18n.backend.store_translations :'pt-BR', pt_br_cancel_mail
|
|
90
|
+
I18n.locale = :'pt-BR'
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
after do
|
|
94
|
+
I18n.locale = I18n.default_locale
|
|
95
|
+
I18n.enforce_available_locales = true
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
context "confirm_email" do
|
|
99
|
+
specify do
|
|
100
|
+
confirmation_email = Spree::OrderMailer.confirm_email(order)
|
|
101
|
+
expect(confirmation_email).to have_body_text("Caro Cliente,")
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
context "cancel_email" do
|
|
106
|
+
specify do
|
|
107
|
+
cancel_email = Spree::OrderMailer.cancel_email(order)
|
|
108
|
+
expect(cancel_email).to have_body_text("Resumo da Pedido [CANCELADA]")
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
context "with preference :send_core_emails set to false" do
|
|
115
|
+
it "sends no email" do
|
|
116
|
+
Spree::Config.send_core_emails = false
|
|
117
|
+
message = Spree::OrderMailer.confirm_email(order)
|
|
118
|
+
expect(message.body).to be_blank
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'email_spec'
|
|
3
|
+
|
|
4
|
+
describe Spree::ReimbursementMailer, :type => :mailer do
|
|
5
|
+
include EmailSpec::Helpers
|
|
6
|
+
include EmailSpec::Matchers
|
|
7
|
+
|
|
8
|
+
let(:reimbursement) { create(:reimbursement) }
|
|
9
|
+
|
|
10
|
+
it "accepts a reimbursement id as an alternative to a Reimbursement object" do
|
|
11
|
+
expect(Spree::Reimbursement).to receive(:find).with(reimbursement.id).and_return(reimbursement)
|
|
12
|
+
|
|
13
|
+
expect {
|
|
14
|
+
Spree::ReimbursementMailer.reimbursement_email(reimbursement.id).body
|
|
15
|
+
}.not_to raise_error
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "emails must be translatable" do
|
|
19
|
+
context "reimbursement_email" do
|
|
20
|
+
context "pt-BR locale" do
|
|
21
|
+
before do
|
|
22
|
+
I18n.enforce_available_locales = false
|
|
23
|
+
pt_br_shipped_email = { :spree => { :reimbursement_mailer => { :reimbursement_email => { :dear_customer => 'Caro Cliente,' } } } }
|
|
24
|
+
I18n.backend.store_translations :'pt-BR', pt_br_shipped_email
|
|
25
|
+
I18n.locale = :'pt-BR'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
after do
|
|
29
|
+
I18n.locale = I18n.default_locale
|
|
30
|
+
I18n.enforce_available_locales = true
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
specify do
|
|
34
|
+
reimbursement_email = Spree::ReimbursementMailer.reimbursement_email(reimbursement)
|
|
35
|
+
expect(reimbursement_email.body).to include("Caro Cliente,")
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'email_spec'
|
|
3
|
+
|
|
4
|
+
describe Spree::TestMailer, :type => :mailer do
|
|
5
|
+
include EmailSpec::Helpers
|
|
6
|
+
include EmailSpec::Matchers
|
|
7
|
+
|
|
8
|
+
let(:user) { create(:user) }
|
|
9
|
+
|
|
10
|
+
it "confirm_email accepts a user id as an alternative to a User object" do
|
|
11
|
+
expect {
|
|
12
|
+
test_email = Spree::TestMailer.test_email('test@example.com')
|
|
13
|
+
}.not_to raise_error
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'cancan/matchers'
|
|
3
|
+
require 'spree/testing_support/ability_helpers'
|
|
4
|
+
require 'spree/testing_support/bar_ability'
|
|
5
|
+
|
|
6
|
+
# Fake ability for testing registration of additional abilities
|
|
7
|
+
class FooAbility
|
|
8
|
+
include CanCan::Ability
|
|
9
|
+
|
|
10
|
+
def initialize(user)
|
|
11
|
+
# allow anyone to perform index on Order
|
|
12
|
+
can :index, Spree::Order
|
|
13
|
+
# allow anyone to update an Order with id of 1
|
|
14
|
+
can :update, Spree::Order do |order|
|
|
15
|
+
order.id == 1
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe Spree::Ability, :type => :model do
|
|
21
|
+
let(:user) { build(:user) }
|
|
22
|
+
let(:ability) { Spree::Ability.new(user) }
|
|
23
|
+
let(:token) { nil }
|
|
24
|
+
|
|
25
|
+
after(:each) {
|
|
26
|
+
Spree::Ability.abilities = Set.new
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
describe "#initialize" do
|
|
30
|
+
subject { Spree::Ability.new(user) }
|
|
31
|
+
|
|
32
|
+
it "activates permissions from the role configuration" do
|
|
33
|
+
expect(Spree::RoleConfiguration.instance).to receive(:activate_permissions!).
|
|
34
|
+
once
|
|
35
|
+
|
|
36
|
+
subject
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
context 'register_ability' do
|
|
41
|
+
it 'should add the ability to the list of abilties' do
|
|
42
|
+
Spree::Ability.register_ability(FooAbility)
|
|
43
|
+
expect(Spree::Ability.new(user).abilities).not_to be_empty
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'should apply the registered abilities permissions' do
|
|
47
|
+
Spree::Ability.register_ability(FooAbility)
|
|
48
|
+
expect(Spree::Ability.new(user).can?(:update, mock_model(Spree::Order, :id => 1))).to be true
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
context 'for general resource' do
|
|
53
|
+
let(:resource) { Object.new }
|
|
54
|
+
|
|
55
|
+
context 'with admin user' do
|
|
56
|
+
before(:each) { allow(user).to receive(:has_spree_role?).and_return(true) }
|
|
57
|
+
it_should_behave_like 'access granted'
|
|
58
|
+
it_should_behave_like 'index allowed'
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context 'with customer' do
|
|
62
|
+
it_should_behave_like 'access denied'
|
|
63
|
+
it_should_behave_like 'no index allowed'
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
context 'for admin protected resources' do
|
|
68
|
+
let(:resource) { Object.new }
|
|
69
|
+
let(:resource_shipment) { Spree::Shipment.new }
|
|
70
|
+
let(:resource_product) { Spree::Product.new }
|
|
71
|
+
let(:resource_user) { create :user }
|
|
72
|
+
let(:resource_order) { Spree::Order.new }
|
|
73
|
+
let(:fakedispatch_user) { Spree.user_class.create }
|
|
74
|
+
let(:fakedispatch_ability) { Spree::Ability.new(fakedispatch_user) }
|
|
75
|
+
|
|
76
|
+
context 'with admin user' do
|
|
77
|
+
it 'should be able to admin' do
|
|
78
|
+
user.spree_roles << Spree::Role.find_or_create_by(name: 'admin')
|
|
79
|
+
expect(ability).to be_able_to :admin, resource
|
|
80
|
+
expect(ability).to be_able_to :index, resource_order
|
|
81
|
+
expect(ability).to be_able_to :show, resource_product
|
|
82
|
+
expect(ability).to be_able_to :create, resource_user
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
context 'with fakedispatch user' do
|
|
87
|
+
it 'should be able to admin on the order and shipment pages' do
|
|
88
|
+
user.spree_roles << Spree::Role.find_or_create_by(name: 'bar')
|
|
89
|
+
|
|
90
|
+
Spree::Ability.register_ability(BarAbility)
|
|
91
|
+
|
|
92
|
+
expect(ability).not_to be_able_to :admin, resource
|
|
93
|
+
|
|
94
|
+
expect(ability).to be_able_to :admin, resource_order
|
|
95
|
+
expect(ability).to be_able_to :index, resource_order
|
|
96
|
+
expect(ability).not_to be_able_to :update, resource_order
|
|
97
|
+
# ability.should_not be_able_to :create, resource_order # Fails
|
|
98
|
+
|
|
99
|
+
expect(ability).to be_able_to :admin, resource_shipment
|
|
100
|
+
expect(ability).to be_able_to :index, resource_shipment
|
|
101
|
+
expect(ability).to be_able_to :create, resource_shipment
|
|
102
|
+
|
|
103
|
+
expect(ability).not_to be_able_to :admin, resource_product
|
|
104
|
+
expect(ability).not_to be_able_to :update, resource_product
|
|
105
|
+
# ability.should_not be_able_to :show, resource_product # Fails
|
|
106
|
+
|
|
107
|
+
expect(ability).not_to be_able_to :admin, resource_user
|
|
108
|
+
expect(ability).not_to be_able_to :update, resource_user
|
|
109
|
+
expect(ability).to be_able_to :update, user
|
|
110
|
+
# ability.should_not be_able_to :create, resource_user # Fails
|
|
111
|
+
# It can create new users if is has access to the :admin, User!!
|
|
112
|
+
|
|
113
|
+
# TODO change the Ability class so only users and customers get the extra premissions?
|
|
114
|
+
|
|
115
|
+
Spree::Ability.remove_ability(BarAbility)
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
context 'with customer' do
|
|
120
|
+
it 'should not be able to admin' do
|
|
121
|
+
expect(ability).not_to be_able_to :admin, resource
|
|
122
|
+
expect(ability).not_to be_able_to :admin, resource_order
|
|
123
|
+
expect(ability).not_to be_able_to :admin, resource_product
|
|
124
|
+
expect(ability).not_to be_able_to :admin, resource_user
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
context 'as Guest User' do
|
|
130
|
+
|
|
131
|
+
context 'for Country' do
|
|
132
|
+
let(:resource) { Spree::Country.new }
|
|
133
|
+
context 'requested by any user' do
|
|
134
|
+
it_should_behave_like 'read only'
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
context 'for OptionType' do
|
|
139
|
+
let(:resource) { Spree::OptionType.new }
|
|
140
|
+
context 'requested by any user' do
|
|
141
|
+
it_should_behave_like 'read only'
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
context 'for OptionValue' do
|
|
146
|
+
let(:resource) { Spree::OptionType.new }
|
|
147
|
+
context 'requested by any user' do
|
|
148
|
+
it_should_behave_like 'read only'
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
context 'for Order' do
|
|
153
|
+
let(:resource) { Spree::Order.new }
|
|
154
|
+
|
|
155
|
+
context 'requested by same user' do
|
|
156
|
+
before(:each) { resource.user = user }
|
|
157
|
+
it_should_behave_like 'access granted'
|
|
158
|
+
it_should_behave_like 'no index allowed'
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
context 'requested by other user' do
|
|
162
|
+
before(:each) { resource.user = Spree.user_class.new }
|
|
163
|
+
it_should_behave_like 'create only'
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
context 'requested with proper token' do
|
|
167
|
+
let(:token) { 'TOKEN123' }
|
|
168
|
+
before(:each) { allow(resource).to receive_messages guest_token: 'TOKEN123' }
|
|
169
|
+
it_should_behave_like 'access granted'
|
|
170
|
+
it_should_behave_like 'no index allowed'
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
context 'requested with inproper token' do
|
|
174
|
+
let(:token) { 'FAIL' }
|
|
175
|
+
before(:each) { allow(resource).to receive_messages guest_token: 'TOKEN123' }
|
|
176
|
+
it_should_behave_like 'create only'
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
context 'for Product' do
|
|
181
|
+
let(:resource) { Spree::Product.new }
|
|
182
|
+
context 'requested by any user' do
|
|
183
|
+
it_should_behave_like 'read only'
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
context 'for ProductProperty' do
|
|
188
|
+
let(:resource) { Spree::Product.new }
|
|
189
|
+
context 'requested by any user' do
|
|
190
|
+
it_should_behave_like 'read only'
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
context 'for Property' do
|
|
195
|
+
let(:resource) { Spree::Product.new }
|
|
196
|
+
context 'requested by any user' do
|
|
197
|
+
it_should_behave_like 'read only'
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
context 'for State' do
|
|
202
|
+
let(:resource) { Spree::State.new }
|
|
203
|
+
context 'requested by any user' do
|
|
204
|
+
it_should_behave_like 'read only'
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
context 'for Stock Item' do
|
|
209
|
+
let(:resource) { Spree::StockItem.new }
|
|
210
|
+
context 'active stock location' do
|
|
211
|
+
before { resource.build_stock_location(active: true) }
|
|
212
|
+
it_should_behave_like 'read only'
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
context 'inactive stock location' do
|
|
216
|
+
before { resource.build_stock_location(active: false) }
|
|
217
|
+
it_should_behave_like 'access denied'
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
context 'for Stock Location' do
|
|
222
|
+
let(:resource) { Spree::StockLocation.new }
|
|
223
|
+
context 'active' do
|
|
224
|
+
before { resource.active = true }
|
|
225
|
+
it_should_behave_like 'read only'
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
context 'inactive' do
|
|
229
|
+
before { resource.active = false }
|
|
230
|
+
it_should_behave_like 'access denied'
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
context 'for Taxons' do
|
|
235
|
+
let(:resource) { Spree::Taxon.new }
|
|
236
|
+
context 'requested by any user' do
|
|
237
|
+
it_should_behave_like 'read only'
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
context 'for Taxonomy' do
|
|
242
|
+
let(:resource) { Spree::Taxonomy.new }
|
|
243
|
+
context 'requested by any user' do
|
|
244
|
+
it_should_behave_like 'read only'
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
context 'for User' do
|
|
249
|
+
context 'requested by same user' do
|
|
250
|
+
let(:resource) { user }
|
|
251
|
+
it_should_behave_like 'access granted'
|
|
252
|
+
it_should_behave_like 'no index allowed'
|
|
253
|
+
end
|
|
254
|
+
context 'requested by other user' do
|
|
255
|
+
let(:resource) { Spree.user_class.create }
|
|
256
|
+
it_should_behave_like 'create only'
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
context 'for Variant' do
|
|
261
|
+
let(:resource) { Spree::Variant.new }
|
|
262
|
+
context 'requested by any user' do
|
|
263
|
+
it_should_behave_like 'read only'
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
context 'for Zone' do
|
|
268
|
+
let(:resource) { Spree::Zone.new }
|
|
269
|
+
context 'requested by any user' do
|
|
270
|
+
it_should_behave_like 'read only'
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
end
|