datashift_spree 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (619) hide show
  1. data/LICENSE.txt +27 -0
  2. data/README.markdown +81 -0
  3. data/VERSION +1 -0
  4. data/datashift_spree.gemspec +36 -0
  5. data/datashift_spree.thor +52 -0
  6. data/lib/datashift_spree.rb +118 -0
  7. data/lib/datashift_spree_helper.rb +32 -0
  8. data/lib/helpers/spree_helper.rb +74 -0
  9. data/lib/loaders/spree/image_loader.rb +74 -0
  10. data/lib/loaders/spree/product_loader.rb +359 -0
  11. data/lib/thor/spree/bootstrap_cleanup.thor +61 -0
  12. data/lib/thor/spree/products_images.thor +252 -0
  13. data/lib/thor/spree/reports.thor +56 -0
  14. data/spec/Gemfile +28 -0
  15. data/spec/Gemfile.lock +243 -0
  16. data/spec/VERSION +1 -0
  17. data/spec/fixtures/SpreeImages.xls +0 -0
  18. data/spec/fixtures/SpreeMultiVariant.csv +4 -0
  19. data/spec/fixtures/SpreeProducts.csv +4 -0
  20. data/spec/fixtures/SpreeProducts.xls +0 -0
  21. data/spec/fixtures/SpreeProductsComplexTaxons.csv +6 -0
  22. data/spec/fixtures/SpreeProductsComplexTaxons.xls +0 -0
  23. data/spec/fixtures/SpreeProductsDefaults.yml +15 -0
  24. data/spec/fixtures/SpreeProductsMandatoryOnly.xls +0 -0
  25. data/spec/fixtures/SpreeProductsMultiColumn.csv +4 -0
  26. data/spec/fixtures/SpreeProductsMultiColumn.xls +0 -0
  27. data/spec/fixtures/SpreeProductsSimple.csv +4 -0
  28. data/spec/fixtures/SpreeProductsSimple.xls +0 -0
  29. data/spec/fixtures/SpreeProductsWithImages.csv +4 -0
  30. data/spec/fixtures/SpreeProductsWithImages.xls +0 -0
  31. data/spec/fixtures/SpreeZoneExample.csv +5 -0
  32. data/spec/fixtures/SpreeZoneExample.xls +0 -0
  33. data/spec/fixtures/config/database.yml +28 -0
  34. data/spec/fixtures/images/DEMO_001_ror_bag.jpeg +0 -0
  35. data/spec/fixtures/images/DEMO_002_Powerstation.jpg +0 -0
  36. data/spec/fixtures/images/DEMO_003_ror_mug.jpeg +0 -0
  37. data/spec/fixtures/images/DEMO_004_ror_ringer.jpeg +0 -0
  38. data/spec/fixtures/negative/SpreeProdMiss1Mandatory.csv +4 -0
  39. data/spec/fixtures/negative/SpreeProdMiss1Mandatory.xls +0 -0
  40. data/spec/fixtures/negative/SpreeProdMissManyMandatory.csv +4 -0
  41. data/spec/fixtures/negative/SpreeProdMissManyMandatory.xls +0 -0
  42. data/spec/fixtures/results/taxon_and_assoc_export_spec.xls +0 -0
  43. data/spec/fixtures/results/taxon_export_spec.xls +0 -0
  44. data/spec/logs/datashift_spec.log +10166 -0
  45. data/spec/logs/spree_sandbox.log +54803 -0
  46. data/spec/sandbox/Gemfile +43 -0
  47. data/spec/sandbox/README.rdoc +261 -0
  48. data/spec/sandbox/Rakefile +7 -0
  49. data/spec/sandbox/app/assets/images/rails.png +0 -0
  50. data/spec/sandbox/app/assets/javascripts/admin/all.js +12 -0
  51. data/spec/sandbox/app/assets/javascripts/application.js +15 -0
  52. data/spec/sandbox/app/assets/javascripts/store/all.js +14 -0
  53. data/spec/sandbox/app/assets/stylesheets/admin/all.css +13 -0
  54. data/spec/sandbox/app/assets/stylesheets/application.css +13 -0
  55. data/spec/sandbox/app/assets/stylesheets/store/all.css +13 -0
  56. data/spec/sandbox/app/controllers/application_controller.rb +3 -0
  57. data/spec/sandbox/app/helpers/application_helper.rb +2 -0
  58. data/spec/sandbox/app/views/layouts/application.html.erb +14 -0
  59. data/spec/sandbox/config.ru +4 -0
  60. data/spec/sandbox/config/application.rb +75 -0
  61. data/spec/sandbox/config/boot.rb +6 -0
  62. data/spec/sandbox/config/database.yml +20 -0
  63. data/spec/sandbox/config/environment.rb +7 -0
  64. data/spec/sandbox/config/environments/development.rb +37 -0
  65. data/spec/sandbox/config/environments/production.rb +67 -0
  66. data/spec/sandbox/config/environments/test.rb +37 -0
  67. data/spec/sandbox/config/initializers/backtrace_silencers.rb +7 -0
  68. data/spec/sandbox/config/initializers/inflections.rb +15 -0
  69. data/spec/sandbox/config/initializers/mime_types.rb +5 -0
  70. data/spec/sandbox/config/initializers/secret_token.rb +7 -0
  71. data/spec/sandbox/config/initializers/session_store.rb +8 -0
  72. data/spec/sandbox/config/initializers/spree.rb +12 -0
  73. data/spec/sandbox/config/initializers/wrap_parameters.rb +14 -0
  74. data/spec/sandbox/config/locales/en.yml +5 -0
  75. data/spec/sandbox/config/routes.rb +65 -0
  76. data/spec/sandbox/config/spree.yml +2 -0
  77. data/spec/sandbox/db/development.sqlite3 +0 -0
  78. data/spec/sandbox/db/migrate/20120918081451_spree_zero_nine_zero.spree.rb +390 -0
  79. data/spec/sandbox/db/migrate/20120918081452_create_indexes_for_inventory_units.spree.rb +7 -0
  80. data/spec/sandbox/db/migrate/20120918081453_add_count_on_hand_to_variants_and_products.spree.rb +50 -0
  81. data/spec/sandbox/db/migrate/20120918081454_change_taxons_to_nested_set.spree.rb +47 -0
  82. data/spec/sandbox/db/migrate/20120918081455_move_to_configurable_gateways.spree.rb +55 -0
  83. data/spec/sandbox/db/migrate/20120918081456_add_open_id_authentication_tables.spree.rb +16 -0
  84. data/spec/sandbox/db/migrate/20120918081457_add_openid_field_to_users.spree.rb +25 -0
  85. data/spec/sandbox/db/migrate/20120918081458_change_preference_value_type.spree.rb +11 -0
  86. data/spec/sandbox/db/migrate/20120918081459_create_billing_integrations.spree.rb +13 -0
  87. data/spec/sandbox/db/migrate/20120918081460_charge_refactoring.spree.rb +40 -0
  88. data/spec/sandbox/db/migrate/20120918081461_add_some_indexes.spree.rb +12 -0
  89. data/spec/sandbox/db/migrate/20120918081462_checkout_state_machine.spree.rb +6 -0
  90. data/spec/sandbox/db/migrate/20120918081463_state_for_shipments.spree.rb +6 -0
  91. data/spec/sandbox/db/migrate/20120918081464_make_state_events_polymorphic.spree.rb +13 -0
  92. data/spec/sandbox/db/migrate/20120918081465_ship_address_id_for_checkouts.spree.rb +6 -0
  93. data/spec/sandbox/db/migrate/20120918081466_shipping_method_id_for_checkouts.spree.rb +6 -0
  94. data/spec/sandbox/db/migrate/20120918081467_creditcard_last_four_digits.spree.rb +15 -0
  95. data/spec/sandbox/db/migrate/20120918081468_populate_legacy_shipment_state.spree.rb +16 -0
  96. data/spec/sandbox/db/migrate/20120918081469_add_cost_price.spree.rb +6 -0
  97. data/spec/sandbox/db/migrate/20120918081470_shipment_id_for_inventory_units.spree.rb +26 -0
  98. data/spec/sandbox/db/migrate/20120918081471_cim_fields_for_creditcards.spree.rb +7 -0
  99. data/spec/sandbox/db/migrate/20120918081472_create_return_authorizations.spree.rb +13 -0
  100. data/spec/sandbox/db/migrate/20120918081473_add_return_authorization_to_inventory_units.spree.rb +6 -0
  101. data/spec/sandbox/db/migrate/20120918081474_create_trackers.spree.rb +11 -0
  102. data/spec/sandbox/db/migrate/20120918081475_creditcard_id_for_creditcard_txns.spree.rb +6 -0
  103. data/spec/sandbox/db/migrate/20120918081476_original_creditcard_txn_id_for_creditcard_txns.spree.rb +6 -0
  104. data/spec/sandbox/db/migrate/20120918081477_add_test_mode_to_billing_integration.spree.rb +7 -0
  105. data/spec/sandbox/db/migrate/20120918081478_create_payment_methods.spree.rb +17 -0
  106. data/spec/sandbox/db/migrate/20120918081479_polymorphic_payments.spree.rb +43 -0
  107. data/spec/sandbox/db/migrate/20120918081480_change_payments_payment_method_to_belongs_to.spree.rb +12 -0
  108. data/spec/sandbox/db/migrate/20120918081481_assign_creditcard_txns_to_payment.spree.rb +24 -0
  109. data/spec/sandbox/db/migrate/20120918081482_sti_for_transactions.spree.rb +16 -0
  110. data/spec/sandbox/db/migrate/20120918081483_drop_billing_integrations.spree.rb +17 -0
  111. data/spec/sandbox/db/migrate/20120918081484_deleted_at_for_payment_methods.spree.rb +15 -0
  112. data/spec/sandbox/db/migrate/20120918081485_add_adjustments_index.spree.rb +7 -0
  113. data/spec/sandbox/db/migrate/20120918081486_add_alt_text_to_images.spree.rb +6 -0
  114. data/spec/sandbox/db/migrate/20120918081487_fix_existing_coupon_credits.spree.rb +14 -0
  115. data/spec/sandbox/db/migrate/20120918081488_add_display_to_payment_methods.spree.rb +6 -0
  116. data/spec/sandbox/db/migrate/20120918081489_add_addresses_checkouts_indexes.spree.rb +9 -0
  117. data/spec/sandbox/db/migrate/20120918081490_add_icon_to_taxons.spree.rb +18 -0
  118. data/spec/sandbox/db/migrate/20120918081491_add_description_to_taxons.spree.rb +12 -0
  119. data/spec/sandbox/db/migrate/20120918081492_index_for_shipments_number.spree.rb +6 -0
  120. data/spec/sandbox/db/migrate/20120918081493_add_index_on_users_persistence_token.spree.rb +6 -0
  121. data/spec/sandbox/db/migrate/20120918081494_add_default_to_tax_categories.spree.rb +6 -0
  122. data/spec/sandbox/db/migrate/20120918081495_add_display_to_shipping_methods.spree.rb +6 -0
  123. data/spec/sandbox/db/migrate/20120918081496_rename_payment_method_display.spree.rb +6 -0
  124. data/spec/sandbox/db/migrate/20120918081497_rename_preferences_field.spree.rb +6 -0
  125. data/spec/sandbox/db/migrate/20120918081498_add_guest_flag.spree.rb +6 -0
  126. data/spec/sandbox/db/migrate/20120918081499_drop_order_token.spree.rb +10 -0
  127. data/spec/sandbox/db/migrate/20120918081500_payments_state_and_assigned_to_order_only.spree.rb +15 -0
  128. data/spec/sandbox/db/migrate/20120918081501_create_address_keys_for_order.spree.rb +7 -0
  129. data/spec/sandbox/db/migrate/20120918081502_payment_total_for_orders.spree.rb +6 -0
  130. data/spec/sandbox/db/migrate/20120918081503_shipping_method_id_for_orders.spree.rb +6 -0
  131. data/spec/sandbox/db/migrate/20120918081504_add_shipment_and_payment_state.spree.rb +7 -0
  132. data/spec/sandbox/db/migrate/20120918081505_refactor_adjustments.spree.rb +30 -0
  133. data/spec/sandbox/db/migrate/20120918081506_response_code_and_avs_response_for_payments.spree.rb +7 -0
  134. data/spec/sandbox/db/migrate/20120918081507_change_guest_flag_to_anonymous.spree.rb +6 -0
  135. data/spec/sandbox/db/migrate/20120918081508_email_for_orders.spree.rb +6 -0
  136. data/spec/sandbox/db/migrate/20120918081509_create_mail_methods.spree.rb +11 -0
  137. data/spec/sandbox/db/migrate/20120918081510_rename_frozen_to_locked.spree.rb +6 -0
  138. data/spec/sandbox/db/migrate/20120918081511_move_special_instructions_to_orders.spree.rb +11 -0
  139. data/spec/sandbox/db/migrate/20120918081512_create_log_entries.spree.rb +12 -0
  140. data/spec/sandbox/db/migrate/20120918081513_migrate_transactions_to_payment_state.spree.rb +99 -0
  141. data/spec/sandbox/db/migrate/20120918081514_delete_in_progress_orders.spree.rb +20 -0
  142. data/spec/sandbox/db/migrate/20120918081515_migrate_checkout_to_orders.spree.rb +24 -0
  143. data/spec/sandbox/db/migrate/20120918081516_remove_shipped_state.spree.rb +13 -0
  144. data/spec/sandbox/db/migrate/20120918081517_prevent_nil_payment_total.spree.rb +9 -0
  145. data/spec/sandbox/db/migrate/20120918081518_prevent_nil_email.spree.rb +10 -0
  146. data/spec/sandbox/db/migrate/20120918081519_generate_anonymous_users.spree.rb +21 -0
  147. data/spec/sandbox/db/migrate/20120918081520_update_order_state.spree.rb +13 -0
  148. data/spec/sandbox/db/migrate/20120918081521_cleanup_legacy_tables.spree.rb +12 -0
  149. data/spec/sandbox/db/migrate/20120918081522_remove_number_and_cvv_from_credicard.spree.rb +12 -0
  150. data/spec/sandbox/db/migrate/20120918081523_drop_anonymous_field_for_user.spree.rb +10 -0
  151. data/spec/sandbox/db/migrate/20120918081524_renamed_rma_cancelled_state.spree.rb +10 -0
  152. data/spec/sandbox/db/migrate/20120918081525_fix_problematic_index_names.spree.rb +14 -0
  153. data/spec/sandbox/db/migrate/20120918081526_add_position_to_variants.spree.rb +6 -0
  154. data/spec/sandbox/db/migrate/20120918081527_add_next_state_to_state_events.spree.rb +6 -0
  155. data/spec/sandbox/db/migrate/20120918081528_add_position_to_option_types.spree.rb +6 -0
  156. data/spec/sandbox/db/migrate/20120918081529_remove_trailing_slashes_in_taxon_permalinks.spree.rb +20 -0
  157. data/spec/sandbox/db/migrate/20120918081530_create_activators.spree.rb +15 -0
  158. data/spec/sandbox/db/migrate/20120918081531_eligible_for_adjustments.spree.rb +6 -0
  159. data/spec/sandbox/db/migrate/20120918081532_namespace_top_level_models.spree.rb +50 -0
  160. data/spec/sandbox/db/migrate/20120918081533_migrate_namespaced_polymorphic_models.spree.rb +53 -0
  161. data/spec/sandbox/db/migrate/20120918081534_make_adjustments_polymorphic.spree.rb +10 -0
  162. data/spec/sandbox/db/migrate/20120918081535_add_company_to_addresses.spree.rb +6 -0
  163. data/spec/sandbox/db/migrate/20120918081536_add_inc_tax_to_tax_rates.spree.rb +6 -0
  164. data/spec/sandbox/db/migrate/20120918081537_rename_inc_price_attribute.spree.rb +6 -0
  165. data/spec/sandbox/db/migrate/20120918081538_add_default_tax_zone.spree.rb +6 -0
  166. data/spec/sandbox/db/migrate/20120918081539_associate_shipping_methods_and_shipping_categories.spree.rb +8 -0
  167. data/spec/sandbox/db/migrate/20120918081540_add_match_rules_to_shipping_methods.spree.rb +8 -0
  168. data/spec/sandbox/db/migrate/20120918081541_new_preferences.spree.rb +49 -0
  169. data/spec/sandbox/db/migrate/20120918081542_rename_state_events_to_state_changes.spree.rb +10 -0
  170. data/spec/sandbox/db/migrate/20120918081543_add_deleted_at_to_tax_category.spree.rb +6 -0
  171. data/spec/sandbox/db/migrate/20120918081544_migrate_images_from_products_to_variants.spree.rb +36 -0
  172. data/spec/sandbox/db/migrate/20120918081545_rename_attachment_size_to_attachment_file_size.spree.rb +6 -0
  173. data/spec/sandbox/db/migrate/20120918081546_increase_scale_of_tax_rate_amount.spree.rb +10 -0
  174. data/spec/sandbox/db/migrate/20120918081547_convert_sales_tax_to_default_tax.spree.rb +10 -0
  175. data/spec/sandbox/db/migrate/20120918081548_add_deleted_at_to_spree_shipping_methods.spree.rb +6 -0
  176. data/spec/sandbox/db/migrate/20120918081549_make_users_email_index_unique.spree.rb +11 -0
  177. data/spec/sandbox/db/migrate/20120918081550_add_counter_cache_to_zone_members.spree.rb +15 -0
  178. data/spec/sandbox/db/migrate/20120918081551_rename_columns_for_devise.spree_auth.rb +39 -0
  179. data/spec/sandbox/db/migrate/20120918081552_convert_user_remember_field.spree_auth.rb +12 -0
  180. data/spec/sandbox/db/migrate/20120918081553_create_tokenized_permissions.spree_auth.rb +14 -0
  181. data/spec/sandbox/db/migrate/20120918081554_tokens_for_legacy_orders.spree_auth.rb +19 -0
  182. data/spec/sandbox/db/migrate/20120918081555_namespace_tokenized_permission.spree_auth.rb +6 -0
  183. data/spec/sandbox/db/migrate/20120918081556_migrate_tokenized_permissions.spree_auth.rb +25 -0
  184. data/spec/sandbox/db/migrate/20120918081557_add_reset_password_sent_at_to_spree_users.spree_auth.rb +6 -0
  185. data/spec/sandbox/db/migrate/20120918081558_add_api_key_to_spree_users.spree_api.rb +6 -0
  186. data/spec/sandbox/db/migrate/20120918081559_resize_api_key_field.spree_api.rb +6 -0
  187. data/spec/sandbox/db/migrate/20120918081560_rename_coupons_to_promotions.spree_promo.rb +11 -0
  188. data/spec/sandbox/db/migrate/20120918081561_create_promotion_rules.spree_promo.rb +25 -0
  189. data/spec/sandbox/db/migrate/20120918081562_match_policy_for_promotions.spree_promo.rb +6 -0
  190. data/spec/sandbox/db/migrate/20120918081563_create_promotion_rules_users.spree_promo.rb +15 -0
  191. data/spec/sandbox/db/migrate/20120918081564_name_for_promotions.spree_promo.rb +6 -0
  192. data/spec/sandbox/db/migrate/20120918081565_update_calculable_type_for_promotions.spree_promo.rb +10 -0
  193. data/spec/sandbox/db/migrate/20120918081566_migrate_adjustments.spree_promo.rb +10 -0
  194. data/spec/sandbox/db/migrate/20120918081567_promotion_changes_to_subclass_of_activator.spree_promo.rb +23 -0
  195. data/spec/sandbox/db/migrate/20120918081568_create_promotion_actions.spree_promo.rb +10 -0
  196. data/spec/sandbox/db/migrate/20120918081569_create_promotion_action_line_items.spree_promo.rb +11 -0
  197. data/spec/sandbox/db/migrate/20120918081570_namespace_promo_tables.spree_promo.rb +86 -0
  198. data/spec/sandbox/db/migrate/20120918081571_create_spree_pending_promotions.spree_promo.rb +12 -0
  199. data/spec/sandbox/db/migrate/20120918081572_content_visited_event.spree_promo.rb +30 -0
  200. data/spec/sandbox/db/production.sqlite3 +0 -0
  201. data/spec/sandbox/db/schema.rb +586 -0
  202. data/spec/sandbox/db/seeds.rb +11 -0
  203. data/spec/sandbox/db/test.sqlite3 +0 -0
  204. data/spec/sandbox/doc/README_FOR_APP +2 -0
  205. data/spec/sandbox/log/development.log +4856 -0
  206. data/spec/sandbox/log/production.log +31 -0
  207. data/spec/sandbox/public/404.html +26 -0
  208. data/spec/sandbox/public/422.html +26 -0
  209. data/spec/sandbox/public/500.html +25 -0
  210. data/spec/sandbox/public/assets/rails-be8732dac73d845ac5b142c8fb5f9fb0.png +0 -0
  211. data/spec/sandbox/public/favicon.ico +0 -0
  212. data/spec/sandbox/public/robots.txt +14 -0
  213. data/spec/sandbox/public/spree/products/1/large/DEMO_001_ror_bag.jpeg +0 -0
  214. data/spec/sandbox/public/spree/products/1/mini/DEMO_001_ror_bag.jpeg +0 -0
  215. data/spec/sandbox/public/spree/products/1/original/DEMO_001_ror_bag.jpeg +0 -0
  216. data/spec/sandbox/public/spree/products/1/product/DEMO_001_ror_bag.jpeg +0 -0
  217. data/spec/sandbox/public/spree/products/1/small/DEMO_001_ror_bag.jpeg +0 -0
  218. data/spec/sandbox/public/spree/products/10/large/DEMO_001_ror_bag.jpeg +0 -0
  219. data/spec/sandbox/public/spree/products/10/mini/DEMO_001_ror_bag.jpeg +0 -0
  220. data/spec/sandbox/public/spree/products/10/original/DEMO_001_ror_bag.jpeg +0 -0
  221. data/spec/sandbox/public/spree/products/10/product/DEMO_001_ror_bag.jpeg +0 -0
  222. data/spec/sandbox/public/spree/products/10/small/DEMO_001_ror_bag.jpeg +0 -0
  223. data/spec/sandbox/public/spree/products/11/large/DEMO_002_Powerstation.jpg +0 -0
  224. data/spec/sandbox/public/spree/products/11/mini/DEMO_002_Powerstation.jpg +0 -0
  225. data/spec/sandbox/public/spree/products/11/original/DEMO_002_Powerstation.jpg +0 -0
  226. data/spec/sandbox/public/spree/products/11/product/DEMO_002_Powerstation.jpg +0 -0
  227. data/spec/sandbox/public/spree/products/11/small/DEMO_002_Powerstation.jpg +0 -0
  228. data/spec/sandbox/public/spree/products/12/large/DEMO_003_ror_mug.jpeg +0 -0
  229. data/spec/sandbox/public/spree/products/12/mini/DEMO_003_ror_mug.jpeg +0 -0
  230. data/spec/sandbox/public/spree/products/12/original/DEMO_003_ror_mug.jpeg +0 -0
  231. data/spec/sandbox/public/spree/products/12/product/DEMO_003_ror_mug.jpeg +0 -0
  232. data/spec/sandbox/public/spree/products/12/small/DEMO_003_ror_mug.jpeg +0 -0
  233. data/spec/sandbox/public/spree/products/13/large/DEMO_001_ror_bag.jpeg +0 -0
  234. data/spec/sandbox/public/spree/products/13/mini/DEMO_001_ror_bag.jpeg +0 -0
  235. data/spec/sandbox/public/spree/products/13/original/DEMO_001_ror_bag.jpeg +0 -0
  236. data/spec/sandbox/public/spree/products/13/product/DEMO_001_ror_bag.jpeg +0 -0
  237. data/spec/sandbox/public/spree/products/13/small/DEMO_001_ror_bag.jpeg +0 -0
  238. data/spec/sandbox/public/spree/products/14/large/DEMO_002_Powerstation.jpg +0 -0
  239. data/spec/sandbox/public/spree/products/14/mini/DEMO_002_Powerstation.jpg +0 -0
  240. data/spec/sandbox/public/spree/products/14/original/DEMO_002_Powerstation.jpg +0 -0
  241. data/spec/sandbox/public/spree/products/14/product/DEMO_002_Powerstation.jpg +0 -0
  242. data/spec/sandbox/public/spree/products/14/small/DEMO_002_Powerstation.jpg +0 -0
  243. data/spec/sandbox/public/spree/products/15/large/DEMO_003_ror_mug.jpeg +0 -0
  244. data/spec/sandbox/public/spree/products/15/mini/DEMO_003_ror_mug.jpeg +0 -0
  245. data/spec/sandbox/public/spree/products/15/original/DEMO_003_ror_mug.jpeg +0 -0
  246. data/spec/sandbox/public/spree/products/15/product/DEMO_003_ror_mug.jpeg +0 -0
  247. data/spec/sandbox/public/spree/products/15/small/DEMO_003_ror_mug.jpeg +0 -0
  248. data/spec/sandbox/public/spree/products/16/large/DEMO_001_ror_bag.jpeg +0 -0
  249. data/spec/sandbox/public/spree/products/16/mini/DEMO_001_ror_bag.jpeg +0 -0
  250. data/spec/sandbox/public/spree/products/16/original/DEMO_001_ror_bag.jpeg +0 -0
  251. data/spec/sandbox/public/spree/products/16/product/DEMO_001_ror_bag.jpeg +0 -0
  252. data/spec/sandbox/public/spree/products/16/small/DEMO_001_ror_bag.jpeg +0 -0
  253. data/spec/sandbox/public/spree/products/17/large/DEMO_002_Powerstation.jpg +0 -0
  254. data/spec/sandbox/public/spree/products/17/mini/DEMO_002_Powerstation.jpg +0 -0
  255. data/spec/sandbox/public/spree/products/17/original/DEMO_002_Powerstation.jpg +0 -0
  256. data/spec/sandbox/public/spree/products/17/product/DEMO_002_Powerstation.jpg +0 -0
  257. data/spec/sandbox/public/spree/products/17/small/DEMO_002_Powerstation.jpg +0 -0
  258. data/spec/sandbox/public/spree/products/18/large/DEMO_003_ror_mug.jpeg +0 -0
  259. data/spec/sandbox/public/spree/products/18/mini/DEMO_003_ror_mug.jpeg +0 -0
  260. data/spec/sandbox/public/spree/products/18/original/DEMO_003_ror_mug.jpeg +0 -0
  261. data/spec/sandbox/public/spree/products/18/product/DEMO_003_ror_mug.jpeg +0 -0
  262. data/spec/sandbox/public/spree/products/18/small/DEMO_003_ror_mug.jpeg +0 -0
  263. data/spec/sandbox/public/spree/products/19/large/DEMO_001_ror_bag.jpeg +0 -0
  264. data/spec/sandbox/public/spree/products/19/mini/DEMO_001_ror_bag.jpeg +0 -0
  265. data/spec/sandbox/public/spree/products/19/original/DEMO_001_ror_bag.jpeg +0 -0
  266. data/spec/sandbox/public/spree/products/19/product/DEMO_001_ror_bag.jpeg +0 -0
  267. data/spec/sandbox/public/spree/products/19/small/DEMO_001_ror_bag.jpeg +0 -0
  268. data/spec/sandbox/public/spree/products/2/large/DEMO_002_Powerstation.jpg +0 -0
  269. data/spec/sandbox/public/spree/products/2/mini/DEMO_002_Powerstation.jpg +0 -0
  270. data/spec/sandbox/public/spree/products/2/original/DEMO_002_Powerstation.jpg +0 -0
  271. data/spec/sandbox/public/spree/products/2/product/DEMO_002_Powerstation.jpg +0 -0
  272. data/spec/sandbox/public/spree/products/2/small/DEMO_002_Powerstation.jpg +0 -0
  273. data/spec/sandbox/public/spree/products/20/large/DEMO_002_Powerstation.jpg +0 -0
  274. data/spec/sandbox/public/spree/products/20/mini/DEMO_002_Powerstation.jpg +0 -0
  275. data/spec/sandbox/public/spree/products/20/original/DEMO_002_Powerstation.jpg +0 -0
  276. data/spec/sandbox/public/spree/products/20/product/DEMO_002_Powerstation.jpg +0 -0
  277. data/spec/sandbox/public/spree/products/20/small/DEMO_002_Powerstation.jpg +0 -0
  278. data/spec/sandbox/public/spree/products/21/large/DEMO_003_ror_mug.jpeg +0 -0
  279. data/spec/sandbox/public/spree/products/21/mini/DEMO_003_ror_mug.jpeg +0 -0
  280. data/spec/sandbox/public/spree/products/21/original/DEMO_003_ror_mug.jpeg +0 -0
  281. data/spec/sandbox/public/spree/products/21/product/DEMO_003_ror_mug.jpeg +0 -0
  282. data/spec/sandbox/public/spree/products/21/small/DEMO_003_ror_mug.jpeg +0 -0
  283. data/spec/sandbox/public/spree/products/22/large/DEMO_001_ror_bag.jpeg +0 -0
  284. data/spec/sandbox/public/spree/products/22/mini/DEMO_001_ror_bag.jpeg +0 -0
  285. data/spec/sandbox/public/spree/products/22/original/DEMO_001_ror_bag.jpeg +0 -0
  286. data/spec/sandbox/public/spree/products/22/product/DEMO_001_ror_bag.jpeg +0 -0
  287. data/spec/sandbox/public/spree/products/22/small/DEMO_001_ror_bag.jpeg +0 -0
  288. data/spec/sandbox/public/spree/products/23/large/DEMO_002_Powerstation.jpg +0 -0
  289. data/spec/sandbox/public/spree/products/23/mini/DEMO_002_Powerstation.jpg +0 -0
  290. data/spec/sandbox/public/spree/products/23/original/DEMO_002_Powerstation.jpg +0 -0
  291. data/spec/sandbox/public/spree/products/23/product/DEMO_002_Powerstation.jpg +0 -0
  292. data/spec/sandbox/public/spree/products/23/small/DEMO_002_Powerstation.jpg +0 -0
  293. data/spec/sandbox/public/spree/products/24/large/DEMO_003_ror_mug.jpeg +0 -0
  294. data/spec/sandbox/public/spree/products/24/mini/DEMO_003_ror_mug.jpeg +0 -0
  295. data/spec/sandbox/public/spree/products/24/original/DEMO_003_ror_mug.jpeg +0 -0
  296. data/spec/sandbox/public/spree/products/24/product/DEMO_003_ror_mug.jpeg +0 -0
  297. data/spec/sandbox/public/spree/products/24/small/DEMO_003_ror_mug.jpeg +0 -0
  298. data/spec/sandbox/public/spree/products/25/large/DEMO_001_ror_bag.jpeg +0 -0
  299. data/spec/sandbox/public/spree/products/25/mini/DEMO_001_ror_bag.jpeg +0 -0
  300. data/spec/sandbox/public/spree/products/25/original/DEMO_001_ror_bag.jpeg +0 -0
  301. data/spec/sandbox/public/spree/products/25/product/DEMO_001_ror_bag.jpeg +0 -0
  302. data/spec/sandbox/public/spree/products/25/small/DEMO_001_ror_bag.jpeg +0 -0
  303. data/spec/sandbox/public/spree/products/26/large/DEMO_002_Powerstation.jpg +0 -0
  304. data/spec/sandbox/public/spree/products/26/mini/DEMO_002_Powerstation.jpg +0 -0
  305. data/spec/sandbox/public/spree/products/26/original/DEMO_002_Powerstation.jpg +0 -0
  306. data/spec/sandbox/public/spree/products/26/product/DEMO_002_Powerstation.jpg +0 -0
  307. data/spec/sandbox/public/spree/products/26/small/DEMO_002_Powerstation.jpg +0 -0
  308. data/spec/sandbox/public/spree/products/27/large/DEMO_003_ror_mug.jpeg +0 -0
  309. data/spec/sandbox/public/spree/products/27/mini/DEMO_003_ror_mug.jpeg +0 -0
  310. data/spec/sandbox/public/spree/products/27/original/DEMO_003_ror_mug.jpeg +0 -0
  311. data/spec/sandbox/public/spree/products/27/product/DEMO_003_ror_mug.jpeg +0 -0
  312. data/spec/sandbox/public/spree/products/27/small/DEMO_003_ror_mug.jpeg +0 -0
  313. data/spec/sandbox/public/spree/products/28/large/DEMO_001_ror_bag.jpeg +0 -0
  314. data/spec/sandbox/public/spree/products/28/mini/DEMO_001_ror_bag.jpeg +0 -0
  315. data/spec/sandbox/public/spree/products/28/original/DEMO_001_ror_bag.jpeg +0 -0
  316. data/spec/sandbox/public/spree/products/28/product/DEMO_001_ror_bag.jpeg +0 -0
  317. data/spec/sandbox/public/spree/products/28/small/DEMO_001_ror_bag.jpeg +0 -0
  318. data/spec/sandbox/public/spree/products/29/large/DEMO_002_Powerstation.jpg +0 -0
  319. data/spec/sandbox/public/spree/products/29/mini/DEMO_002_Powerstation.jpg +0 -0
  320. data/spec/sandbox/public/spree/products/29/original/DEMO_002_Powerstation.jpg +0 -0
  321. data/spec/sandbox/public/spree/products/29/product/DEMO_002_Powerstation.jpg +0 -0
  322. data/spec/sandbox/public/spree/products/29/small/DEMO_002_Powerstation.jpg +0 -0
  323. data/spec/sandbox/public/spree/products/3/large/DEMO_003_ror_mug.jpeg +0 -0
  324. data/spec/sandbox/public/spree/products/3/mini/DEMO_003_ror_mug.jpeg +0 -0
  325. data/spec/sandbox/public/spree/products/3/original/DEMO_003_ror_mug.jpeg +0 -0
  326. data/spec/sandbox/public/spree/products/3/product/DEMO_003_ror_mug.jpeg +0 -0
  327. data/spec/sandbox/public/spree/products/3/small/DEMO_003_ror_mug.jpeg +0 -0
  328. data/spec/sandbox/public/spree/products/30/large/DEMO_003_ror_mug.jpeg +0 -0
  329. data/spec/sandbox/public/spree/products/30/mini/DEMO_003_ror_mug.jpeg +0 -0
  330. data/spec/sandbox/public/spree/products/30/original/DEMO_003_ror_mug.jpeg +0 -0
  331. data/spec/sandbox/public/spree/products/30/product/DEMO_003_ror_mug.jpeg +0 -0
  332. data/spec/sandbox/public/spree/products/30/small/DEMO_003_ror_mug.jpeg +0 -0
  333. data/spec/sandbox/public/spree/products/31/large/DEMO_001_ror_bag.jpeg +0 -0
  334. data/spec/sandbox/public/spree/products/31/mini/DEMO_001_ror_bag.jpeg +0 -0
  335. data/spec/sandbox/public/spree/products/31/original/DEMO_001_ror_bag.jpeg +0 -0
  336. data/spec/sandbox/public/spree/products/31/product/DEMO_001_ror_bag.jpeg +0 -0
  337. data/spec/sandbox/public/spree/products/31/small/DEMO_001_ror_bag.jpeg +0 -0
  338. data/spec/sandbox/public/spree/products/32/large/DEMO_002_Powerstation.jpg +0 -0
  339. data/spec/sandbox/public/spree/products/32/mini/DEMO_002_Powerstation.jpg +0 -0
  340. data/spec/sandbox/public/spree/products/32/original/DEMO_002_Powerstation.jpg +0 -0
  341. data/spec/sandbox/public/spree/products/32/product/DEMO_002_Powerstation.jpg +0 -0
  342. data/spec/sandbox/public/spree/products/32/small/DEMO_002_Powerstation.jpg +0 -0
  343. data/spec/sandbox/public/spree/products/33/large/DEMO_003_ror_mug.jpeg +0 -0
  344. data/spec/sandbox/public/spree/products/33/mini/DEMO_003_ror_mug.jpeg +0 -0
  345. data/spec/sandbox/public/spree/products/33/original/DEMO_003_ror_mug.jpeg +0 -0
  346. data/spec/sandbox/public/spree/products/33/product/DEMO_003_ror_mug.jpeg +0 -0
  347. data/spec/sandbox/public/spree/products/33/small/DEMO_003_ror_mug.jpeg +0 -0
  348. data/spec/sandbox/public/spree/products/34/large/DEMO_001_ror_bag.jpeg +0 -0
  349. data/spec/sandbox/public/spree/products/34/mini/DEMO_001_ror_bag.jpeg +0 -0
  350. data/spec/sandbox/public/spree/products/34/original/DEMO_001_ror_bag.jpeg +0 -0
  351. data/spec/sandbox/public/spree/products/34/product/DEMO_001_ror_bag.jpeg +0 -0
  352. data/spec/sandbox/public/spree/products/34/small/DEMO_001_ror_bag.jpeg +0 -0
  353. data/spec/sandbox/public/spree/products/35/large/DEMO_002_Powerstation.jpg +0 -0
  354. data/spec/sandbox/public/spree/products/35/mini/DEMO_002_Powerstation.jpg +0 -0
  355. data/spec/sandbox/public/spree/products/35/original/DEMO_002_Powerstation.jpg +0 -0
  356. data/spec/sandbox/public/spree/products/35/product/DEMO_002_Powerstation.jpg +0 -0
  357. data/spec/sandbox/public/spree/products/35/small/DEMO_002_Powerstation.jpg +0 -0
  358. data/spec/sandbox/public/spree/products/36/large/DEMO_003_ror_mug.jpeg +0 -0
  359. data/spec/sandbox/public/spree/products/36/mini/DEMO_003_ror_mug.jpeg +0 -0
  360. data/spec/sandbox/public/spree/products/36/original/DEMO_003_ror_mug.jpeg +0 -0
  361. data/spec/sandbox/public/spree/products/36/product/DEMO_003_ror_mug.jpeg +0 -0
  362. data/spec/sandbox/public/spree/products/36/small/DEMO_003_ror_mug.jpeg +0 -0
  363. data/spec/sandbox/public/spree/products/37/large/DEMO_001_ror_bag.jpeg +0 -0
  364. data/spec/sandbox/public/spree/products/37/mini/DEMO_001_ror_bag.jpeg +0 -0
  365. data/spec/sandbox/public/spree/products/37/original/DEMO_001_ror_bag.jpeg +0 -0
  366. data/spec/sandbox/public/spree/products/37/product/DEMO_001_ror_bag.jpeg +0 -0
  367. data/spec/sandbox/public/spree/products/37/small/DEMO_001_ror_bag.jpeg +0 -0
  368. data/spec/sandbox/public/spree/products/38/large/DEMO_002_Powerstation.jpg +0 -0
  369. data/spec/sandbox/public/spree/products/38/mini/DEMO_002_Powerstation.jpg +0 -0
  370. data/spec/sandbox/public/spree/products/38/original/DEMO_002_Powerstation.jpg +0 -0
  371. data/spec/sandbox/public/spree/products/38/product/DEMO_002_Powerstation.jpg +0 -0
  372. data/spec/sandbox/public/spree/products/38/small/DEMO_002_Powerstation.jpg +0 -0
  373. data/spec/sandbox/public/spree/products/39/large/DEMO_003_ror_mug.jpeg +0 -0
  374. data/spec/sandbox/public/spree/products/39/mini/DEMO_003_ror_mug.jpeg +0 -0
  375. data/spec/sandbox/public/spree/products/39/original/DEMO_003_ror_mug.jpeg +0 -0
  376. data/spec/sandbox/public/spree/products/39/product/DEMO_003_ror_mug.jpeg +0 -0
  377. data/spec/sandbox/public/spree/products/39/small/DEMO_003_ror_mug.jpeg +0 -0
  378. data/spec/sandbox/public/spree/products/4/large/DEMO_001_ror_bag.jpeg +0 -0
  379. data/spec/sandbox/public/spree/products/4/mini/DEMO_001_ror_bag.jpeg +0 -0
  380. data/spec/sandbox/public/spree/products/4/original/DEMO_001_ror_bag.jpeg +0 -0
  381. data/spec/sandbox/public/spree/products/4/product/DEMO_001_ror_bag.jpeg +0 -0
  382. data/spec/sandbox/public/spree/products/4/small/DEMO_001_ror_bag.jpeg +0 -0
  383. data/spec/sandbox/public/spree/products/40/large/DEMO_001_ror_bag.jpeg +0 -0
  384. data/spec/sandbox/public/spree/products/40/mini/DEMO_001_ror_bag.jpeg +0 -0
  385. data/spec/sandbox/public/spree/products/40/original/DEMO_001_ror_bag.jpeg +0 -0
  386. data/spec/sandbox/public/spree/products/40/product/DEMO_001_ror_bag.jpeg +0 -0
  387. data/spec/sandbox/public/spree/products/40/small/DEMO_001_ror_bag.jpeg +0 -0
  388. data/spec/sandbox/public/spree/products/41/large/DEMO_002_Powerstation.jpg +0 -0
  389. data/spec/sandbox/public/spree/products/41/mini/DEMO_002_Powerstation.jpg +0 -0
  390. data/spec/sandbox/public/spree/products/41/original/DEMO_002_Powerstation.jpg +0 -0
  391. data/spec/sandbox/public/spree/products/41/product/DEMO_002_Powerstation.jpg +0 -0
  392. data/spec/sandbox/public/spree/products/41/small/DEMO_002_Powerstation.jpg +0 -0
  393. data/spec/sandbox/public/spree/products/42/large/DEMO_003_ror_mug.jpeg +0 -0
  394. data/spec/sandbox/public/spree/products/42/mini/DEMO_003_ror_mug.jpeg +0 -0
  395. data/spec/sandbox/public/spree/products/42/original/DEMO_003_ror_mug.jpeg +0 -0
  396. data/spec/sandbox/public/spree/products/42/product/DEMO_003_ror_mug.jpeg +0 -0
  397. data/spec/sandbox/public/spree/products/42/small/DEMO_003_ror_mug.jpeg +0 -0
  398. data/spec/sandbox/public/spree/products/43/large/DEMO_001_ror_bag.jpeg +0 -0
  399. data/spec/sandbox/public/spree/products/43/mini/DEMO_001_ror_bag.jpeg +0 -0
  400. data/spec/sandbox/public/spree/products/43/original/DEMO_001_ror_bag.jpeg +0 -0
  401. data/spec/sandbox/public/spree/products/43/product/DEMO_001_ror_bag.jpeg +0 -0
  402. data/spec/sandbox/public/spree/products/43/small/DEMO_001_ror_bag.jpeg +0 -0
  403. data/spec/sandbox/public/spree/products/44/large/DEMO_002_Powerstation.jpg +0 -0
  404. data/spec/sandbox/public/spree/products/44/mini/DEMO_002_Powerstation.jpg +0 -0
  405. data/spec/sandbox/public/spree/products/44/original/DEMO_002_Powerstation.jpg +0 -0
  406. data/spec/sandbox/public/spree/products/44/product/DEMO_002_Powerstation.jpg +0 -0
  407. data/spec/sandbox/public/spree/products/44/small/DEMO_002_Powerstation.jpg +0 -0
  408. data/spec/sandbox/public/spree/products/45/large/DEMO_003_ror_mug.jpeg +0 -0
  409. data/spec/sandbox/public/spree/products/45/mini/DEMO_003_ror_mug.jpeg +0 -0
  410. data/spec/sandbox/public/spree/products/45/original/DEMO_003_ror_mug.jpeg +0 -0
  411. data/spec/sandbox/public/spree/products/45/product/DEMO_003_ror_mug.jpeg +0 -0
  412. data/spec/sandbox/public/spree/products/45/small/DEMO_003_ror_mug.jpeg +0 -0
  413. data/spec/sandbox/public/spree/products/46/large/DEMO_001_ror_bag.jpeg +0 -0
  414. data/spec/sandbox/public/spree/products/46/mini/DEMO_001_ror_bag.jpeg +0 -0
  415. data/spec/sandbox/public/spree/products/46/original/DEMO_001_ror_bag.jpeg +0 -0
  416. data/spec/sandbox/public/spree/products/46/product/DEMO_001_ror_bag.jpeg +0 -0
  417. data/spec/sandbox/public/spree/products/46/small/DEMO_001_ror_bag.jpeg +0 -0
  418. data/spec/sandbox/public/spree/products/47/large/DEMO_002_Powerstation.jpg +0 -0
  419. data/spec/sandbox/public/spree/products/47/mini/DEMO_002_Powerstation.jpg +0 -0
  420. data/spec/sandbox/public/spree/products/47/original/DEMO_002_Powerstation.jpg +0 -0
  421. data/spec/sandbox/public/spree/products/47/product/DEMO_002_Powerstation.jpg +0 -0
  422. data/spec/sandbox/public/spree/products/47/small/DEMO_002_Powerstation.jpg +0 -0
  423. data/spec/sandbox/public/spree/products/48/large/DEMO_003_ror_mug.jpeg +0 -0
  424. data/spec/sandbox/public/spree/products/48/mini/DEMO_003_ror_mug.jpeg +0 -0
  425. data/spec/sandbox/public/spree/products/48/original/DEMO_003_ror_mug.jpeg +0 -0
  426. data/spec/sandbox/public/spree/products/48/product/DEMO_003_ror_mug.jpeg +0 -0
  427. data/spec/sandbox/public/spree/products/48/small/DEMO_003_ror_mug.jpeg +0 -0
  428. data/spec/sandbox/public/spree/products/49/large/DEMO_001_ror_bag.jpeg +0 -0
  429. data/spec/sandbox/public/spree/products/49/mini/DEMO_001_ror_bag.jpeg +0 -0
  430. data/spec/sandbox/public/spree/products/49/original/DEMO_001_ror_bag.jpeg +0 -0
  431. data/spec/sandbox/public/spree/products/49/product/DEMO_001_ror_bag.jpeg +0 -0
  432. data/spec/sandbox/public/spree/products/49/small/DEMO_001_ror_bag.jpeg +0 -0
  433. data/spec/sandbox/public/spree/products/5/large/DEMO_002_Powerstation.jpg +0 -0
  434. data/spec/sandbox/public/spree/products/5/mini/DEMO_002_Powerstation.jpg +0 -0
  435. data/spec/sandbox/public/spree/products/5/original/DEMO_002_Powerstation.jpg +0 -0
  436. data/spec/sandbox/public/spree/products/5/product/DEMO_002_Powerstation.jpg +0 -0
  437. data/spec/sandbox/public/spree/products/5/small/DEMO_002_Powerstation.jpg +0 -0
  438. data/spec/sandbox/public/spree/products/50/large/DEMO_002_Powerstation.jpg +0 -0
  439. data/spec/sandbox/public/spree/products/50/mini/DEMO_002_Powerstation.jpg +0 -0
  440. data/spec/sandbox/public/spree/products/50/original/DEMO_002_Powerstation.jpg +0 -0
  441. data/spec/sandbox/public/spree/products/50/product/DEMO_002_Powerstation.jpg +0 -0
  442. data/spec/sandbox/public/spree/products/50/small/DEMO_002_Powerstation.jpg +0 -0
  443. data/spec/sandbox/public/spree/products/51/large/DEMO_003_ror_mug.jpeg +0 -0
  444. data/spec/sandbox/public/spree/products/51/mini/DEMO_003_ror_mug.jpeg +0 -0
  445. data/spec/sandbox/public/spree/products/51/original/DEMO_003_ror_mug.jpeg +0 -0
  446. data/spec/sandbox/public/spree/products/51/product/DEMO_003_ror_mug.jpeg +0 -0
  447. data/spec/sandbox/public/spree/products/51/small/DEMO_003_ror_mug.jpeg +0 -0
  448. data/spec/sandbox/public/spree/products/52/large/DEMO_001_ror_bag.jpeg +0 -0
  449. data/spec/sandbox/public/spree/products/52/mini/DEMO_001_ror_bag.jpeg +0 -0
  450. data/spec/sandbox/public/spree/products/52/original/DEMO_001_ror_bag.jpeg +0 -0
  451. data/spec/sandbox/public/spree/products/52/product/DEMO_001_ror_bag.jpeg +0 -0
  452. data/spec/sandbox/public/spree/products/52/small/DEMO_001_ror_bag.jpeg +0 -0
  453. data/spec/sandbox/public/spree/products/53/large/DEMO_002_Powerstation.jpg +0 -0
  454. data/spec/sandbox/public/spree/products/53/mini/DEMO_002_Powerstation.jpg +0 -0
  455. data/spec/sandbox/public/spree/products/53/original/DEMO_002_Powerstation.jpg +0 -0
  456. data/spec/sandbox/public/spree/products/53/product/DEMO_002_Powerstation.jpg +0 -0
  457. data/spec/sandbox/public/spree/products/53/small/DEMO_002_Powerstation.jpg +0 -0
  458. data/spec/sandbox/public/spree/products/54/large/DEMO_003_ror_mug.jpeg +0 -0
  459. data/spec/sandbox/public/spree/products/54/mini/DEMO_003_ror_mug.jpeg +0 -0
  460. data/spec/sandbox/public/spree/products/54/original/DEMO_003_ror_mug.jpeg +0 -0
  461. data/spec/sandbox/public/spree/products/54/product/DEMO_003_ror_mug.jpeg +0 -0
  462. data/spec/sandbox/public/spree/products/54/small/DEMO_003_ror_mug.jpeg +0 -0
  463. data/spec/sandbox/public/spree/products/55/large/DEMO_001_ror_bag.jpeg +0 -0
  464. data/spec/sandbox/public/spree/products/55/mini/DEMO_001_ror_bag.jpeg +0 -0
  465. data/spec/sandbox/public/spree/products/55/original/DEMO_001_ror_bag.jpeg +0 -0
  466. data/spec/sandbox/public/spree/products/55/product/DEMO_001_ror_bag.jpeg +0 -0
  467. data/spec/sandbox/public/spree/products/55/small/DEMO_001_ror_bag.jpeg +0 -0
  468. data/spec/sandbox/public/spree/products/56/large/DEMO_002_Powerstation.jpg +0 -0
  469. data/spec/sandbox/public/spree/products/56/mini/DEMO_002_Powerstation.jpg +0 -0
  470. data/spec/sandbox/public/spree/products/56/original/DEMO_002_Powerstation.jpg +0 -0
  471. data/spec/sandbox/public/spree/products/56/product/DEMO_002_Powerstation.jpg +0 -0
  472. data/spec/sandbox/public/spree/products/56/small/DEMO_002_Powerstation.jpg +0 -0
  473. data/spec/sandbox/public/spree/products/57/large/DEMO_003_ror_mug.jpeg +0 -0
  474. data/spec/sandbox/public/spree/products/57/mini/DEMO_003_ror_mug.jpeg +0 -0
  475. data/spec/sandbox/public/spree/products/57/original/DEMO_003_ror_mug.jpeg +0 -0
  476. data/spec/sandbox/public/spree/products/57/product/DEMO_003_ror_mug.jpeg +0 -0
  477. data/spec/sandbox/public/spree/products/57/small/DEMO_003_ror_mug.jpeg +0 -0
  478. data/spec/sandbox/public/spree/products/58/large/DEMO_001_ror_bag.jpeg +0 -0
  479. data/spec/sandbox/public/spree/products/58/mini/DEMO_001_ror_bag.jpeg +0 -0
  480. data/spec/sandbox/public/spree/products/58/original/DEMO_001_ror_bag.jpeg +0 -0
  481. data/spec/sandbox/public/spree/products/58/product/DEMO_001_ror_bag.jpeg +0 -0
  482. data/spec/sandbox/public/spree/products/58/small/DEMO_001_ror_bag.jpeg +0 -0
  483. data/spec/sandbox/public/spree/products/59/large/DEMO_002_Powerstation.jpg +0 -0
  484. data/spec/sandbox/public/spree/products/59/mini/DEMO_002_Powerstation.jpg +0 -0
  485. data/spec/sandbox/public/spree/products/59/original/DEMO_002_Powerstation.jpg +0 -0
  486. data/spec/sandbox/public/spree/products/59/product/DEMO_002_Powerstation.jpg +0 -0
  487. data/spec/sandbox/public/spree/products/59/small/DEMO_002_Powerstation.jpg +0 -0
  488. data/spec/sandbox/public/spree/products/6/large/DEMO_003_ror_mug.jpeg +0 -0
  489. data/spec/sandbox/public/spree/products/6/mini/DEMO_003_ror_mug.jpeg +0 -0
  490. data/spec/sandbox/public/spree/products/6/original/DEMO_003_ror_mug.jpeg +0 -0
  491. data/spec/sandbox/public/spree/products/6/product/DEMO_003_ror_mug.jpeg +0 -0
  492. data/spec/sandbox/public/spree/products/6/small/DEMO_003_ror_mug.jpeg +0 -0
  493. data/spec/sandbox/public/spree/products/60/large/DEMO_003_ror_mug.jpeg +0 -0
  494. data/spec/sandbox/public/spree/products/60/mini/DEMO_003_ror_mug.jpeg +0 -0
  495. data/spec/sandbox/public/spree/products/60/original/DEMO_003_ror_mug.jpeg +0 -0
  496. data/spec/sandbox/public/spree/products/60/product/DEMO_003_ror_mug.jpeg +0 -0
  497. data/spec/sandbox/public/spree/products/60/small/DEMO_003_ror_mug.jpeg +0 -0
  498. data/spec/sandbox/public/spree/products/61/large/DEMO_001_ror_bag.jpeg +0 -0
  499. data/spec/sandbox/public/spree/products/61/mini/DEMO_001_ror_bag.jpeg +0 -0
  500. data/spec/sandbox/public/spree/products/61/original/DEMO_001_ror_bag.jpeg +0 -0
  501. data/spec/sandbox/public/spree/products/61/product/DEMO_001_ror_bag.jpeg +0 -0
  502. data/spec/sandbox/public/spree/products/61/small/DEMO_001_ror_bag.jpeg +0 -0
  503. data/spec/sandbox/public/spree/products/62/large/DEMO_002_Powerstation.jpg +0 -0
  504. data/spec/sandbox/public/spree/products/62/mini/DEMO_002_Powerstation.jpg +0 -0
  505. data/spec/sandbox/public/spree/products/62/original/DEMO_002_Powerstation.jpg +0 -0
  506. data/spec/sandbox/public/spree/products/62/product/DEMO_002_Powerstation.jpg +0 -0
  507. data/spec/sandbox/public/spree/products/62/small/DEMO_002_Powerstation.jpg +0 -0
  508. data/spec/sandbox/public/spree/products/63/large/DEMO_003_ror_mug.jpeg +0 -0
  509. data/spec/sandbox/public/spree/products/63/mini/DEMO_003_ror_mug.jpeg +0 -0
  510. data/spec/sandbox/public/spree/products/63/original/DEMO_003_ror_mug.jpeg +0 -0
  511. data/spec/sandbox/public/spree/products/63/product/DEMO_003_ror_mug.jpeg +0 -0
  512. data/spec/sandbox/public/spree/products/63/small/DEMO_003_ror_mug.jpeg +0 -0
  513. data/spec/sandbox/public/spree/products/64/large/DEMO_001_ror_bag.jpeg +0 -0
  514. data/spec/sandbox/public/spree/products/64/mini/DEMO_001_ror_bag.jpeg +0 -0
  515. data/spec/sandbox/public/spree/products/64/original/DEMO_001_ror_bag.jpeg +0 -0
  516. data/spec/sandbox/public/spree/products/64/product/DEMO_001_ror_bag.jpeg +0 -0
  517. data/spec/sandbox/public/spree/products/64/small/DEMO_001_ror_bag.jpeg +0 -0
  518. data/spec/sandbox/public/spree/products/65/large/DEMO_002_Powerstation.jpg +0 -0
  519. data/spec/sandbox/public/spree/products/65/mini/DEMO_002_Powerstation.jpg +0 -0
  520. data/spec/sandbox/public/spree/products/65/original/DEMO_002_Powerstation.jpg +0 -0
  521. data/spec/sandbox/public/spree/products/65/product/DEMO_002_Powerstation.jpg +0 -0
  522. data/spec/sandbox/public/spree/products/65/small/DEMO_002_Powerstation.jpg +0 -0
  523. data/spec/sandbox/public/spree/products/66/large/DEMO_003_ror_mug.jpeg +0 -0
  524. data/spec/sandbox/public/spree/products/66/mini/DEMO_003_ror_mug.jpeg +0 -0
  525. data/spec/sandbox/public/spree/products/66/original/DEMO_003_ror_mug.jpeg +0 -0
  526. data/spec/sandbox/public/spree/products/66/product/DEMO_003_ror_mug.jpeg +0 -0
  527. data/spec/sandbox/public/spree/products/66/small/DEMO_003_ror_mug.jpeg +0 -0
  528. data/spec/sandbox/public/spree/products/7/large/DEMO_001_ror_bag.jpeg +0 -0
  529. data/spec/sandbox/public/spree/products/7/mini/DEMO_001_ror_bag.jpeg +0 -0
  530. data/spec/sandbox/public/spree/products/7/original/DEMO_001_ror_bag.jpeg +0 -0
  531. data/spec/sandbox/public/spree/products/7/product/DEMO_001_ror_bag.jpeg +0 -0
  532. data/spec/sandbox/public/spree/products/7/small/DEMO_001_ror_bag.jpeg +0 -0
  533. data/spec/sandbox/public/spree/products/8/large/DEMO_002_Powerstation.jpg +0 -0
  534. data/spec/sandbox/public/spree/products/8/mini/DEMO_002_Powerstation.jpg +0 -0
  535. data/spec/sandbox/public/spree/products/8/original/DEMO_002_Powerstation.jpg +0 -0
  536. data/spec/sandbox/public/spree/products/8/product/DEMO_002_Powerstation.jpg +0 -0
  537. data/spec/sandbox/public/spree/products/8/small/DEMO_002_Powerstation.jpg +0 -0
  538. data/spec/sandbox/public/spree/products/9/large/DEMO_003_ror_mug.jpeg +0 -0
  539. data/spec/sandbox/public/spree/products/9/mini/DEMO_003_ror_mug.jpeg +0 -0
  540. data/spec/sandbox/public/spree/products/9/original/DEMO_003_ror_mug.jpeg +0 -0
  541. data/spec/sandbox/public/spree/products/9/product/DEMO_003_ror_mug.jpeg +0 -0
  542. data/spec/sandbox/public/spree/products/9/small/DEMO_003_ror_mug.jpeg +0 -0
  543. data/spec/sandbox/script/rails +6 -0
  544. data/spec/sandbox/test/performance/browsing_test.rb +12 -0
  545. data/spec/sandbox/test/test_helper.rb +13 -0
  546. data/spec/sandbox/tmp/cache/assets/BDA/8A0/sprockets%2F05967796558429515381c4b5d86808c2 +29 -0
  547. data/spec/sandbox/tmp/cache/assets/C48/7D0/sprockets%2Fe0032828783157c117b48022df3e444e +11807 -0
  548. data/spec/sandbox/tmp/cache/assets/C7F/DF0/sprockets%2Fe656661206c7722b1c5512e36d9e64f0 +30 -0
  549. data/spec/sandbox/tmp/cache/assets/C8A/0A0/sprockets%2F26199d9652c1a334e195719ba8541dd8 +155 -0
  550. data/spec/sandbox/tmp/cache/assets/C9C/800/sprockets%2F0810329ee389187374ea7987e2bb9f77 +33 -0
  551. data/spec/sandbox/tmp/cache/assets/C9D/E90/sprockets%2Fa84ac59c0d9b39b3975951119999d917 +29 -0
  552. data/spec/sandbox/tmp/cache/assets/CAD/FE0/sprockets%2F3270cd94654e1c2d81fc580911900fa9 +93 -0
  553. data/spec/sandbox/tmp/cache/assets/CAE/1D0/sprockets%2F03dd1f063179d32c35b917edf3784163 +21 -0
  554. data/spec/sandbox/tmp/cache/assets/CBA/9D0/sprockets%2F2493926b475d6e62d7d1376e334c2dd6 +93 -0
  555. data/spec/sandbox/tmp/cache/assets/CBA/E50/sprockets%2F4e833190fdff066c72ea67164195192f +18 -0
  556. data/spec/sandbox/tmp/cache/assets/CC6/940/sprockets%2F381b881e222cd6d38f39965b4896b19e +209 -0
  557. data/spec/sandbox/tmp/cache/assets/CD0/A60/sprockets%2F47f7f8654e1b0830c06df21b1a2040e7 +33 -0
  558. data/spec/sandbox/tmp/cache/assets/CD7/C60/sprockets%2F07d4a437a6755702af3647c235dab26e +19 -0
  559. data/spec/sandbox/tmp/cache/assets/CE1/440/sprockets%2Fbf1f9f069ace2a75097338f013470d72 +412 -0
  560. data/spec/sandbox/tmp/cache/assets/CEF/5E0/sprockets%2F459ef82f805ce1977ee2aa452760d528 +11807 -0
  561. data/spec/sandbox/tmp/cache/assets/CF0/DA0/sprockets%2Fd7d5b37686831d37c4dd75e645f5e016 +3 -0
  562. data/spec/sandbox/tmp/cache/assets/D00/7B0/sprockets%2F2511eac4c5f8330291b2bf1326549afe +19 -0
  563. data/spec/sandbox/tmp/cache/assets/D04/270/sprockets%2F635ace50c8c35cab803205496eed2146 +41 -0
  564. data/spec/sandbox/tmp/cache/assets/D08/C70/sprockets%2F02f4cf94f805b4ee70a1aa776602355c +9 -0
  565. data/spec/sandbox/tmp/cache/assets/D0B/730/sprockets%2Fd63ee64122f213e93626f25be4a35d5d +6 -0
  566. data/spec/sandbox/tmp/cache/assets/D0F/110/sprockets%2F71ce77fd5231e5d0d705a8e085a0f871 +0 -0
  567. data/spec/sandbox/tmp/cache/assets/D0F/370/sprockets%2F65b590581acb0df661ea37d37c9f5152 +53 -0
  568. data/spec/sandbox/tmp/cache/assets/D10/370/sprockets%2Fc2793084fa0c48df282862bc45f72b2c +13 -0
  569. data/spec/sandbox/tmp/cache/assets/D13/4C0/sprockets%2F19b5a44963a45f1cab789db441e599a0 +412 -0
  570. data/spec/sandbox/tmp/cache/assets/D1A/150/sprockets%2Fe3180c81cf520cc7e5b9a2885ec98923 +19 -0
  571. data/spec/sandbox/tmp/cache/assets/D1B/D20/sprockets%2Fdedb93098f94d41370a4c9be4a959630 +4549 -0
  572. data/spec/sandbox/tmp/cache/assets/D28/190/sprockets%2F4eaae424d2725d30da3cb8245d8350c0 +6 -0
  573. data/spec/sandbox/tmp/cache/assets/D31/730/sprockets%2F3dfd818703e12cb1e1aff167a135571c +41 -0
  574. data/spec/sandbox/tmp/cache/assets/D34/B60/sprockets%2Fec323a4a5a3373a8293b3e8d66a7e4a1 +13 -0
  575. data/spec/sandbox/tmp/cache/assets/D34/D40/sprockets%2Fca3e3c106373aa947a80add2925a9f26 +27 -0
  576. data/spec/sandbox/tmp/cache/assets/D3A/BE0/sprockets%2F8fb5690b22562e324ea931f258cfa2ad +27 -0
  577. data/spec/sandbox/tmp/cache/assets/D3E/870/sprockets%2Fb76db487306db3e3e1dc3b3070e95d94 +4549 -0
  578. data/spec/sandbox/tmp/cache/assets/D43/7B0/sprockets%2F5e356ecdd6439806589c9898d9fde97d +53 -0
  579. data/spec/sandbox/tmp/cache/assets/D45/470/sprockets%2F6cd19fc744a481edb66691c29410fd4d +14 -0
  580. data/spec/sandbox/tmp/cache/assets/D46/6C0/sprockets%2F9e6ad6159bd63f648ee8a2f036b4a721 +53 -0
  581. data/spec/sandbox/tmp/cache/assets/D47/0D0/sprockets%2Fa1679da4467bfc1eb40c9e6e91e35555 +9409 -0
  582. data/spec/sandbox/tmp/cache/assets/D62/890/sprockets%2F73c3856d24a200d57f0b7ba6fe164afa +865 -0
  583. data/spec/sandbox/tmp/cache/assets/D6C/350/sprockets%2F9827e04e3cac800a854fd2ec0b288bf4 +0 -0
  584. data/spec/sandbox/tmp/cache/assets/D6D/A50/sprockets%2Ff7ded4a6bfd410172459cf4710a6c74e +3 -0
  585. data/spec/sandbox/tmp/cache/assets/D6F/920/sprockets%2Fd5417b2f1926be13bbd689d1e5fcc526 +14 -0
  586. data/spec/sandbox/tmp/cache/assets/D71/7E0/sprockets%2Fe71663bff3967b08bf6bc0fe01507db7 +865 -0
  587. data/spec/sandbox/tmp/cache/assets/D72/350/sprockets%2Ff1fa7173161fbe2d4d4c5e7c5741c69e +209 -0
  588. data/spec/sandbox/tmp/cache/assets/D73/480/sprockets%2F1fe4d21884c4db06ee089b5da298f32d +306 -0
  589. data/spec/sandbox/tmp/cache/assets/D74/F00/sprockets%2Ff4fbdd38742160ad3db7a76c938e83d1 +45 -0
  590. data/spec/sandbox/tmp/cache/assets/D78/860/sprockets%2F339f9afd4dbcbf97d0647817d343a71b +3 -0
  591. data/spec/sandbox/tmp/cache/assets/D79/1F0/sprockets%2F8275f49b8bab7b12a384e4ee8e09c7e1 +40 -0
  592. data/spec/sandbox/tmp/cache/assets/D7A/620/sprockets%2F59d4faa69df49cb38043c522eb78f19a +45 -0
  593. data/spec/sandbox/tmp/cache/assets/D7B/850/sprockets%2Fe1aeffb9bb8d70056596c37932ed6f42 +0 -0
  594. data/spec/sandbox/tmp/cache/assets/D90/C90/sprockets%2F070fb0a8b408f5b313840eaf5fcba77c +155 -0
  595. data/spec/sandbox/tmp/cache/assets/DA4/270/sprockets%2F501c395ed23e58949bba4f543cf6aebf +9409 -0
  596. data/spec/sandbox/tmp/cache/assets/DA8/E00/sprockets%2F74af3c8bd250fbfc4d98fe9551441df3 +0 -0
  597. data/spec/sandbox/tmp/cache/assets/DB5/B30/sprockets%2Fac3cabc1f3a1c6dea21b5968c2830b07 +306 -0
  598. data/spec/sandbox/tmp/cache/assets/DC9/EE0/sprockets%2Fd73a6d912e56561bc3aef7e8adcc1d40 +0 -0
  599. data/spec/sandbox/tmp/cache/assets/DCF/0B0/sprockets%2F17171de28f3e5db9a23ceeeceb64d355 +19 -0
  600. data/spec/sandbox/tmp/cache/assets/DE0/9B0/sprockets%2F98b10e39eeb69f8cb419f5114eec8ffa +239 -0
  601. data/spec/sandbox/tmp/cache/assets/DE8/0E0/sprockets%2Fcd07d79e6b93c6eec93f854ffff0f334 +0 -0
  602. data/spec/sandbox/tmp/cache/assets/DFA/D70/sprockets%2F4ad1da8bda1b38077c809f3ebacf964c +239 -0
  603. data/spec/sandbox/tmp/cache/assets/DFE/AA0/sprockets%2Fc127e6e63f95c0fc53ee4a12febd82af +30 -0
  604. data/spec/sandbox/tmp/cache/assets/E00/B50/sprockets%2F3a2feeb54bb2c9e8a360f8f8f2a9e1b4 +53 -0
  605. data/spec/sandbox/tmp/cache/assets/E08/C20/sprockets%2F0ad8fbc5a986d12b73b4fecc98e70ef5 +18 -0
  606. data/spec/sandbox/tmp/cache/assets/E09/160/sprockets%2F28fd19d52fa996bd5bc0b1cf8efc2f74 +40 -0
  607. data/spec/sandbox/tmp/cache/assets/E25/4C0/sprockets%2Fde2fd9fd11c04a582cdbbe3d84a35ae6 +3 -0
  608. data/spec/sandbox/tmp/cache/assets/E32/490/sprockets%2F78aadee343f7b9923ca5bceede46be05 +21 -0
  609. data/spec/sandbox/tmp/cache/assets/E5A/810/sprockets%2Fbc9acd6ef9418cbacd83015fc46ead3c +9 -0
  610. data/spec/spec_helper.rb +345 -0
  611. data/spec/spree_exporter_spec.rb +64 -0
  612. data/spec/spree_generator_spec.rb +91 -0
  613. data/spec/spree_images_loader_spec.rb +102 -0
  614. data/spec/spree_loader_spec.rb +237 -0
  615. data/spec/spree_method_mapping_spec.rb +222 -0
  616. data/spec/spree_taxons_loader_spec.rb +282 -0
  617. data/spec/spree_variants_loader_spec.rb +186 -0
  618. data/spec/thor_spec.rb +61 -0
  619. 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