datashift_spree 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.txt +27 -0
- data/README.markdown +81 -0
- data/VERSION +1 -0
- data/datashift_spree.gemspec +36 -0
- data/datashift_spree.thor +52 -0
- data/lib/datashift_spree.rb +118 -0
- data/lib/datashift_spree_helper.rb +32 -0
- data/lib/helpers/spree_helper.rb +74 -0
- data/lib/loaders/spree/image_loader.rb +74 -0
- data/lib/loaders/spree/product_loader.rb +359 -0
- data/lib/thor/spree/bootstrap_cleanup.thor +61 -0
- data/lib/thor/spree/products_images.thor +252 -0
- data/lib/thor/spree/reports.thor +56 -0
- data/spec/Gemfile +28 -0
- data/spec/Gemfile.lock +243 -0
- data/spec/VERSION +1 -0
- data/spec/fixtures/SpreeImages.xls +0 -0
- data/spec/fixtures/SpreeMultiVariant.csv +4 -0
- data/spec/fixtures/SpreeProducts.csv +4 -0
- data/spec/fixtures/SpreeProducts.xls +0 -0
- data/spec/fixtures/SpreeProductsComplexTaxons.csv +6 -0
- data/spec/fixtures/SpreeProductsComplexTaxons.xls +0 -0
- data/spec/fixtures/SpreeProductsDefaults.yml +15 -0
- data/spec/fixtures/SpreeProductsMandatoryOnly.xls +0 -0
- data/spec/fixtures/SpreeProductsMultiColumn.csv +4 -0
- data/spec/fixtures/SpreeProductsMultiColumn.xls +0 -0
- data/spec/fixtures/SpreeProductsSimple.csv +4 -0
- data/spec/fixtures/SpreeProductsSimple.xls +0 -0
- data/spec/fixtures/SpreeProductsWithImages.csv +4 -0
- data/spec/fixtures/SpreeProductsWithImages.xls +0 -0
- data/spec/fixtures/SpreeZoneExample.csv +5 -0
- data/spec/fixtures/SpreeZoneExample.xls +0 -0
- data/spec/fixtures/config/database.yml +28 -0
- data/spec/fixtures/images/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/fixtures/images/DEMO_002_Powerstation.jpg +0 -0
- data/spec/fixtures/images/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/fixtures/images/DEMO_004_ror_ringer.jpeg +0 -0
- data/spec/fixtures/negative/SpreeProdMiss1Mandatory.csv +4 -0
- data/spec/fixtures/negative/SpreeProdMiss1Mandatory.xls +0 -0
- data/spec/fixtures/negative/SpreeProdMissManyMandatory.csv +4 -0
- data/spec/fixtures/negative/SpreeProdMissManyMandatory.xls +0 -0
- data/spec/fixtures/results/taxon_and_assoc_export_spec.xls +0 -0
- data/spec/fixtures/results/taxon_export_spec.xls +0 -0
- data/spec/logs/datashift_spec.log +10166 -0
- data/spec/logs/spree_sandbox.log +54803 -0
- data/spec/sandbox/Gemfile +43 -0
- data/spec/sandbox/README.rdoc +261 -0
- data/spec/sandbox/Rakefile +7 -0
- data/spec/sandbox/app/assets/images/rails.png +0 -0
- data/spec/sandbox/app/assets/javascripts/admin/all.js +12 -0
- data/spec/sandbox/app/assets/javascripts/application.js +15 -0
- data/spec/sandbox/app/assets/javascripts/store/all.js +14 -0
- data/spec/sandbox/app/assets/stylesheets/admin/all.css +13 -0
- data/spec/sandbox/app/assets/stylesheets/application.css +13 -0
- data/spec/sandbox/app/assets/stylesheets/store/all.css +13 -0
- data/spec/sandbox/app/controllers/application_controller.rb +3 -0
- data/spec/sandbox/app/helpers/application_helper.rb +2 -0
- data/spec/sandbox/app/views/layouts/application.html.erb +14 -0
- data/spec/sandbox/config.ru +4 -0
- data/spec/sandbox/config/application.rb +75 -0
- data/spec/sandbox/config/boot.rb +6 -0
- data/spec/sandbox/config/database.yml +20 -0
- data/spec/sandbox/config/environment.rb +7 -0
- data/spec/sandbox/config/environments/development.rb +37 -0
- data/spec/sandbox/config/environments/production.rb +67 -0
- data/spec/sandbox/config/environments/test.rb +37 -0
- data/spec/sandbox/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/sandbox/config/initializers/inflections.rb +15 -0
- data/spec/sandbox/config/initializers/mime_types.rb +5 -0
- data/spec/sandbox/config/initializers/secret_token.rb +7 -0
- data/spec/sandbox/config/initializers/session_store.rb +8 -0
- data/spec/sandbox/config/initializers/spree.rb +12 -0
- data/spec/sandbox/config/initializers/wrap_parameters.rb +14 -0
- data/spec/sandbox/config/locales/en.yml +5 -0
- data/spec/sandbox/config/routes.rb +65 -0
- data/spec/sandbox/config/spree.yml +2 -0
- data/spec/sandbox/db/development.sqlite3 +0 -0
- data/spec/sandbox/db/migrate/20120918081451_spree_zero_nine_zero.spree.rb +390 -0
- data/spec/sandbox/db/migrate/20120918081452_create_indexes_for_inventory_units.spree.rb +7 -0
- data/spec/sandbox/db/migrate/20120918081453_add_count_on_hand_to_variants_and_products.spree.rb +50 -0
- data/spec/sandbox/db/migrate/20120918081454_change_taxons_to_nested_set.spree.rb +47 -0
- data/spec/sandbox/db/migrate/20120918081455_move_to_configurable_gateways.spree.rb +55 -0
- data/spec/sandbox/db/migrate/20120918081456_add_open_id_authentication_tables.spree.rb +16 -0
- data/spec/sandbox/db/migrate/20120918081457_add_openid_field_to_users.spree.rb +25 -0
- data/spec/sandbox/db/migrate/20120918081458_change_preference_value_type.spree.rb +11 -0
- data/spec/sandbox/db/migrate/20120918081459_create_billing_integrations.spree.rb +13 -0
- data/spec/sandbox/db/migrate/20120918081460_charge_refactoring.spree.rb +40 -0
- data/spec/sandbox/db/migrate/20120918081461_add_some_indexes.spree.rb +12 -0
- data/spec/sandbox/db/migrate/20120918081462_checkout_state_machine.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081463_state_for_shipments.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081464_make_state_events_polymorphic.spree.rb +13 -0
- data/spec/sandbox/db/migrate/20120918081465_ship_address_id_for_checkouts.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081466_shipping_method_id_for_checkouts.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081467_creditcard_last_four_digits.spree.rb +15 -0
- data/spec/sandbox/db/migrate/20120918081468_populate_legacy_shipment_state.spree.rb +16 -0
- data/spec/sandbox/db/migrate/20120918081469_add_cost_price.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081470_shipment_id_for_inventory_units.spree.rb +26 -0
- data/spec/sandbox/db/migrate/20120918081471_cim_fields_for_creditcards.spree.rb +7 -0
- data/spec/sandbox/db/migrate/20120918081472_create_return_authorizations.spree.rb +13 -0
- data/spec/sandbox/db/migrate/20120918081473_add_return_authorization_to_inventory_units.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081474_create_trackers.spree.rb +11 -0
- data/spec/sandbox/db/migrate/20120918081475_creditcard_id_for_creditcard_txns.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081476_original_creditcard_txn_id_for_creditcard_txns.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081477_add_test_mode_to_billing_integration.spree.rb +7 -0
- data/spec/sandbox/db/migrate/20120918081478_create_payment_methods.spree.rb +17 -0
- data/spec/sandbox/db/migrate/20120918081479_polymorphic_payments.spree.rb +43 -0
- data/spec/sandbox/db/migrate/20120918081480_change_payments_payment_method_to_belongs_to.spree.rb +12 -0
- data/spec/sandbox/db/migrate/20120918081481_assign_creditcard_txns_to_payment.spree.rb +24 -0
- data/spec/sandbox/db/migrate/20120918081482_sti_for_transactions.spree.rb +16 -0
- data/spec/sandbox/db/migrate/20120918081483_drop_billing_integrations.spree.rb +17 -0
- data/spec/sandbox/db/migrate/20120918081484_deleted_at_for_payment_methods.spree.rb +15 -0
- data/spec/sandbox/db/migrate/20120918081485_add_adjustments_index.spree.rb +7 -0
- data/spec/sandbox/db/migrate/20120918081486_add_alt_text_to_images.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081487_fix_existing_coupon_credits.spree.rb +14 -0
- data/spec/sandbox/db/migrate/20120918081488_add_display_to_payment_methods.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081489_add_addresses_checkouts_indexes.spree.rb +9 -0
- data/spec/sandbox/db/migrate/20120918081490_add_icon_to_taxons.spree.rb +18 -0
- data/spec/sandbox/db/migrate/20120918081491_add_description_to_taxons.spree.rb +12 -0
- data/spec/sandbox/db/migrate/20120918081492_index_for_shipments_number.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081493_add_index_on_users_persistence_token.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081494_add_default_to_tax_categories.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081495_add_display_to_shipping_methods.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081496_rename_payment_method_display.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081497_rename_preferences_field.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081498_add_guest_flag.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081499_drop_order_token.spree.rb +10 -0
- data/spec/sandbox/db/migrate/20120918081500_payments_state_and_assigned_to_order_only.spree.rb +15 -0
- data/spec/sandbox/db/migrate/20120918081501_create_address_keys_for_order.spree.rb +7 -0
- data/spec/sandbox/db/migrate/20120918081502_payment_total_for_orders.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081503_shipping_method_id_for_orders.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081504_add_shipment_and_payment_state.spree.rb +7 -0
- data/spec/sandbox/db/migrate/20120918081505_refactor_adjustments.spree.rb +30 -0
- data/spec/sandbox/db/migrate/20120918081506_response_code_and_avs_response_for_payments.spree.rb +7 -0
- data/spec/sandbox/db/migrate/20120918081507_change_guest_flag_to_anonymous.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081508_email_for_orders.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081509_create_mail_methods.spree.rb +11 -0
- data/spec/sandbox/db/migrate/20120918081510_rename_frozen_to_locked.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081511_move_special_instructions_to_orders.spree.rb +11 -0
- data/spec/sandbox/db/migrate/20120918081512_create_log_entries.spree.rb +12 -0
- data/spec/sandbox/db/migrate/20120918081513_migrate_transactions_to_payment_state.spree.rb +99 -0
- data/spec/sandbox/db/migrate/20120918081514_delete_in_progress_orders.spree.rb +20 -0
- data/spec/sandbox/db/migrate/20120918081515_migrate_checkout_to_orders.spree.rb +24 -0
- data/spec/sandbox/db/migrate/20120918081516_remove_shipped_state.spree.rb +13 -0
- data/spec/sandbox/db/migrate/20120918081517_prevent_nil_payment_total.spree.rb +9 -0
- data/spec/sandbox/db/migrate/20120918081518_prevent_nil_email.spree.rb +10 -0
- data/spec/sandbox/db/migrate/20120918081519_generate_anonymous_users.spree.rb +21 -0
- data/spec/sandbox/db/migrate/20120918081520_update_order_state.spree.rb +13 -0
- data/spec/sandbox/db/migrate/20120918081521_cleanup_legacy_tables.spree.rb +12 -0
- data/spec/sandbox/db/migrate/20120918081522_remove_number_and_cvv_from_credicard.spree.rb +12 -0
- data/spec/sandbox/db/migrate/20120918081523_drop_anonymous_field_for_user.spree.rb +10 -0
- data/spec/sandbox/db/migrate/20120918081524_renamed_rma_cancelled_state.spree.rb +10 -0
- data/spec/sandbox/db/migrate/20120918081525_fix_problematic_index_names.spree.rb +14 -0
- data/spec/sandbox/db/migrate/20120918081526_add_position_to_variants.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081527_add_next_state_to_state_events.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081528_add_position_to_option_types.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081529_remove_trailing_slashes_in_taxon_permalinks.spree.rb +20 -0
- data/spec/sandbox/db/migrate/20120918081530_create_activators.spree.rb +15 -0
- data/spec/sandbox/db/migrate/20120918081531_eligible_for_adjustments.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081532_namespace_top_level_models.spree.rb +50 -0
- data/spec/sandbox/db/migrate/20120918081533_migrate_namespaced_polymorphic_models.spree.rb +53 -0
- data/spec/sandbox/db/migrate/20120918081534_make_adjustments_polymorphic.spree.rb +10 -0
- data/spec/sandbox/db/migrate/20120918081535_add_company_to_addresses.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081536_add_inc_tax_to_tax_rates.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081537_rename_inc_price_attribute.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081538_add_default_tax_zone.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081539_associate_shipping_methods_and_shipping_categories.spree.rb +8 -0
- data/spec/sandbox/db/migrate/20120918081540_add_match_rules_to_shipping_methods.spree.rb +8 -0
- data/spec/sandbox/db/migrate/20120918081541_new_preferences.spree.rb +49 -0
- data/spec/sandbox/db/migrate/20120918081542_rename_state_events_to_state_changes.spree.rb +10 -0
- data/spec/sandbox/db/migrate/20120918081543_add_deleted_at_to_tax_category.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081544_migrate_images_from_products_to_variants.spree.rb +36 -0
- data/spec/sandbox/db/migrate/20120918081545_rename_attachment_size_to_attachment_file_size.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081546_increase_scale_of_tax_rate_amount.spree.rb +10 -0
- data/spec/sandbox/db/migrate/20120918081547_convert_sales_tax_to_default_tax.spree.rb +10 -0
- data/spec/sandbox/db/migrate/20120918081548_add_deleted_at_to_spree_shipping_methods.spree.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081549_make_users_email_index_unique.spree.rb +11 -0
- data/spec/sandbox/db/migrate/20120918081550_add_counter_cache_to_zone_members.spree.rb +15 -0
- data/spec/sandbox/db/migrate/20120918081551_rename_columns_for_devise.spree_auth.rb +39 -0
- data/spec/sandbox/db/migrate/20120918081552_convert_user_remember_field.spree_auth.rb +12 -0
- data/spec/sandbox/db/migrate/20120918081553_create_tokenized_permissions.spree_auth.rb +14 -0
- data/spec/sandbox/db/migrate/20120918081554_tokens_for_legacy_orders.spree_auth.rb +19 -0
- data/spec/sandbox/db/migrate/20120918081555_namespace_tokenized_permission.spree_auth.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081556_migrate_tokenized_permissions.spree_auth.rb +25 -0
- data/spec/sandbox/db/migrate/20120918081557_add_reset_password_sent_at_to_spree_users.spree_auth.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081558_add_api_key_to_spree_users.spree_api.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081559_resize_api_key_field.spree_api.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081560_rename_coupons_to_promotions.spree_promo.rb +11 -0
- data/spec/sandbox/db/migrate/20120918081561_create_promotion_rules.spree_promo.rb +25 -0
- data/spec/sandbox/db/migrate/20120918081562_match_policy_for_promotions.spree_promo.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081563_create_promotion_rules_users.spree_promo.rb +15 -0
- data/spec/sandbox/db/migrate/20120918081564_name_for_promotions.spree_promo.rb +6 -0
- data/spec/sandbox/db/migrate/20120918081565_update_calculable_type_for_promotions.spree_promo.rb +10 -0
- data/spec/sandbox/db/migrate/20120918081566_migrate_adjustments.spree_promo.rb +10 -0
- data/spec/sandbox/db/migrate/20120918081567_promotion_changes_to_subclass_of_activator.spree_promo.rb +23 -0
- data/spec/sandbox/db/migrate/20120918081568_create_promotion_actions.spree_promo.rb +10 -0
- data/spec/sandbox/db/migrate/20120918081569_create_promotion_action_line_items.spree_promo.rb +11 -0
- data/spec/sandbox/db/migrate/20120918081570_namespace_promo_tables.spree_promo.rb +86 -0
- data/spec/sandbox/db/migrate/20120918081571_create_spree_pending_promotions.spree_promo.rb +12 -0
- data/spec/sandbox/db/migrate/20120918081572_content_visited_event.spree_promo.rb +30 -0
- data/spec/sandbox/db/production.sqlite3 +0 -0
- data/spec/sandbox/db/schema.rb +586 -0
- data/spec/sandbox/db/seeds.rb +11 -0
- data/spec/sandbox/db/test.sqlite3 +0 -0
- data/spec/sandbox/doc/README_FOR_APP +2 -0
- data/spec/sandbox/log/development.log +4856 -0
- data/spec/sandbox/log/production.log +31 -0
- data/spec/sandbox/public/404.html +26 -0
- data/spec/sandbox/public/422.html +26 -0
- data/spec/sandbox/public/500.html +25 -0
- data/spec/sandbox/public/assets/rails-be8732dac73d845ac5b142c8fb5f9fb0.png +0 -0
- data/spec/sandbox/public/favicon.ico +0 -0
- data/spec/sandbox/public/robots.txt +14 -0
- data/spec/sandbox/public/spree/products/1/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/1/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/1/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/1/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/1/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/10/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/10/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/10/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/10/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/10/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/11/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/11/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/11/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/11/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/11/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/12/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/12/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/12/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/12/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/12/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/13/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/13/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/13/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/13/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/13/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/14/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/14/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/14/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/14/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/14/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/15/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/15/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/15/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/15/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/15/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/16/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/16/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/16/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/16/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/16/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/17/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/17/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/17/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/17/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/17/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/18/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/18/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/18/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/18/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/18/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/19/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/19/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/19/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/19/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/19/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/2/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/2/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/2/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/2/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/2/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/20/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/20/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/20/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/20/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/20/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/21/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/21/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/21/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/21/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/21/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/22/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/22/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/22/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/22/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/22/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/23/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/23/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/23/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/23/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/23/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/24/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/24/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/24/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/24/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/24/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/25/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/25/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/25/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/25/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/25/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/26/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/26/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/26/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/26/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/26/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/27/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/27/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/27/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/27/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/27/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/28/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/28/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/28/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/28/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/28/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/29/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/29/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/29/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/29/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/29/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/3/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/3/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/3/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/3/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/3/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/30/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/30/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/30/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/30/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/30/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/31/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/31/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/31/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/31/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/31/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/32/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/32/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/32/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/32/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/32/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/33/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/33/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/33/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/33/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/33/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/34/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/34/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/34/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/34/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/34/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/35/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/35/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/35/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/35/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/35/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/36/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/36/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/36/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/36/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/36/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/37/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/37/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/37/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/37/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/37/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/38/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/38/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/38/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/38/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/38/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/39/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/39/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/39/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/39/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/39/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/4/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/4/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/4/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/4/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/4/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/40/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/40/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/40/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/40/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/40/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/41/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/41/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/41/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/41/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/41/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/42/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/42/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/42/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/42/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/42/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/43/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/43/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/43/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/43/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/43/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/44/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/44/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/44/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/44/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/44/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/45/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/45/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/45/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/45/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/45/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/46/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/46/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/46/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/46/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/46/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/47/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/47/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/47/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/47/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/47/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/48/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/48/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/48/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/48/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/48/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/49/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/49/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/49/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/49/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/49/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/5/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/5/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/5/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/5/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/5/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/50/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/50/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/50/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/50/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/50/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/51/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/51/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/51/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/51/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/51/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/52/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/52/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/52/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/52/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/52/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/53/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/53/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/53/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/53/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/53/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/54/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/54/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/54/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/54/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/54/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/55/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/55/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/55/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/55/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/55/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/56/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/56/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/56/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/56/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/56/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/57/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/57/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/57/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/57/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/57/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/58/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/58/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/58/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/58/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/58/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/59/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/59/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/59/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/59/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/59/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/6/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/6/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/6/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/6/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/6/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/60/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/60/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/60/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/60/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/60/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/61/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/61/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/61/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/61/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/61/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/62/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/62/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/62/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/62/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/62/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/63/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/63/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/63/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/63/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/63/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/64/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/64/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/64/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/64/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/64/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/65/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/65/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/65/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/65/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/65/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/66/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/66/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/66/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/66/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/66/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/7/large/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/7/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/7/original/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/7/product/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/7/small/DEMO_001_ror_bag.jpeg +0 -0
- data/spec/sandbox/public/spree/products/8/large/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/8/mini/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/8/original/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/8/product/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/8/small/DEMO_002_Powerstation.jpg +0 -0
- data/spec/sandbox/public/spree/products/9/large/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/9/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/9/original/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/9/product/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/public/spree/products/9/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/sandbox/script/rails +6 -0
- data/spec/sandbox/test/performance/browsing_test.rb +12 -0
- data/spec/sandbox/test/test_helper.rb +13 -0
- data/spec/sandbox/tmp/cache/assets/BDA/8A0/sprockets%2F05967796558429515381c4b5d86808c2 +29 -0
- data/spec/sandbox/tmp/cache/assets/C48/7D0/sprockets%2Fe0032828783157c117b48022df3e444e +11807 -0
- data/spec/sandbox/tmp/cache/assets/C7F/DF0/sprockets%2Fe656661206c7722b1c5512e36d9e64f0 +30 -0
- data/spec/sandbox/tmp/cache/assets/C8A/0A0/sprockets%2F26199d9652c1a334e195719ba8541dd8 +155 -0
- data/spec/sandbox/tmp/cache/assets/C9C/800/sprockets%2F0810329ee389187374ea7987e2bb9f77 +33 -0
- data/spec/sandbox/tmp/cache/assets/C9D/E90/sprockets%2Fa84ac59c0d9b39b3975951119999d917 +29 -0
- data/spec/sandbox/tmp/cache/assets/CAD/FE0/sprockets%2F3270cd94654e1c2d81fc580911900fa9 +93 -0
- data/spec/sandbox/tmp/cache/assets/CAE/1D0/sprockets%2F03dd1f063179d32c35b917edf3784163 +21 -0
- data/spec/sandbox/tmp/cache/assets/CBA/9D0/sprockets%2F2493926b475d6e62d7d1376e334c2dd6 +93 -0
- data/spec/sandbox/tmp/cache/assets/CBA/E50/sprockets%2F4e833190fdff066c72ea67164195192f +18 -0
- data/spec/sandbox/tmp/cache/assets/CC6/940/sprockets%2F381b881e222cd6d38f39965b4896b19e +209 -0
- data/spec/sandbox/tmp/cache/assets/CD0/A60/sprockets%2F47f7f8654e1b0830c06df21b1a2040e7 +33 -0
- data/spec/sandbox/tmp/cache/assets/CD7/C60/sprockets%2F07d4a437a6755702af3647c235dab26e +19 -0
- data/spec/sandbox/tmp/cache/assets/CE1/440/sprockets%2Fbf1f9f069ace2a75097338f013470d72 +412 -0
- data/spec/sandbox/tmp/cache/assets/CEF/5E0/sprockets%2F459ef82f805ce1977ee2aa452760d528 +11807 -0
- data/spec/sandbox/tmp/cache/assets/CF0/DA0/sprockets%2Fd7d5b37686831d37c4dd75e645f5e016 +3 -0
- data/spec/sandbox/tmp/cache/assets/D00/7B0/sprockets%2F2511eac4c5f8330291b2bf1326549afe +19 -0
- data/spec/sandbox/tmp/cache/assets/D04/270/sprockets%2F635ace50c8c35cab803205496eed2146 +41 -0
- data/spec/sandbox/tmp/cache/assets/D08/C70/sprockets%2F02f4cf94f805b4ee70a1aa776602355c +9 -0
- data/spec/sandbox/tmp/cache/assets/D0B/730/sprockets%2Fd63ee64122f213e93626f25be4a35d5d +6 -0
- data/spec/sandbox/tmp/cache/assets/D0F/110/sprockets%2F71ce77fd5231e5d0d705a8e085a0f871 +0 -0
- data/spec/sandbox/tmp/cache/assets/D0F/370/sprockets%2F65b590581acb0df661ea37d37c9f5152 +53 -0
- data/spec/sandbox/tmp/cache/assets/D10/370/sprockets%2Fc2793084fa0c48df282862bc45f72b2c +13 -0
- data/spec/sandbox/tmp/cache/assets/D13/4C0/sprockets%2F19b5a44963a45f1cab789db441e599a0 +412 -0
- data/spec/sandbox/tmp/cache/assets/D1A/150/sprockets%2Fe3180c81cf520cc7e5b9a2885ec98923 +19 -0
- data/spec/sandbox/tmp/cache/assets/D1B/D20/sprockets%2Fdedb93098f94d41370a4c9be4a959630 +4549 -0
- data/spec/sandbox/tmp/cache/assets/D28/190/sprockets%2F4eaae424d2725d30da3cb8245d8350c0 +6 -0
- data/spec/sandbox/tmp/cache/assets/D31/730/sprockets%2F3dfd818703e12cb1e1aff167a135571c +41 -0
- data/spec/sandbox/tmp/cache/assets/D34/B60/sprockets%2Fec323a4a5a3373a8293b3e8d66a7e4a1 +13 -0
- data/spec/sandbox/tmp/cache/assets/D34/D40/sprockets%2Fca3e3c106373aa947a80add2925a9f26 +27 -0
- data/spec/sandbox/tmp/cache/assets/D3A/BE0/sprockets%2F8fb5690b22562e324ea931f258cfa2ad +27 -0
- data/spec/sandbox/tmp/cache/assets/D3E/870/sprockets%2Fb76db487306db3e3e1dc3b3070e95d94 +4549 -0
- data/spec/sandbox/tmp/cache/assets/D43/7B0/sprockets%2F5e356ecdd6439806589c9898d9fde97d +53 -0
- data/spec/sandbox/tmp/cache/assets/D45/470/sprockets%2F6cd19fc744a481edb66691c29410fd4d +14 -0
- data/spec/sandbox/tmp/cache/assets/D46/6C0/sprockets%2F9e6ad6159bd63f648ee8a2f036b4a721 +53 -0
- data/spec/sandbox/tmp/cache/assets/D47/0D0/sprockets%2Fa1679da4467bfc1eb40c9e6e91e35555 +9409 -0
- data/spec/sandbox/tmp/cache/assets/D62/890/sprockets%2F73c3856d24a200d57f0b7ba6fe164afa +865 -0
- data/spec/sandbox/tmp/cache/assets/D6C/350/sprockets%2F9827e04e3cac800a854fd2ec0b288bf4 +0 -0
- data/spec/sandbox/tmp/cache/assets/D6D/A50/sprockets%2Ff7ded4a6bfd410172459cf4710a6c74e +3 -0
- data/spec/sandbox/tmp/cache/assets/D6F/920/sprockets%2Fd5417b2f1926be13bbd689d1e5fcc526 +14 -0
- data/spec/sandbox/tmp/cache/assets/D71/7E0/sprockets%2Fe71663bff3967b08bf6bc0fe01507db7 +865 -0
- data/spec/sandbox/tmp/cache/assets/D72/350/sprockets%2Ff1fa7173161fbe2d4d4c5e7c5741c69e +209 -0
- data/spec/sandbox/tmp/cache/assets/D73/480/sprockets%2F1fe4d21884c4db06ee089b5da298f32d +306 -0
- data/spec/sandbox/tmp/cache/assets/D74/F00/sprockets%2Ff4fbdd38742160ad3db7a76c938e83d1 +45 -0
- data/spec/sandbox/tmp/cache/assets/D78/860/sprockets%2F339f9afd4dbcbf97d0647817d343a71b +3 -0
- data/spec/sandbox/tmp/cache/assets/D79/1F0/sprockets%2F8275f49b8bab7b12a384e4ee8e09c7e1 +40 -0
- data/spec/sandbox/tmp/cache/assets/D7A/620/sprockets%2F59d4faa69df49cb38043c522eb78f19a +45 -0
- data/spec/sandbox/tmp/cache/assets/D7B/850/sprockets%2Fe1aeffb9bb8d70056596c37932ed6f42 +0 -0
- data/spec/sandbox/tmp/cache/assets/D90/C90/sprockets%2F070fb0a8b408f5b313840eaf5fcba77c +155 -0
- data/spec/sandbox/tmp/cache/assets/DA4/270/sprockets%2F501c395ed23e58949bba4f543cf6aebf +9409 -0
- data/spec/sandbox/tmp/cache/assets/DA8/E00/sprockets%2F74af3c8bd250fbfc4d98fe9551441df3 +0 -0
- data/spec/sandbox/tmp/cache/assets/DB5/B30/sprockets%2Fac3cabc1f3a1c6dea21b5968c2830b07 +306 -0
- data/spec/sandbox/tmp/cache/assets/DC9/EE0/sprockets%2Fd73a6d912e56561bc3aef7e8adcc1d40 +0 -0
- data/spec/sandbox/tmp/cache/assets/DCF/0B0/sprockets%2F17171de28f3e5db9a23ceeeceb64d355 +19 -0
- data/spec/sandbox/tmp/cache/assets/DE0/9B0/sprockets%2F98b10e39eeb69f8cb419f5114eec8ffa +239 -0
- data/spec/sandbox/tmp/cache/assets/DE8/0E0/sprockets%2Fcd07d79e6b93c6eec93f854ffff0f334 +0 -0
- data/spec/sandbox/tmp/cache/assets/DFA/D70/sprockets%2F4ad1da8bda1b38077c809f3ebacf964c +239 -0
- data/spec/sandbox/tmp/cache/assets/DFE/AA0/sprockets%2Fc127e6e63f95c0fc53ee4a12febd82af +30 -0
- data/spec/sandbox/tmp/cache/assets/E00/B50/sprockets%2F3a2feeb54bb2c9e8a360f8f8f2a9e1b4 +53 -0
- data/spec/sandbox/tmp/cache/assets/E08/C20/sprockets%2F0ad8fbc5a986d12b73b4fecc98e70ef5 +18 -0
- data/spec/sandbox/tmp/cache/assets/E09/160/sprockets%2F28fd19d52fa996bd5bc0b1cf8efc2f74 +40 -0
- data/spec/sandbox/tmp/cache/assets/E25/4C0/sprockets%2Fde2fd9fd11c04a582cdbbe3d84a35ae6 +3 -0
- data/spec/sandbox/tmp/cache/assets/E32/490/sprockets%2F78aadee343f7b9923ca5bceede46be05 +21 -0
- data/spec/sandbox/tmp/cache/assets/E5A/810/sprockets%2Fbc9acd6ef9418cbacd83015fc46ead3c +9 -0
- data/spec/spec_helper.rb +345 -0
- data/spec/spree_exporter_spec.rb +64 -0
- data/spec/spree_generator_spec.rb +91 -0
- data/spec/spree_images_loader_spec.rb +102 -0
- data/spec/spree_loader_spec.rb +237 -0
- data/spec/spree_method_mapping_spec.rb +222 -0
- data/spec/spree_taxons_loader_spec.rb +282 -0
- data/spec/spree_variants_loader_spec.rb +186 -0
- data/spec/thor_spec.rb +61 -0
- metadata +681 -0
@@ -0,0 +1,222 @@
|
|
1
|
+
# Copyright:: (c) Autotelik Media Ltd 2011
|
2
|
+
# Author :: Tom Statter
|
3
|
+
# Date :: Summer 2011
|
4
|
+
#
|
5
|
+
# License:: MIT - Free, OpenSource
|
6
|
+
#
|
7
|
+
# Details:: Specification for Spree aspect of datashift gem.
|
8
|
+
#
|
9
|
+
# Tests the method mapping aspect, such as that we correctly identify
|
10
|
+
# Spree Product attributes and associations
|
11
|
+
#
|
12
|
+
require File.join(File.expand_path(File.dirname(__FILE__) ), "spec_helper")
|
13
|
+
|
14
|
+
|
15
|
+
describe 'SpreeMethodMapping' do
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
before(:all) do
|
21
|
+
before_all_spree
|
22
|
+
end
|
23
|
+
|
24
|
+
before(:each) do
|
25
|
+
|
26
|
+
before_each_spree
|
27
|
+
|
28
|
+
DataShift::MethodDictionary.clear
|
29
|
+
DataShift::MethodDictionary.find_operators( @Product_klass )
|
30
|
+
#MethodDictionary.build_method_details( @Product_klass )
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
it "should populate operators for a Spree Product" do
|
35
|
+
|
36
|
+
DataShift::MethodDictionary.has_many.should_not be_empty
|
37
|
+
DataShift::MethodDictionary.belongs_to.should_not be_empty
|
38
|
+
DataShift::MethodDictionary.assignments.should_not be_empty
|
39
|
+
|
40
|
+
assign = DataShift::MethodDictionary.assignments_for(@Product_klass)
|
41
|
+
|
42
|
+
assign.should include('available_on') # Example of a simple column
|
43
|
+
|
44
|
+
DataShift::MethodDictionary.assignments[@Product_klass].should include('available_on')
|
45
|
+
|
46
|
+
has_many_ops = DataShift::MethodDictionary.has_many_for(@Product_klass)
|
47
|
+
|
48
|
+
has_many_ops.should include('properties') # Product can have many properties
|
49
|
+
|
50
|
+
DataShift::MethodDictionary.has_many[@Product_klass].should include('properties')
|
51
|
+
|
52
|
+
btf = DataShift::MethodDictionary.belongs_to_for(@Product_klass)
|
53
|
+
|
54
|
+
btf.should include('tax_category') # Example of a belongs_to assignment
|
55
|
+
|
56
|
+
DataShift::MethodDictionary.belongs_to[@Product_klass].should include('tax_category')
|
57
|
+
|
58
|
+
DataShift::MethodDictionary.column_types[@Product_klass].size.should == @Product_klass.columns.size
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
it "should find method details correctly for different forms of a column name" do
|
63
|
+
|
64
|
+
DataShift::MethodDictionary.build_method_details( @Product_klass )
|
65
|
+
|
66
|
+
["available On", 'available_on', "Available On", "AVAILABLE_ON"].each do |format|
|
67
|
+
|
68
|
+
method_details = DataShift::MethodDictionary.find_method_detail( @Product_klass, format )
|
69
|
+
|
70
|
+
method_details.operator.should == 'available_on'
|
71
|
+
method_details.operator_for(:assignment).should == 'available_on'
|
72
|
+
|
73
|
+
method_details.operator_for(:belongs_to).should be_nil
|
74
|
+
method_details.operator_for(:has_many).should be_nil
|
75
|
+
|
76
|
+
method_details.col_type.should_not be_nil
|
77
|
+
method_details.col_type.name.should == 'available_on'
|
78
|
+
method_details.col_type.default.should == nil
|
79
|
+
method_details.col_type.sql_type.should include 'datetime' # works on mysql and sqlite
|
80
|
+
method_details.col_type.type.should == :datetime
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should populate method details correctly for has_many forms of association name" do
|
85
|
+
|
86
|
+
DataShift::MethodDictionary.has_many[@Product_klass].should include('product_option_types')
|
87
|
+
|
88
|
+
DataShift::MethodDictionary.build_method_details( @Product_klass )
|
89
|
+
|
90
|
+
["product_option_types", "product option types", 'product Option_types', "ProductOptionTypes", "Product_Option_Types"].each do |format|
|
91
|
+
method_detail = DataShift::MethodDictionary.find_method_detail( @Product_klass, format )
|
92
|
+
|
93
|
+
method_detail.should_not be_nil
|
94
|
+
|
95
|
+
method_detail.operator_for(:has_many).should eq('product_option_types')
|
96
|
+
method_detail.operator_for(:belongs_to).should be_nil
|
97
|
+
method_detail.operator_for(:assignment).should be_nil
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
it "should populate method details correctly for assignment operators (none columns on #{@Product_klass})" do
|
103
|
+
|
104
|
+
DataShift::MethodDictionary.find_operators( @Product_klass, :reload => true, :instance_methods => true )
|
105
|
+
|
106
|
+
DataShift::MethodDictionary.build_method_details( @Product_klass )
|
107
|
+
|
108
|
+
# Example of delegates i.e. cost_price column on Variant, delegated to Variant by Product
|
109
|
+
|
110
|
+
DataShift::MethodDictionary.assignments[@Product_klass].should include('cost_price')
|
111
|
+
DataShift::MethodDictionary.assignments[@Product_klass].should include('sku')
|
112
|
+
|
113
|
+
|
114
|
+
count_on_hand = DataShift::MethodDictionary.find_method_detail( @Product_klass, 'count on hand' )
|
115
|
+
count_on_hand.should_not be_nil
|
116
|
+
count_on_hand.operator.should == 'count_on_hand'
|
117
|
+
|
118
|
+
method = DataShift::MethodDictionary.find_method_detail( @Product_klass, 'sku' )
|
119
|
+
method.should_not be_nil
|
120
|
+
method.operator.should == 'sku'
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should enable assignment via operators for none columns on #{@Product_klass}" do
|
124
|
+
|
125
|
+
DataShift::MethodDictionary.find_operators( @Product_klass, :reload => true, :instance_methods => true )
|
126
|
+
|
127
|
+
DataShift::MethodDictionary.build_method_details( @Product_klass )
|
128
|
+
|
129
|
+
klazz_object = @Product_klass.new
|
130
|
+
|
131
|
+
klazz_object.should be_new_record
|
132
|
+
|
133
|
+
# we can use method details to populate a new AR object, essentailly same as
|
134
|
+
# klazz_object.send( count_on_hand.operator, 2)
|
135
|
+
count_on_hand = DataShift::MethodDictionary.find_method_detail( @Product_klass, 'count on hand' )
|
136
|
+
|
137
|
+
count_on_hand.assign( klazz_object, 2 )
|
138
|
+
klazz_object.count_on_hand.should == 2
|
139
|
+
|
140
|
+
count_on_hand.assign( klazz_object, 5 )
|
141
|
+
klazz_object.count_on_hand.should == 5
|
142
|
+
|
143
|
+
method = DataShift::MethodDictionary.find_method_detail( @Product_klass, 'sku' )
|
144
|
+
method.should_not be_nil
|
145
|
+
|
146
|
+
method.operator.should == 'sku'
|
147
|
+
|
148
|
+
method.assign( klazz_object, 'TEST_SK 001')
|
149
|
+
klazz_object.sku.should == 'TEST_SK 001'
|
150
|
+
|
151
|
+
end
|
152
|
+
|
153
|
+
it "should enable assignment to has_many association on new object" do
|
154
|
+
|
155
|
+
DataShift::MethodDictionary.build_method_details( @Product_klass )
|
156
|
+
|
157
|
+
method_detail = DataShift::MethodDictionary.find_method_detail( @Product_klass, 'taxons' )
|
158
|
+
|
159
|
+
method_detail.operator.should == 'taxons'
|
160
|
+
|
161
|
+
upload_object = @Product_klass.new
|
162
|
+
|
163
|
+
upload_object.taxons.size.should == 0
|
164
|
+
|
165
|
+
# NEW ASSOCIATION ASSIGNMENT
|
166
|
+
|
167
|
+
# assign via the send operator directly on load object
|
168
|
+
upload_object.send( method_detail.operator ) << @Taxon_klass.new
|
169
|
+
|
170
|
+
upload_object.taxons.size.should == 1
|
171
|
+
|
172
|
+
upload_object.send( method_detail.operator ) << [@Taxon_klass.new, @Taxon_klass.new]
|
173
|
+
upload_object.taxons.size.should == 3
|
174
|
+
|
175
|
+
# Use generic assignment on method detail - expect has_many to use << not =
|
176
|
+
method_detail.assign( upload_object, @Taxon_klass.new )
|
177
|
+
upload_object.taxons.size.should == 4
|
178
|
+
|
179
|
+
method_detail.assign( upload_object, [@Taxon_klass.new, @Taxon_klass.new])
|
180
|
+
upload_object.taxons.size.should == 6
|
181
|
+
end
|
182
|
+
|
183
|
+
it "should enable assignment to has_many association using existing objects" do
|
184
|
+
|
185
|
+
DataShift::MethodDictionary.find_operators( @Product_klass )
|
186
|
+
|
187
|
+
DataShift::MethodDictionary.build_method_details( @Product_klass )
|
188
|
+
|
189
|
+
method_detail = DataShift::MethodDictionary.find_method_detail( @Product_klass, 'product_properties' )
|
190
|
+
|
191
|
+
method_detail.operator.should == 'product_properties'
|
192
|
+
|
193
|
+
klazz_object = @Product_klass.new
|
194
|
+
|
195
|
+
pp = @ProductProperty_klass.new
|
196
|
+
|
197
|
+
pp.property = @prop1
|
198
|
+
|
199
|
+
# NEW ASSOCIATION ASSIGNMENT
|
200
|
+
klazz_object.send( method_detail.operator ) << @ProductProperty_klass.new
|
201
|
+
|
202
|
+
klazz_object.product_properties.size.should == 1
|
203
|
+
|
204
|
+
klazz_object.send( method_detail.operator ) << [@ProductProperty_klass.new, @ProductProperty_klass.new]
|
205
|
+
klazz_object.product_properties.size.should == 3
|
206
|
+
|
207
|
+
# Use generic assignment on method detail - expect has_many to use << not =
|
208
|
+
pp2 = @ProductProperty_klass.new
|
209
|
+
pp2.property = @prop1
|
210
|
+
method_detail.assign( klazz_object, pp2)
|
211
|
+
klazz_object.product_properties.size.should == 4
|
212
|
+
|
213
|
+
pp3, pp4 = @ProductProperty_klass.new, @ProductProperty_klass.new
|
214
|
+
pp3.property = @prop2
|
215
|
+
pp4.property = @prop3
|
216
|
+
method_detail.assign( klazz_object, [pp3, pp4])
|
217
|
+
klazz_object.product_properties.size.should == 6
|
218
|
+
|
219
|
+
end
|
220
|
+
|
221
|
+
|
222
|
+
end
|
@@ -0,0 +1,282 @@
|
|
1
|
+
# Copyright:: (c) Autotelik Media Ltd 2011
|
2
|
+
# Author :: Tom Statter
|
3
|
+
# Date :: Summer 2011
|
4
|
+
#
|
5
|
+
# License:: MIT - Free, OpenSource
|
6
|
+
#
|
7
|
+
# Details:: Specification for Spree aspect of datashift gem.
|
8
|
+
#
|
9
|
+
# Provides Loaders and rake tasks specifically tailored for uploading or exporting
|
10
|
+
# Spree Products, associations and Images
|
11
|
+
#
|
12
|
+
require File.join(File.expand_path(File.dirname(__FILE__) ), "spec_helper")
|
13
|
+
|
14
|
+
require 'product_loader'
|
15
|
+
|
16
|
+
describe 'SpreeLoader' do
|
17
|
+
|
18
|
+
before(:all) do
|
19
|
+
before_all_spree
|
20
|
+
end
|
21
|
+
|
22
|
+
before(:each) do
|
23
|
+
|
24
|
+
begin
|
25
|
+
|
26
|
+
before_each_spree
|
27
|
+
|
28
|
+
@Product_klass.count.should == 0
|
29
|
+
@Taxon_klass.count.should == 0
|
30
|
+
|
31
|
+
DataShift::MethodDictionary.clear
|
32
|
+
|
33
|
+
# For Spree important to get instance methods too as Product delegates
|
34
|
+
# many important attributes to Variant (master)
|
35
|
+
DataShift::MethodDictionary.find_operators( @Product_klass, :instance_methods => true )
|
36
|
+
|
37
|
+
@product_loader = DataShift::SpreeHelper::ProductLoader.new
|
38
|
+
rescue => e
|
39
|
+
puts e.inspect
|
40
|
+
puts e.backtrace
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
# Operation and results should be identical when loading multiple associations
|
46
|
+
# if using either single column embedded syntax, or one column per entry.
|
47
|
+
|
48
|
+
it "should load Products and multiple Taxons from single column", :taxons => true, :fail => true do
|
49
|
+
test_taxon_creation( 'SpreeProducts.xls' )
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should load Products and multiple Taxons from multiple columns .xls", :taxons => true do
|
53
|
+
test_taxon_creation( 'SpreeProductsMultiColumn.xls' )
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should load Products and multiple Taxons from multiple columns CSV", :taxons => true do
|
57
|
+
test_taxon_creation( 'SpreeProductsMultiColumn.csv' )
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_taxon_creation( source )
|
61
|
+
|
62
|
+
# we want to test both find and find_or_create so should already have an object
|
63
|
+
# for find
|
64
|
+
# want to test both lookup and dynamic creation - this Taxonomy should be found, rest created
|
65
|
+
root = @Taxonomy_klass.create( :name => 'Paintings' )
|
66
|
+
|
67
|
+
x = root.taxons.create( :name => 'Landscape')
|
68
|
+
root.root.children << x
|
69
|
+
|
70
|
+
|
71
|
+
@Taxonomy_klass.count.should == 1
|
72
|
+
@Taxon_klass.count.should == 2
|
73
|
+
|
74
|
+
root.root.children.should have_exactly(1).items
|
75
|
+
root.root.children[0].name.should == 'Landscape'
|
76
|
+
|
77
|
+
@product_loader.perform_load( ifixture_file(source), :mandatory => ['sku', 'name', 'price'] )
|
78
|
+
|
79
|
+
expected_multi_column_taxons
|
80
|
+
end
|
81
|
+
|
82
|
+
def expected_multi_column_taxons
|
83
|
+
|
84
|
+
|
85
|
+
# Paintings already existed and had 1 child Taxon (Landscape)
|
86
|
+
# 2 nested Taxon (Paintings>Nature>Seascape) created under it so expect Taxonomy :
|
87
|
+
|
88
|
+
# WaterColour
|
89
|
+
# Oils
|
90
|
+
# Paintings >Nature>Seascape + Paintings>Landscape
|
91
|
+
# Drawings
|
92
|
+
|
93
|
+
@Taxonomy_klass.all.collect(&:name).sort.should == ["Drawings", "Oils", "Paintings", "WaterColour"]
|
94
|
+
|
95
|
+
|
96
|
+
@Taxonomy_klass.count.should == 4
|
97
|
+
@Taxon_klass.count.should == 7
|
98
|
+
|
99
|
+
@Product_klass.count.should == 3
|
100
|
+
|
101
|
+
p = @Variant_klass.find_by_sku("DEMO_001").product
|
102
|
+
|
103
|
+
p.taxons.should have_exactly(2).items
|
104
|
+
p.taxons.collect(&:name).sort.should == ['Paintings','WaterColour']
|
105
|
+
|
106
|
+
p2 = @Variant_klass.find_by_sku("DEMO_002").product
|
107
|
+
|
108
|
+
p2.taxons.should have_exactly(4).items
|
109
|
+
p2.taxons.collect(&:name).sort.should == ['Nature','Oils','Paintings','Seascape']
|
110
|
+
|
111
|
+
paint_parent = @Taxonomy_klass.find_by_name('Paintings')
|
112
|
+
|
113
|
+
paint_parent.taxons.should have_exactly(4).items # 3 children + all Taxonomies have a root Taxon
|
114
|
+
|
115
|
+
paint_parent.taxons.collect(&:name).sort.should == ['Landscape','Nature','Paintings','Seascape']
|
116
|
+
|
117
|
+
tn = @Taxon_klass.find_by_name('Nature') # child with children
|
118
|
+
ts = @Taxon_klass.find_by_name('Seascape') # last child
|
119
|
+
|
120
|
+
ts.should_not be_nil
|
121
|
+
tn.should_not be_nil
|
122
|
+
|
123
|
+
p2.taxons.collect( &:id ).should include(ts.id)
|
124
|
+
p2.taxons.collect( &:id ).should include(tn.id)
|
125
|
+
|
126
|
+
|
127
|
+
tn.parent.id.should == paint_parent.root.id
|
128
|
+
ts.parent.id.should == tn.id
|
129
|
+
|
130
|
+
tn.children.should have_exactly(1).items
|
131
|
+
ts.children.should have_exactly(0).items
|
132
|
+
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should load nested Taxons correctly even when same names from csv", :taxons => true do
|
136
|
+
|
137
|
+
@Taxonomy_klass.delete_all
|
138
|
+
@Taxon_klass.delete_all
|
139
|
+
|
140
|
+
@Taxonomy_klass.count.should == 0
|
141
|
+
@Taxon_klass.count.should == 0
|
142
|
+
|
143
|
+
@product_loader.perform_load( ifixture_file('SpreeProductsComplexTaxons.xls') )
|
144
|
+
|
145
|
+
expected_nested_multi_column_taxons
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should load nested Taxons correctly even when same names from xls", :taxons => true do
|
149
|
+
|
150
|
+
@Taxonomy_klass.delete_all
|
151
|
+
@Taxon_klass.delete_all
|
152
|
+
|
153
|
+
@Taxonomy_klass.count.should == 0
|
154
|
+
@Taxon_klass.count.should == 0
|
155
|
+
|
156
|
+
@product_loader.perform_load( ifixture_file('SpreeProductsComplexTaxons.csv') )
|
157
|
+
|
158
|
+
expected_nested_multi_column_taxons
|
159
|
+
|
160
|
+
end
|
161
|
+
|
162
|
+
def expected_nested_multi_column_taxons
|
163
|
+
# Expected :
|
164
|
+
# 2 Paintings>Landscape
|
165
|
+
# 1 WaterColour
|
166
|
+
# 1 Paintings
|
167
|
+
# 1 Oils
|
168
|
+
# 2 Drawings>Landscape - test same name for child (Paintings)
|
169
|
+
# 1 Paintings>Nature>Landscape - test same name for child of a child
|
170
|
+
# 1 Landscape
|
171
|
+
# 0 Drawings>Landscape - test same structure should be reused
|
172
|
+
# 2 Paintings>Nature>Seascape->Cliffs - test only the leaf node is created, rest re-used
|
173
|
+
# 1 Drawings>Landscape>Bristol - test a new leaf node created when parent name is same over different taxons
|
174
|
+
|
175
|
+
#puts @Taxonomy_klass.all.collect(&:name).sort.inspect
|
176
|
+
@Taxonomy_klass.count.should == 5
|
177
|
+
|
178
|
+
@Taxonomy_klass.all.collect(&:name).sort.should == ['Drawings', 'Landscape', 'Oils', 'Paintings','WaterColour']
|
179
|
+
|
180
|
+
@Taxonomy_klass.all.collect(&:root).collect(&:name).sort.should == ['Drawings', 'Landscape', 'Oils', 'Paintings','WaterColour']
|
181
|
+
|
182
|
+
taxons = @Taxon_klass.all.collect(&:name).sort
|
183
|
+
|
184
|
+
#puts "#{taxons.inspect} (#{taxons.size})"
|
185
|
+
|
186
|
+
@Taxon_klass.count.should == 12
|
187
|
+
|
188
|
+
taxons.should == ['Bristol', 'Cliffs', 'Drawings', 'Landscape', 'Landscape', 'Landscape', 'Landscape', 'Nature', 'Oils', 'Paintings', 'Seascape','WaterColour']
|
189
|
+
|
190
|
+
# drill down acts_as_nested_set ensure structures correct
|
191
|
+
|
192
|
+
# Paintings - Landscape
|
193
|
+
# - Nature
|
194
|
+
# - Landscape
|
195
|
+
# - Seascape
|
196
|
+
# - Cliffs
|
197
|
+
painting_onomy = @Taxonomy_klass.find_by_name('Paintings')
|
198
|
+
|
199
|
+
painting_onomy.taxons.should have_exactly(6).items
|
200
|
+
painting_onomy.root.child?.should be false
|
201
|
+
|
202
|
+
painting = painting_onomy.root
|
203
|
+
|
204
|
+
painting.children.should have_exactly(2).items
|
205
|
+
painting.children.collect(&:name).sort.should == ["Landscape", "Nature"]
|
206
|
+
|
207
|
+
painting.descendants.should have_exactly(5).items
|
208
|
+
|
209
|
+
lscape = {}
|
210
|
+
nature = nil
|
211
|
+
|
212
|
+
@Taxon_klass.each_with_level(painting.self_and_descendants) do |t, i|
|
213
|
+
|
214
|
+
|
215
|
+
if(t.name == 'Nature')
|
216
|
+
nature = t
|
217
|
+
i.should == 1
|
218
|
+
t.children.should have_exactly(2).items
|
219
|
+
t.children.collect(&:name).should == ["Landscape", "Seascape"]
|
220
|
+
|
221
|
+
t.descendants.should have_exactly(3).items
|
222
|
+
t.descendants.collect(&:name).sort.should == ["Cliffs", "Landscape", "Seascape"]
|
223
|
+
|
224
|
+
elsif(t.name == 'Landscape')
|
225
|
+
lscape[i] = t
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
nature.should_not be_nil
|
230
|
+
|
231
|
+
lscape.size.should be 2
|
232
|
+
lscape[1].name.should == 'Landscape'
|
233
|
+
lscape[1].parent.id.should == painting.id
|
234
|
+
|
235
|
+
lscape[2].name.should == 'Landscape'
|
236
|
+
lscape[2].parent.id.should == nature.id
|
237
|
+
|
238
|
+
|
239
|
+
seascape = @Taxon_klass.find_by_name('Seascape')
|
240
|
+
seascape.children.should have_exactly(1).items
|
241
|
+
seascape.leaf?.should be false
|
242
|
+
|
243
|
+
|
244
|
+
cliffs = @Taxon_klass.find_by_name('Cliffs')
|
245
|
+
cliffs.children.should have_exactly(0).items
|
246
|
+
cliffs.leaf?.should be true
|
247
|
+
|
248
|
+
@Taxon_klass.find_by_name('Seascape').ancestors.collect(&:name).sort.should == ["Nature", "Paintings"]
|
249
|
+
|
250
|
+
# Landscape appears multiple times, under different parents
|
251
|
+
@Taxon_klass.find_all_by_name('Landscape').should have_exactly(4).items
|
252
|
+
|
253
|
+
# Check the correct Landscape used, Drawings>Landscape>Bristol
|
254
|
+
|
255
|
+
drawings = @Taxonomy_klass.find_by_name('Drawings')
|
256
|
+
|
257
|
+
drawings.taxons.should have_exactly(3).items
|
258
|
+
|
259
|
+
dl = drawings.taxons.find_by_name('Landscape').children
|
260
|
+
|
261
|
+
|
262
|
+
dl.should have_exactly(1).items
|
263
|
+
|
264
|
+
b = dl.find_by_name('Bristol')
|
265
|
+
|
266
|
+
b.children.should have_exactly(0).items
|
267
|
+
b.ancestors.collect(&:name).sort.should == ["Drawings", "Landscape"]
|
268
|
+
|
269
|
+
# empty top level taxons
|
270
|
+
['Oils', 'Landscape'].each do |t|
|
271
|
+
tx = @Taxonomy_klass.find_by_name(t)
|
272
|
+
tx.taxons.should have_exactly(1).items
|
273
|
+
tx.root.name.should == t
|
274
|
+
tx.root.children.should have_exactly(0).items
|
275
|
+
tx.root.leaf?.should be true
|
276
|
+
end
|
277
|
+
|
278
|
+
|
279
|
+
end
|
280
|
+
|
281
|
+
|
282
|
+
end
|