spree_core 3.0.10 → 3.1.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/spree.js.coffee.erb +12 -3
- data/app/helpers/spree/base_helper.rb +4 -1
- data/app/helpers/spree/products_helper.rb +37 -6
- data/app/mailers/spree/base_mailer.rb +11 -2
- data/app/models/concerns/spree/adjustment_source.rb +3 -10
- data/app/models/concerns/spree/default_price.rb +7 -1
- data/app/models/concerns/spree/named_type.rb +1 -1
- data/app/models/concerns/spree/user_api_authentication.rb +7 -1
- data/app/models/concerns/spree/user_methods.rb +47 -0
- data/app/models/concerns/spree/user_reporting.rb +2 -2
- data/app/models/concerns/spree/vat_price_calculation.rb +47 -0
- data/app/models/spree/address.rb +8 -7
- data/app/models/spree/adjustable/adjuster/base.rb +25 -0
- data/app/models/spree/adjustable/adjuster/promotion.rb +41 -0
- data/app/models/spree/adjustable/adjuster/tax.rb +26 -0
- data/app/models/spree/adjustable/adjustments_updater.rb +22 -45
- data/app/models/spree/adjustment.rb +8 -10
- data/app/models/spree/app_configuration.rb +5 -2
- data/app/models/spree/base.rb +4 -0
- data/app/models/spree/calculator.rb +0 -5
- data/app/models/spree/calculator/default_tax.rb +2 -10
- data/app/models/spree/classification.rb +7 -3
- data/app/models/spree/country.rb +14 -3
- data/app/models/spree/credit_card.rb +21 -31
- data/app/models/spree/customer_return.rb +7 -15
- data/app/models/spree/gateway.rb +7 -6
- data/app/models/spree/image.rb +1 -1
- data/app/models/spree/inventory_unit.rb +9 -6
- data/app/models/spree/legacy_user.rb +1 -6
- data/app/models/spree/line_item.rb +69 -68
- data/app/models/spree/log_entry.rb +1 -4
- data/app/models/spree/option_type.rb +15 -6
- data/app/models/spree/option_type_prototype.rb +9 -0
- data/app/models/spree/option_value.rb +11 -3
- data/app/models/spree/option_value_variant.rb +6 -0
- data/app/models/spree/order.rb +113 -64
- data/app/models/spree/order/checkout.rb +8 -11
- data/app/models/spree/order/currency_updater.rb +1 -1
- data/app/models/spree/order/store_credit.rb +96 -0
- data/app/models/spree/order_contents.rb +6 -1
- data/app/models/spree/order_inventory.rb +4 -8
- data/app/models/spree/order_promotion.rb +6 -0
- data/app/models/spree/order_updater.rb +2 -7
- data/app/models/spree/payment.rb +46 -19
- data/app/models/spree/payment/gateway_options.rb +8 -4
- data/app/models/spree/payment_method.rb +12 -13
- data/app/models/spree/payment_method/store_credit.rb +130 -0
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/price.rb +16 -6
- data/app/models/spree/product.rb +52 -49
- data/app/models/spree/product/scopes.rb +7 -2
- data/app/models/spree/product_option_type.rb +7 -2
- data/app/models/spree/product_promotion_rule.rb +9 -0
- data/app/models/spree/product_property.rb +8 -10
- data/app/models/spree/promotion.rb +19 -19
- data/app/models/spree/promotion/rules/product.rb +3 -1
- data/app/models/spree/promotion/rules/taxon.rb +2 -1
- data/app/models/spree/promotion/rules/user.rb +4 -4
- data/app/models/spree/promotion_action.rb +3 -3
- data/app/models/spree/promotion_category.rb +1 -1
- data/app/models/spree/promotion_rule_taxon.rb +9 -0
- data/app/models/spree/promotion_rule_user.rb +9 -0
- data/app/models/spree/property.rb +2 -1
- data/app/models/spree/property_prototype.rb +9 -0
- data/app/models/spree/prototype.rb +8 -3
- data/app/models/spree/prototype_taxon.rb +9 -0
- data/app/models/spree/refund.rb +10 -7
- data/app/models/spree/refund_reason.rb +1 -1
- data/app/models/spree/reimbursement.rb +12 -16
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +23 -6
- data/app/models/spree/reimbursement_type/store_credit.rb +28 -0
- data/app/models/spree/return_authorization.rb +8 -13
- data/app/models/spree/return_authorization_reason.rb +1 -1
- data/app/models/spree/return_item.rb +13 -12
- data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
- data/app/models/spree/role.rb +3 -2
- data/app/models/spree/role_user.rb +6 -0
- data/app/models/spree/shipment.rb +18 -23
- data/app/models/spree/shipment_handler.rb +2 -2
- data/app/models/spree/shipping_category.rb +6 -3
- data/app/models/spree/shipping_method.rb +11 -10
- data/app/models/spree/shipping_method_zone.rb +6 -0
- data/app/models/spree/shipping_rate.rb +16 -29
- data/app/models/spree/state.rb +3 -2
- data/app/models/spree/state_change.rb +1 -1
- data/app/models/spree/stock/content_item.rb +10 -12
- data/app/models/spree/stock/coordinator.rb +13 -14
- data/app/models/spree/stock/estimator.rb +28 -30
- data/app/models/spree/stock/inventory_unit_builder.rb +1 -9
- data/app/models/spree/stock/packer.rb +1 -1
- data/app/models/spree/stock/quantifier.rb +5 -5
- data/app/models/spree/stock/splitter/backordered.rb +2 -2
- data/app/models/spree/stock_item.rb +12 -18
- data/app/models/spree/stock_location.rb +4 -7
- data/app/models/spree/stock_movement.rb +11 -9
- data/app/models/spree/stock_transfer.rb +11 -12
- data/app/models/spree/store.rb +14 -6
- data/app/models/spree/store_credit.rb +252 -0
- data/app/models/spree/store_credit_category.rb +22 -0
- data/app/models/spree/store_credit_event.rb +38 -0
- data/app/models/spree/store_credit_type.rb +6 -0
- data/app/models/spree/tax_category.rb +3 -8
- data/app/models/spree/tax_rate.rb +56 -122
- data/app/models/spree/taxon.rb +11 -5
- data/app/models/spree/tracker.rb +12 -1
- data/app/models/spree/validations/db_maximum_length_validator.rb +2 -1
- data/app/models/spree/variant.rb +82 -50
- data/app/models/spree/zone.rb +21 -17
- data/app/models/spree/zone_member.rb +6 -0
- data/app/validators/db_maximum_length_validator.rb +11 -0
- data/app/views/layouts/spree/base_mailer.html.erb +38 -781
- data/app/views/spree/order_mailer/_adjustment.html.erb +8 -0
- data/app/views/spree/order_mailer/_subtotal.html.erb +8 -0
- data/app/views/spree/order_mailer/_total.html.erb +8 -0
- data/app/views/spree/order_mailer/cancel_email.html.erb +13 -28
- data/app/views/spree/order_mailer/cancel_email.text.erb +1 -1
- data/app/views/spree/order_mailer/confirm_email.html.erb +49 -63
- data/app/views/spree/order_mailer/confirm_email.text.erb +1 -1
- data/app/views/spree/shared/_base_mailer_header.html.erb +5 -7
- data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +777 -0
- data/app/views/spree/shared/_error_messages.html.erb +1 -1
- data/app/views/spree/shared/_mailer_line_item.html.erb +12 -0
- data/app/views/spree/shipment_mailer/shipped_email.html.erb +21 -14
- data/app/views/spree/shipment_mailer/shipped_email.text.erb +3 -3
- data/config/initializers/user_class_extensions.rb +7 -38
- data/config/locales/en.yml +113 -13
- data/config/routes.rb +7 -0
- data/db/default/spree/default_reimbursement_type.rb +1 -1
- data/db/default/spree/zones.rb +4 -5
- data/db/migrate/20150118210639_create_spree_store_credits.rb +24 -0
- data/db/migrate/20150118211500_create_spree_store_credit_categories.rb +8 -0
- data/db/migrate/20150118212051_create_spree_store_credit_events.rb +17 -0
- data/db/migrate/20150118212101_create_spree_store_credit_types.rb +10 -0
- data/db/migrate/20150314013438_add_missing_indexes.rb +25 -0
- data/db/migrate/20150317174308_remove_duplicated_indexes_from_multi_columns.rb +18 -0
- data/db/migrate/20150324104002_remove_user_index_from_spree_state_changes.rb +14 -0
- data/db/migrate/20150522071831_add_position_to_spree_payment_methods.rb +5 -0
- data/db/migrate/20150626181949_add_taxable_adjustment_total_to_line_item.rb +19 -0
- data/db/migrate/20150627090949_migrate_payment_methods_display.rb +12 -0
- data/db/migrate/20150714154102_spree_payment_method_store_credits.rb +12 -0
- data/db/migrate/20150726141425_rename_has_and_belongs_to_associations_to_model_names.rb +18 -0
- data/db/migrate/20150727191614_spree_store_credit_types.rb +11 -0
- data/db/migrate/20150819154308_add_discontinued_to_products_and_variants.rb +68 -0
- data/db/migrate/20151220072838_remove_shipping_method_id_from_spree_orders.rb +13 -0
- data/db/migrate/20160207191757_add_id_column_to_earlier_habtm_tables.rb +16 -0
- data/db/migrate/20160219165458_add_indexes.rb +14 -0
- data/lib/generators/spree/dummy/templates/rails/database.yml +31 -24
- data/lib/generators/spree/dummy/templates/rails/test.rb +2 -1
- data/lib/spree/core.rb +16 -0
- data/lib/spree/core/controller_helpers/auth.rb +1 -1
- data/lib/spree/core/controller_helpers/common.rb +3 -3
- data/lib/spree/core/controller_helpers/order.rb +6 -5
- data/lib/spree/core/controller_helpers/search.rb +1 -1
- data/lib/spree/core/controller_helpers/store.rb +29 -0
- data/lib/spree/core/delegate_belongs_to.rb +2 -2
- data/lib/spree/core/engine.rb +30 -25
- data/lib/spree/core/environment.rb +1 -1
- data/lib/spree/core/importer/order.rb +37 -40
- data/lib/spree/core/number_generator.rb +52 -0
- data/lib/spree/core/product_filters.rb +1 -1
- data/lib/spree/core/search/base.rb +4 -3
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/localized_number.rb +3 -1
- data/lib/spree/permitted_attributes.rb +5 -2
- data/lib/spree/testing_support/common_rake.rb +3 -3
- data/lib/spree/testing_support/factories.rb +3 -3
- data/lib/spree/testing_support/factories/address_factory.rb +1 -1
- data/lib/spree/testing_support/factories/country_factory.rb +2 -2
- data/lib/spree/testing_support/factories/order_factory.rb +2 -2
- data/lib/spree/testing_support/factories/payment_factory.rb +5 -0
- data/lib/spree/testing_support/factories/payment_method_factory.rb +8 -0
- data/lib/spree/testing_support/factories/promotion_rule_factory.rb +5 -0
- data/lib/spree/testing_support/factories/refund_factory.rb +9 -1
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +2 -0
- data/lib/spree/testing_support/factories/state_factory.rb +2 -2
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +9 -0
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +8 -0
- data/lib/spree/testing_support/factories/store_credit_factory.rb +17 -0
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +11 -0
- data/lib/spree/testing_support/factories/user_factory.rb +1 -1
- data/lib/spree/testing_support/factories/zone_member_factory.rb +6 -0
- data/lib/spree/testing_support/microdata.rb +189 -0
- data/lib/tasks/core.rake +68 -0
- data/lib/tasks/exchanges.rake +2 -2
- data/spec/fixtures/microdata.html +22 -0
- data/spec/fixtures/microdata_itemref.html +15 -0
- data/spec/fixtures/microdata_no_itemscope.html +20 -0
- data/spec/helpers/base_helper_spec.rb +64 -1
- data/spec/helpers/products_helper_spec.rb +75 -3
- data/spec/lib/i18n_spec.rb +2 -2
- data/spec/lib/search/base_spec.rb +2 -2
- data/spec/lib/spree/core/controller_helpers/auth_spec.rb +4 -2
- data/spec/lib/spree/core/controller_helpers/store_spec.rb +56 -0
- data/spec/lib/spree/core/importer/order_spec.rb +226 -123
- data/spec/lib/spree/core/number_generator_spec.rb +175 -0
- data/spec/lib/spree/core_spec.rb +23 -0
- data/spec/lib/spree/localized_number_spec.rb +10 -0
- data/spec/mailers/order_mailer_spec.rb +11 -13
- data/spec/mailers/shipment_mailer_spec.rb +26 -8
- data/spec/mailers/test_mailer_spec.rb +15 -1
- data/spec/models/option_type_prototype_spec.rb +9 -0
- data/spec/models/spree/ability_spec.rb +6 -13
- data/spec/models/spree/address_spec.rb +1 -1
- data/spec/models/spree/adjustable/adjuster/base_spec.rb +10 -0
- data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +211 -0
- data/spec/models/spree/adjustable/adjuster/tax_spec.rb +86 -0
- data/spec/models/spree/adjustable/adjustments_updater_spec.rb +2 -262
- data/spec/models/spree/adjustment_spec.rb +27 -1
- data/spec/models/spree/app_configuration_spec.rb +5 -2
- data/spec/models/spree/calculator/default_tax_spec.rb +39 -14
- data/spec/models/spree/concerns/user_methods_spec.rb +55 -0
- data/spec/models/spree/concerns/vat_price_calculation_spec.rb +66 -0
- data/spec/models/spree/country_spec.rb +45 -8
- data/spec/models/spree/credit_card_spec.rb +8 -8
- data/spec/models/spree/customer_return_spec.rb +4 -26
- data/spec/models/spree/gateway_spec.rb +7 -0
- data/spec/models/spree/image_spec.rb +3 -0
- data/spec/models/spree/inventory_unit_spec.rb +1 -18
- data/spec/models/spree/line_item_spec.rb +78 -18
- data/spec/models/spree/option_type_spec.rb +2 -2
- data/spec/models/spree/option_value_spec.rb +8 -3
- data/spec/models/spree/order/checkout_spec.rb +49 -39
- data/spec/models/spree/order/currency_updater_spec.rb +3 -3
- data/spec/models/spree/order/finalizing_spec.rb +0 -3
- data/spec/models/spree/order/payment_spec.rb +1 -1
- data/spec/models/spree/order/state_machine_spec.rb +1 -6
- data/spec/models/spree/order/store_credit_spec.rb +423 -0
- data/spec/models/spree/order/updating_spec.rb +2 -2
- data/spec/models/spree/order_contents_spec.rb +42 -1
- data/spec/models/spree/order_inventory_spec.rb +27 -17
- data/spec/models/spree/order_spec.rb +65 -52
- data/spec/models/spree/payment/gateway_options_spec.rb +10 -2
- data/spec/models/spree/payment/store_credit_spec.rb +60 -0
- data/spec/models/spree/payment_method/store_credit_spec.rb +291 -0
- data/spec/models/spree/payment_method_spec.rb +22 -14
- data/spec/models/spree/payment_spec.rb +37 -44
- data/spec/models/spree/price_spec.rb +86 -0
- data/spec/models/spree/product/scopes_spec.rb +35 -0
- data/spec/models/spree/product_option_type_spec.rb +6 -2
- data/spec/models/spree/product_promotion_rule_spec.rb +9 -0
- data/spec/models/spree/product_property_spec.rb +11 -0
- data/spec/models/spree/product_spec.rb +82 -15
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +1 -1
- data/spec/models/spree/promotion/rules/user_spec.rb +8 -0
- data/spec/models/spree/promotion_action_spec.rb +1 -1
- data/spec/models/spree/promotion_rule_spec.rb +1 -1
- data/spec/models/spree/promotion_rule_taxon_spec.rb +9 -0
- data/spec/models/spree/promotion_rule_user_spec.rb +9 -0
- data/spec/models/spree/promotion_spec.rb +57 -36
- data/spec/models/spree/property_prototype_spec.rb +9 -0
- data/spec/models/spree/prototype_taxon_spec.rb +9 -0
- data/spec/models/spree/refund_reason_spec.rb +7 -0
- data/spec/models/spree/reimbursement_spec.rb +3 -30
- data/spec/models/spree/reimbursement_tax_calculator_spec.rb +17 -5
- data/spec/models/spree/reimbursement_type/store_credit_spec.rb +101 -0
- data/spec/models/spree/return_authorization_reason_spec.rb +7 -0
- data/spec/models/spree/return_authorization_spec.rb +2 -22
- data/spec/models/spree/return_item_spec.rb +50 -1
- data/spec/models/spree/returns_calculator_spec.rb +1 -1
- data/spec/models/spree/role_spec.rb +7 -0
- data/spec/models/spree/shipment_spec.rb +17 -17
- data/spec/models/spree/shipping_calculator_spec.rb +2 -2
- data/spec/models/spree/shipping_category_spec.rb +14 -0
- data/spec/models/spree/shipping_method_spec.rb +9 -2
- data/spec/models/spree/shipping_rate_spec.rb +40 -41
- data/spec/models/spree/state_spec.rb +12 -1
- data/spec/models/spree/stock/content_item_spec.rb +9 -0
- data/spec/models/spree/stock/estimator_spec.rb +56 -8
- data/spec/models/spree/stock/quantifier_spec.rb +61 -32
- data/spec/models/spree/stock_item_spec.rb +19 -1
- data/spec/models/spree/store_credit_event_spec.rb +101 -0
- data/spec/models/spree/store_credit_spec.rb +786 -0
- data/spec/models/spree/store_spec.rb +39 -11
- data/spec/models/spree/tax_category_spec.rb +6 -1
- data/spec/models/spree/tax_rate_spec.rb +204 -44
- data/spec/models/spree/user_spec.rb +105 -38
- data/spec/models/spree/variant_spec.rb +281 -9
- data/spec/models/spree/zone_member_spec.rb +38 -0
- data/spec/models/spree/zone_spec.rb +32 -8
- data/spec/spec_helper.rb +3 -0
- data/spec/support/concerns/{adjustment_source_spec.rb → adjustment_source.rb} +0 -0
- data/spec/support/concerns/{default_price_spec.rb → default_price.rb} +9 -0
- data/spec/validators/db_maximum_length_validator_spec.rb +22 -0
- data/spree_core.gemspec +5 -6
- metadata +99 -36
- data/CHANGELOG.md +0 -4
- data/app/models/concerns/spree/number_generator.rb +0 -39
- data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -24
data/lib/tasks/core.rake
CHANGED
@@ -98,4 +98,72 @@ use rake db:load_file[/absolute/path/to/sample/filename.rb]}
|
|
98
98
|
puts "Bootstrap Complete.\n\n"
|
99
99
|
end
|
100
100
|
|
101
|
+
|
102
|
+
|
103
|
+
desc "Fix orphan line items after upgrading to Spree 3.1: only needed if you have line items attached to deleted records with Slug (product) and SKU (variant) duplicates of non-deleted records."
|
104
|
+
task :fix_orphan_line_items => :environment do |t, args|
|
105
|
+
def get_input
|
106
|
+
STDOUT.flush
|
107
|
+
input = STDIN.gets.chomp
|
108
|
+
case input.upcase
|
109
|
+
when "Y"
|
110
|
+
return true
|
111
|
+
|
112
|
+
when "N"
|
113
|
+
puts "aborting ....."
|
114
|
+
return false
|
115
|
+
else
|
116
|
+
return true
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
puts "WARNING: This task will re-associate any line_items associated with deleted variants to non-deleted variants with matching SKUs. Because other attributes and product associations may switch during the re-association, this may have unintended side-effects. If this task finishes successfully, line items for old order should no longer be orphaned from their varaints. You should run this task after you have already run the db migratoin AddDiscontinuedToProductsAndVariants. If the db migration did not warn you that it was leaving deleted records in place because of duplicate SKUs, then you do not need to run this rake task."
|
121
|
+
puts "Are you sure you want to continue? (Y/n):"
|
122
|
+
|
123
|
+
if get_input
|
124
|
+
puts "looping through all your deleted variants ..."
|
125
|
+
|
126
|
+
# first verify that I can really fix all of your line items
|
127
|
+
|
128
|
+
no_live_variants_found = []
|
129
|
+
variants_to_fix = []
|
130
|
+
|
131
|
+
Spree::Variant.deleted.each do |variant|
|
132
|
+
# check if this variant has any line items at all
|
133
|
+
if !variant.line_items.any?
|
134
|
+
next
|
135
|
+
end
|
136
|
+
|
137
|
+
variants_to_fix << variant
|
138
|
+
dup_variant = Spree::Variant.find_by(sku: variant.sku)
|
139
|
+
if dup_variant
|
140
|
+
# this variant is OK
|
141
|
+
else
|
142
|
+
no_live_variants_found << variant
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
if !variants_to_fix.any?
|
147
|
+
abort( "ABORT: You have no deleted variants that are associated to line items. You do not need to run this raks task.")
|
148
|
+
end
|
149
|
+
|
150
|
+
if no_live_variants_found.any?
|
151
|
+
puts "ABORT: Unfortunately, I found some deleted variants in your database that do not have matching non-deleted variants to replace them with. This script can only be used to cleanup deleted variants that have SKUs that match non-deleted variants. To continue, you must either (1) un-delete these variants (hint: mark them 'discontinued' instead) or (2) create new variants with a matching SKU for each variant in the list below."
|
152
|
+
no_live_variants_found.each do |deleted_variant|
|
153
|
+
puts "variant id #{deleted_variant.id} (sku is '#{deleted_variant.sku}') ... no match found"
|
154
|
+
end
|
155
|
+
abort()
|
156
|
+
end
|
157
|
+
|
158
|
+
|
159
|
+
puts "Ready to fix..."
|
160
|
+
variants_to_fix.each do |variant|
|
161
|
+
dup_variant = Spree::Variant.find_by(sku: variant.sku)
|
162
|
+
puts "Changing all line items for #{variant.sku} variant id #{variant.id} (deleted) to variant id #{dup_variant.id} (not deleted) ..."
|
163
|
+
Spree::LineItem.unscoped.where(variant_id: variant.id).update_all(variant_id: dup_variant.id)
|
164
|
+
end
|
165
|
+
|
166
|
+
puts "DONE ! Your database should no longer have line items that are associated with deleted variants."
|
167
|
+
end
|
168
|
+
end
|
101
169
|
end
|
data/lib/tasks/exchanges.rake
CHANGED
@@ -35,7 +35,7 @@ namespace :exchanges do
|
|
35
35
|
variant_inventory_units.each { |i| i.update_attributes!(line_item_id: line_item.id, order_id: order.id) }
|
36
36
|
end
|
37
37
|
|
38
|
-
order.reload.
|
38
|
+
order.reload.update_with_updater!
|
39
39
|
while order.state != order.checkout_steps[-2] && order.next; end
|
40
40
|
|
41
41
|
unless order.payments.present?
|
@@ -54,7 +54,7 @@ namespace :exchanges do
|
|
54
54
|
order.update_attributes!(state: "confirm")
|
55
55
|
|
56
56
|
order.reload.next!
|
57
|
-
order.
|
57
|
+
order.update_with_updater!
|
58
58
|
order.finalize!
|
59
59
|
|
60
60
|
failed_orders << order unless order.completed? && order.valid?
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<!-- shameless -->
|
4
|
+
<head>
|
5
|
+
<title>Jason Ronallo</title>
|
6
|
+
</head>
|
7
|
+
|
8
|
+
<body>
|
9
|
+
<span itemscope itemtype="http://schema.org/Person"
|
10
|
+
itemid="http://ronallo.com#me">
|
11
|
+
<a itemprop="url" href="http://twitter.com/ronallo">
|
12
|
+
<span itemprop="name">Jason Ronallo</span>
|
13
|
+
</a> is the
|
14
|
+
<span itemprop="jobTitle">Associate Head of Digital Library Initiatives</span> at
|
15
|
+
<span itemprop="affiliation" itemscope itemtype="http://schema.org/Library" itemid="http://lib.ncsu.edu">
|
16
|
+
<span itemprop="name">
|
17
|
+
<a itemprop="url" href="http://www.lib.ncsu.edu">NCSU Libraries</a>
|
18
|
+
</span>
|
19
|
+
</span>
|
20
|
+
</span>
|
21
|
+
</body>
|
22
|
+
</html>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>itemref example from Microdata spec</title>
|
5
|
+
</head>
|
6
|
+
<body>
|
7
|
+
<div itemscope id="amanda" itemref="a b"></div>
|
8
|
+
<p id="a">Name: <span itemprop="name">Amanda</span></p>
|
9
|
+
<div id="b" itemprop="band" itemscope itemref="c"></div>
|
10
|
+
<div id="c">
|
11
|
+
<p>Band: <span itemprop="name">Jazz Band</span></p>
|
12
|
+
<p>Size: <span itemprop="size">12</span> players</p>
|
13
|
+
</div>
|
14
|
+
</body>
|
15
|
+
</html>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Jason Ronallo</title>
|
5
|
+
</head>
|
6
|
+
<body>
|
7
|
+
<span itemtype="http://schema.org/Person"
|
8
|
+
itemid="http://ronallo.com#me">
|
9
|
+
<a itemprop="url" href="http://twitter.com/ronallo">
|
10
|
+
<span itemprop="name">Jason Ronallo</span>
|
11
|
+
</a> is the
|
12
|
+
<span itemprop="jobTitle">Associate Head of Digital Library Initiatives</span> at
|
13
|
+
<span itemprop="affiliation" itemtype="http://schema.org/Library" itemid="http://lib.ncsu.edu">
|
14
|
+
<span itemprop="name">
|
15
|
+
<a itemprop="url" href="http://www.lib.ncsu.edu">NCSU Libraries</a>
|
16
|
+
</span>
|
17
|
+
</span>
|
18
|
+
</span>
|
19
|
+
</body>
|
20
|
+
</html>
|
@@ -103,7 +103,7 @@ describe Spree::BaseHelper, type: :helper do
|
|
103
103
|
# Because the controller_name method returns "test"
|
104
104
|
# controller_name is used by this method to infer what it is supposed
|
105
105
|
# to be generating meta_data_tags for
|
106
|
-
text =
|
106
|
+
text = FFaker::Lorem.paragraphs(2).join(" ")
|
107
107
|
@test = Spree::Product.new(:description => text)
|
108
108
|
tags = Nokogiri::HTML.parse(meta_data_tags)
|
109
109
|
content = tags.css("meta[name=description]").first["content"]
|
@@ -134,4 +134,67 @@ describe Spree::BaseHelper, type: :helper do
|
|
134
134
|
expect(pretty_time(DateTime.new(2012, 5, 6, 13, 33))).to eq "May 06, 2012 1:33 PM"
|
135
135
|
end
|
136
136
|
end
|
137
|
+
|
138
|
+
describe "#display_price" do
|
139
|
+
let!(:product) { create(:product) }
|
140
|
+
let(:current_currency) { "USD" }
|
141
|
+
let(:current_price_options) { { tax_zone: current_tax_zone } }
|
142
|
+
|
143
|
+
context "when there is no current order" do
|
144
|
+
let (:current_tax_zone) { nil }
|
145
|
+
|
146
|
+
it "returns the price including default vat" do
|
147
|
+
expect(display_price(product)).to eq("$19.99")
|
148
|
+
end
|
149
|
+
|
150
|
+
context "with a default VAT" do
|
151
|
+
let(:current_tax_zone) { create(:zone_with_country, default_tax: true) }
|
152
|
+
let!(:tax_rate) do
|
153
|
+
create :tax_rate,
|
154
|
+
included_in_price: true,
|
155
|
+
zone: current_tax_zone,
|
156
|
+
tax_category: product.tax_category,
|
157
|
+
amount: 0.2
|
158
|
+
end
|
159
|
+
|
160
|
+
it "returns the price adding the VAT" do
|
161
|
+
expect(display_price(product)).to eq("$19.99")
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
context "with an order that has a tax zone" do
|
167
|
+
let(:current_tax_zone) { create(:zone_with_country) }
|
168
|
+
let(:current_order) { Spree::Order.new }
|
169
|
+
let(:default_zone) { create(:zone_with_country, default_tax: true) }
|
170
|
+
|
171
|
+
let!(:default_vat) do
|
172
|
+
create :tax_rate,
|
173
|
+
included_in_price: true,
|
174
|
+
zone: default_zone,
|
175
|
+
tax_category: product.tax_category,
|
176
|
+
amount: 0.2
|
177
|
+
end
|
178
|
+
|
179
|
+
context "that matches no VAT" do
|
180
|
+
it "returns the price excluding VAT" do
|
181
|
+
expect(display_price(product)).to eq("$16.66")
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
context "that matches a VAT" do
|
186
|
+
let!(:other_vat) do
|
187
|
+
create :tax_rate,
|
188
|
+
included_in_price: true,
|
189
|
+
zone: current_tax_zone,
|
190
|
+
tax_category: product.tax_category,
|
191
|
+
amount: 0.4
|
192
|
+
end
|
193
|
+
|
194
|
+
it "returns the price adding the VAT" do
|
195
|
+
expect(display_price(product)).to eq("$23.32")
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
137
200
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
require
|
3
|
+
require "spec_helper"
|
4
4
|
|
5
5
|
module Spree
|
6
6
|
describe ProductsHelper, :type => :helper do
|
@@ -158,6 +158,10 @@ THIS IS THE BEST PRODUCT EVER!
|
|
158
158
|
expect(description).to eq(initialDescription)
|
159
159
|
end
|
160
160
|
|
161
|
+
context "renders a product description default description incase description is blank" do
|
162
|
+
before { product.description = '' }
|
163
|
+
it { expect(product_description(product)).to eq(Spree.t(:product_has_no_description)) }
|
164
|
+
end
|
161
165
|
end
|
162
166
|
|
163
167
|
shared_examples_for "line item descriptions" do
|
@@ -193,10 +197,14 @@ THIS IS THE BEST PRODUCT EVER!
|
|
193
197
|
end
|
194
198
|
|
195
199
|
context '#cache_key_for_products' do
|
200
|
+
let(:zone) { Spree::Zone.new }
|
201
|
+
let(:price_options) { { tax_zone: zone } }
|
202
|
+
|
196
203
|
subject { helper.cache_key_for_products }
|
197
204
|
before(:each) do
|
198
205
|
@products = double('products collection')
|
199
206
|
allow(helper).to receive(:params) { {:page => 10} }
|
207
|
+
allow(helper).to receive(:current_price_options) { price_options }
|
200
208
|
end
|
201
209
|
|
202
210
|
context 'when there is a maximum updated date' do
|
@@ -206,7 +214,7 @@ THIS IS THE BEST PRODUCT EVER!
|
|
206
214
|
allow(@products).to receive(:maximum).with(:updated_at) { updated_at }
|
207
215
|
end
|
208
216
|
|
209
|
-
it { is_expected.to eq(
|
217
|
+
it { is_expected.to eq("en/USD/spree/zones/new/spree/products/all-10-20111213-5") }
|
210
218
|
end
|
211
219
|
|
212
220
|
context 'when there is no considered maximum updated date' do
|
@@ -217,7 +225,71 @@ THIS IS THE BEST PRODUCT EVER!
|
|
217
225
|
allow(Date).to receive(:today) { today }
|
218
226
|
end
|
219
227
|
|
220
|
-
it { is_expected.to eq(
|
228
|
+
it { is_expected.to eq("en/USD/spree/zones/new/spree/products/all-10-20131211-1234567") }
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
context "#cache_key_for_product" do
|
233
|
+
let(:product) { Spree::Product.new }
|
234
|
+
let(:price_options) { { tax_zone: zone } }
|
235
|
+
|
236
|
+
subject(:cache_key) { helper.cache_key_for_product(product) }
|
237
|
+
|
238
|
+
before do
|
239
|
+
allow(helper).to receive(:current_price_options) { price_options }
|
240
|
+
end
|
241
|
+
|
242
|
+
context "when there is a current tax zone" do
|
243
|
+
let(:zone) { Spree::Zone.new }
|
244
|
+
|
245
|
+
it "includes the current_tax_zone" do
|
246
|
+
is_expected.to eq("en/USD/spree/zones/new/spree/products/new/")
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
context "when there is no current tax zone" do
|
251
|
+
let(:zone) { nil }
|
252
|
+
|
253
|
+
it { is_expected.to eq("en/USD/spree/products/new/") }
|
254
|
+
end
|
255
|
+
|
256
|
+
context "when current_price_options includes nil values" do
|
257
|
+
let(:price_options) do
|
258
|
+
{
|
259
|
+
a: nil,
|
260
|
+
b: Spree::Zone.new
|
261
|
+
}
|
262
|
+
end
|
263
|
+
|
264
|
+
it "does not include nil values" do
|
265
|
+
expect(cache_key).to eq("en/USD/spree/zones/new/spree/products/new/")
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
context "when current_price_options includes values that do not implement cache_key" do
|
270
|
+
let(:price_options) do
|
271
|
+
{
|
272
|
+
a: true,
|
273
|
+
b: Spree::Zone.new
|
274
|
+
}
|
275
|
+
end
|
276
|
+
|
277
|
+
it "includes string representations of these values" do
|
278
|
+
expect(cache_key).to eq("en/USD/true/spree/zones/new/spree/products/new/")
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
context "when keys in the options hash are inserted in non-alphabetical order" do
|
283
|
+
let(:price_options) do
|
284
|
+
{
|
285
|
+
b: Spree::Zone.new,
|
286
|
+
a: true
|
287
|
+
}
|
288
|
+
end
|
289
|
+
|
290
|
+
it "the values are nevertheless returned in alphabetical order of their keys" do
|
291
|
+
expect(cache_key).to eq("en/USD/true/spree/zones/new/spree/products/new/")
|
292
|
+
end
|
221
293
|
end
|
222
294
|
end
|
223
295
|
end
|
data/spec/lib/i18n_spec.rb
CHANGED
@@ -34,11 +34,11 @@ describe "i18n" do
|
|
34
34
|
it "raise error without any context when using a path" do
|
35
35
|
expect {
|
36
36
|
Spree.normal_t('.legacy_translation')
|
37
|
-
}.to raise_error
|
37
|
+
}.to raise_error(StandardError)
|
38
38
|
|
39
39
|
expect {
|
40
40
|
Spree.translate('.legacy_translation')
|
41
|
-
}.to raise_error
|
41
|
+
}.to raise_error(StandardError)
|
42
42
|
end
|
43
43
|
|
44
44
|
it "prepends a string scope" do
|
@@ -22,8 +22,8 @@ describe Spree::Core::Search::Base do
|
|
22
22
|
subject { described_class.new(params).retrieve_products }
|
23
23
|
|
24
24
|
before do
|
25
|
-
@product1.master.images
|
26
|
-
@product1.master.images
|
25
|
+
@product1.master.images << create(:image, position: 2)
|
26
|
+
@product1.master.images << create(:image, position: 1)
|
27
27
|
@product1.reload
|
28
28
|
end
|
29
29
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'spree/testing_support/url_helpers'
|
2
3
|
|
3
4
|
class FakesController < ApplicationController
|
4
5
|
include Spree::Core::ControllerHelpers::Auth
|
@@ -7,6 +8,7 @@ end
|
|
7
8
|
|
8
9
|
describe Spree::Core::ControllerHelpers::Auth, type: :controller do
|
9
10
|
controller(FakesController) {}
|
11
|
+
include Spree::TestingSupport::UrlHelpers
|
10
12
|
|
11
13
|
describe '#current_ability' do
|
12
14
|
it 'returns Spree::Ability instance' do
|
@@ -77,9 +79,9 @@ describe Spree::Core::ControllerHelpers::Auth, type: :controller do
|
|
77
79
|
before do
|
78
80
|
allow(controller).to receive_messages(try_spree_current_user: double('User', id: 1, last_incomplete_spree_order: nil))
|
79
81
|
end
|
80
|
-
it 'redirects
|
82
|
+
it 'redirects forbidden path' do
|
81
83
|
get :index
|
82
|
-
expect(response).to redirect_to(
|
84
|
+
expect(response).to redirect_to(spree.forbidden_path)
|
83
85
|
end
|
84
86
|
end
|
85
87
|
context 'when guest user' do
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
class FakesController < ApplicationController
|
4
|
+
include Spree::Core::ControllerHelpers::Auth
|
5
|
+
include Spree::Core::ControllerHelpers::Order
|
4
6
|
include Spree::Core::ControllerHelpers::Store
|
5
7
|
end
|
6
8
|
|
@@ -13,4 +15,58 @@ describe Spree::Core::ControllerHelpers::Store, type: :controller do
|
|
13
15
|
expect(controller.current_store).to eq store
|
14
16
|
end
|
15
17
|
end
|
18
|
+
|
19
|
+
describe "#current_price_options" do
|
20
|
+
subject(:current_price_options) { controller.current_price_options }
|
21
|
+
|
22
|
+
context "when there is a default tax zone" do
|
23
|
+
let(:default_zone) { Spree::Zone.new }
|
24
|
+
|
25
|
+
before do
|
26
|
+
allow(Spree::Zone).to receive(:default_tax).and_return(default_zone)
|
27
|
+
end
|
28
|
+
|
29
|
+
context "when there is no current order" do
|
30
|
+
it "returns the default tax zone" do
|
31
|
+
is_expected.to include(tax_zone: default_zone)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "when there is a current order" do
|
36
|
+
let(:other_zone) { Spree::Zone.new }
|
37
|
+
let(:current_order) { Spree::Order.new }
|
38
|
+
|
39
|
+
before do
|
40
|
+
allow(current_order).to receive(:tax_zone).and_return(other_zone)
|
41
|
+
allow(controller).to receive(:current_order).and_return(current_order)
|
42
|
+
end
|
43
|
+
|
44
|
+
it { is_expected.to include(tax_zone: other_zone) }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "when there is no default tax zone" do
|
49
|
+
before do
|
50
|
+
allow(Spree::Zone).to receive(:default_tax).and_return(nil)
|
51
|
+
end
|
52
|
+
|
53
|
+
context "when there is no current order" do
|
54
|
+
it "return nil when asked for the current tax zone" do
|
55
|
+
expect(current_price_options[:tax_zone]).to be_nil
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "when there is a current order" do
|
60
|
+
let(:other_zone) { Spree::Zone.new }
|
61
|
+
let(:current_order) { Spree::Order.new }
|
62
|
+
|
63
|
+
before do
|
64
|
+
allow(current_order).to receive(:tax_zone).and_return(other_zone)
|
65
|
+
allow(controller).to receive(:current_order).and_return(current_order)
|
66
|
+
end
|
67
|
+
|
68
|
+
it { is_expected.to include(tax_zone: other_zone) }
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
16
72
|
end
|